24 #include "Riostream.h"
25 #include "TDatabasePDG.h"
28 #include "AliESDEvent.h"
29 #include "AliESDInputHandler.h"
30 #include "AliAODEvent.h"
31 #include "AliAODInputHandler.h"
32 #include "AliMCEvent.h"
33 #include "AliMCEventHandler.h"
34 #include "AliAnalysisManager.h"
35 #include "AliCentrality.h"
51 fMaxNoGlobalTracksAOD(5),
52 fProcessBothKineAndReco(kFALSE),
53 fProcessOnlyKine(kFALSE),
54 fProcessOnlyReco(kFALSE),
55 fRejectFakeTracks(kTRUE),
58 fControlHistogramsList(NULL),
59 fControlHistogramsFlagsPro(NULL),
60 fFillControlHistograms(kFALSE),
61 fControlHistogramsEventList(NULL),
62 fControlHistogramsEventFlagsPro(NULL),
63 fFillControlHistogramsEvent(kFALSE),
64 fGetNumberOfTracksHist(NULL),
65 fGetNumberOfGlobalTracksHist(NULL),
66 fGetNumberOfV0sHist(NULL),
67 fGetNumberOfCascadesHist(NULL),
68 fGetMagneticFieldHist(NULL),
69 fGetEventTypeHist(NULL),
70 fGetCentralityHist(NULL),
71 fGetNContributorsHist(NULL),
72 fGetChi2perNDFHist(NULL),
73 fGetNDaughtersHist(NULL),
74 fControlHistogramsNonIdentifiedParticlesList(NULL),
75 fControlHistogramsNonIdentifiedParticlesFlagsPro(NULL),
76 fFillControlHistogramsNonIdentifiedParticles(kFALSE),
78 fGetTPCNclsHist(NULL),
79 fGetTPCsignalNHist(NULL),
80 fGetITSNclsHist(NULL),
88 fControlHistogramsNonIdentifiedParticlesFTSFList(NULL),
89 fControlHistogramsNonIdentifiedParticlesFTSFFlagsPro(NULL),
90 fFillControlHistogramsNonIdentifiedParticlesFTSF(kFALSE),
92 fChargeFTSFHist(NULL),
93 fGetTPCNclsFTSFHist(NULL),
94 fGetTPCsignalNFTSFHist(NULL),
95 fGetITSNclsFTSFHist(NULL),
96 fdEdxVsPtFTSFHist(NULL),
101 fGetFilterMapFTSF(NULL),
102 fGetPdgCodeFTSF(NULL),
103 fControlHistogramsIdentifiedParticlesList(NULL),
104 fControlHistogramsIdentifiedParticlesFlagsPro(NULL),
105 fFillControlHistogramsIdentifiedParticles(kFALSE),
106 fFillControlHistogramsWithGlobalTrackInfo(kFALSE),
107 fInclusiveSigmaCutsPro(NULL),
108 fExclusiveSigmaCutsPro(NULL),
109 fUseDefaultInclusiveSigmaCuts(kTRUE),
110 fUseDefaultExclusiveSigmaCuts(kTRUE),
111 fControlHistogramsV0sList(NULL),
112 fControlHistogramsV0sFlagsPro(NULL),
113 fFillControlHistogramsV0s(kFALSE),
114 fGetNProngsHist(NULL),
115 fMassK0ShortHist(NULL),
116 fMassLambdaHist(NULL),
117 fMassAntiLambdaHist(NULL),
118 fOpenAngleV0Hist(NULL),
120 fDcaV0ToPrimVertexHist(NULL),
125 fPseudoRapV0Hist(NULL),
128 fEBEHistogramsList(NULL),
129 fEBEObjectsFlagsPro(NULL),
131 fUniqueIDHistEBE(NULL),
133 fCorrelationFunctionsList(NULL),
134 fCorrelationFunctionsFlagsPro(NULL),
135 f2pCorrelationFunctionsFlagsPro(NULL),
136 f3pCorrelationFunctionsFlagsPro(NULL),
137 f4pCorrelationFunctionsFlagsPro(NULL),
138 fFillCorrelationFunctions(kFALSE),
139 fNormalizeCorrelationFunctions(kFALSE),
140 fCorrelationFunctionsIndices(NULL),
141 fFill3pCorrelationFunctions(kFALSE),
142 fFill4pCorrelationFunctions(kFALSE),
143 fNormalizationOption(0),
146 fBackgroundList(NULL),
147 fBackgroundFlagsPro(NULL),
148 f2pBackgroundFlagsPro(NULL),
149 f3pBackgroundFlagsPro(NULL),
150 f4pBackgroundFlagsPro(NULL),
151 fBackgroundOption(0),
152 fEstimate2pBackground(kFALSE),
153 fEstimate3pBackground(kFALSE),
154 fEstimate4pBackground(kFALSE),
158 fBuffersFlagsPro(NULL),
159 fFillBuffers(kFALSE),
165 fBailOutAfterQA(kFALSE),
166 fFillQAEvents(kFALSE),
167 fFillQAParticles(kFALSE),
169 fQAParticlesList(NULL),
170 fQAFilterBitScan(NULL),
171 fQAIDvsFilterBit(NULL),
173 fRejectEventsWithoutPrimaryVertex(kTRUE),
174 fMinMagneticField(0.001),
175 fCutOnNumberOfTracks(kFALSE),
176 fMinNumberOfTracks(-44),
177 fMaxNumberOfTracks(-44),
178 fCutOnNumberOfGlobalTracks(kFALSE),
179 fMinNumberOfGlobalTracks(-44),
180 fMaxNumberOfGlobalTracks(-44),
181 fCutOnNumberOfV0s(kFALSE),
182 fMinNumberOfV0s(-44),
183 fMaxNumberOfV0s(-44),
184 fCutOnNumberOfCascades(kFALSE),
185 fMinNumberOfCascades(-44),
186 fMaxNumberOfCascades(-44),
187 fCutOnVertexX(kFALSE),
190 fCutOnVertexY(kFALSE),
193 fCutOnVertexZ(kFALSE),
196 fCutOnNContributors(kFALSE),
197 fMinNContributors(-44),
198 fMaxNContributors(-44),
200 fGlobalTrackCutsList(NULL),
201 fGlobalTrackCutsFlagsPro(NULL),
202 fApplyGlobalTrackCuts(kFALSE),
204 fCorrelationFunctionsTESTList(NULL),
205 fCorrelationFunctionsTESTFlagsPro(NULL),
207 fBoostVelocity(0.,0.,0.),
215 fBackgroundTESTList(NULL),
216 fBackgroundTESTFlagsPro(NULL),
218 fHybridApproachList(NULL),
219 fHybridApproachFlagsPro(NULL),
220 fDoHybridApproach(kFALSE),
222 fOnlineMonitoring(kFALSE),
223 fUpdateOutputFile(kFALSE),
224 fUpdateFrequency(-44),
225 fUpdateWhichOutputFile(NULL),
226 fMaxNumberOfEvents(-44),
228 fDoSomeDebugging(kFALSE),
229 fWaitForSpecifiedEvent(kFALSE),
237 AliDebug(2,
"AliAnalysisTaskMultiparticleFemtoscopy::AliAnalysisTaskMultiparticleFemtoscopy(const char *name, Bool_t useParticleWeights)");
240 fHistList =
new TList();
241 fHistList->SetName(
"MPF");
242 fHistList->SetOwner(kTRUE);
245 this->InitializeArrays();
246 this->InitializeArraysForControlHistograms();
247 this->InitializeArraysForEBEObjects();
248 this->InitializeArraysForCorrelationFunctions();
249 this->InitializeArraysForBackground();
250 this->InitializeArraysForBuffers();
251 this->InitializeArraysForQA();
252 this->InitializeArraysForGlobalTrackCuts();
253 this->InitializeArraysForCorrelationFunctionsTEST();
254 this->InitializeArraysForBackgroundTEST();
267 DefineOutput(1, TList::Class());
269 if(useParticleWeights)
283 fMaxNoGlobalTracksAOD(5),
284 fProcessBothKineAndReco(kFALSE),
285 fProcessOnlyKine(kFALSE),
286 fProcessOnlyReco(kFALSE),
287 fRejectFakeTracks(kTRUE),
290 fControlHistogramsList(NULL),
291 fControlHistogramsFlagsPro(NULL),
292 fFillControlHistograms(kFALSE),
293 fControlHistogramsEventList(NULL),
294 fControlHistogramsEventFlagsPro(NULL),
295 fFillControlHistogramsEvent(kFALSE),
296 fGetNumberOfTracksHist(NULL),
297 fGetNumberOfGlobalTracksHist(NULL),
298 fGetNumberOfV0sHist(NULL),
299 fGetNumberOfCascadesHist(NULL),
300 fGetMagneticFieldHist(NULL),
301 fGetEventTypeHist(NULL),
302 fGetCentralityHist(NULL),
303 fGetNContributorsHist(NULL),
304 fGetChi2perNDFHist(NULL),
305 fGetNDaughtersHist(NULL),
306 fControlHistogramsNonIdentifiedParticlesList(NULL),
307 fControlHistogramsNonIdentifiedParticlesFlagsPro(NULL),
308 fFillControlHistogramsNonIdentifiedParticles(kFALSE),
310 fGetTPCNclsHist(NULL),
311 fGetTPCsignalNHist(NULL),
312 fGetITSNclsHist(NULL),
320 fControlHistogramsNonIdentifiedParticlesFTSFList(NULL),
321 fControlHistogramsNonIdentifiedParticlesFTSFFlagsPro(NULL),
322 fFillControlHistogramsNonIdentifiedParticlesFTSF(kFALSE),
324 fChargeFTSFHist(NULL),
325 fGetTPCNclsFTSFHist(NULL),
326 fGetTPCsignalNFTSFHist(NULL),
327 fGetITSNclsFTSFHist(NULL),
328 fdEdxVsPtFTSFHist(NULL),
333 fGetFilterMapFTSF(NULL),
334 fGetPdgCodeFTSF(NULL),
335 fControlHistogramsIdentifiedParticlesList(NULL),
336 fControlHistogramsIdentifiedParticlesFlagsPro(NULL),
337 fFillControlHistogramsIdentifiedParticles(kFALSE),
338 fFillControlHistogramsWithGlobalTrackInfo(kFALSE),
339 fInclusiveSigmaCutsPro(NULL),
340 fExclusiveSigmaCutsPro(NULL),
341 fUseDefaultInclusiveSigmaCuts(kFALSE),
342 fUseDefaultExclusiveSigmaCuts(kFALSE),
343 fControlHistogramsV0sList(NULL),
344 fControlHistogramsV0sFlagsPro(NULL),
345 fFillControlHistogramsV0s(kFALSE),
346 fGetNProngsHist(NULL),
347 fMassK0ShortHist(NULL),
348 fMassLambdaHist(NULL),
349 fMassAntiLambdaHist(NULL),
350 fOpenAngleV0Hist(NULL),
352 fDcaV0ToPrimVertexHist(NULL),
357 fPseudoRapV0Hist(NULL),
360 fEBEHistogramsList(NULL),
361 fEBEObjectsFlagsPro(NULL),
363 fUniqueIDHistEBE(NULL),
365 fCorrelationFunctionsList(NULL),
366 fCorrelationFunctionsFlagsPro(NULL),
367 f2pCorrelationFunctionsFlagsPro(NULL),
368 f3pCorrelationFunctionsFlagsPro(NULL),
369 f4pCorrelationFunctionsFlagsPro(NULL),
370 fFillCorrelationFunctions(kFALSE),
371 fNormalizeCorrelationFunctions(kFALSE),
372 fCorrelationFunctionsIndices(NULL),
373 fFill3pCorrelationFunctions(kFALSE),
374 fFill4pCorrelationFunctions(kFALSE),
375 fNormalizationOption(0),
378 fBackgroundList(NULL),
379 fBackgroundFlagsPro(NULL),
380 f2pBackgroundFlagsPro(NULL),
381 f3pBackgroundFlagsPro(NULL),
382 f4pBackgroundFlagsPro(NULL),
383 fBackgroundOption(0),
384 fEstimate2pBackground(kFALSE),
385 fEstimate3pBackground(kFALSE),
386 fEstimate4pBackground(kFALSE),
390 fBuffersFlagsPro(NULL),
391 fFillBuffers(kFALSE),
397 fBailOutAfterQA(kFALSE),
398 fFillQAEvents(kFALSE),
399 fFillQAParticles(kFALSE),
401 fQAParticlesList(NULL),
402 fQAFilterBitScan(NULL),
403 fQAIDvsFilterBit(NULL),
405 fRejectEventsWithoutPrimaryVertex(kFALSE),
406 fMinMagneticField(0.001),
407 fCutOnNumberOfTracks(kFALSE),
408 fMinNumberOfTracks(-44),
409 fMaxNumberOfTracks(-44),
410 fCutOnNumberOfGlobalTracks(kFALSE),
411 fMinNumberOfGlobalTracks(-44),
412 fMaxNumberOfGlobalTracks(-44),
413 fCutOnNumberOfV0s(kFALSE),
414 fMinNumberOfV0s(-44),
415 fMaxNumberOfV0s(-44),
416 fCutOnNumberOfCascades(kFALSE),
417 fMinNumberOfCascades(-44),
418 fMaxNumberOfCascades(-44),
419 fCutOnVertexX(kFALSE),
422 fCutOnVertexY(kFALSE),
425 fCutOnVertexZ(kFALSE),
428 fCutOnNContributors(kFALSE),
429 fMinNContributors(-44),
430 fMaxNContributors(-44),
432 fGlobalTrackCutsList(NULL),
433 fGlobalTrackCutsFlagsPro(NULL),
434 fApplyGlobalTrackCuts(kFALSE),
436 fCorrelationFunctionsTESTList(NULL),
437 fCorrelationFunctionsTESTFlagsPro(NULL),
439 fBoostVelocity(0.,0.,0.),
447 fBackgroundTESTList(NULL),
448 fBackgroundTESTFlagsPro(NULL),
450 fHybridApproachList(NULL),
451 fHybridApproachFlagsPro(NULL),
452 fDoHybridApproach(kFALSE),
454 fOnlineMonitoring(kFALSE),
455 fUpdateOutputFile(kFALSE),
456 fUpdateFrequency(-44),
457 fUpdateWhichOutputFile(NULL),
458 fMaxNumberOfEvents(-44),
460 fDoSomeDebugging(kFALSE),
461 fWaitForSpecifiedEvent(kFALSE),
469 AliDebug(2,
"AliAnalysisTaskMultiparticleFemtoscopy::AliAnalysisTaskMultiparticleFemtoscopy()");
506 Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
507 TH1::AddDirectory(kFALSE);
530 TH1::AddDirectory(oldHistAddStatus);
550 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::UserExec(Option_t *)";
553 AliMCEvent *aMC = MCEvent();
558 Fatal(sMethodName.Data(),
"One (and only one!) of fProcessBothKineAndReco, fProcessOnlyKine and fProcessOnlyReco must be kTRUE in AddTask* macro!!!!");
564 else{Fatal(sMethodName.Data(),
"fProcessBothKineAndReco is kTRUE, but TBI ...");}
569 else{Fatal(sMethodName.Data(),
"fProcessOnlyKine is kTRUE, but TBI ...");}
575 else{Fatal(sMethodName.Data(),
"fProcessOnlyReco is kTRUE, but TBI ...");}
611 if(aMC&&aAOD){
AOD(aAOD);}
615 if(aMC&&aESD){
ESD(aESD);}
653 TFile *f =
new TFile(
"AnalysisResults.root",
"RECREATE");
666 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::QA(AliVEvent *ave)";
671 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
695 Int_t nTracks = aAOD->GetNumberOfTracks();
696 for(
Int_t iTrack=0;iTrack<nTracks;iTrack++)
698 AliAODTrack *atrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
699 Int_t nFilterBits = 14;
700 for(
Int_t fb=0;fb<nFilterBits;fb++)
702 if(atrack->TestFilterBit(1<<fb))
769 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::NormalizeCorrelationFunctions()";
773 cout<<
"=> Normalization option:"<<endl;
777 cout<<
"\"just scale\""<<endl;
782 cout<<
"TBI: not implemented yet"<<endl;
787 cout<<Form(
"And the fatal 'fNormalizationOption' value is... %d. Congratulations!!",
fNormalizationOption)<<endl;
788 Fatal(sMethodName.Data(),
"switch(fNormalizationOption)");
792 cout<<Form(
"=> Histograms will be rebinned: fnMergedBins = %d",
fnMergedBins)<<endl;
796 cout<<
"TBI: not finalized yet"<<endl;
798 for(
Int_t pid1=0;pid1<10;pid1++)
800 for(
Int_t pid2=0;pid2<10;pid2++)
811 for(
Int_t pid1=0;pid1<10;pid1++)
813 for(
Int_t pid2=0;pid2<10;pid2++)
815 for(
Int_t pid3=0;pid3<10;pid3++)
829 for(
Int_t pid1=0;pid1<10;pid1++)
831 for(
Int_t pid2=0;pid2<10;pid2++)
833 for(
Int_t pid3=0;pid3<10;pid3++)
835 for(
Int_t pid4=0;pid4<10;pid4++)
866 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
889 if(aAOD->GetCentrality())
894 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
916 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsParticle(AliVEvent *ave)";
919 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
926 for(
Int_t iTrack=0;iTrack<aMC->GetNumberOfTracks();iTrack++)
934 AliAODMCParticle *amcparticle = (AliAODMCParticle*)aMC->GetTrack(iTrack);
937 if(!amcparticle){Fatal(sMethodName.Data(),
"!amctrack");}
960 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
971 AliAODTrack *atrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
974 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
976 if(0!=n){Fatal(sMethodName.Data(),
"InsanityChecksForTracks(atrack), n = %d",n);}
981 Int_t id = atrack->GetID();
982 AliAODTrack *gtrack =
dynamic_cast<AliAODTrack*
>(
id>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(
id)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(
id+1))));
985 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
987 if(0!=ng){Fatal(sMethodName.Data(),
"InsanityChecksForGlobalTracks(gtrack), ng = %d",ng);}
1015 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsNonIdentifiedParticles(AliAODTrack *gtrack)";
1016 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
1026 fdEdxVsPtHist->Fill(gtrack->GetTPCmomentum(),gtrack->GetTPCsignal());
1047 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsNonIdentifiedParticles(AliAODMCParticle *amcparticle)";
1048 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
1055 fPtHist->Fill(amcparticle->Pt());
1056 fEtaHist->Fill(amcparticle->Eta());
1057 fPhiHist->Fill(amcparticle->Phi());
1074 TString sMethodName =
"AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsNonIdentifiedParticlesFTSF(AliAODTrack *atrack)";
1075 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
1109 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsIdentifiedParticles(AliAODTrack *atrack, AliAODTrack *gtrack)";
1110 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
1111 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
1116 if(atrack->GetID()<0){
return;}
1125 AliAODTrack *agtrack = NULL;
1127 else {agtrack = atrack;}
1128 if(!agtrack){Fatal(sMethodName.Data(),
"!agtrack");}
1133 if(1==
charge){nCharge = -1;}
1134 for(
Int_t ps=0;ps<2;ps++)
1136 if(1==ps){bPrimary = kFALSE;}
1138 if(
Pion(gtrack,nCharge,bPrimary))
1149 if(
Kaon(gtrack,nCharge,bPrimary))
1160 if(
Proton(gtrack,nCharge,bPrimary))
1186 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsIdentifiedParticles(AliAODMCParticle *amcparticle)";
1187 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
1195 if(211==TMath::Abs(amcparticle->GetPdgCode()))
1200 else if(321==TMath::Abs(amcparticle->GetPdgCode()))
1205 else if(2212==TMath::Abs(amcparticle->GetPdgCode()))
1211 Int_t charge = ((amcparticle->GetPdgCode()>0. ? 0 : 1));
1212 Int_t isPhysicalPrimary = ((amcparticle->IsPhysicalPrimary() ? 0 : 1));
1214 fPPIDHist[index][
charge][isPhysicalPrimary][0]->Fill(amcparticle->Px());
1215 fPPIDHist[index][
charge][isPhysicalPrimary][1]->Fill(amcparticle->Py());
1216 fPPIDHist[index][
charge][isPhysicalPrimary][2]->Fill(amcparticle->Pz());
1233 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::EstimateBackground(AliVEvent *ave)";
1239 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1245 TString pattern =
".11.13.211.321.2212.";
1250 Int_t nTracks = aMC->GetNumberOfTracks();
1253 TClonesArray ca0(
"AliAODMCParticle");
1254 Int_t ca0Counter = 0;
1255 for(
Int_t iTrack=0;iTrack<nTracks;iTrack++)
1257 AliAODMCParticle *amcparticle =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack));
1258 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
1260 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle->GetPdgCode()))))){
continue;}
1262 ca0[ca0Counter++] = amcparticle;
1265 if(!
fMixedEvents0[0]){Fatal(sMethodName.Data(),
"!fMixedEvents0[0]");}
1269 TClonesArray ca1(
"AliAODMCParticle");
1270 Int_t ca1Counter = 0;
1271 for(
Int_t iTrack=0;iTrack<nTracks;iTrack++)
1273 AliAODMCParticle *amcparticle =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack));
1274 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
1276 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle->GetPdgCode()))))){
continue;}
1278 ca1[ca1Counter++] = amcparticle;
1281 if(!
fMixedEvents0[1]){Fatal(sMethodName.Data(),
"!fMixedEvents0[1]");}
1354 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
1357 if(nBinsVertexZrange<=0){Fatal(sMethodName.Data(),
"nBinsVertexZrange<=0");}
1360 for(
Int_t b=0;b<nBinsVertexZrange;b++)
1363 if(avtx->GetZ()>=
fMinVertexZ+1.*b*flBinWidthVertexZrange && avtx->GetZ()<
fMinVertexZ+1.*(b+1)*flBinWidthVertexZrange)
1369 if(-44==indexX){Fatal(sMethodName.Data(),
"-44==indexX");}
1383 if(fMaxBufferSize1-1==indexY)
1385 cout<<
"Flushing the buffer for background..."<<endl;
1386 cout<<Form(
"fMaxBufferSize1 = %d",fMaxBufferSize1)<<endl;
1387 cout<<Form(
"fMixedEvents1[indexX][indexY] = fMixedEvents1[%d][%d]",indexX,indexY)<<endl;
1407 if(bufferNo2<=bufferNo1){
continue;}
1410 if(bufferNo2<=bufferNo1 || bufferNo3<=bufferNo1 || bufferNo3<=bufferNo2){
continue;}
1455 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::EstimateBackgroundTEST(AliVEvent *ave)";
1461 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1533 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::DoHybridApproach(AliVEvent *ave)";
1539 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1626 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1643 cout<<Form(
"aAOD->GetRunNumber() = %d",aAOD->GetRunNumber())<<endl;
1644 cout<<Form(
"aAOD->GetBunchCrossNumber() = %d",aAOD->GetBunchCrossNumber())<<endl;
1645 cout<<Form(
"aAOD->GetOrbitNumber() = %d",aAOD->GetOrbitNumber())<<endl;
1646 cout<<Form(
"aAOD->GetPeriodNumber() = %d",aAOD->GetPeriodNumber())<<endl;
1647 if(!
SpecifiedEvent(aAOD->GetRunNumber(),aAOD->GetBunchCrossNumber(),aAOD->GetOrbitNumber(),aAOD->GetPeriodNumber())){
return;}
1659 Int_t currentEventNumber = -44;
1676 return currentEventNumber;
1695 cout<<Form(
"nEvts: %d",currentEventNo)<<endl;
1728 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::InsanityChecksUserCreateOutputObjects()";
1732 if(0!=returnValueICFGTC)
1734 cout<<Form(
"\n\nSomething is fundamentally wrong with global track cuts!!!!")<<endl;
1735 cout<<Form(
"InsanityChecksForGlobalTrackCuts() returns %d, check its implementation for an explanation of return values.\n\n",returnValueICFGTC)<<endl;
1736 Fatal(sMethodName.Data(),
"if(0!=returnValueICFGTC)");
1742 cout<<Form(
"\n\nCalculation of 4-p stuff is not validated yet!!!! \n\n")<<endl;
1743 Fatal(sMethodName.Data(),
"fFill4pCorrelationFunctions || fEstimate4pBackground");
1749 cout<<Form(
"\n\nThis option for calculating background is not supported yet!!!! \n\n")<<endl;
1750 Fatal(sMethodName.Data(),
"!(fBackgroundOption == 0 || fBackgroundOption == 1)");
1754 cout<<Form(
"\n\nfMaxBufferSize1 can be at maximum 50 !!!! \n\n")<<endl;
1755 Fatal(sMethodName.Data(),
"fMaxBufferSize1>=50");
1771 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::InsanityChecksUserExec()";
1775 if(
fOnlineMonitoring && !
fFillControlHistogramsEvent){Fatal(sMethodName.Data(),
"fOnlineMonitoring && !fFillControlHistogramsEvent.\n\nAt the moment, fOnlineMonitoring can be used only if fFillControlHistogramsEvent is enabled.");}
1785 for(
Int_t pid=0;pid<5;pid++)
1787 for(
Int_t pa=0;pa<2;pa++)
1789 for(
Int_t ps=0;ps<2;ps++)
1791 if(!
fPIDCA[pid][pa][ps]) {Fatal(sMethodName.Data(),
"!fPIDCA[pid][pa][ps]");}
1792 if(0 !=
fPIDCA[pid][pa][ps]->GetEntriesFast()){Fatal(sMethodName.Data(),
"0 != fPIDCA[pid][pa][ps]->GetEntriesFast()"); }
1796 for(
Int_t pid=0;pid<1;pid++)
1798 if(!
fPIDV0sCA[pid]){Fatal(sMethodName.Data(),
"!fPIDV0sCA[pid]");}
1799 if(0 !=
fPIDV0sCA[pid]->GetEntriesFast()){Fatal(sMethodName.Data(),
"0 != fPIDV0sCA[pid]->GetEntriesFast()");}
1817 if(!
fGlobalTracksAOD[0]){Fatal(sMethodName.Data(),
"!fGlobalTracksAOD[0]");}
1818 if(0 !=
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 != fGlobalTracksAOD[0]->GetSize()");}
1928 Bool_t bFillCorrelationFunctionsTEST = kFALSE;
1929 for(
Int_t t=0;t<10;t++)
1936 Bool_t bFillBackgroundTEST = kFALSE;
1937 for(
Int_t t=0;t<10;t++)
1963 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1978 TClonesArray *caV0s = aAOD->GetV0s();
1980 AliAODv0 *aAODv0 = NULL;
1981 Int_t nProngs = -44;
1982 while(caV0s->At(index))
1984 aAODv0 = (AliAODv0*) caV0s->At(index++);
1996 nProngs = aAODv0->GetNProngs();
2007 fPtV0Hist->Fill(pow(aAODv0->Pt2V0(),0.5));
2009 fPAHist->Fill(aAODv0->Alpha(),aAODv0->PtArmV0());
2024 cout<<Form(
"fUniqueIDHistEBE->FindFirstBinAbove(1.44) %d:",(
Int_t)
fUniqueIDHistEBE->FindFirstBinAbove(1.44,1))<<endl;
2061 for(
Int_t pid=0;pid<5;pid++)
2063 for(
Int_t pa=0;pa<2;pa++)
2065 for(
Int_t ps=0;ps<2;ps++)
2072 for(
Int_t pid=0;pid<1;pid++)
2112 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Pion(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
2113 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
2114 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
2117 if(charge != (
Int_t)gtrack->Charge())
return kFALSE;
2122 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
2137 if(gtrack->GetTPCmomentum() < 0.75)
2140 if(!statusTPC)
return kFALSE;
2148 else if(gtrack->GetTPCmomentum() >= 0.75 )
2157 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
2158 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
2159 if(!mcParticle){cout<<
"WARNING: mcParticle is NULL in Pion(...)! gtrack = "<<gtrack<<endl;
return kFALSE; }
2160 if(charge < 0 && mcParticle->GetPdgCode() == -211)
return kTRUE;
2161 else if(charge > 0 && mcParticle->GetPdgCode() == 211)
return kTRUE;
2183 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Kaon(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
2184 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
2185 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
2188 if(charge != (
Int_t)gtrack->Charge())
return kFALSE;
2193 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
2208 if(gtrack->GetTPCmomentum() < 0.75)
2211 if(!statusTPC)
return kFALSE;
2219 else if(gtrack->GetTPCmomentum() >= 0.75 )
2228 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
2229 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
2230 if(!mcParticle){cout<<
"WARNING: mcParticle is NULL in Kaon(...)! gtrack = "<<gtrack<<endl;
return kFALSE; }
2231 if(charge < 0 && mcParticle->GetPdgCode() == -321)
return kTRUE;
2232 else if(charge > 0 && mcParticle->GetPdgCode() == 321)
return kTRUE;
2253 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Proton(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
2254 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
2255 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
2258 if(charge != (
Int_t)gtrack->Charge())
return kFALSE;
2263 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
2278 if(gtrack->GetTPCmomentum() < 0.75)
2281 if(!statusTPC)
return kFALSE;
2288 else if(gtrack->GetTPCmomentum() >= 0.75 )
2297 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
2298 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
2299 if(!mcParticle){cout<<
"WARNING: mcParticle is NULL in Proton(...)! gtrack = "<<gtrack<<endl;
return kFALSE; }
2300 if(charge < 0 && mcParticle->GetPdgCode() == -2212)
return kTRUE;
2301 else if(charge > 0 && mcParticle->GetPdgCode() == 2212)
return kTRUE;
2315 for(
Int_t index=0;index<10;index++)
2328 for(
Int_t xyz=0;xyz<3;xyz++)
2333 for(
Int_t pid=0;pid<5;pid++)
2335 for(
Int_t pa=0;pa<2;pa++)
2337 for(
Int_t ps=0;ps<2;ps++)
2341 for(
Int_t xyz=0;xyz<3;xyz++)
2352 for(
Int_t pf=0;pf<5;pf++)
2358 for(
Int_t pf=0;pf<5;pf++)
2360 for(
Int_t pid=0;pid<5;pid++)
2378 for(
Int_t pid=0;pid<5;pid++)
2380 for(
Int_t pa=0;pa<2;pa++)
2382 for(
Int_t ps=0;ps<2;ps++)
2384 fPIDCA[pid][pa][ps] = NULL;
2390 for(
Int_t pid=0;pid<1;pid++)
2409 for(
Int_t cfs=0;cfs<3;cfs++)
2415 for(
Int_t pid1=0;pid1<10;pid1++)
2417 for(
Int_t pid2=0;pid2<10;pid2++)
2424 for(
Int_t pid1=0;pid1<10;pid1++)
2426 for(
Int_t pid2=0;pid2<10;pid2++)
2428 for(
Int_t pid3=0;pid3<10;pid3++)
2436 for(
Int_t pid1=0;pid1<10;pid1++)
2438 for(
Int_t pid2=0;pid2<10;pid2++)
2440 for(
Int_t pid3=0;pid3<10;pid3++)
2442 for(
Int_t pid4=0;pid4<10;pid4++)
2458 for(
Int_t bs=0;bs<3;bs++)
2463 for(
Int_t pid1=0;pid1<10;pid1++)
2465 for(
Int_t pid2=0;pid2<10;pid2++)
2471 for(
Int_t pid1=0;pid1<10;pid1++)
2473 for(
Int_t pid2=0;pid2<10;pid2++)
2475 for(
Int_t pid3=0;pid3<10;pid3++)
2482 for(
Int_t me=0;me<3;me++)
2487 for(
Int_t vzr=0;vzr<10;vzr++)
2504 for(
Int_t am=0;am<2;am++)
2506 for(
Int_t e=0;e<10;e++)
2508 for(
Int_t p=0;p<10000;p++)
2516 for(
Int_t e=0;e<10;e++)
2529 for(
Int_t ba=0;ba<2;ba++)
2531 for(
Int_t di=0;di<10;di++)
2533 for(
Int_t ci=0;ci<10;ci++)
2590 const Int_t nTestsMax = 10;
2592 for(
Int_t t=0;t<nTestsMax;t++)
2598 for(
Int_t t=0;t<nTestsMax;t++)
2600 for(
Int_t q=0;q<2;q++)
2602 for(
Int_t tt=0;tt<7;tt++)
2604 for(
Int_t d=0;d<10;d++)
2612 for(
Int_t t=0;t<nTestsMax;t++)
2614 for(
Int_t q=0;q<2;q++)
2616 for(
Int_t tt=0;tt<4;tt++)
2618 for(
Int_t d=0;d<10;d++)
2626 for(
Int_t t=0;t<2;t++)
2640 const Int_t nTestsMax = 10;
2642 for(
Int_t t=0;t<nTestsMax;t++)
2648 for(
Int_t t=0;t<nTestsMax;t++)
2650 for(
Int_t q=0;q<2;q++)
2652 for(
Int_t tt=0;tt<7;tt++)
2654 for(
Int_t d=0;d<10;d++)
2662 for(
Int_t me=0;me<3;me++)
2668 for(
Int_t t=0;t<2;t++)
2681 for(
Int_t t=0;t<5;t++)
2686 for(
Int_t me=0;me<3;me++)
2705 const Int_t nTests = 10;
2714 for(
Int_t t=0;t<nTests;t++)
2721 const Int_t nCumulants = 4;
2722 const Int_t n3pCumulantTerms = 7;
2723 const Int_t nQs = 2;
2724 const Int_t n2pCumulantTerms = 3;
2725 TString s2pCumulantTerms[n2pCumulantTerms] = {
"#LTX_{1}#GT",
"#LTX_{2}#GT",
"#LTX_{1}X_{2}#GT"};
2726 TString s3pCumulantTerms[n3pCumulantTerms] = {
"#LTX_{1}#GT",
"#LTX_{2}#GT",
"#LTX_{3}#GT",
"#LTX_{1}X_{2}#GT",
"#LTX_{1}X_{3}#GT",
"#LTX_{2}X_{3}#GT",
"#LTX_{1}X_{2}X_{3}#GT"};
2727 TString sCumulants[nCumulants] = {
"#LTX_{1}X_{2}#GT_{c}",
"#LTX_{1}X_{3}#GT_{c}",
"#LTX_{2}X_{3}#GT_{c}",
"#LTX_{1}X_{2}X_{3}#GT_{c}"};
2728 TString sXYZ[3] = {
"x",
"y",
"z"};
2729 TString sQs[nQs] = {
"Q_{2}",
"Q_{3}"};
2730 for(
Int_t t=0;t<nTests;t++)
2736 for(
Int_t ct=0;ct<n2pCumulantTerms;ct++)
2738 for(
Int_t xyz=0;xyz<3;xyz++)
2752 for(
Int_t xyz=0;xyz<3;xyz++)
2765 for(
Int_t ct=0;ct<n3pCumulantTerms;ct++)
2767 for(
Int_t xyz=0;xyz<3;xyz++)
2781 for(
Int_t ct=0;ct<nCumulants;ct++)
2783 for(
Int_t xyz=0;xyz<3;xyz++)
2824 fEab_TEST6[0]->GetXaxis()->SetTitle(
"Q_{2}");
2825 fEab_TEST6[0]->GetYaxis()->SetTitle(
"dN/dE_{a}^{b}");
2832 fEab_TEST6[1]->GetXaxis()->SetTitle(
"Q_{2}");
2833 fEab_TEST6[1]->GetYaxis()->SetTitle(
"dN/dE_{a}^{b}");
2850 const Int_t nTests = 10;
2851 fBackgroundTESTFlagsPro =
new TProfile(
"fBackgroundTESTFlagsPro",
"Flags and settings for test background",nTests,0,nTests);
2859 for(
Int_t t=0;t<nTests;t++)
2866 const Int_t nCumulants = 4;
2867 const Int_t n3pCumulantTerms = 7;
2868 const Int_t nQs = 2;
2869 const Int_t n2pCumulantTerms = 3;
2870 TString s2pCumulantTerms[n2pCumulantTerms] = {
"#LTX_{1}#GT",
"#LTX_{2}#GT",
"#LTX_{1}X_{2}#GT"};
2871 TString s3pCumulantTerms[n3pCumulantTerms] = {
"#LTX_{1}#GT",
"#LTX_{2}#GT",
"#LTX_{3}#GT",
"#LTX_{1}X_{2}#GT",
"#LTX_{1}X_{3}#GT",
"#LTX_{2}X_{3}#GT",
"#LTX_{1}X_{2}X_{3}#GT"};
2872 TString sCumulants[nCumulants] = {
"#LTX_{1}X_{2}#GT_{c}",
"#LTX_{1}X_{3}#GT_{c}",
"#LTX_{2}X_{3}#GT_{c}",
"#LTX_{1}X_{2}X_{3}#GT_{c}"};
2873 TString sXYZ[3] = {
"x",
"y",
"z"};
2874 TString sQs[nQs] = {
"Q_{2}",
"Q_{3}"};
2875 for(
Int_t t=0;t<nTests;t++)
2881 for(
Int_t ct=0;ct<n2pCumulantTerms;ct++)
2883 for(
Int_t xyz=0;xyz<3;xyz++)
2891 fBackgroundTEST[t][0][ct][xyz]->GetYaxis()->SetTitle(Form(
"%s_{%s}",s2pCumulantTerms[ct].
Data(),sXYZ[xyz].
Data()));
2897 for(
Int_t xyz=0;xyz<3;xyz++)
2910 for(
Int_t ct=0;ct<n3pCumulantTerms;ct++)
2912 for(
Int_t xyz=0;xyz<3;xyz++)
2920 fBackgroundTEST[t][1][ct][xyz]->GetYaxis()->SetTitle(Form(
"%s_{%s}",s3pCumulantTerms[ct].
Data(),sXYZ[xyz].
Data()));
2926 for(
Int_t ct=0;ct<nCumulants;ct++)
2928 for(
Int_t xyz=0;xyz<3;xyz++)
2946 for(
Int_t me=0;me<3;me++)
2983 fHybridApproachFlagsPro =
new TProfile(
"fHybridApproachFlagsPro",
"Flags and settings for 'hybrid approach'",1,0,1);
2996 TString sTerm[5] = {
"N^{A}_{3}(p_{1},p_{2},p_{3})",
"N^{A}_{2}(p_{1},p_{2})N^{B}_{1}(p_{3})",
"N^{A}_{2}(p_{2},p_{3})N^{B}_{1}(p_{1})",
"N^{A}_{2}(p_{3},p_{1})N^{B}_{1}(p_{2})",
"N^{A}_{1}(p_{1})N^{B}_{1}(p_{2})N^{C}_{1}(p_{3})"};
2997 for(
Int_t t=0;t<5;t++)
3011 for(
Int_t me=0;me<3;me++)
3038 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::BookAndNestAllLists()";
3039 if(!
fHistList){Fatal(sMethodName.Data(),
"fHistList is NULL");}
3079 for(
Int_t cfs=0;cfs<3;cfs++)
3093 for(
Int_t bs=0;bs<3;bs++)
3138 const Int_t nTests = 10;
3139 for(
Int_t t=0;t<nTests;t++)
3153 for(
Int_t t=0;t<nTests;t++)
3217 TString sParticleLabel[5] = {
"e",
"#mu",
"#pi",
"K",
"p"};
3218 Double_t dNominalMass[5] = {TDatabasePDG::Instance()->GetParticle(11)->Mass(),TDatabasePDG::Instance()->GetParticle(13)->Mass(),TDatabasePDG::Instance()->GetParticle(211)->Mass(),TDatabasePDG::Instance()->GetParticle(321)->Mass(),TDatabasePDG::Instance()->GetParticle(2212)->Mass()};
3235 fGetNumberOfTracksHist =
new TH1I(
"fGetNumberOfTracksHist",
"aAOD->GetNumberOfTracks() (Remark: Not all of tracks are unique.)",10000,0,10000);
3243 fGetNumberOfV0sHist =
new TH1I(
"fGetNumberOfV0sHist",
"aAOD->GetNumberOfV0s() (Remark: Some V0s share the daughter.)",10000,0,10000);
3260 TString sxyz[3] = {
"X",
"Y",
"Z"};
3261 for(
Int_t xyz=0;xyz<3;xyz++)
3263 fVertexXYZ[xyz] =
new TH1F(Form(
"fVertex%s",sxyz[xyz].
Data()),Form(
"avtz->Get%s()",sxyz[xyz].
Data()),100000,-50.,50);
3271 fGetChi2perNDFHist =
new TH1F(
"fGetChi2perNDFHist",
"avtx->GetChi2perNDF()",5000,0.,50.);
3320 fdEdxVsPtHist =
new TH2F(
"fdEdxVsPtHist",
"atrack->GetTPCmomentum(),atrack->GetTPCsignal()",1000,0.,20.,1000,-500.,500.);
3323 fPtHist =
new TH1F(
"fPtHist",
"atrack->Pt()",1000,0.,20.);
3325 fPtHist->SetFillColor(kBlue-10);
3328 fEtaHist =
new TH1F(
"fEtaHist",
"atrack->Eta()",200,-2.,2.);
3333 fPhiHist =
new TH1F(
"fPhiHist",
"atrack->Phi()",360,0.,TMath::TwoPi());
3339 fMassHist =
new TH1F(
"fMassHist",
"atrack->M()",10000,0.,10.);
3343 for(
Int_t nm=0;nm<5;nm++)
3345 fMassHist->GetXaxis()->SetBinLabel(
fMassHist->FindBin(dNominalMass[nm]),Form(
"m_{%s}",sParticleLabel[nm].
Data()));
3348 fGetFilterMap =
new TH1I(
"fGetFilterMap",
"atrack->fGetFilterMap()",10000,0,10000);
3353 fGetPdgCode =
new TH1I(
"fGetPdgCode",
"atrack->fGetPdgCode()",20000,-10000,10000);
3399 fdEdxVsPtFTSFHist =
new TH2F(
"fdEdxVsPtFTSFHist",Form(
"atrack->GetTPCmomentum(),atrack->GetTPCsignal(), fb = %d",
fFilterBitFTSF),1000,0.,20.,1000,-500.,500.);
3422 for(
Int_t nm=0;nm<5;nm++)
3457 if(fUseDefaultInclusiveSigmaCuts)
3463 const Int_t nPidFunctions = 5;
3464 TString sPidFunctions[nPidFunctions] = {
"Electron(...)",
"Muon(...)",
"Pion(...)",
"Kaon(...)",
"Proton(...)"};
3465 const Int_t nParticleSpecies = 5;
3466 TString sParticleSpecies[nParticleSpecies] = {
"e",
"#mu",
"#pi",
"K",
"p"};
3467 fInclusiveSigmaCutsPro =
new TProfile(
"fInclusiveSigmaCutsPro",
"Inclusive sigma cuts",nPidFunctions,0.,nPidFunctions);
3469 for(
Int_t pidFunction=0;pidFunction<5;pidFunction++)
3484 if(fUseDefaultExclusiveSigmaCuts)
3496 fExclusiveSigmaCutsPro =
new TProfile2D(
"fExclusiveSigmaCutsPro",
"Exclusive sigma cuts",nPidFunctions,0.,nPidFunctions,nParticleSpecies,0.,nParticleSpecies);
3507 for(
Int_t pidFunction=0;pidFunction<nPidFunctions;pidFunction++)
3510 for(
Int_t particleSpecies=0;particleSpecies<nParticleSpecies;particleSpecies++)
3512 if(0==pidFunction){
fExclusiveSigmaCutsPro->GetYaxis()->SetBinLabel(particleSpecies+1,sParticleSpecies[particleSpecies].
Data());}
3518 for(
Int_t pid=0;pid<5;pid++)
3520 for(
Int_t pa=0;pa<2;pa++)
3522 for(
Int_t ps=0;ps<2;ps++)
3524 if(fFillControlHistogramsWithGlobalTrackInfo)
3526 fMassPIDHist[pid][pa][ps] =
new TH1F(Form(
"fMassPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fMassPIDHist[%d][%d][%d] (%s) ('gtrack' parameters)",pid,pa,ps,sParticleLabel[pid].
Data()),10000,0.,10.);
3530 fMassPIDHist[pid][pa][ps] =
new TH1F(Form(
"fMassPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fMassPIDHist[%d][%d][%d] (%s) ('atrack' parameters)",pid,pa,ps,sParticleLabel[pid].
Data()),10000,0.,10.);
3532 fMassPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"m [GeV/c^{2}]");
3533 for(
Int_t nm=0;nm<5;nm++)
3535 fMassPIDHist[pid][pa][ps]->GetXaxis()->SetBinLabel(
fMassPIDHist[pid][pa][ps]->FindBin(dNominalMass[nm]),Form(
"m_{%s}",sParticleLabel[nm].
Data()));
3539 if(fFillControlHistogramsWithGlobalTrackInfo)
3541 fPtPIDHist[pid][pa][ps] =
new TH1F(Form(
"fPtPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fPtPIDHist[%d][%d][%d] ('gtrack' parameters)",pid,pa,ps),1000,0.,10.);
3542 fPPIDHist[pid][pa][ps][0] =
new TH1F(Form(
"fPPIDHist[%d][%d][%d][0]",pid,pa,ps),Form(
"fPPIDHist[%d][%d][%d][0] ('gtrack' parameters)",pid,pa,ps),2000,-10.,10.);
3543 fPPIDHist[pid][pa][ps][1] =
new TH1F(Form(
"fPPIDHist[%d][%d][%d][1]",pid,pa,ps),Form(
"fPPIDHist[%d][%d][%d][1] ('gtrack' parameters)",pid,pa,ps),2000,-10.,10.);
3544 fPPIDHist[pid][pa][ps][2] =
new TH1F(Form(
"fPPIDHist[%d][%d][%d][2]",pid,pa,ps),Form(
"fPPIDHist[%d][%d][%d][2] ('gtrack' parameters)",pid,pa,ps),2000,-10.,10.);
3548 fPtPIDHist[pid][pa][ps] =
new TH1F(Form(
"fPtPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fPtPIDHist[%d][%d][%d] ('atrack' parameters)",pid,pa,ps),1000,0.,10.);
3549 fPPIDHist[pid][pa][ps][0] =
new TH1F(Form(
"fPPIDHist[%d][%d][%d][0]",pid,pa,ps),Form(
"fPPIDHist[%d][%d][%d][0] ('atrack' parameters)",pid,pa,ps),2000,-10.,10.);
3550 fPPIDHist[pid][pa][ps][1] =
new TH1F(Form(
"fPPIDHist[%d][%d][%d][1]",pid,pa,ps),Form(
"fPPIDHist[%d][%d][%d][1] ('atrack' parameters)",pid,pa,ps),2000,-10.,10.);
3551 fPPIDHist[pid][pa][ps][2] =
new TH1F(Form(
"fPPIDHist[%d][%d][%d][2]",pid,pa,ps),Form(
"fPPIDHist[%d][%d][%d][2] ('atrack' parameters)",pid,pa,ps),2000,-10.,10.);
3553 fPtPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"p_{T} [GeV/c]");
3554 fPtPIDHist[pid][pa][ps]->SetFillColor(kBlue-10);
3556 fPPIDHist[pid][pa][ps][0]->GetXaxis()->SetTitle(
"p_{x} [GeV/c]");
3557 fPPIDHist[pid][pa][ps][0]->SetFillColor(kBlue-10);
3559 fPPIDHist[pid][pa][ps][1]->GetXaxis()->SetTitle(
"p_{y} [GeV/c]");
3560 fPPIDHist[pid][pa][ps][1]->SetFillColor(kBlue-10);
3562 fPPIDHist[pid][pa][ps][2]->GetXaxis()->SetTitle(
"p_{z} [GeV/c]");
3563 fPPIDHist[pid][pa][ps][2]->SetFillColor(kBlue-10);
3566 if(fFillControlHistogramsWithGlobalTrackInfo)
3568 fEtaPIDHist[pid][pa][ps] =
new TH1F(Form(
"fEtaPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fEtaPIDHist[%d][%d][%d] ('gtrack' parameters)",pid,pa,ps),200000,-2.,2.);
3572 fEtaPIDHist[pid][pa][ps] =
new TH1F(Form(
"fEtaPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fEtaPIDHist[%d][%d][%d] ('atrack' parameters)",pid,pa,ps),200000,-2.,2.);
3576 if(fFillControlHistogramsWithGlobalTrackInfo)
3578 fPhiPIDHist[pid][pa][ps] =
new TH1F(Form(
"fPhiPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fPhiPIDHist[%d][%d][%d] ('gtrack' parameters)",pid,pa,ps),360,0.,TMath::TwoPi());
3582 fPhiPIDHist[pid][pa][ps] =
new TH1F(Form(
"fPhiPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fPhiPIDHist[%d][%d][%d] ('atrack' parameters)",pid,pa,ps),360,0.,TMath::TwoPi());
3584 fPhiPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"#phi");
3611 fMassK0ShortHist =
new TH1F(
"fMassK0ShortHist",
"aAODv0->MassK0Short()",1000000,0.,100.);
3614 Double_t dMassK0Short = TDatabasePDG::Instance()->GetParticle(310)->Mass();
3619 fMassLambdaHist =
new TH1F(
"fMassLambdaHist",
"aAODv0->MassLambda()",1000000,0.,100.);
3622 Double_t dMassLambda = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
3627 fMassAntiLambdaHist =
new TH1F(
"fMassAntiLambdaHist",
"aAODv0->MassAntiLambda()",1000000,0.,100.);
3630 Double_t dMassAntiLambda = TDatabasePDG::Instance()->GetParticle(-3122)->Mass();
3635 fOpenAngleV0Hist =
new TH1F(
"fOpenAngleV0Hist",
"aAODv0->fOpenAngleV0()",10000,-0.044,TMath::Pi()+0.044);
3640 fRadiusV0Hist =
new TH1F(
"fRadiusV0Hist",
"aAODv0->fRadiusV0()",10000,0.,1000.);
3645 fDcaV0ToPrimVertexHist =
new TH1F(
"fDcaV0ToPrimVertexHist",
"aAODv0->fDcaV0ToPrimVertex()",10000,0.,1000.);
3650 fMomV0XHist =
new TH1F(
"fMomV0XHist",
"aAODv0->fMomV0X() = px(+) + px(-)",10000,-1000.,1000.);
3655 fMomV0YHist =
new TH1F(
"fMomV0YHist",
"aAODv0->fMomV0Y() = py(+) + py(-)",10000,-1000.,1000.);
3660 fMomV0ZHist =
new TH1F(
"fMomV0ZHist",
"aAODv0->fMomV0Z() = pz(+) + pz(-)",10000,-1000.,1000.);
3665 fPtV0Hist =
new TH1F(
"fPtV0Hist",
"pow(aAODv0->fPt2V0(),0.5)",10000,0.,100.);
3670 fPseudoRapV0Hist =
new TH1F(
"fPseudoRapV0Hist",
"aAODv0->PseudoRapV0()",1000,-10.,10.);
3675 fPAHist =
new TH2F(
"fPAHist",
"TBI",100,-2.,2.,100,0.,1.);
3677 fPAHist->GetXaxis()->SetTitle(
"#alpha");
3678 fPAHist->GetYaxis()->SetTitle(
"p_{T}");
3694 fEBEObjectsFlagsPro =
new TProfile(
"fEBEObjectsFlagsPro",
"Flags and settings for event-by-event histograms",1,0,1);
3714 for(
Int_t pid=0;pid<5;pid++)
3716 for(
Int_t pa=0;pa<2;pa++)
3718 for(
Int_t ps=0;ps<2;ps++)
3720 fPIDCA[pid][pa][ps] =
new TClonesArray(
"AliAODTrack",10000);
3726 for(
Int_t pid=0;pid<1;pid++)
3728 fPIDV0sCA[pid] =
new TClonesArray(
"AliAODv0",10000);
3746 fCorrelationFunctionsFlagsPro =
new TProfile(
"fCorrelationFunctionsFlagsPro",
"Flags and settings for correlation functions histograms",8,0,8);
3799 const Int_t nParticleSpecies = 5;
3800 TString sParticles[2*nParticleSpecies] = {
"e^{+}",
"#mu^{+}",
"#pi^{+}",
"K^{+}",
"p^{+}",
"e^{-}",
"#mu^{-}",
"#pi^{-}",
"K^{-}",
"p^{-}"};
3805 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3807 for(
Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
3810 fCorrelationFunctions[pid1][pid2] =
new TH1F(Form(
"fCorrelationFunctions[%d][%d]",pid1,pid2),Form(
"fCorrelationFunctions[%d][%d] = (%s,%s)",pid1,pid2,sParticles[pid1].
Data(),sParticles[pid2].
Data()),10000,0.,10.);
3836 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3838 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3840 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3843 f3pCorrelationFunctions[pid1][pid2][pid3] =
new TH1F(Form(
"f3pCorrelationFunctions[%d][%d][%d]",pid1,pid2,pid3),Form(
"f3pCorrelationFunctions[%d][%d][%d] = (%s,%s,%s)",pid1,pid2,pid3,sParticles[pid1].
Data(),sParticles[pid2].
Data(),sParticles[pid3].
Data()),10000,0.,10.);
3857 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3859 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3861 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3863 for(
Int_t pid4=0;pid4<2*nParticleSpecies;pid4++)
3866 f4pCorrelationFunctions[pid1][pid2][pid3][pid4] =
new TH1F(Form(
"f4pCorrelationFunctions[%d][%d][%d][%d]",pid1,pid2,pid3,pid4),Form(
"f4pCorrelationFunctions[%d][%d][%d][%d] = (%s,%s,%s,%s)",pid1,pid2,pid3,pid4,sParticles[pid1].
Data(),sParticles[pid2].
Data(),sParticles[pid3].
Data(),sParticles[pid4].
Data()),10000,0.,10.);
3893 fBackgroundFlagsPro =
new TProfile(
"fBackgroundFlagsPro",
"Flags and settings for background histograms",4,0,4);
3907 f2pBackgroundFlagsPro =
new TProfile(
"f2pBackgroundFlagsPro",
"Flags and settings for 2p background histograms",1,0,1);
3918 f3pBackgroundFlagsPro =
new TProfile(
"f3pBackgroundFlagsPro",
"Flags and settings for 3p background histograms",1,0,1);
3929 f4pBackgroundFlagsPro =
new TProfile(
"f4pBackgroundFlagsPro",
"Flags and settings for 4p background histograms",1,0,1);
3942 const Int_t nParticleSpecies = 5;
3943 TString sParticles[2*nParticleSpecies] = {
"e^{+}",
"#mu^{+}",
"#pi^{+}",
"K^{+}",
"p^{+}",
"e^{-}",
"#mu^{-}",
"#pi^{-}",
"K^{-}",
"p^{-}"};
3950 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3952 for(
Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
3955 f2pBackground[pid1][pid2] =
new TH1F(Form(
"f2pBackground[%d][%d]",pid1,pid2),Form(
"f2pBackground[%d][%d] = (%s,%s)",pid1,pid2,sParticles[pid1].
Data(),sParticles[pid2].
Data()),10000,0.,10.);
3969 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3971 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3973 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3976 f3pBackground[pid1][pid2][pid3] =
new TH1F(Form(
"f3pBackground[%d][%d][%d]",pid1,pid2,pid3),Form(
"f3pBackground[%d][%d][%d] = (%s,%s,%s)",pid1,pid2,pid3,sParticles[pid1].
Data(),sParticles[pid2].
Data(),sParticles[pid3].
Data()),10000,0.,10.);
3991 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3993 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3995 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3997 for(
Int_t pid4=0;pid4<2*nParticleSpecies;pid4++)
4000 f4pBackground[pid1][pid2][pid3][pid4] =
new TH1F(Form(
"f4pBackground[%d][%d][%d][%d]",pid1,pid2,pid3,pid4),Form(
"f4pBackground[%d][%d][%d][%d] = (%s,%s,%s,%s)",pid1,pid2,pid3,pid4,sParticles[pid1].
Data(),sParticles[pid2].
Data(),sParticles[pid3].
Data(),sParticles[pid4].
Data()),10000,0.,10.);
4002 f4pBackground[pid1][pid2][pid3][pid4]->SetFillColor(kRed-10);
4005 f4pBackground[pid1][pid2][pid3][pid4]->SetYTitle(
"B(Q_{4})");
4017 for(
Int_t me=0;me<3;me++)
4024 for(
Int_t vzr=0;vzr<10;vzr++)
4028 fMixedEvents1[vzr][me] =
new TClonesArray(
"AliAODTrack",10000);
4054 fBuffersFlagsPro =
new TProfile(
"fBuffersFlagsPro",
"Flags and settings for buffers",2,0,2);
4066 if(!fFillBuffers){
return;}
4073 for(
Int_t p=0;p<10000;p++)
4100 fQAFlagsPro =
new TProfile(
"fQAFlagsPro",
"Flags and settings for QA",4,0.,4.);
4114 if(!fFillQA){
return;}
4123 if(fFillQAParticles)
4126 Int_t nFilterBits = 14;
4132 for(
Int_t fb=0;fb<nFilterBits;fb++)
4139 Int_t nIDsMax = 10000;
4140 fQAIDvsFilterBit =
new TH2I(
"fQAIDvsFilterBit",
"fQAIDvsFilterBit",nFilterBits,0,nFilterBits,2*nIDsMax,-nIDsMax,nIDsMax);
4145 for(
Int_t fb=0;fb<nFilterBits;fb++)
4152 TString sBeforeAfter[2] = {
"before",
"after"};
4153 TString sDistributions[10] = {
"p_{T}",
"#eta",
"",
"",
"",
"",
"",
"",
"",
""};
4154 TString sCuts[10] = {
"PID",
"",
"",
"",
"",
"",
"",
"",
"",
""};
4155 for(
Int_t ba=0;ba<2;ba++)
4157 for(
Int_t di=0;di<10;di++)
4159 if(sDistributions[di].EqualTo(
"")){
continue;}
4160 for(
Int_t ci=0;ci<10;ci++)
4162 if(sCuts[ci].EqualTo(
"")){
continue;}
4163 fQAParticleHist[ba][di][ci] =
new TH1F(Form(
"fQAParticleHist[%d][%d][%d]",ba,di,ci),Form(
"fQAParticleHist[%d][%d][%d] = (%s,%s,%s)",ba,di,ci,sBeforeAfter[ba].
Data(),sDistributions[di].
Data(),sCuts[ci].
Data() ),10000,0.,10.);
4186 fGlobalTrackCutsFlagsPro =
new TProfile(
"fGlobalTrackCutsFlagsPro",
"Flags and settings for global track cuts",7,0.,7.);
4232 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAOD(AliAODEvent *aAOD, Int_t index)";
4233 if(!
fGlobalTracksAOD[index]){Fatal(sMethodName.Data(),
"fGlobalTracksAOD[%d]",index);}
4237 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4239 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4242 Int_t id = aodTrack->GetID();
4244 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4280 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAODTEST(AliAODEvent *aAOD, Int_t index)";
4285 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4287 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4290 Int_t id = aodTrack->GetID();
4292 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4328 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAODHA(AliAODEvent *aAOD, Int_t index)";
4329 if(!
fGlobalTracksAODHA[index]){Fatal(sMethodName.Data(),
"fGlobalTracksAODHA[%d]",index);}
4333 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4335 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4338 Int_t id = aodTrack->GetID();
4340 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4375 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAOD(AliAODEvent *aAOD, Int_t indexX, Int_t indexY)";
4376 if(!
fGlobalTracksAOD1[indexX][indexY]){Fatal(sMethodName.Data(),
"fGlobalTracksAOD[%d][%d]",indexX,indexY);}
4380 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4382 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4385 Int_t id = aodTrack->GetID();
4387 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4402 if(run !=
fRun)
return kFALSE;
4404 else if(orbit !=
fOrbit)
return kFALSE;
4405 else if(period !=
fPeriod)
return kFALSE;
4417 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesGlobalTrackCuts(AliAODTrack *gtrack)";
4418 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
4423 if(gtrack->Pt()<
fPtRange[0])
return kFALSE;
4424 if(gtrack->Pt()>=
fPtRange[1])
return kFALSE;
4425 if(gtrack->Eta()<
fEtaRange[0])
return kFALSE;
4426 if(gtrack->Eta()>=
fEtaRange[1])
return kFALSE;
4427 if(gtrack->Phi()<
fPhiRange[0])
return kFALSE;
4428 if(gtrack->Phi()>=
fPhiRange[1])
return kFALSE;
4445 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonTrackCuts(AliAODTrack *atrack)";
4446 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
4448 if(!atrack->TestFilterBit(128))
return kFALSE;
4451 if(atrack->Pt()<
fPtRange[0])
return kFALSE;
4452 if(atrack->Pt()>=
fPtRange[1])
return kFALSE;
4453 if(atrack->Eta()<
fEtaRange[0])
return kFALSE;
4454 if(atrack->Eta()>=
fEtaRange[1])
return kFALSE;
4455 if(atrack->Phi()<
fPhiRange[0])
return kFALSE;
4456 if(atrack->Phi()>=
fPhiRange[1])
return kFALSE;
4472 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonTrackCuts(AliAODMCParticle *amcparticle)";
4473 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
4475 if(TMath::Abs(amcparticle->Charge())<1.e-10)
return kFALSE;
4476 if(!amcparticle->IsPhysicalPrimary())
return kFALSE;
4477 if(amcparticle->Pt()<0.2)
return kFALSE;
4478 if(amcparticle->Pt()>=5.0)
return kFALSE;
4479 if(amcparticle->Eta()<-0.8)
return kFALSE;
4480 if(amcparticle->Eta()>=0.8)
return kFALSE;
4497 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
4531 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
4569 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
4612 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateCorrelationFunctions(AliAODEvent *aAOD)";
4613 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
4614 if(0 ==
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 == fGlobalTracksAOD[0]->GetSize()");}
4617 Int_t nTracks = aAOD->GetNumberOfTracks();
4618 for(
Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
4620 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack1));
4622 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
4623 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
4624 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
4627 Int_t id1 = atrack1->GetID();
4628 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id1)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id1+1))));
4629 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
4630 Int_t gid1 = (id1>=0 ? id1 : -(id1+1));
4635 for(
Int_t iTrack2=iTrack1+1;iTrack2<nTracks;iTrack2++)
4637 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack2));
4639 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
4640 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
4641 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
4644 Int_t id2 = atrack2->GetID();
4645 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id2)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id2+1))));
4646 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
4647 Int_t gid2 = (id2>=0 ? id2 : -(id2+1));
4648 if(gid1==gid2){
continue;}
4654 AliAODTrack *agtrack1 = NULL;
4655 AliAODTrack *agtrack2 = NULL;
4666 if(!agtrack1){Fatal(sMethodName.Data(),
"!agtrack1");}
4667 if(!agtrack2){Fatal(sMethodName.Data(),
"!agtrack2");}
4673 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE))
4678 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4683 if((
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE)) || (
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,1,kTRUE)))
4690 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
4695 if(
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4700 if((
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE)) || (
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,1,kTRUE)))
4712 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4725 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
4730 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4735 if(
Kaon(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4740 if(
Pion(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4746 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
4751 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4756 if(
Proton(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4761 if(
Pion(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4767 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
4772 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4777 if(
Proton(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4782 if(
Kaon(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4807 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::Calculate3pCorrelationFunctions(AliAODEvent *aAOD)";
4808 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
4809 if(0 ==
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 == fGlobalTracksAOD[0]->GetSize()");}
4812 Int_t nTracks = aAOD->GetNumberOfTracks();
4813 for(
Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
4815 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack1));
4817 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
4818 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
4819 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
4822 Int_t id1 = atrack1->GetID();
4823 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id1)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id1+1))));
4824 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
4825 Int_t gid1 = (id1>=0 ? id1 : -(id1+1));
4830 for(
Int_t iTrack2=0;iTrack2<nTracks;iTrack2++)
4832 if(iTrack2<=iTrack1){
continue;}
4833 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack2));
4835 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
4836 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
4837 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
4840 Int_t id2 = atrack2->GetID();
4841 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id2)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id2+1))));
4842 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
4843 Int_t gid2 = (id2>=0 ? id2 : -(id2+1));
4844 if(gid1==gid2){
continue;}
4849 for(
Int_t iTrack3=0;iTrack3<nTracks;iTrack3++)
4851 if(iTrack3<=iTrack2 || iTrack3<=iTrack1){
continue;}
4852 AliAODTrack *atrack3 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack3));
4854 if(!atrack3){Fatal(sMethodName.Data(),
"!atrack3");}
4855 if(atrack3->GetID()>=0 && atrack3->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack3->GetID()>=0 && atrack3->IsGlobalConstrained()");}
4856 if(atrack3->TestFilterBit(128) && atrack3->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack3->TestFiletrBit(128) && atrack3->IsGlobalConstrained()");}
4859 Int_t id3 = atrack3->GetID();
4860 AliAODTrack *gtrack3 =
dynamic_cast<AliAODTrack*
>(id3>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id3)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id3+1))));
4861 if(!gtrack3){Fatal(sMethodName.Data(),
"!gtrack3");}
4862 Int_t gid3 = (id3>=0 ? id3 : -(id3+1));
4863 if(gid3==gid2 || gid3==gid1){
continue;}
4868 AliAODTrack *agtrack1 = NULL;
4869 AliAODTrack *agtrack2 = NULL;
4870 AliAODTrack *agtrack3 = NULL;
4883 if(!agtrack1){Fatal(sMethodName.Data(),
"!agtrack1");}
4884 if(!agtrack2){Fatal(sMethodName.Data(),
"!agtrack2");}
4885 if(!agtrack3){Fatal(sMethodName.Data(),
"!agtrack3");}
4895 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Pion(gtrack3,1,kTRUE))
4900 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4905 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE) &&
Kaon(gtrack3,1,kTRUE))
4910 if(
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))