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 fBackgroundTESTList(NULL),
208 fBackgroundTESTFlagsPro(NULL),
210 fOnlineMonitoring(kFALSE),
211 fUpdateOutputFile(kFALSE),
212 fUpdateFrequency(-44),
213 fUpdateWhichOutputFile(NULL),
214 fMaxNumberOfEvents(-44),
216 fDoSomeDebugging(kFALSE),
217 fWaitForSpecifiedEvent(kFALSE),
225 AliDebug(2,
"AliAnalysisTaskMultiparticleFemtoscopy::AliAnalysisTaskMultiparticleFemtoscopy(const char *name, Bool_t useParticleWeights)");
228 fHistList =
new TList();
229 fHistList->SetName(
"MPF");
230 fHistList->SetOwner(kTRUE);
233 this->InitializeArrays();
234 this->InitializeArraysForControlHistograms();
235 this->InitializeArraysForEBEObjects();
236 this->InitializeArraysForCorrelationFunctions();
237 this->InitializeArraysForBackground();
238 this->InitializeArraysForBuffers();
239 this->InitializeArraysForQA();
240 this->InitializeArraysForGlobalTrackCuts();
241 this->InitializeArraysForCorrelationFunctionsTEST();
242 this->InitializeArraysForBackgroundTEST();
255 DefineOutput(1, TList::Class());
257 if(useParticleWeights)
271 fMaxNoGlobalTracksAOD(5),
272 fProcessBothKineAndReco(kFALSE),
273 fProcessOnlyKine(kFALSE),
274 fProcessOnlyReco(kFALSE),
275 fRejectFakeTracks(kTRUE),
278 fControlHistogramsList(NULL),
279 fControlHistogramsFlagsPro(NULL),
280 fFillControlHistograms(kFALSE),
281 fControlHistogramsEventList(NULL),
282 fControlHistogramsEventFlagsPro(NULL),
283 fFillControlHistogramsEvent(kFALSE),
284 fGetNumberOfTracksHist(NULL),
285 fGetNumberOfGlobalTracksHist(NULL),
286 fGetNumberOfV0sHist(NULL),
287 fGetNumberOfCascadesHist(NULL),
288 fGetMagneticFieldHist(NULL),
289 fGetEventTypeHist(NULL),
290 fGetCentralityHist(NULL),
291 fGetNContributorsHist(NULL),
292 fGetChi2perNDFHist(NULL),
293 fGetNDaughtersHist(NULL),
294 fControlHistogramsNonIdentifiedParticlesList(NULL),
295 fControlHistogramsNonIdentifiedParticlesFlagsPro(NULL),
296 fFillControlHistogramsNonIdentifiedParticles(kFALSE),
298 fGetTPCNclsHist(NULL),
299 fGetTPCsignalNHist(NULL),
300 fGetITSNclsHist(NULL),
308 fControlHistogramsNonIdentifiedParticlesFTSFList(NULL),
309 fControlHistogramsNonIdentifiedParticlesFTSFFlagsPro(NULL),
310 fFillControlHistogramsNonIdentifiedParticlesFTSF(kFALSE),
312 fChargeFTSFHist(NULL),
313 fGetTPCNclsFTSFHist(NULL),
314 fGetTPCsignalNFTSFHist(NULL),
315 fGetITSNclsFTSFHist(NULL),
316 fdEdxVsPtFTSFHist(NULL),
321 fGetFilterMapFTSF(NULL),
322 fGetPdgCodeFTSF(NULL),
323 fControlHistogramsIdentifiedParticlesList(NULL),
324 fControlHistogramsIdentifiedParticlesFlagsPro(NULL),
325 fFillControlHistogramsIdentifiedParticles(kFALSE),
326 fFillControlHistogramsWithGlobalTrackInfo(kFALSE),
327 fInclusiveSigmaCutsPro(NULL),
328 fExclusiveSigmaCutsPro(NULL),
329 fUseDefaultInclusiveSigmaCuts(kFALSE),
330 fUseDefaultExclusiveSigmaCuts(kFALSE),
331 fControlHistogramsV0sList(NULL),
332 fControlHistogramsV0sFlagsPro(NULL),
333 fFillControlHistogramsV0s(kFALSE),
334 fGetNProngsHist(NULL),
335 fMassK0ShortHist(NULL),
336 fMassLambdaHist(NULL),
337 fMassAntiLambdaHist(NULL),
338 fOpenAngleV0Hist(NULL),
340 fDcaV0ToPrimVertexHist(NULL),
345 fPseudoRapV0Hist(NULL),
348 fEBEHistogramsList(NULL),
349 fEBEObjectsFlagsPro(NULL),
351 fUniqueIDHistEBE(NULL),
353 fCorrelationFunctionsList(NULL),
354 fCorrelationFunctionsFlagsPro(NULL),
355 f2pCorrelationFunctionsFlagsPro(NULL),
356 f3pCorrelationFunctionsFlagsPro(NULL),
357 f4pCorrelationFunctionsFlagsPro(NULL),
358 fFillCorrelationFunctions(kFALSE),
359 fNormalizeCorrelationFunctions(kFALSE),
360 fCorrelationFunctionsIndices(NULL),
361 fFill3pCorrelationFunctions(kFALSE),
362 fFill4pCorrelationFunctions(kFALSE),
363 fNormalizationOption(0),
366 fBackgroundList(NULL),
367 fBackgroundFlagsPro(NULL),
368 f2pBackgroundFlagsPro(NULL),
369 f3pBackgroundFlagsPro(NULL),
370 f4pBackgroundFlagsPro(NULL),
371 fBackgroundOption(0),
372 fEstimate2pBackground(kFALSE),
373 fEstimate3pBackground(kFALSE),
374 fEstimate4pBackground(kFALSE),
378 fBuffersFlagsPro(NULL),
379 fFillBuffers(kFALSE),
385 fBailOutAfterQA(kFALSE),
386 fFillQAEvents(kFALSE),
387 fFillQAParticles(kFALSE),
389 fQAParticlesList(NULL),
390 fQAFilterBitScan(NULL),
391 fQAIDvsFilterBit(NULL),
393 fRejectEventsWithoutPrimaryVertex(kFALSE),
394 fMinMagneticField(0.001),
395 fCutOnNumberOfTracks(kFALSE),
396 fMinNumberOfTracks(-44),
397 fMaxNumberOfTracks(-44),
398 fCutOnNumberOfGlobalTracks(kFALSE),
399 fMinNumberOfGlobalTracks(-44),
400 fMaxNumberOfGlobalTracks(-44),
401 fCutOnNumberOfV0s(kFALSE),
402 fMinNumberOfV0s(-44),
403 fMaxNumberOfV0s(-44),
404 fCutOnNumberOfCascades(kFALSE),
405 fMinNumberOfCascades(-44),
406 fMaxNumberOfCascades(-44),
407 fCutOnVertexX(kFALSE),
410 fCutOnVertexY(kFALSE),
413 fCutOnVertexZ(kFALSE),
416 fCutOnNContributors(kFALSE),
417 fMinNContributors(-44),
418 fMaxNContributors(-44),
420 fGlobalTrackCutsList(NULL),
421 fGlobalTrackCutsFlagsPro(NULL),
422 fApplyGlobalTrackCuts(kFALSE),
424 fCorrelationFunctionsTESTList(NULL),
425 fCorrelationFunctionsTESTFlagsPro(NULL),
427 fBackgroundTESTList(NULL),
428 fBackgroundTESTFlagsPro(NULL),
430 fOnlineMonitoring(kFALSE),
431 fUpdateOutputFile(kFALSE),
432 fUpdateFrequency(-44),
433 fUpdateWhichOutputFile(NULL),
434 fMaxNumberOfEvents(-44),
436 fDoSomeDebugging(kFALSE),
437 fWaitForSpecifiedEvent(kFALSE),
445 AliDebug(2,
"AliAnalysisTaskMultiparticleFemtoscopy::AliAnalysisTaskMultiparticleFemtoscopy()");
482 Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
483 TH1::AddDirectory(kFALSE);
505 TH1::AddDirectory(oldHistAddStatus);
525 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::UserExec(Option_t *)";
528 AliMCEvent *aMC = MCEvent();
533 Fatal(sMethodName.Data(),
"One (and only one!) of fProcessBothKineAndReco, fProcessOnlyKine and fProcessOnlyReco must be kTRUE in AddTask* macro!!!!");
539 else{Fatal(sMethodName.Data(),
"fProcessBothKineAndReco is kTRUE, but TBI ...");}
544 else{Fatal(sMethodName.Data(),
"fProcessOnlyKine is kTRUE, but TBI ...");}
550 else{Fatal(sMethodName.Data(),
"fProcessOnlyReco is kTRUE, but TBI ...");}
586 if(aMC&&aAOD){
AOD(aAOD);}
590 if(aMC&&aESD){
ESD(aESD);}
628 TFile *f =
new TFile(
"AnalysisResults.root",
"RECREATE");
641 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::QA(AliVEvent *ave)";
646 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
670 Int_t nTracks = aAOD->GetNumberOfTracks();
671 for(
Int_t iTrack=0;iTrack<nTracks;iTrack++)
673 AliAODTrack *atrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
674 Int_t nFilterBits = 14;
675 for(
Int_t fb=0;fb<nFilterBits;fb++)
677 if(atrack->TestFilterBit(1<<fb))
744 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::NormalizeCorrelationFunctions()";
748 cout<<
"=> Normalization option:"<<endl;
752 cout<<
"\"just scale\""<<endl;
757 cout<<
"TBI: not implemented yet"<<endl;
762 cout<<Form(
"And the fatal 'fNormalizationOption' value is... %d. Congratulations!!",
fNormalizationOption)<<endl;
763 Fatal(sMethodName.Data(),
"switch(fNormalizationOption)");
767 cout<<Form(
"=> Histograms will be rebinned: fnMergedBins = %d",
fnMergedBins)<<endl;
771 cout<<
"TBI: not finalized yet"<<endl;
773 for(
Int_t pid1=0;pid1<10;pid1++)
775 for(
Int_t pid2=0;pid2<10;pid2++)
786 for(
Int_t pid1=0;pid1<10;pid1++)
788 for(
Int_t pid2=0;pid2<10;pid2++)
790 for(
Int_t pid3=0;pid3<10;pid3++)
804 for(
Int_t pid1=0;pid1<10;pid1++)
806 for(
Int_t pid2=0;pid2<10;pid2++)
808 for(
Int_t pid3=0;pid3<10;pid3++)
810 for(
Int_t pid4=0;pid4<10;pid4++)
841 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
864 if(aAOD->GetCentrality())
869 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
891 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsParticle(AliVEvent *ave)";
894 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
901 for(
Int_t iTrack=0;iTrack<aMC->GetNumberOfTracks();iTrack++)
909 AliAODMCParticle *amcparticle = (AliAODMCParticle*)aMC->GetTrack(iTrack);
912 if(!amcparticle){Fatal(sMethodName.Data(),
"!amctrack");}
935 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
946 AliAODTrack *atrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
949 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
951 if(0!=n){Fatal(sMethodName.Data(),
"InsanityChecksForTracks(atrack), n = %d",n);}
956 Int_t id = atrack->GetID();
957 AliAODTrack *gtrack =
dynamic_cast<AliAODTrack*
>(
id>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(
id)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(
id+1))));
960 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
962 if(0!=ng){Fatal(sMethodName.Data(),
"InsanityChecksForGlobalTracks(gtrack), ng = %d",ng);}
990 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsNonIdentifiedParticles(AliAODTrack *gtrack)";
991 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
1001 fdEdxVsPtHist->Fill(gtrack->GetTPCmomentum(),gtrack->GetTPCsignal());
1022 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsNonIdentifiedParticles(AliAODMCParticle *amcparticle)";
1023 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
1030 fPtHist->Fill(amcparticle->Pt());
1031 fEtaHist->Fill(amcparticle->Eta());
1032 fPhiHist->Fill(amcparticle->Phi());
1049 TString sMethodName =
"AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsNonIdentifiedParticlesFTSF(AliAODTrack *atrack)";
1050 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
1084 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsIdentifiedParticles(AliAODTrack *atrack, AliAODTrack *gtrack)";
1085 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
1086 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
1091 if(atrack->GetID()<0){
return;}
1100 AliAODTrack *agtrack = NULL;
1102 else {agtrack = atrack;}
1103 if(!agtrack){Fatal(sMethodName.Data(),
"!agtrack");}
1108 if(1==
charge){nCharge = -1;}
1109 for(
Int_t ps=0;ps<2;ps++)
1111 if(1==ps){bPrimary = kFALSE;}
1113 if(
Pion(gtrack,nCharge,bPrimary))
1121 if(
Kaon(gtrack,nCharge,bPrimary))
1129 if(
Proton(gtrack,nCharge,bPrimary))
1152 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsIdentifiedParticles(AliAODMCParticle *amcparticle)";
1153 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
1161 if(211==TMath::Abs(amcparticle->GetPdgCode()))
1166 else if(321==TMath::Abs(amcparticle->GetPdgCode()))
1171 else if(2212==TMath::Abs(amcparticle->GetPdgCode()))
1177 Int_t charge = ((amcparticle->GetPdgCode()>0. ? 0 : 1));
1178 Int_t isPhysicalPrimary = ((amcparticle->IsPhysicalPrimary() ? 0 : 1));
1196 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::EstimateBackground(AliVEvent *ave)";
1202 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1208 TString pattern =
".11.13.211.321.2212.";
1213 Int_t nTracks = aMC->GetNumberOfTracks();
1216 TClonesArray ca0(
"AliAODMCParticle");
1217 Int_t ca0Counter = 0;
1218 for(
Int_t iTrack=0;iTrack<nTracks;iTrack++)
1220 AliAODMCParticle *amcparticle =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack));
1221 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
1223 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle->GetPdgCode()))))){
continue;}
1225 ca0[ca0Counter++] = amcparticle;
1228 if(!
fMixedEvents0[0]){Fatal(sMethodName.Data(),
"!fMixedEvents0[0]");}
1232 TClonesArray ca1(
"AliAODMCParticle");
1233 Int_t ca1Counter = 0;
1234 for(
Int_t iTrack=0;iTrack<nTracks;iTrack++)
1236 AliAODMCParticle *amcparticle =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack));
1237 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
1239 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle->GetPdgCode()))))){
continue;}
1241 ca1[ca1Counter++] = amcparticle;
1244 if(!
fMixedEvents0[1]){Fatal(sMethodName.Data(),
"!fMixedEvents0[1]");}
1317 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
1320 if(nBinsVertexZrange<=0){Fatal(sMethodName.Data(),
"nBinsVertexZrange<=0");}
1323 for(
Int_t b=0;b<nBinsVertexZrange;b++)
1326 if(avtx->GetZ()>=
fMinVertexZ+1.*b*flBinWidthVertexZrange && avtx->GetZ()<
fMinVertexZ+1.*(b+1)*flBinWidthVertexZrange)
1332 if(-44==indexX){Fatal(sMethodName.Data(),
"-44==indexX");}
1346 if(fMaxBufferSize1-1==indexY)
1348 cout<<
"Flushing the buffer for background..."<<endl;
1349 cout<<Form(
"fMaxBufferSize1 = %d",fMaxBufferSize1)<<endl;
1350 cout<<Form(
"fMixedEvents1[indexX][indexY] = fMixedEvents1[%d][%d]",indexX,indexY)<<endl;
1370 if(bufferNo2<=bufferNo1){
continue;}
1373 if(bufferNo2<=bufferNo1 || bufferNo3<=bufferNo1 || bufferNo3<=bufferNo2){
continue;}
1418 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::EstimateBackgroundTEST(AliVEvent *ave)";
1424 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1502 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1519 cout<<Form(
"aAOD->GetRunNumber() = %d",aAOD->GetRunNumber())<<endl;
1520 cout<<Form(
"aAOD->GetBunchCrossNumber() = %d",aAOD->GetBunchCrossNumber())<<endl;
1521 cout<<Form(
"aAOD->GetOrbitNumber() = %d",aAOD->GetOrbitNumber())<<endl;
1522 cout<<Form(
"aAOD->GetPeriodNumber() = %d",aAOD->GetPeriodNumber())<<endl;
1523 if(!
SpecifiedEvent(aAOD->GetRunNumber(),aAOD->GetBunchCrossNumber(),aAOD->GetOrbitNumber(),aAOD->GetPeriodNumber())){
return;}
1535 Int_t currentEventNumber = -44;
1552 return currentEventNumber;
1571 cout<<Form(
"nEvts: %d",currentEventNo)<<endl;
1604 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::InsanityChecksUserCreateOutputObjects()";
1608 if(0!=returnValueICFGTC)
1610 cout<<Form(
"\n\nSomething is fundamentally wrong with global track cuts!!!!")<<endl;
1611 cout<<Form(
"InsanityChecksForGlobalTrackCuts() returns %d, check its implementation for an explanation of return values.\n\n",returnValueICFGTC)<<endl;
1612 Fatal(sMethodName.Data(),
"if(0!=returnValueICFGTC)");
1618 cout<<Form(
"\n\nCalculation of 4-p stuff is not validated yet!!!! \n\n")<<endl;
1619 Fatal(sMethodName.Data(),
"fFill4pCorrelationFunctions || fEstimate4pBackground");
1625 cout<<Form(
"\n\nThis option for calculating background is not supported yet!!!! \n\n")<<endl;
1626 Fatal(sMethodName.Data(),
"!(fBackgroundOption == 0 || fBackgroundOption == 1)");
1630 cout<<Form(
"\n\nfMaxBufferSize1 can be at maximum 50 !!!! \n\n")<<endl;
1631 Fatal(sMethodName.Data(),
"fMaxBufferSize1>=50");
1647 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::InsanityChecksUserExec()";
1651 if(
fOnlineMonitoring && !
fFillControlHistogramsEvent){Fatal(sMethodName.Data(),
"fOnlineMonitoring && !fFillControlHistogramsEvent.\n\nAt the moment, fOnlineMonitoring can be used only if fFillControlHistogramsEvent is enabled.");}
1661 for(
Int_t pid=0;pid<5;pid++)
1663 for(
Int_t pa=0;pa<2;pa++)
1665 for(
Int_t ps=0;ps<2;ps++)
1667 if(!
fPIDCA[pid][pa][ps]) {Fatal(sMethodName.Data(),
"!fPIDCA[pid][pa][ps]");}
1668 if(0 !=
fPIDCA[pid][pa][ps]->GetEntriesFast()){Fatal(sMethodName.Data(),
"0 != fPIDCA[pid][pa][ps]->GetEntriesFast()"); }
1672 for(
Int_t pid=0;pid<1;pid++)
1674 if(!
fPIDV0sCA[pid]){Fatal(sMethodName.Data(),
"!fPIDV0sCA[pid]");}
1675 if(0 !=
fPIDV0sCA[pid]->GetEntriesFast()){Fatal(sMethodName.Data(),
"0 != fPIDV0sCA[pid]->GetEntriesFast()");}
1693 if(!
fGlobalTracksAOD[0]){Fatal(sMethodName.Data(),
"!fGlobalTracksAOD[0]");}
1694 if(0 !=
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 != fGlobalTracksAOD[0]->GetSize()");}
1801 Bool_t bFillCorrelationFunctionsTEST = kFALSE;
1802 for(
Int_t t=0;t<10;t++)
1809 Bool_t bFillBackgroundTEST = kFALSE;
1810 for(
Int_t t=0;t<10;t++)
1834 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1849 TClonesArray *caV0s = aAOD->GetV0s();
1851 AliAODv0 *aAODv0 = NULL;
1852 Int_t nProngs = -44;
1853 while(caV0s->At(index))
1855 aAODv0 = (AliAODv0*) caV0s->At(index++);
1867 nProngs = aAODv0->GetNProngs();
1878 fPtV0Hist->Fill(pow(aAODv0->Pt2V0(),0.5));
1880 fPAHist->Fill(aAODv0->Alpha(),aAODv0->PtArmV0());
1895 cout<<Form(
"fUniqueIDHistEBE->FindFirstBinAbove(1.44) %d:",(
Int_t)
fUniqueIDHistEBE->FindFirstBinAbove(1.44,1))<<endl;
1932 for(
Int_t pid=0;pid<5;pid++)
1934 for(
Int_t pa=0;pa<2;pa++)
1936 for(
Int_t ps=0;ps<2;ps++)
1943 for(
Int_t pid=0;pid<1;pid++)
1983 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Pion(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
1984 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
1985 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
1988 if(charge != (
Int_t)gtrack->Charge())
return kFALSE;
1989 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
1993 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
2008 if(gtrack->GetTPCmomentum() < 0.75)
2011 if(!statusTPC)
return kFALSE;
2019 else if(gtrack->GetTPCmomentum() >= 0.75 )
2028 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
2029 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
2030 if(!mcParticle){cout<<
"WARNING: mcParticle is NULL in Pion(...)! gtrack = "<<gtrack<<endl;
return kFALSE; }
2031 if(charge < 0 && mcParticle->GetPdgCode() == -211)
return kTRUE;
2032 else if(charge > 0 && mcParticle->GetPdgCode() == 211)
return kTRUE;
2054 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Kaon(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
2055 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
2056 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
2059 if(charge != (
Int_t)gtrack->Charge())
return kFALSE;
2060 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
2064 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
2079 if(gtrack->GetTPCmomentum() < 0.75)
2082 if(!statusTPC)
return kFALSE;
2090 else if(gtrack->GetTPCmomentum() >= 0.75 )
2099 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
2100 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
2101 if(!mcParticle){cout<<
"WARNING: mcParticle is NULL in Kaon(...)! gtrack = "<<gtrack<<endl;
return kFALSE; }
2102 if(charge < 0 && mcParticle->GetPdgCode() == -321)
return kTRUE;
2103 else if(charge > 0 && mcParticle->GetPdgCode() == 321)
return kTRUE;
2124 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Proton(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
2125 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
2126 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
2129 if(charge != (
Int_t)gtrack->Charge())
return kFALSE;
2130 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
2134 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
2149 if(gtrack->GetTPCmomentum() < 0.75)
2152 if(!statusTPC)
return kFALSE;
2159 else if(gtrack->GetTPCmomentum() >= 0.75 )
2168 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
2169 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
2170 if(!mcParticle){cout<<
"WARNING: mcParticle is NULL in Proton(...)! gtrack = "<<gtrack<<endl;
return kFALSE; }
2171 if(charge < 0 && mcParticle->GetPdgCode() == -2212)
return kTRUE;
2172 else if(charge > 0 && mcParticle->GetPdgCode() == 2212)
return kTRUE;
2186 for(
Int_t index=0;index<10;index++)
2199 for(
Int_t xyz=0;xyz<3;xyz++)
2204 for(
Int_t pid=0;pid<5;pid++)
2206 for(
Int_t pa=0;pa<2;pa++)
2208 for(
Int_t ps=0;ps<2;ps++)
2219 for(
Int_t pf=0;pf<5;pf++)
2225 for(
Int_t pf=0;pf<5;pf++)
2227 for(
Int_t pid=0;pid<5;pid++)
2245 for(
Int_t pid=0;pid<5;pid++)
2247 for(
Int_t pa=0;pa<2;pa++)
2249 for(
Int_t ps=0;ps<2;ps++)
2251 fPIDCA[pid][pa][ps] = NULL;
2257 for(
Int_t pid=0;pid<1;pid++)
2276 for(
Int_t cfs=0;cfs<3;cfs++)
2282 for(
Int_t pid1=0;pid1<10;pid1++)
2284 for(
Int_t pid2=0;pid2<10;pid2++)
2291 for(
Int_t pid1=0;pid1<10;pid1++)
2293 for(
Int_t pid2=0;pid2<10;pid2++)
2295 for(
Int_t pid3=0;pid3<10;pid3++)
2303 for(
Int_t pid1=0;pid1<10;pid1++)
2305 for(
Int_t pid2=0;pid2<10;pid2++)
2307 for(
Int_t pid3=0;pid3<10;pid3++)
2309 for(
Int_t pid4=0;pid4<10;pid4++)
2325 for(
Int_t bs=0;bs<3;bs++)
2330 for(
Int_t pid1=0;pid1<10;pid1++)
2332 for(
Int_t pid2=0;pid2<10;pid2++)
2338 for(
Int_t pid1=0;pid1<10;pid1++)
2340 for(
Int_t pid2=0;pid2<10;pid2++)
2342 for(
Int_t pid3=0;pid3<10;pid3++)
2349 for(
Int_t me=0;me<3;me++)
2354 for(
Int_t vzr=0;vzr<10;vzr++)
2371 for(
Int_t am=0;am<2;am++)
2373 for(
Int_t e=0;e<10;e++)
2375 for(
Int_t p=0;p<10000;p++)
2383 for(
Int_t e=0;e<10;e++)
2396 for(
Int_t ba=0;ba<2;ba++)
2398 for(
Int_t di=0;di<10;di++)
2400 for(
Int_t ci=0;ci<10;ci++)
2457 const Int_t nTestsMax = 10;
2459 for(
Int_t t=0;t<nTestsMax;t++)
2465 for(
Int_t t=0;t<nTestsMax;t++)
2467 for(
Int_t q=0;q<2;q++)
2469 for(
Int_t tt=0;tt<7;tt++)
2471 for(
Int_t d=0;d<10;d++)
2479 for(
Int_t t=0;t<nTestsMax;t++)
2481 for(
Int_t q=0;q<2;q++)
2483 for(
Int_t tt=0;tt<4;tt++)
2485 for(
Int_t d=0;d<10;d++)
2501 const Int_t nTestsMax = 10;
2503 for(
Int_t t=0;t<nTestsMax;t++)
2509 for(
Int_t t=0;t<nTestsMax;t++)
2511 for(
Int_t q=0;q<2;q++)
2513 for(
Int_t tt=0;tt<7;tt++)
2515 for(
Int_t d=0;d<10;d++)
2523 for(
Int_t me=0;me<3;me++)
2541 const Int_t nTests = 2;
2550 for(
Int_t t=0;t<nTests;t++)
2557 const Int_t nCumulants = 4;
2558 const Int_t n3pCumulantTerms = 7;
2559 const Int_t nQs = 2;
2560 const Int_t n2pCumulantTerms = 3;
2561 TString s2pCumulantTerms[n2pCumulantTerms] = {
"#LTX_{1}#GT",
"#LTX_{2}#GT",
"#LTX_{1}X_{2}#GT"};
2562 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"};
2563 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}"};
2564 TString sXYZ[3] = {
"x",
"y",
"z"};
2565 TString sQs[nQs] = {
"Q_{2}",
"Q_{3}"};
2566 for(
Int_t t=0;t<nTests;t++)
2572 for(
Int_t ct=0;ct<n2pCumulantTerms;ct++)
2574 for(
Int_t xyz=0;xyz<3;xyz++)
2576 fCorrelationFunctionsTEST[t][0][ct][xyz] =
new TProfile(Form(
"fCorrelationFunctionsTEST[%d][0][%d][%d]",t,ct,xyz),Form(
"TEST: %d",t),100,0.,10.);
2588 for(
Int_t xyz=0;xyz<3;xyz++)
2590 fSignalCumulantsTEST[t][0][0][xyz] =
new TProfile(Form(
"fSignalCumulantsTEST[%d][0][%d][%d]",t,0,xyz),Form(
"TEST: %d",t),100,0.,10.);
2601 for(
Int_t ct=0;ct<n3pCumulantTerms;ct++)
2603 for(
Int_t xyz=0;xyz<3;xyz++)
2605 fCorrelationFunctionsTEST[t][1][ct][xyz] =
new TProfile(Form(
"fCorrelationFunctionsTEST[%d][1][%d][%d]",t,ct,xyz),Form(
"TEST: %d",t),100,0.,10.);
2617 for(
Int_t ct=0;ct<nCumulants;ct++)
2619 for(
Int_t xyz=0;xyz<3;xyz++)
2621 fSignalCumulantsTEST[t][1][ct][xyz] =
new TProfile(Form(
"fSignalCumulantsTEST[%d][1][%d][%d]",t,ct,xyz),Form(
"TEST: %d",t),100,0.,10.);
2649 const Int_t nTests = 2;
2650 fBackgroundTESTFlagsPro =
new TProfile(
"fBackgroundTESTFlagsPro",
"Flags and settings for test background",nTests,0,nTests);
2658 for(
Int_t t=0;t<nTests;t++)
2665 const Int_t nCumulants = 4;
2666 const Int_t n3pCumulantTerms = 7;
2667 const Int_t nQs = 2;
2668 const Int_t n2pCumulantTerms = 3;
2669 TString s2pCumulantTerms[n2pCumulantTerms] = {
"#LTX_{1}#GT",
"#LTX_{2}#GT",
"#LTX_{1}X_{2}#GT"};
2670 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"};
2671 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}"};
2672 TString sXYZ[3] = {
"x",
"y",
"z"};
2673 TString sQs[nQs] = {
"Q_{2}",
"Q_{3}"};
2674 for(
Int_t t=0;t<nTests;t++)
2680 for(
Int_t ct=0;ct<n2pCumulantTerms;ct++)
2682 for(
Int_t xyz=0;xyz<3;xyz++)
2684 fBackgroundTEST[t][0][ct][xyz] =
new TProfile(Form(
"fBackgroundTEST[%d][0][%d][%d]",t,ct,xyz),Form(
"TEST: %d",t),100,0.,10.);
2690 fBackgroundTEST[t][0][ct][xyz]->GetYaxis()->SetTitle(Form(
"%s_{%s}",s2pCumulantTerms[ct].
Data(),sXYZ[xyz].
Data()));
2696 for(
Int_t xyz=0;xyz<3;xyz++)
2698 fBackgroundCumulantsTEST[t][0][0][xyz] =
new TProfile(Form(
"fBackgroundCumulantsTEST[%d][0][%d][%d]",t,0,xyz),Form(
"TEST: %d",t),100,0.,10.);
2709 for(
Int_t ct=0;ct<n3pCumulantTerms;ct++)
2711 for(
Int_t xyz=0;xyz<3;xyz++)
2713 fBackgroundTEST[t][1][ct][xyz] =
new TProfile(Form(
"fBackgroundTEST[%d][1][%d][%d]",t,ct,xyz),Form(
"TEST: %d",t),100,0.,10.);
2719 fBackgroundTEST[t][1][ct][xyz]->GetYaxis()->SetTitle(Form(
"%s_{%s}",s3pCumulantTerms[ct].
Data(),sXYZ[xyz].
Data()));
2725 for(
Int_t ct=0;ct<nCumulants;ct++)
2727 for(
Int_t xyz=0;xyz<3;xyz++)
2729 fBackgroundCumulantsTEST[t][1][ct][xyz] =
new TProfile(Form(
"fBackgroundCumulantsTEST[%d][1][%d][%d]",t,ct,xyz),Form(
"TEST: %d",t),100,0.,10.);
2745 for(
Int_t me=0;me<3;me++)
2769 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::BookAndNestAllLists()";
2770 if(!
fHistList){Fatal(sMethodName.Data(),
"fHistList is NULL");}
2810 for(
Int_t cfs=0;cfs<3;cfs++)
2824 for(
Int_t bs=0;bs<3;bs++)
2869 const Int_t nTests = 2;
2870 for(
Int_t t=0;t<nTests;t++)
2883 for(
Int_t t=0;t<nTests;t++)
2940 TString sParticleLabel[5] = {
"e",
"#mu",
"#pi",
"K",
"p"};
2941 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()};
2958 fGetNumberOfTracksHist =
new TH1I(
"fGetNumberOfTracksHist",
"aAOD->GetNumberOfTracks() (Remark: Not all of tracks are unique.)",10000,0,10000);
2966 fGetNumberOfV0sHist =
new TH1I(
"fGetNumberOfV0sHist",
"aAOD->GetNumberOfV0s() (Remark: Some V0s share the daughter.)",10000,0,10000);
2983 TString sxyz[3] = {
"X",
"Y",
"Z"};
2984 for(
Int_t xyz=0;xyz<3;xyz++)
2986 fVertexXYZ[xyz] =
new TH1F(Form(
"fVertex%s",sxyz[xyz].
Data()),Form(
"avtz->Get%s()",sxyz[xyz].
Data()),100000,-50.,50);
2994 fGetChi2perNDFHist =
new TH1F(
"fGetChi2perNDFHist",
"avtx->GetChi2perNDF()",5000,0.,50.);
3043 fdEdxVsPtHist =
new TH2F(
"fdEdxVsPtHist",
"atrack->GetTPCmomentum(),atrack->GetTPCsignal()",1000,0.,20.,1000,-500.,500.);
3046 fPtHist =
new TH1F(
"fPtHist",
"atrack->Pt()",1000,0.,20.);
3048 fPtHist->SetFillColor(kBlue-10);
3051 fEtaHist =
new TH1F(
"fEtaHist",
"atrack->Eta()",200,-2.,2.);
3056 fPhiHist =
new TH1F(
"fPhiHist",
"atrack->Phi()",360,0.,TMath::TwoPi());
3062 fMassHist =
new TH1F(
"fMassHist",
"atrack->M()",10000,0.,10.);
3066 for(
Int_t nm=0;nm<5;nm++)
3068 fMassHist->GetXaxis()->SetBinLabel(
fMassHist->FindBin(dNominalMass[nm]),Form(
"m_{%s}",sParticleLabel[nm].
Data()));
3071 fGetFilterMap =
new TH1I(
"fGetFilterMap",
"atrack->fGetFilterMap()",10000,0,10000);
3076 fGetPdgCode =
new TH1I(
"fGetPdgCode",
"atrack->fGetPdgCode()",20000,-10000,10000);
3122 fdEdxVsPtFTSFHist =
new TH2F(
"fdEdxVsPtFTSFHist",Form(
"atrack->GetTPCmomentum(),atrack->GetTPCsignal(), fb = %d",
fFilterBitFTSF),1000,0.,20.,1000,-500.,500.);
3145 for(
Int_t nm=0;nm<5;nm++)
3180 if(fUseDefaultInclusiveSigmaCuts)
3186 const Int_t nPidFunctions = 5;
3187 TString sPidFunctions[nPidFunctions] = {
"Electron(...)",
"Muon(...)",
"Pion(...)",
"Kaon(...)",
"Proton(...)"};
3188 const Int_t nParticleSpecies = 5;
3189 TString sParticleSpecies[nParticleSpecies] = {
"e",
"#mu",
"#pi",
"K",
"p"};
3190 fInclusiveSigmaCutsPro =
new TProfile(
"fInclusiveSigmaCutsPro",
"Inclusive sigma cuts",nPidFunctions,0.,nPidFunctions);
3192 for(
Int_t pidFunction=0;pidFunction<5;pidFunction++)
3207 if(fUseDefaultExclusiveSigmaCuts)
3219 fExclusiveSigmaCutsPro =
new TProfile2D(
"fExclusiveSigmaCutsPro",
"Exclusive sigma cuts",nPidFunctions,0.,nPidFunctions,nParticleSpecies,0.,nParticleSpecies);
3230 for(
Int_t pidFunction=0;pidFunction<nPidFunctions;pidFunction++)
3233 for(
Int_t particleSpecies=0;particleSpecies<nParticleSpecies;particleSpecies++)
3235 if(0==pidFunction){
fExclusiveSigmaCutsPro->GetYaxis()->SetBinLabel(particleSpecies+1,sParticleSpecies[particleSpecies].
Data());}
3241 for(
Int_t pid=0;pid<5;pid++)
3243 for(
Int_t pa=0;pa<2;pa++)
3245 for(
Int_t ps=0;ps<2;ps++)
3247 if(fFillControlHistogramsWithGlobalTrackInfo)
3249 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.);
3253 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.);
3255 fMassPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"m [GeV/c^{2}]");
3256 for(
Int_t nm=0;nm<5;nm++)
3258 fMassPIDHist[pid][pa][ps]->GetXaxis()->SetBinLabel(
fMassPIDHist[pid][pa][ps]->FindBin(dNominalMass[nm]),Form(
"m_{%s}",sParticleLabel[nm].
Data()));
3262 if(fFillControlHistogramsWithGlobalTrackInfo)
3264 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.);
3268 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.);
3270 fPtPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"p_{T} [GeV/c]");
3271 fPtPIDHist[pid][pa][ps]->SetFillColor(kBlue-10);
3273 if(fFillControlHistogramsWithGlobalTrackInfo)
3275 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.);
3279 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.);
3283 if(fFillControlHistogramsWithGlobalTrackInfo)
3285 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());
3289 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());
3291 fPhiPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"#phi");
3318 fMassK0ShortHist =
new TH1F(
"fMassK0ShortHist",
"aAODv0->MassK0Short()",1000000,0.,100.);
3321 Double_t dMassK0Short = TDatabasePDG::Instance()->GetParticle(310)->Mass();
3326 fMassLambdaHist =
new TH1F(
"fMassLambdaHist",
"aAODv0->MassLambda()",1000000,0.,100.);
3329 Double_t dMassLambda = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
3334 fMassAntiLambdaHist =
new TH1F(
"fMassAntiLambdaHist",
"aAODv0->MassAntiLambda()",1000000,0.,100.);
3337 Double_t dMassAntiLambda = TDatabasePDG::Instance()->GetParticle(-3122)->Mass();
3342 fOpenAngleV0Hist =
new TH1F(
"fOpenAngleV0Hist",
"aAODv0->fOpenAngleV0()",10000,-0.044,TMath::Pi()+0.044);
3347 fRadiusV0Hist =
new TH1F(
"fRadiusV0Hist",
"aAODv0->fRadiusV0()",10000,0.,1000.);
3352 fDcaV0ToPrimVertexHist =
new TH1F(
"fDcaV0ToPrimVertexHist",
"aAODv0->fDcaV0ToPrimVertex()",10000,0.,1000.);
3357 fMomV0XHist =
new TH1F(
"fMomV0XHist",
"aAODv0->fMomV0X() = px(+) + px(-)",10000,-1000.,1000.);
3362 fMomV0YHist =
new TH1F(
"fMomV0YHist",
"aAODv0->fMomV0Y() = py(+) + py(-)",10000,-1000.,1000.);
3367 fMomV0ZHist =
new TH1F(
"fMomV0ZHist",
"aAODv0->fMomV0Z() = pz(+) + pz(-)",10000,-1000.,1000.);
3372 fPtV0Hist =
new TH1F(
"fPtV0Hist",
"pow(aAODv0->fPt2V0(),0.5)",10000,0.,100.);
3377 fPseudoRapV0Hist =
new TH1F(
"fPseudoRapV0Hist",
"aAODv0->PseudoRapV0()",1000,-10.,10.);
3382 fPAHist =
new TH2F(
"fPAHist",
"TBI",100,-2.,2.,100,0.,1.);
3384 fPAHist->GetXaxis()->SetTitle(
"#alpha");
3385 fPAHist->GetYaxis()->SetTitle(
"p_{T}");
3401 fEBEObjectsFlagsPro =
new TProfile(
"fEBEObjectsFlagsPro",
"Flags and settings for event-by-event histograms",1,0,1);
3421 for(
Int_t pid=0;pid<5;pid++)
3423 for(
Int_t pa=0;pa<2;pa++)
3425 for(
Int_t ps=0;ps<2;ps++)
3427 fPIDCA[pid][pa][ps] =
new TClonesArray(
"AliAODTrack",10000);
3433 for(
Int_t pid=0;pid<1;pid++)
3435 fPIDV0sCA[pid] =
new TClonesArray(
"AliAODv0",10000);
3453 fCorrelationFunctionsFlagsPro =
new TProfile(
"fCorrelationFunctionsFlagsPro",
"Flags and settings for correlation functions histograms",8,0,8);
3506 const Int_t nParticleSpecies = 5;
3507 TString sParticles[2*nParticleSpecies] = {
"e^{+}",
"#mu^{+}",
"#pi^{+}",
"K^{+}",
"p^{+}",
"e^{-}",
"#mu^{-}",
"#pi^{-}",
"K^{-}",
"p^{-}"};
3512 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3514 for(
Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
3517 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.);
3543 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3545 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3547 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3550 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.);
3564 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3566 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3568 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3570 for(
Int_t pid4=0;pid4<2*nParticleSpecies;pid4++)
3573 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.);
3600 fBackgroundFlagsPro =
new TProfile(
"fBackgroundFlagsPro",
"Flags and settings for background histograms",4,0,4);
3614 f2pBackgroundFlagsPro =
new TProfile(
"f2pBackgroundFlagsPro",
"Flags and settings for 2p background histograms",1,0,1);
3625 f3pBackgroundFlagsPro =
new TProfile(
"f3pBackgroundFlagsPro",
"Flags and settings for 3p background histograms",1,0,1);
3636 f4pBackgroundFlagsPro =
new TProfile(
"f4pBackgroundFlagsPro",
"Flags and settings for 4p background histograms",1,0,1);
3649 const Int_t nParticleSpecies = 5;
3650 TString sParticles[2*nParticleSpecies] = {
"e^{+}",
"#mu^{+}",
"#pi^{+}",
"K^{+}",
"p^{+}",
"e^{-}",
"#mu^{-}",
"#pi^{-}",
"K^{-}",
"p^{-}"};
3657 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3659 for(
Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
3662 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.);
3676 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3678 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3680 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3683 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.);
3698 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3700 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3702 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3704 for(
Int_t pid4=0;pid4<2*nParticleSpecies;pid4++)
3707 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.);
3709 f4pBackground[pid1][pid2][pid3][pid4]->SetFillColor(kRed-10);
3712 f4pBackground[pid1][pid2][pid3][pid4]->SetYTitle(
"B(Q_{4})");
3724 for(
Int_t me=0;me<3;me++)
3731 for(
Int_t vzr=0;vzr<10;vzr++)
3735 fMixedEvents1[vzr][me] =
new TClonesArray(
"AliAODTrack",10000);
3761 fBuffersFlagsPro =
new TProfile(
"fBuffersFlagsPro",
"Flags and settings for buffers",2,0,2);
3773 if(!fFillBuffers){
return;}
3780 for(
Int_t p=0;p<10000;p++)
3807 fQAFlagsPro =
new TProfile(
"fQAFlagsPro",
"Flags and settings for QA",4,0.,4.);
3821 if(!fFillQA){
return;}
3830 if(fFillQAParticles)
3833 Int_t nFilterBits = 14;
3839 for(
Int_t fb=0;fb<nFilterBits;fb++)
3846 Int_t nIDsMax = 10000;
3847 fQAIDvsFilterBit =
new TH2I(
"fQAIDvsFilterBit",
"fQAIDvsFilterBit",nFilterBits,0,nFilterBits,2*nIDsMax,-nIDsMax,nIDsMax);
3852 for(
Int_t fb=0;fb<nFilterBits;fb++)
3859 TString sBeforeAfter[2] = {
"before",
"after"};
3860 TString sDistributions[10] = {
"p_{T}",
"#eta",
"",
"",
"",
"",
"",
"",
"",
""};
3861 TString sCuts[10] = {
"PID",
"",
"",
"",
"",
"",
"",
"",
"",
""};
3862 for(
Int_t ba=0;ba<2;ba++)
3864 for(
Int_t di=0;di<10;di++)
3866 if(sDistributions[di].EqualTo(
"")){
continue;}
3867 for(
Int_t ci=0;ci<10;ci++)
3869 if(sCuts[ci].EqualTo(
"")){
continue;}
3870 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.);
3893 fGlobalTrackCutsFlagsPro =
new TProfile(
"fGlobalTrackCutsFlagsPro",
"Flags and settings for global track cuts",7,0.,7.);
3939 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAOD(AliAODEvent *aAOD, Int_t index)";
3940 if(!
fGlobalTracksAOD[index]){Fatal(sMethodName.Data(),
"fGlobalTracksAOD[%d]",index);}
3944 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
3946 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
3949 Int_t id = aodTrack->GetID();
3951 if(
id>=0 && !aodTrack->IsGlobalConstrained())
3987 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAODTEST(AliAODEvent *aAOD, Int_t index)";
3992 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
3994 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
3997 Int_t id = aodTrack->GetID();
3999 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4034 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAOD(AliAODEvent *aAOD, Int_t indexX, Int_t indexY)";
4035 if(!
fGlobalTracksAOD1[indexX][indexY]){Fatal(sMethodName.Data(),
"fGlobalTracksAOD[%d][%d]",indexX,indexY);}
4039 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4041 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4044 Int_t id = aodTrack->GetID();
4046 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4061 if(run !=
fRun)
return kFALSE;
4063 else if(orbit !=
fOrbit)
return kFALSE;
4064 else if(period !=
fPeriod)
return kFALSE;
4076 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesGlobalTrackCuts(AliAODTrack *gtrack)";
4077 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
4082 if(gtrack->Pt()<
fPtRange[0])
return kFALSE;
4083 if(gtrack->Pt()>=
fPtRange[1])
return kFALSE;
4084 if(gtrack->Eta()<
fEtaRange[0])
return kFALSE;
4085 if(gtrack->Eta()>=
fEtaRange[1])
return kFALSE;
4086 if(gtrack->Phi()<
fPhiRange[0])
return kFALSE;
4087 if(gtrack->Phi()>=
fPhiRange[1])
return kFALSE;
4104 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonTrackCuts(AliAODTrack *atrack)";
4105 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
4107 if(!atrack->TestFilterBit(128))
return kFALSE;
4110 if(atrack->Pt()<
fPtRange[0])
return kFALSE;
4111 if(atrack->Pt()>=
fPtRange[1])
return kFALSE;
4112 if(atrack->Eta()<
fEtaRange[0])
return kFALSE;
4113 if(atrack->Eta()>=
fEtaRange[1])
return kFALSE;
4114 if(atrack->Phi()<
fPhiRange[0])
return kFALSE;
4115 if(atrack->Phi()>=
fPhiRange[1])
return kFALSE;
4131 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonTrackCuts(AliAODMCParticle *amcparticle)";
4132 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
4134 if(TMath::Abs(amcparticle->Charge())<1.e-10)
return kFALSE;
4135 if(!amcparticle->IsPhysicalPrimary())
return kFALSE;
4136 if(amcparticle->Pt()<0.2)
return kFALSE;
4137 if(amcparticle->Pt()>=5.0)
return kFALSE;
4138 if(amcparticle->Eta()<-0.8)
return kFALSE;
4139 if(amcparticle->Eta()>=0.8)
return kFALSE;
4156 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
4190 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
4228 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
4271 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateCorrelationFunctions(AliAODEvent *aAOD)";
4272 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
4273 if(0 ==
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 == fGlobalTracksAOD[0]->GetSize()");}
4276 Int_t nTracks = aAOD->GetNumberOfTracks();
4277 for(
Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
4279 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack1));
4281 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
4282 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
4283 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
4286 Int_t id1 = atrack1->GetID();
4287 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id1)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id1+1))));
4288 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
4289 Int_t gid1 = (id1>=0 ? id1 : -(id1+1));
4294 for(
Int_t iTrack2=iTrack1+1;iTrack2<nTracks;iTrack2++)
4296 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack2));
4298 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
4299 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
4300 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
4303 Int_t id2 = atrack2->GetID();
4304 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id2)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id2+1))));
4305 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
4306 Int_t gid2 = (id2>=0 ? id2 : -(id2+1));
4307 if(gid1==gid2){
continue;}
4313 AliAODTrack *agtrack1 = NULL;
4314 AliAODTrack *agtrack2 = NULL;
4325 if(!agtrack1){Fatal(sMethodName.Data(),
"!agtrack1");}
4326 if(!agtrack2){Fatal(sMethodName.Data(),
"!agtrack2");}
4332 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE))
4337 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4342 if((
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE)) || (
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,1,kTRUE)))
4349 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
4354 if(
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4359 if((
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE)) || (
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,1,kTRUE)))
4371 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4384 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
4389 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4394 if(
Kaon(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4399 if(
Pion(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4405 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
4410 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4415 if(
Proton(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4420 if(
Pion(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4426 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
4431 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4436 if(
Proton(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4441 if(
Kaon(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4466 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::Calculate3pCorrelationFunctions(AliAODEvent *aAOD)";
4467 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
4468 if(0 ==
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 == fGlobalTracksAOD[0]->GetSize()");}
4471 Int_t nTracks = aAOD->GetNumberOfTracks();
4472 for(
Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
4474 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack1));
4476 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
4477 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
4478 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
4481 Int_t id1 = atrack1->GetID();
4482 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id1)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id1+1))));
4483 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
4484 Int_t gid1 = (id1>=0 ? id1 : -(id1+1));
4489 for(
Int_t iTrack2=0;iTrack2<nTracks;iTrack2++)
4491 if(iTrack2<=iTrack1){
continue;}
4492 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack2));
4494 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
4495 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
4496 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
4499 Int_t id2 = atrack2->GetID();
4500 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id2)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id2+1))));
4501 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
4502 Int_t gid2 = (id2>=0 ? id2 : -(id2+1));
4503 if(gid1==gid2){
continue;}
4508 for(
Int_t iTrack3=0;iTrack3<nTracks;iTrack3++)
4510 if(iTrack3<=iTrack2 || iTrack3<=iTrack1){
continue;}
4511 AliAODTrack *atrack3 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack3));
4513 if(!atrack3){Fatal(sMethodName.Data(),
"!atrack3");}
4514 if(atrack3->GetID()>=0 && atrack3->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack3->GetID()>=0 && atrack3->IsGlobalConstrained()");}
4515 if(atrack3->TestFilterBit(128) && atrack3->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack3->TestFiletrBit(128) && atrack3->IsGlobalConstrained()");}
4518 Int_t id3 = atrack3->GetID();
4519 AliAODTrack *gtrack3 =
dynamic_cast<AliAODTrack*
>(id3>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id3)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id3+1))));
4520 if(!gtrack3){Fatal(sMethodName.Data(),
"!gtrack3");}
4521 Int_t gid3 = (id3>=0 ? id3 : -(id3+1));
4522 if(gid3==gid2 || gid3==gid1){
continue;}
4527 AliAODTrack *agtrack1 = NULL;
4528 AliAODTrack *agtrack2 = NULL;
4529 AliAODTrack *agtrack3 = NULL;
4542 if(!agtrack1){Fatal(sMethodName.Data(),
"!agtrack1");}
4543 if(!agtrack2){Fatal(sMethodName.Data(),
"!agtrack2");}
4544 if(!agtrack3){Fatal(sMethodName.Data(),
"!agtrack3");}
4554 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Pion(gtrack3,1,kTRUE))
4559 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4564 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE) &&
Kaon(gtrack3,1,kTRUE))
4569 if(
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4586 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4591 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4596 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4601 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4618 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Kaon(gtrack3,1,kTRUE))
4623 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4628 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,1,kTRUE))
4633 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4638 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,1,kTRUE))
4643 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4648 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Proton(gtrack3,1,kTRUE))
4653 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Proton(gtrack3,-1,kTRUE))
4658 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Proton(gtrack3,1,kTRUE))
4663 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Proton(gtrack3,-1,kTRUE))
4668 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Proton(gtrack3,1,kTRUE))
4673 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Proton(gtrack3,-1,kTRUE))
4680 if(
Proton(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE) &&
Pion(gtrack3,1,kTRUE))
4685 if(
Proton(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4690 if(
Proton(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE) &&
Kaon(gtrack3,1,kTRUE))
4695 if(
Proton(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4700 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE) &&
Pion(gtrack3,1,kTRUE))
4705 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4710 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,1,kTRUE))
4715 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4736 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::Calculate4pCorrelationFunctions(AliAODEvent *aAOD)";
4737 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
4738 if(0 ==
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 == fGlobalTracksAOD[0]->GetSize()");}
4741 Int_t nTracks = aAOD->GetNumberOfTracks();
4742 for(
Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
4744 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack1));
4746 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
4747 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
4748 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
4751 Int_t id1 = atrack1->GetID();
4752 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id1)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id1+1))));
4753 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
4754 Int_t gid1 = (id1>=0 ? id1 : -(id1+1));
4759 for(
Int_t iTrack2=0;iTrack2<nTracks;iTrack2++)
4761 if(iTrack1==iTrack2){
continue;}
4762 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack2));
4764 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
4765 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
4766 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
4769 Int_t id2 = atrack2->GetID();
4770 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id2)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id2+1))));
4771 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
4772 Int_t gid2 = (id2>=0 ? id2 : -(id2+1));
4773 if(gid1==gid2){
continue;}
4778 for(
Int_t iTrack3=0;iTrack3<nTracks;iTrack3++)
4780 if(iTrack3==iTrack2 || iTrack3==iTrack1){
continue;}
4781 AliAODTrack *atrack3 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack3));
4783 if(!atrack3){Fatal(sMethodName.Data(),
"!atrack3");}
4784 if(atrack3->GetID()>=0 && atrack3->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack3->GetID()>=0 && atrack3->IsGlobalConstrained()");}
4785 if(atrack3->TestFilterBit(128) && atrack3->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack3->TestFiletrBit(128) && atrack3->IsGlobalConstrained()");}
4788 Int_t id3 = atrack3->GetID();
4789 AliAODTrack *gtrack3 =
dynamic_cast<AliAODTrack*
>(id3>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id3)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id3+1))));
4790 if(!gtrack3){Fatal(sMethodName.Data(),
"!gtrack3");}
4791 Int_t gid3 = (id3>=0 ? id3 : -(id3+1));
4792 if(gid3==gid2 || gid3==gid1){
continue;}
4797 for(
Int_t iTrack4=0;iTrack4<nTracks;iTrack4++)
4799 if(iTrack4==iTrack3 || iTrack4==iTrack2 || iTrack4==iTrack1){
continue;}
4800 AliAODTrack *atrack4 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack4));
4802 if(!atrack4){Fatal(sMethodName.Data(),
"!atrack4");}
4803 if(atrack4->GetID()>=0 && atrack4->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack4->GetID()>=0 && atrack4->IsGlobalConstrained()");}
4804 if(atrack4->TestFilterBit(128) && atrack4->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack4->TestFiletrBit(128) && atrack4->IsGlobalConstrained()");}
4807 Int_t id4 = atrack4->GetID();
4808 AliAODTrack *gtrack4 =
dynamic_cast<AliAODTrack*
>(id4>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id4)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id4+1))));
4809 if(!gtrack4){Fatal(sMethodName.Data(),
"!gtrack4");}
4810 Int_t gid4 = (id4>=0 ? id4 : -(id4+1));
4811 if(gid4==gid3 || gid4==gid2 || gid4==gid1){
continue;}
4816 AliAODTrack *agtrack1 = NULL;
4817 AliAODTrack *agtrack2 = NULL;
4818 AliAODTrack *agtrack3 = NULL;
4819 AliAODTrack *agtrack4 = NULL;
4834 if(!agtrack1){Fatal(sMethodName.Data(),
"!agtrack1");}
4835 if(!agtrack2){Fatal(sMethodName.Data(),
"!agtrack2");}
4836 if(!agtrack3){Fatal(sMethodName.Data(),
"!agtrack3");}
4837 if(!agtrack4){Fatal(sMethodName.Data(),
"!agtrack4");}
4842 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Pion(gtrack3,1,kTRUE) &&
Pion(gtrack4,1,kTRUE))
4848 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Pion(gtrack3,-1,kTRUE) &&
Pion(gtrack4,-1,kTRUE))
4873 TString pattern =
".11.13.211.321.2212.";
4876 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateCorrelationFunctions(AliMCEvent *aMC)";
4877 if(0 == aMC->GetNumberOfTracks()){
return;}
4880 Int_t nTracks = aMC->GetNumberOfTracks();
4881 for(
Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
4883 AliAODMCParticle *amcparticle1 =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack1));
4884 if(!amcparticle1){Fatal(sMethodName.Data(),
"!amcparticle1");}
4889 for(
Int_t iTrack2=iTrack1+1;iTrack2<nTracks;iTrack2++)
4891 AliAODMCParticle *amcparticle2 =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack2));
4892 if(!amcparticle2){Fatal(sMethodName.Data(),
"!amcparticle2");}
4898 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle1->GetPdgCode()))) && pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle2->GetPdgCode()))))){
continue;}
4913 if(-44 == index1){Fatal(sMethodName.Data(),
"-44 == index1");}
4914 if(-44 == index2){Fatal(sMethodName.Data(),
"-44 == index2");}
4938 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateCorrelationFunctionsTEST(AliAODEvent *aAOD)";
4939 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
4940 if(0 ==
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 == fGlobalTracksAOD[0]->GetSize()");}