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;
2118 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
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;
2189 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
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;
2259 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
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++)
2639 const Int_t nTestsMax = 10;
2641 for(
Int_t t=0;t<nTestsMax;t++)
2647 for(
Int_t t=0;t<nTestsMax;t++)
2649 for(
Int_t q=0;q<2;q++)
2651 for(
Int_t tt=0;tt<7;tt++)
2653 for(
Int_t d=0;d<10;d++)
2661 for(
Int_t me=0;me<3;me++)
2667 for(
Int_t t=0;t<2;t++)
2680 for(
Int_t t=0;t<5;t++)
2685 for(
Int_t me=0;me<3;me++)
2704 const Int_t nTests = 10;
2713 for(
Int_t t=0;t<nTests;t++)
2720 const Int_t nCumulants = 4;
2721 const Int_t n3pCumulantTerms = 7;
2722 const Int_t nQs = 2;
2723 const Int_t n2pCumulantTerms = 3;
2724 TString s2pCumulantTerms[n2pCumulantTerms] = {
"#LTX_{1}#GT",
"#LTX_{2}#GT",
"#LTX_{1}X_{2}#GT"};
2725 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"};
2726 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}"};
2727 TString sXYZ[3] = {
"x",
"y",
"z"};
2728 TString sQs[nQs] = {
"Q_{2}",
"Q_{3}"};
2729 for(
Int_t t=0;t<nTests;t++)
2735 for(
Int_t ct=0;ct<n2pCumulantTerms;ct++)
2737 for(
Int_t xyz=0;xyz<3;xyz++)
2751 for(
Int_t xyz=0;xyz<3;xyz++)
2764 for(
Int_t ct=0;ct<n3pCumulantTerms;ct++)
2766 for(
Int_t xyz=0;xyz<3;xyz++)
2780 for(
Int_t ct=0;ct<nCumulants;ct++)
2782 for(
Int_t xyz=0;xyz<3;xyz++)
2831 const Int_t nTests = 10;
2832 fBackgroundTESTFlagsPro =
new TProfile(
"fBackgroundTESTFlagsPro",
"Flags and settings for test background",nTests,0,nTests);
2840 for(
Int_t t=0;t<nTests;t++)
2847 const Int_t nCumulants = 4;
2848 const Int_t n3pCumulantTerms = 7;
2849 const Int_t nQs = 2;
2850 const Int_t n2pCumulantTerms = 3;
2851 TString s2pCumulantTerms[n2pCumulantTerms] = {
"#LTX_{1}#GT",
"#LTX_{2}#GT",
"#LTX_{1}X_{2}#GT"};
2852 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"};
2853 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}"};
2854 TString sXYZ[3] = {
"x",
"y",
"z"};
2855 TString sQs[nQs] = {
"Q_{2}",
"Q_{3}"};
2856 for(
Int_t t=0;t<nTests;t++)
2862 for(
Int_t ct=0;ct<n2pCumulantTerms;ct++)
2864 for(
Int_t xyz=0;xyz<3;xyz++)
2872 fBackgroundTEST[t][0][ct][xyz]->GetYaxis()->SetTitle(Form(
"%s_{%s}",s2pCumulantTerms[ct].
Data(),sXYZ[xyz].
Data()));
2878 for(
Int_t xyz=0;xyz<3;xyz++)
2891 for(
Int_t ct=0;ct<n3pCumulantTerms;ct++)
2893 for(
Int_t xyz=0;xyz<3;xyz++)
2901 fBackgroundTEST[t][1][ct][xyz]->GetYaxis()->SetTitle(Form(
"%s_{%s}",s3pCumulantTerms[ct].
Data(),sXYZ[xyz].
Data()));
2907 for(
Int_t ct=0;ct<nCumulants;ct++)
2909 for(
Int_t xyz=0;xyz<3;xyz++)
2927 for(
Int_t me=0;me<3;me++)
2964 fHybridApproachFlagsPro =
new TProfile(
"fHybridApproachFlagsPro",
"Flags and settings for 'hybrid approach'",1,0,1);
2977 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})"};
2978 for(
Int_t t=0;t<5;t++)
2992 for(
Int_t me=0;me<3;me++)
3019 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::BookAndNestAllLists()";
3020 if(!
fHistList){Fatal(sMethodName.Data(),
"fHistList is NULL");}
3060 for(
Int_t cfs=0;cfs<3;cfs++)
3074 for(
Int_t bs=0;bs<3;bs++)
3119 const Int_t nTests = 10;
3120 for(
Int_t t=0;t<nTests;t++)
3134 for(
Int_t t=0;t<nTests;t++)
3198 TString sParticleLabel[5] = {
"e",
"#mu",
"#pi",
"K",
"p"};
3199 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()};
3216 fGetNumberOfTracksHist =
new TH1I(
"fGetNumberOfTracksHist",
"aAOD->GetNumberOfTracks() (Remark: Not all of tracks are unique.)",10000,0,10000);
3224 fGetNumberOfV0sHist =
new TH1I(
"fGetNumberOfV0sHist",
"aAOD->GetNumberOfV0s() (Remark: Some V0s share the daughter.)",10000,0,10000);
3241 TString sxyz[3] = {
"X",
"Y",
"Z"};
3242 for(
Int_t xyz=0;xyz<3;xyz++)
3244 fVertexXYZ[xyz] =
new TH1F(Form(
"fVertex%s",sxyz[xyz].
Data()),Form(
"avtz->Get%s()",sxyz[xyz].
Data()),100000,-50.,50);
3252 fGetChi2perNDFHist =
new TH1F(
"fGetChi2perNDFHist",
"avtx->GetChi2perNDF()",5000,0.,50.);
3301 fdEdxVsPtHist =
new TH2F(
"fdEdxVsPtHist",
"atrack->GetTPCmomentum(),atrack->GetTPCsignal()",1000,0.,20.,1000,-500.,500.);
3304 fPtHist =
new TH1F(
"fPtHist",
"atrack->Pt()",1000,0.,20.);
3306 fPtHist->SetFillColor(kBlue-10);
3309 fEtaHist =
new TH1F(
"fEtaHist",
"atrack->Eta()",200,-2.,2.);
3314 fPhiHist =
new TH1F(
"fPhiHist",
"atrack->Phi()",360,0.,TMath::TwoPi());
3320 fMassHist =
new TH1F(
"fMassHist",
"atrack->M()",10000,0.,10.);
3324 for(
Int_t nm=0;nm<5;nm++)
3326 fMassHist->GetXaxis()->SetBinLabel(
fMassHist->FindBin(dNominalMass[nm]),Form(
"m_{%s}",sParticleLabel[nm].
Data()));
3329 fGetFilterMap =
new TH1I(
"fGetFilterMap",
"atrack->fGetFilterMap()",10000,0,10000);
3334 fGetPdgCode =
new TH1I(
"fGetPdgCode",
"atrack->fGetPdgCode()",20000,-10000,10000);
3380 fdEdxVsPtFTSFHist =
new TH2F(
"fdEdxVsPtFTSFHist",Form(
"atrack->GetTPCmomentum(),atrack->GetTPCsignal(), fb = %d",
fFilterBitFTSF),1000,0.,20.,1000,-500.,500.);
3403 for(
Int_t nm=0;nm<5;nm++)
3438 if(fUseDefaultInclusiveSigmaCuts)
3444 const Int_t nPidFunctions = 5;
3445 TString sPidFunctions[nPidFunctions] = {
"Electron(...)",
"Muon(...)",
"Pion(...)",
"Kaon(...)",
"Proton(...)"};
3446 const Int_t nParticleSpecies = 5;
3447 TString sParticleSpecies[nParticleSpecies] = {
"e",
"#mu",
"#pi",
"K",
"p"};
3448 fInclusiveSigmaCutsPro =
new TProfile(
"fInclusiveSigmaCutsPro",
"Inclusive sigma cuts",nPidFunctions,0.,nPidFunctions);
3450 for(
Int_t pidFunction=0;pidFunction<5;pidFunction++)
3465 if(fUseDefaultExclusiveSigmaCuts)
3477 fExclusiveSigmaCutsPro =
new TProfile2D(
"fExclusiveSigmaCutsPro",
"Exclusive sigma cuts",nPidFunctions,0.,nPidFunctions,nParticleSpecies,0.,nParticleSpecies);
3488 for(
Int_t pidFunction=0;pidFunction<nPidFunctions;pidFunction++)
3491 for(
Int_t particleSpecies=0;particleSpecies<nParticleSpecies;particleSpecies++)
3493 if(0==pidFunction){
fExclusiveSigmaCutsPro->GetYaxis()->SetBinLabel(particleSpecies+1,sParticleSpecies[particleSpecies].
Data());}
3499 for(
Int_t pid=0;pid<5;pid++)
3501 for(
Int_t pa=0;pa<2;pa++)
3503 for(
Int_t ps=0;ps<2;ps++)
3505 if(fFillControlHistogramsWithGlobalTrackInfo)
3507 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.);
3511 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.);
3513 fMassPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"m [GeV/c^{2}]");
3514 for(
Int_t nm=0;nm<5;nm++)
3516 fMassPIDHist[pid][pa][ps]->GetXaxis()->SetBinLabel(
fMassPIDHist[pid][pa][ps]->FindBin(dNominalMass[nm]),Form(
"m_{%s}",sParticleLabel[nm].
Data()));
3520 if(fFillControlHistogramsWithGlobalTrackInfo)
3522 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.);
3523 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.);
3524 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.);
3525 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.);
3529 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.);
3530 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.);
3531 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.);
3532 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.);
3534 fPtPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"p_{T} [GeV/c]");
3535 fPtPIDHist[pid][pa][ps]->SetFillColor(kBlue-10);
3537 fPPIDHist[pid][pa][ps][0]->GetXaxis()->SetTitle(
"p_{x} [GeV/c]");
3538 fPPIDHist[pid][pa][ps][0]->SetFillColor(kBlue-10);
3540 fPPIDHist[pid][pa][ps][1]->GetXaxis()->SetTitle(
"p_{y} [GeV/c]");
3541 fPPIDHist[pid][pa][ps][1]->SetFillColor(kBlue-10);
3543 fPPIDHist[pid][pa][ps][2]->GetXaxis()->SetTitle(
"p_{z} [GeV/c]");
3544 fPPIDHist[pid][pa][ps][2]->SetFillColor(kBlue-10);
3547 if(fFillControlHistogramsWithGlobalTrackInfo)
3549 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.);
3553 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.);
3557 if(fFillControlHistogramsWithGlobalTrackInfo)
3559 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());
3563 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());
3565 fPhiPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"#phi");
3592 fMassK0ShortHist =
new TH1F(
"fMassK0ShortHist",
"aAODv0->MassK0Short()",1000000,0.,100.);
3595 Double_t dMassK0Short = TDatabasePDG::Instance()->GetParticle(310)->Mass();
3600 fMassLambdaHist =
new TH1F(
"fMassLambdaHist",
"aAODv0->MassLambda()",1000000,0.,100.);
3603 Double_t dMassLambda = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
3608 fMassAntiLambdaHist =
new TH1F(
"fMassAntiLambdaHist",
"aAODv0->MassAntiLambda()",1000000,0.,100.);
3611 Double_t dMassAntiLambda = TDatabasePDG::Instance()->GetParticle(-3122)->Mass();
3616 fOpenAngleV0Hist =
new TH1F(
"fOpenAngleV0Hist",
"aAODv0->fOpenAngleV0()",10000,-0.044,TMath::Pi()+0.044);
3621 fRadiusV0Hist =
new TH1F(
"fRadiusV0Hist",
"aAODv0->fRadiusV0()",10000,0.,1000.);
3626 fDcaV0ToPrimVertexHist =
new TH1F(
"fDcaV0ToPrimVertexHist",
"aAODv0->fDcaV0ToPrimVertex()",10000,0.,1000.);
3631 fMomV0XHist =
new TH1F(
"fMomV0XHist",
"aAODv0->fMomV0X() = px(+) + px(-)",10000,-1000.,1000.);
3636 fMomV0YHist =
new TH1F(
"fMomV0YHist",
"aAODv0->fMomV0Y() = py(+) + py(-)",10000,-1000.,1000.);
3641 fMomV0ZHist =
new TH1F(
"fMomV0ZHist",
"aAODv0->fMomV0Z() = pz(+) + pz(-)",10000,-1000.,1000.);
3646 fPtV0Hist =
new TH1F(
"fPtV0Hist",
"pow(aAODv0->fPt2V0(),0.5)",10000,0.,100.);
3651 fPseudoRapV0Hist =
new TH1F(
"fPseudoRapV0Hist",
"aAODv0->PseudoRapV0()",1000,-10.,10.);
3656 fPAHist =
new TH2F(
"fPAHist",
"TBI",100,-2.,2.,100,0.,1.);
3658 fPAHist->GetXaxis()->SetTitle(
"#alpha");
3659 fPAHist->GetYaxis()->SetTitle(
"p_{T}");
3675 fEBEObjectsFlagsPro =
new TProfile(
"fEBEObjectsFlagsPro",
"Flags and settings for event-by-event histograms",1,0,1);
3695 for(
Int_t pid=0;pid<5;pid++)
3697 for(
Int_t pa=0;pa<2;pa++)
3699 for(
Int_t ps=0;ps<2;ps++)
3701 fPIDCA[pid][pa][ps] =
new TClonesArray(
"AliAODTrack",10000);
3707 for(
Int_t pid=0;pid<1;pid++)
3709 fPIDV0sCA[pid] =
new TClonesArray(
"AliAODv0",10000);
3727 fCorrelationFunctionsFlagsPro =
new TProfile(
"fCorrelationFunctionsFlagsPro",
"Flags and settings for correlation functions histograms",8,0,8);
3780 const Int_t nParticleSpecies = 5;
3781 TString sParticles[2*nParticleSpecies] = {
"e^{+}",
"#mu^{+}",
"#pi^{+}",
"K^{+}",
"p^{+}",
"e^{-}",
"#mu^{-}",
"#pi^{-}",
"K^{-}",
"p^{-}"};
3786 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3788 for(
Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
3791 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.);
3817 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3819 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3821 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3824 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.);
3838 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3840 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3842 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3844 for(
Int_t pid4=0;pid4<2*nParticleSpecies;pid4++)
3847 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.);
3874 fBackgroundFlagsPro =
new TProfile(
"fBackgroundFlagsPro",
"Flags and settings for background histograms",4,0,4);
3888 f2pBackgroundFlagsPro =
new TProfile(
"f2pBackgroundFlagsPro",
"Flags and settings for 2p background histograms",1,0,1);
3899 f3pBackgroundFlagsPro =
new TProfile(
"f3pBackgroundFlagsPro",
"Flags and settings for 3p background histograms",1,0,1);
3910 f4pBackgroundFlagsPro =
new TProfile(
"f4pBackgroundFlagsPro",
"Flags and settings for 4p background histograms",1,0,1);
3923 const Int_t nParticleSpecies = 5;
3924 TString sParticles[2*nParticleSpecies] = {
"e^{+}",
"#mu^{+}",
"#pi^{+}",
"K^{+}",
"p^{+}",
"e^{-}",
"#mu^{-}",
"#pi^{-}",
"K^{-}",
"p^{-}"};
3931 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3933 for(
Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
3936 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.);
3950 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3952 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3954 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3957 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.);
3972 for(
Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3974 for(
Int_t pid2=0;pid2<2*nParticleSpecies;pid2++)
3976 for(
Int_t pid3=0;pid3<2*nParticleSpecies;pid3++)
3978 for(
Int_t pid4=0;pid4<2*nParticleSpecies;pid4++)
3981 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.);
3983 f4pBackground[pid1][pid2][pid3][pid4]->SetFillColor(kRed-10);
3986 f4pBackground[pid1][pid2][pid3][pid4]->SetYTitle(
"B(Q_{4})");
3998 for(
Int_t me=0;me<3;me++)
4005 for(
Int_t vzr=0;vzr<10;vzr++)
4009 fMixedEvents1[vzr][me] =
new TClonesArray(
"AliAODTrack",10000);
4035 fBuffersFlagsPro =
new TProfile(
"fBuffersFlagsPro",
"Flags and settings for buffers",2,0,2);
4047 if(!fFillBuffers){
return;}
4054 for(
Int_t p=0;p<10000;p++)
4081 fQAFlagsPro =
new TProfile(
"fQAFlagsPro",
"Flags and settings for QA",4,0.,4.);
4095 if(!fFillQA){
return;}
4104 if(fFillQAParticles)
4107 Int_t nFilterBits = 14;
4113 for(
Int_t fb=0;fb<nFilterBits;fb++)
4120 Int_t nIDsMax = 10000;
4121 fQAIDvsFilterBit =
new TH2I(
"fQAIDvsFilterBit",
"fQAIDvsFilterBit",nFilterBits,0,nFilterBits,2*nIDsMax,-nIDsMax,nIDsMax);
4126 for(
Int_t fb=0;fb<nFilterBits;fb++)
4133 TString sBeforeAfter[2] = {
"before",
"after"};
4134 TString sDistributions[10] = {
"p_{T}",
"#eta",
"",
"",
"",
"",
"",
"",
"",
""};
4135 TString sCuts[10] = {
"PID",
"",
"",
"",
"",
"",
"",
"",
"",
""};
4136 for(
Int_t ba=0;ba<2;ba++)
4138 for(
Int_t di=0;di<10;di++)
4140 if(sDistributions[di].EqualTo(
"")){
continue;}
4141 for(
Int_t ci=0;ci<10;ci++)
4143 if(sCuts[ci].EqualTo(
"")){
continue;}
4144 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.);
4167 fGlobalTrackCutsFlagsPro =
new TProfile(
"fGlobalTrackCutsFlagsPro",
"Flags and settings for global track cuts",7,0.,7.);
4213 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAOD(AliAODEvent *aAOD, Int_t index)";
4214 if(!
fGlobalTracksAOD[index]){Fatal(sMethodName.Data(),
"fGlobalTracksAOD[%d]",index);}
4218 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4220 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4223 Int_t id = aodTrack->GetID();
4225 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4261 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAODTEST(AliAODEvent *aAOD, Int_t index)";
4266 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4268 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4271 Int_t id = aodTrack->GetID();
4273 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4309 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAODHA(AliAODEvent *aAOD, Int_t index)";
4310 if(!
fGlobalTracksAODHA[index]){Fatal(sMethodName.Data(),
"fGlobalTracksAODHA[%d]",index);}
4314 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4316 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4319 Int_t id = aodTrack->GetID();
4321 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4356 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GlobalTracksAOD(AliAODEvent *aAOD, Int_t indexX, Int_t indexY)";
4357 if(!
fGlobalTracksAOD1[indexX][indexY]){Fatal(sMethodName.Data(),
"fGlobalTracksAOD[%d][%d]",indexX,indexY);}
4361 for(
Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
4363 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
4366 Int_t id = aodTrack->GetID();
4368 if(
id>=0 && !aodTrack->IsGlobalConstrained())
4383 if(run !=
fRun)
return kFALSE;
4385 else if(orbit !=
fOrbit)
return kFALSE;
4386 else if(period !=
fPeriod)
return kFALSE;
4398 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesGlobalTrackCuts(AliAODTrack *gtrack)";
4399 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
4404 if(gtrack->Pt()<
fPtRange[0])
return kFALSE;
4405 if(gtrack->Pt()>=
fPtRange[1])
return kFALSE;
4406 if(gtrack->Eta()<
fEtaRange[0])
return kFALSE;
4407 if(gtrack->Eta()>=
fEtaRange[1])
return kFALSE;
4408 if(gtrack->Phi()<
fPhiRange[0])
return kFALSE;
4409 if(gtrack->Phi()>=
fPhiRange[1])
return kFALSE;
4426 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonTrackCuts(AliAODTrack *atrack)";
4427 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
4429 if(!atrack->TestFilterBit(128))
return kFALSE;
4432 if(atrack->Pt()<
fPtRange[0])
return kFALSE;
4433 if(atrack->Pt()>=
fPtRange[1])
return kFALSE;
4434 if(atrack->Eta()<
fEtaRange[0])
return kFALSE;
4435 if(atrack->Eta()>=
fEtaRange[1])
return kFALSE;
4436 if(atrack->Phi()<
fPhiRange[0])
return kFALSE;
4437 if(atrack->Phi()>=
fPhiRange[1])
return kFALSE;
4453 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonTrackCuts(AliAODMCParticle *amcparticle)";
4454 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
4456 if(TMath::Abs(amcparticle->Charge())<1.e-10)
return kFALSE;
4457 if(!amcparticle->IsPhysicalPrimary())
return kFALSE;
4458 if(amcparticle->Pt()<0.2)
return kFALSE;
4459 if(amcparticle->Pt()>=5.0)
return kFALSE;
4460 if(amcparticle->Eta()<-0.8)
return kFALSE;
4461 if(amcparticle->Eta()>=0.8)
return kFALSE;
4478 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
4512 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
4550 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
4593 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateCorrelationFunctions(AliAODEvent *aAOD)";
4594 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
4595 if(0 ==
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 == fGlobalTracksAOD[0]->GetSize()");}
4598 Int_t nTracks = aAOD->GetNumberOfTracks();
4599 for(
Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
4601 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack1));
4603 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
4604 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
4605 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
4608 Int_t id1 = atrack1->GetID();
4609 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id1)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id1+1))));
4610 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
4611 Int_t gid1 = (id1>=0 ? id1 : -(id1+1));
4616 for(
Int_t iTrack2=iTrack1+1;iTrack2<nTracks;iTrack2++)
4618 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack2));
4620 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
4621 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
4622 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
4625 Int_t id2 = atrack2->GetID();
4626 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id2)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id2+1))));
4627 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
4628 Int_t gid2 = (id2>=0 ? id2 : -(id2+1));
4629 if(gid1==gid2){
continue;}
4635 AliAODTrack *agtrack1 = NULL;
4636 AliAODTrack *agtrack2 = NULL;
4647 if(!agtrack1){Fatal(sMethodName.Data(),
"!agtrack1");}
4648 if(!agtrack2){Fatal(sMethodName.Data(),
"!agtrack2");}
4654 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE))
4659 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4664 if((
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE)) || (
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,1,kTRUE)))
4671 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
4676 if(
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4681 if((
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE)) || (
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,1,kTRUE)))
4693 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4706 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
4711 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4716 if(
Kaon(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4721 if(
Pion(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4727 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
4732 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4737 if(
Proton(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
4742 if(
Pion(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4748 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
4753 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4758 if(
Proton(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
4763 if(
Kaon(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
4788 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::Calculate3pCorrelationFunctions(AliAODEvent *aAOD)";
4789 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
4790 if(0 ==
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 == fGlobalTracksAOD[0]->GetSize()");}
4793 Int_t nTracks = aAOD->GetNumberOfTracks();
4794 for(
Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
4796 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack1));
4798 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
4799 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
4800 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
4803 Int_t id1 = atrack1->GetID();
4804 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id1)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id1+1))));
4805 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
4806 Int_t gid1 = (id1>=0 ? id1 : -(id1+1));
4811 for(
Int_t iTrack2=0;iTrack2<nTracks;iTrack2++)
4813 if(iTrack2<=iTrack1){
continue;}
4814 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack2));
4816 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
4817 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
4818 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
4821 Int_t id2 = atrack2->GetID();
4822 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id2)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id2+1))));
4823 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
4824 Int_t gid2 = (id2>=0 ? id2 : -(id2+1));
4825 if(gid1==gid2){
continue;}
4830 for(
Int_t iTrack3=0;iTrack3<nTracks;iTrack3++)
4832 if(iTrack3<=iTrack2 || iTrack3<=iTrack1){
continue;}
4833 AliAODTrack *atrack3 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack3));
4835 if(!atrack3){Fatal(sMethodName.Data(),
"!atrack3");}
4836 if(atrack3->GetID()>=0 && atrack3->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack3->GetID()>=0 && atrack3->IsGlobalConstrained()");}
4837 if(atrack3->TestFilterBit(128) && atrack3->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack3->TestFiletrBit(128) && atrack3->IsGlobalConstrained()");}
4840 Int_t id3 = atrack3->GetID();
4841 AliAODTrack *gtrack3 =
dynamic_cast<AliAODTrack*
>(id3>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id3)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id3+1))));
4842 if(!gtrack3){Fatal(sMethodName.Data(),
"!gtrack3");}
4843 Int_t gid3 = (id3>=0 ? id3 : -(id3+1));
4844 if(gid3==gid2 || gid3==gid1){
continue;}
4849 AliAODTrack *agtrack1 = NULL;
4850 AliAODTrack *agtrack2 = NULL;
4851 AliAODTrack *agtrack3 = NULL;
4864 if(!agtrack1){Fatal(sMethodName.Data(),
"!agtrack1");}
4865 if(!agtrack2){Fatal(sMethodName.Data(),
"!agtrack2");}
4866 if(!agtrack3){Fatal(sMethodName.Data(),
"!agtrack3");}
4876 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Pion(gtrack3,1,kTRUE))
4881 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4886 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE) &&
Kaon(gtrack3,1,kTRUE))
4891 if(
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4908 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4913 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE) &&
Pion(gtrack3,-1,kTRUE))
4918 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))
4923 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE) &&
Kaon(gtrack3,-1,kTRUE))