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"
49 AliAnalysisTaskSE(name),
53 fMaxNoGlobalTracksAOD(3),
54 fProcessBothKineAndReco(kFALSE),
55 fProcessOnlyKine(kFALSE),
56 fRejectFakeTracks(kTRUE),
59 fControlHistogramsList(NULL),
60 fControlHistogramsFlagsPro(NULL),
61 fFillControlHistograms(kTRUE),
62 fControlHistogramsEventList(NULL),
63 fControlHistogramsEventFlagsPro(NULL),
64 fFillControlHistogramsEvent(kFALSE),
65 fGetNumberOfTracksHist(NULL),
66 fGetNumberOfGlobalTracksHist(NULL),
67 fGetNumberOfV0sHist(NULL),
68 fGetNumberOfCascadesHist(NULL),
69 fGetMagneticFieldHist(NULL),
70 fGetEventTypeHist(NULL),
71 fGetCentralityHist(NULL),
72 fGetNContributorsHist(NULL),
73 fGetChi2perNDFHist(NULL),
74 fGetNDaughtersHist(NULL),
75 fControlHistogramsNonIdentifiedParticlesList(NULL),
76 fControlHistogramsNonIdentifiedParticlesFlagsPro(NULL),
77 fFillControlHistogramsNonIdentifiedParticles(kFALSE),
79 fGetTPCNclsHist(NULL),
80 fGetTPCsignalNHist(NULL),
81 fGetITSNclsHist(NULL),
89 fControlHistogramsIdentifiedParticlesList(NULL),
90 fControlHistogramsIdentifiedParticlesFlagsPro(NULL),
91 fFillControlHistogramsIdentifiedParticles(kFALSE),
92 fControlHistogramsV0sList(NULL),
93 fControlHistogramsV0sFlagsPro(NULL),
94 fFillControlHistogramsV0s(kFALSE),
95 fGetNProngsHist(NULL),
96 fMassK0ShortHist(NULL),
97 fMassLambdaHist(NULL),
98 fMassAntiLambdaHist(NULL),
99 fOpenAngleV0Hist(NULL),
101 fDcaV0ToPrimVertexHist(NULL),
106 fPseudoRapV0Hist(NULL),
109 fEBEHistogramsList(NULL),
110 fEBEObjectsFlagsPro(NULL),
112 fUniqueIDHistEBE(NULL),
114 fCorrelationFunctionsList(NULL),
115 fCorrelationFunctionsFlagsPro(NULL),
116 fFillCorrelationFunctions(kFALSE),
117 fNormalizeCorrelationFunctions(kFALSE),
118 fCorrelationFunctionsIndices(NULL),
120 fBackgroundList(NULL),
121 fBackgroundFlagsPro(NULL),
122 fEstimateBackground(kFALSE),
124 fOnlineMonitoring(kFALSE),
125 fUpdateOutputFile(kFALSE),
126 fUpdateFrequency(-44),
127 fUpdateWhichOutputFile(NULL),
128 fMaxNumberOfEvents(-44),
130 fDoSomeDebugging(kFALSE),
131 fWaitForSpecifiedEvent(kFALSE),
139 AliDebug(2,
"AliAnalysisTaskMultiparticleFemtoscopy::AliAnalysisTaskMultiparticleFemtoscopy(const char *name, Bool_t useParticleWeights)");
142 fHistList =
new TList();
143 fHistList->SetName(
"GMlist");
144 fHistList->SetOwner(kTRUE);
147 this->InitializeArrays();
148 this->InitializeArraysForControlHistograms();
149 this->InitializeArraysForEBEObjects();
150 this->InitializeArraysForCorrelationFunctions();
151 this->InitializeArraysForBackground();
164 DefineOutput(1, TList::Class());
166 if(useParticleWeights)
180 fMaxNoGlobalTracksAOD(3),
181 fProcessBothKineAndReco(kFALSE),
182 fProcessOnlyKine(kFALSE),
183 fRejectFakeTracks(kTRUE),
186 fControlHistogramsList(NULL),
187 fControlHistogramsFlagsPro(NULL),
188 fFillControlHistograms(kTRUE),
189 fControlHistogramsEventList(NULL),
190 fControlHistogramsEventFlagsPro(NULL),
191 fFillControlHistogramsEvent(kFALSE),
192 fGetNumberOfTracksHist(NULL),
193 fGetNumberOfGlobalTracksHist(NULL),
194 fGetNumberOfV0sHist(NULL),
195 fGetNumberOfCascadesHist(NULL),
196 fGetMagneticFieldHist(NULL),
197 fGetEventTypeHist(NULL),
198 fGetCentralityHist(NULL),
199 fGetNContributorsHist(NULL),
200 fGetChi2perNDFHist(NULL),
201 fGetNDaughtersHist(NULL),
202 fControlHistogramsNonIdentifiedParticlesList(NULL),
203 fControlHistogramsNonIdentifiedParticlesFlagsPro(NULL),
204 fFillControlHistogramsNonIdentifiedParticles(kFALSE),
206 fGetTPCNclsHist(NULL),
207 fGetTPCsignalNHist(NULL),
208 fGetITSNclsHist(NULL),
216 fControlHistogramsIdentifiedParticlesList(NULL),
217 fControlHistogramsIdentifiedParticlesFlagsPro(NULL),
218 fFillControlHistogramsIdentifiedParticles(kFALSE),
219 fControlHistogramsV0sList(NULL),
220 fControlHistogramsV0sFlagsPro(NULL),
221 fFillControlHistogramsV0s(kFALSE),
222 fGetNProngsHist(NULL),
223 fMassK0ShortHist(NULL),
224 fMassLambdaHist(NULL),
225 fMassAntiLambdaHist(NULL),
226 fOpenAngleV0Hist(NULL),
228 fDcaV0ToPrimVertexHist(NULL),
233 fPseudoRapV0Hist(NULL),
236 fEBEHistogramsList(NULL),
237 fEBEObjectsFlagsPro(NULL),
239 fUniqueIDHistEBE(NULL),
241 fCorrelationFunctionsList(NULL),
242 fCorrelationFunctionsFlagsPro(NULL),
243 fFillCorrelationFunctions(kFALSE),
244 fNormalizeCorrelationFunctions(kFALSE),
245 fCorrelationFunctionsIndices(NULL),
247 fBackgroundList(NULL),
248 fBackgroundFlagsPro(NULL),
249 fEstimateBackground(kFALSE),
251 fOnlineMonitoring(kFALSE),
252 fUpdateOutputFile(kFALSE),
253 fUpdateFrequency(-44),
254 fUpdateWhichOutputFile(NULL),
255 fMaxNumberOfEvents(-44),
257 fDoSomeDebugging(kFALSE),
258 fWaitForSpecifiedEvent(kFALSE),
266 AliDebug(2,
"AliAnalysisTaskMultiparticleFemtoscopy::AliAnalysisTaskMultiparticleFemtoscopy()");
303 Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
304 TH1::AddDirectory(kFALSE);
320 TH1::AddDirectory(oldHistAddStatus);
340 AliMCEvent *aMC = MCEvent();
341 AliESDEvent *aESD =
dynamic_cast<AliESDEvent*
>(InputEvent());
342 AliAODEvent *aAOD =
dynamic_cast<AliAODEvent*
>(InputEvent());
345 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::UserExec(Option_t *)";
350 else{Fatal(sMethodName.Data(),
"Neither MC, nor ESD, nor AOD, nor MC_AOD. Okay...");}
360 else if(aESD){
ESD(aESD);}
361 else if(aAOD){
AOD(aAOD);}
362 else{Fatal(sMethodName.Data(),
"Neither MC, nor ESD, nor AOD. Okay...");}
399 TFile *f =
new TFile(
"AnalysisResults.root",
"RECREATE");
412 for(Int_t pid1=0;pid1<10;pid1++)
414 for(Int_t pid2=0;pid2<10;pid2++)
441 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
442 AliESDEvent *aESD =
dynamic_cast<AliESDEvent*
>(ave);
443 AliAODEvent *aAOD =
dynamic_cast<AliAODEvent*
>(ave);
463 if(aAOD->GetCentrality())
468 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
486 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsParticle(AliVEvent *ave)";
489 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
490 AliESDEvent *aESD =
dynamic_cast<AliESDEvent*
>(ave);
491 AliAODEvent *aAOD =
dynamic_cast<AliAODEvent*
>(ave);
496 for(Int_t iTrack=0;iTrack<aMC->GetNumberOfTracks();iTrack++)
504 AliAODMCParticle *amcparticle = (AliAODMCParticle*)aMC->GetTrack(iTrack);
507 if(!amcparticle){Fatal(sMethodName.Data(),
"!amctrack");}
530 for(Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
539 AliAODTrack *atrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
542 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
543 if(atrack->GetID()>=0 && atrack->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack->GetID()>=0 && atrack->IsGlobalConstrained()");}
544 if(atrack->TestFilterBit(128) && atrack->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack->TestFiletrBit(128) && atrack->IsGlobalConstrained()");}
558 Int_t
id = atrack->GetID();
559 AliAODTrack *gtrack =
dynamic_cast<AliAODTrack*
>(
id>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(
id)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(
id+1))));
560 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
586 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsNonIdentifiedParticles(AliAODTrack *gtrack)";
587 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
597 fdEdxVsPtHist->Fill(gtrack->GetTPCmomentum(),gtrack->GetTPCsignal());
616 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsNonIdentifiedParticles(AliAODMCParticle *amcparticle)";
617 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
624 fPtHist->Fill(amcparticle->Pt());
647 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsIdentifiedParticles(AliAODTrack *atrack, AliAODTrack *gtrack)";
648 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
649 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
657 Bool_t bPrimary = kTRUE;
660 if(1==
charge){nCharge = -1;}
661 for(Int_t ps=0;ps<2;ps++)
663 if(1==ps){bPrimary = kFALSE;}
665 if(
Pion(gtrack,nCharge,bPrimary))
673 if(
Kaon(gtrack,nCharge,bPrimary))
681 if(
Proton(gtrack,nCharge,bPrimary))
705 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::FillControlHistogramsIdentifiedParticles(AliAODMCParticle *amcparticle)";
706 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
714 if(211==TMath::Abs(amcparticle->GetPdgCode()))
719 else if(321==TMath::Abs(amcparticle->GetPdgCode()))
724 else if(2212==TMath::Abs(amcparticle->GetPdgCode()))
730 Int_t
charge = ((amcparticle->GetPdgCode()>0. ? 0 : 1));
731 Int_t isPhysicalPrimary = ((amcparticle->IsPhysicalPrimary() ? 0 : 1));
749 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::EstimateBackground(AliVEvent *ave)";
755 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
756 AliESDEvent *aESD =
dynamic_cast<AliESDEvent*
>(ave);
757 AliAODEvent *aAOD =
dynamic_cast<AliAODEvent*
>(ave);
761 TString pattern =
".11.13.211.321.2212.";
763 Int_t nTracks = aMC->GetNumberOfTracks();
766 TClonesArray ca0(
"AliAODMCParticle");
767 Int_t ca0Counter = 0;
768 for(Int_t iTrack=0;iTrack<nTracks;iTrack++)
770 AliAODMCParticle *amcparticle =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack));
771 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
773 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle->GetPdgCode()))))){
continue;}
775 ca0[ca0Counter++] = amcparticle;
778 if(!
fMixedEvents[0]){Fatal(sMethodName.Data(),
"!fMixedEvents[0]");}
782 TClonesArray ca1(
"AliAODMCParticle");
783 Int_t ca1Counter = 0;
784 for(Int_t iTrack=0;iTrack<nTracks;iTrack++)
786 AliAODMCParticle *amcparticle =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack));
787 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
789 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle->GetPdgCode()))))){
continue;}
791 ca1[ca1Counter++] = amcparticle;
794 if(!
fMixedEvents[1]){Fatal(sMethodName.Data(),
"!fMixedEvents[1]");}
812 if(0 !=
fGlobalTracksAOD[1]->GetSize()){Fatal(sMethodName.Data(),
"0 != fGlobalTracksAOD[1]->GetSize()");}
815 fMixedEvents[0] = (TClonesArray*)aAOD->GetTracks()->Clone();
816 if(!
fMixedEvents[0]){Fatal(sMethodName.Data(),
"!fMixedEvents[0]");}
821 if(0 !=
fGlobalTracksAOD[2]->GetSize()){Fatal(sMethodName.Data(),
"0 != fGlobalTracksAOD[2]->GetSize()");}
824 fMixedEvents[1] = (TClonesArray*)aAOD->GetTracks()->Clone();
825 if(!
fMixedEvents[1]){Fatal(sMethodName.Data(),
"!fMixedEvents[1]");}
848 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
849 AliESDEvent *aESD =
dynamic_cast<AliESDEvent*
>(ave);
850 AliAODEvent *aAOD =
dynamic_cast<AliAODEvent*
>(ave);
865 cout<<Form(
"aAOD->GetRunNumber() = %d",aAOD->GetRunNumber())<<endl;
866 cout<<Form(
"aAOD->GetBunchCrossNumber() = %d",aAOD->GetBunchCrossNumber())<<endl;
867 cout<<Form(
"aAOD->GetOrbitNumber() = %d",aAOD->GetOrbitNumber())<<endl;
868 cout<<Form(
"aAOD->GetPeriodNumber() = %d",aAOD->GetPeriodNumber())<<endl;
869 if(!
SpecifiedEvent(aAOD->GetRunNumber(),aAOD->GetBunchCrossNumber(),aAOD->GetOrbitNumber(),aAOD->GetPeriodNumber())){
return;}
881 Int_t currentEventNumber = -44;
898 return currentEventNumber;
917 cout<<Form(
"nEvts: %d",currentEventNo)<<endl;
963 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::InsanityChecksUserExec()";
966 for(Int_t pid=0;pid<5;pid++)
968 for(Int_t pa=0;pa<2;pa++)
970 for(Int_t ps=0;ps<2;ps++)
972 if(!
fPIDCA[pid][pa][ps]) {Fatal(sMethodName.Data(),
"!fPIDCA[pid][pa][ps]");}
973 if(0 !=
fPIDCA[pid][pa][ps]->GetEntriesFast()){Fatal(sMethodName.Data(),
"0 != fPIDCA[pid][pa][ps]->GetEntriesFast()"); }
977 for(Int_t pid=0;pid<1;pid++)
979 if(!
fPIDV0sCA[pid]){Fatal(sMethodName.Data(),
"!fPIDV0sCA[pid]");}
980 if(0 !=
fPIDV0sCA[pid]->GetEntriesFast()){Fatal(sMethodName.Data(),
"0 != fPIDV0sCA[pid]->GetEntriesFast()");}
999 if(0 !=
fGlobalTracksAOD[0]->GetSize()){Fatal(sMethodName.Data(),
"0 != fGlobalTracksAOD[0]->GetSize()");}
1116 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
1117 AliESDEvent *aESD =
dynamic_cast<AliESDEvent*
>(ave);
1118 AliAODEvent *aAOD =
dynamic_cast<AliAODEvent*
>(ave);
1131 TClonesArray *caV0s = aAOD->GetV0s();
1133 AliAODv0 *aAODv0 = NULL;
1134 Int_t nProngs = -44;
1135 while(caV0s->At(index))
1137 aAODv0 = (AliAODv0*) caV0s->At(index++);
1149 nProngs = aAODv0->GetNProngs();
1160 fPtV0Hist->Fill(pow(aAODv0->Pt2V0(),0.5));
1162 fPAHist->Fill(aAODv0->Alpha(),aAODv0->PtArmV0());
1177 cout<<Form(
"fUniqueIDHistEBE->FindFirstBinAbove(1.44) %d:",(Int_t)
fUniqueIDHistEBE->FindFirstBinAbove(1.44,1))<<endl;
1214 for(Int_t pid=0;pid<5;pid++)
1216 for(Int_t pa=0;pa<2;pa++)
1218 for(Int_t ps=0;ps<2;ps++)
1225 for(Int_t pid=0;pid<1;pid++)
1265 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Pion(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
1266 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
1267 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
1270 if(charge != (Int_t)gtrack->Charge())
return kFALSE;
1271 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
1275 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
1290 if(gtrack->GetTPCmomentum() < 0.75)
1292 AliPIDResponse::EDetPidStatus statusTPC =
fPIDResponse->CheckPIDStatus(AliPIDResponse::kTPC,gtrack);
1293 if(!statusTPC)
return kFALSE;
1295 Double_t dSigmaTPCPion = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kPion)));
1296 Double_t dSigmaTPCKaon = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kKaon)));
1297 Double_t dSigmaTPCProton = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kProton)));
1301 else if(gtrack->GetTPCmomentum() >= 0.75 )
1310 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
1311 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
1312 if(charge < 0 && mcParticle->GetPdgCode() == -211)
return kTRUE;
1313 else if(charge > 0 && mcParticle->GetPdgCode() == 211)
return kTRUE;
1335 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Kaon(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
1336 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
1337 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
1340 if(charge != (Int_t)gtrack->Charge())
return kFALSE;
1341 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
1345 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
1360 if(gtrack->GetTPCmomentum() < 0.75)
1362 AliPIDResponse::EDetPidStatus statusTPC =
fPIDResponse->CheckPIDStatus(AliPIDResponse::kTPC,gtrack);
1363 if(!statusTPC)
return kFALSE;
1365 Double_t dSigmaTPCKaon = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kKaon)));
1366 Double_t dSigmaTPCProton = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kProton)));
1367 Double_t dSigmaTPCPion = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kPion)));
1371 else if(gtrack->GetTPCmomentum() >= 0.75 )
1380 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
1381 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
1382 if(charge < 0 && mcParticle->GetPdgCode() == -321)
return kTRUE;
1383 else if(charge > 0 && mcParticle->GetPdgCode() == 321)
return kTRUE;
1404 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::Proton(AliAODTrack *gtrack, Int_t charge, Bool_t bPrimary)";
1405 if(!(1 == charge || -1 == charge)){Fatal(sMethodName.Data(),
"!(1 == charge || -1 == charge)");}
1406 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
1409 if(charge != (Int_t)gtrack->Charge())
return kFALSE;
1410 if(bPrimary && gtrack->GetType() != AliAODTrack::kPrimary)
1414 else if(!bPrimary && gtrack->GetType() != AliAODTrack::kFromDecayVtx)
1429 if(gtrack->GetTPCmomentum() < 0.75)
1431 AliPIDResponse::EDetPidStatus statusTPC =
fPIDResponse->CheckPIDStatus(AliPIDResponse::kTPC,gtrack);
1432 if(!statusTPC)
return kFALSE;
1434 Double_t dSigmaTPCProton = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kProton)));
1435 Double_t dSigmaTPCPion = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kPion)));
1436 Double_t dSigmaTPCKaon = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(gtrack,(AliPID::kKaon)));
1439 else if(gtrack->GetTPCmomentum() >= 0.75 )
1448 if(!
fMC){Fatal(sMethodName.Data(),
"!fMC");}
1449 AliAODMCParticle *mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMC->GetTrack(TMath::Abs(gtrack->GetLabel())));
1450 if(charge < 0 && mcParticle->GetPdgCode() == -2212)
return kTRUE;
1451 else if(charge > 0 && mcParticle->GetPdgCode() == 2212)
return kTRUE;
1465 for(Int_t index=0;index<10;index++)
1478 for(Int_t xyz=0;xyz<3;xyz++)
1483 for(Int_t pid=0;pid<5;pid++)
1485 for(Int_t pa=0;pa<2;pa++)
1487 for(Int_t ps=0;ps<2;ps++)
1498 for(Int_t pf=0;pf<5;pf++)
1504 for(Int_t pf=0;pf<5;pf++)
1506 for(Int_t pid=0;pid<5;pid++)
1520 for(Int_t pid=0;pid<5;pid++)
1522 for(Int_t pa=0;pa<2;pa++)
1524 for(Int_t ps=0;ps<2;ps++)
1526 fPIDCA[pid][pa][ps] = NULL;
1532 for(Int_t pid=0;pid<1;pid++)
1545 for(Int_t pid1=0;pid1<10;pid1++)
1547 for(Int_t pid2=0;pid2<10;pid2++)
1561 for(Int_t pid1=0;pid1<10;pid1++)
1563 for(Int_t pid2=0;pid2<10;pid2++)
1569 for(Int_t me=0;me<2;me++)
1587 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::BookAndNestAllLists()";
1588 if(!
fHistList){Fatal(sMethodName.Data(),
"fHistList is NULL");}
1694 TString sParticleLabel[5] = {
"e",
"#mu",
"#pi",
"K",
"p"};
1695 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()};
1712 fGetNumberOfTracksHist =
new TH1I(
"fGetNumberOfTracksHist",
"aAOD->GetNumberOfTracks() (Remark: Not all of tracks are unique.)",10000,0,10000);
1720 fGetNumberOfV0sHist =
new TH1I(
"fGetNumberOfV0sHist",
"aAOD->GetNumberOfV0s() (Remark: Some V0s share the daughter.)",10000,0,10000);
1724 fGetNumberOfCascadesHist =
new TH1I(
"fGetNumberOfCascadesHist",
"aAOD->GetNumberOfCascades() (TBI: Not validated.)",10000,0,10000);
1731 fGetEventTypeHist =
new TH1I(
"fGetEventTypeHist",
"aAOD->GetEventType()",1000,0,10);
1734 fGetCentralityHist =
new TH1D(
"fGetCentralityHist",
"aAOD->GetCentrality()",100,0.,100.);
1737 TString sxyz[3] = {
"X",
"Y",
"Z"};
1738 for(Int_t xyz=0;xyz<3;xyz++)
1740 fVertexXYZ[xyz] =
new TH1F(Form(
"fVertex%s",sxyz[xyz].
Data()),Form(
"avtz->Get%s()",sxyz[xyz].
Data()),100000,-50.,50);
1748 fGetChi2perNDFHist =
new TH1F(
"fGetChi2perNDFHist",
"avtx->GetChi2perNDF()",5000,0.,50.);
1752 fGetNDaughtersHist =
new TH1I(
"GetNDaughtersHist",
"avtx->GetNDaughters()",10000,0,10000);
1773 fChargeHist =
new TH1I(
"fChargeHist",
"atrack->Charge()",5,-2,3);
1782 fGetTPCNclsHist =
new TH1I(
"fGetTPCNclsHist",
"atrack->fGetTPCNclsHist()",200,0,200);
1787 fGetTPCsignalNHist =
new TH1I(
"fGetTPCsignalNHist",
"atrack->fGetTPCsignalNHist()",200,0,200);
1792 fGetITSNclsHist =
new TH1I(
"fGetITSNclsHist",
"atrack->fGetITSNclsHist()",200,0,200);
1797 fdEdxVsPtHist =
new TH2F(
"fdEdxVsPtHist",
"atrack->GetTPCmomentum(),atrack->GetTPCsignal()",1000,0.,20.,1000,-500.,500.);
1800 fPtHist =
new TH1F(
"fPtHist",
"atrack->Pt()",1000,0.,20.);
1802 fPtHist->SetFillColor(kBlue-10);
1805 fEtaHist =
new TH1F(
"fEtaHist",
"atrack->Eta()",200,-2.,2.);
1810 fPhiHist =
new TH1F(
"fPhiHist",
"atrack->Phi()",360,0.,TMath::TwoPi());
1816 fMassHist =
new TH1F(
"fMassHist",
"atrack->M()",10000,0.,10.);
1820 for(Int_t nm=0;nm<5;nm++)
1822 fMassHist->GetXaxis()->SetBinLabel(
fMassHist->FindBin(dNominalMass[nm]),Form(
"m_{%s}",sParticleLabel[nm].
Data()));
1825 fGetFilterMap =
new TH1I(
"fGetFilterMap",
"atrack->fGetFilterMap()",10000,0,10000);
1830 fGetPdgCode =
new TH1I(
"fGetPdgCode",
"atrack->fGetPdgCode()",20000,-10000,10000);
1851 for(Int_t pid=0;pid<5;pid++)
1853 for(Int_t pa=0;pa<2;pa++)
1855 for(Int_t ps=0;ps<2;ps++)
1857 fMassPIDHist[pid][pa][ps] =
new TH1F(Form(
"fMassPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fMassPIDHist[%d][%d][%d] (%s)",pid,pa,ps,sParticleLabel[pid].
Data()),10000,0.,10.);
1858 fMassPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"m [GeV/c^{2}]");
1859 for(Int_t nm=0;nm<5;nm++)
1861 fMassPIDHist[pid][pa][ps]->GetXaxis()->SetBinLabel(
fMassPIDHist[pid][pa][ps]->FindBin(dNominalMass[nm]),Form(
"m_{%s}",sParticleLabel[nm].
Data()));
1865 fPtPIDHist[pid][pa][ps] =
new TH1F(Form(
"fPtPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fPtPIDHist[%d][%d][%d]",pid,pa,ps),1000,0.,10.);
1866 fPtPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"p_{T} [TBI units]");
1867 fPtPIDHist[pid][pa][ps]->SetFillColor(kBlue-10);
1869 fEtaPIDHist[pid][pa][ps] =
new TH1F(Form(
"fEtaPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fEtaPIDHist[%d][%d][%d]",pid,pa,ps),200000,-2.,2.);
1872 fPhiPIDHist[pid][pa][ps] =
new TH1F(Form(
"fPhiPIDHist[%d][%d][%d]",pid,pa,ps),Form(
"fPhiPIDHist[%d][%d][%d]",pid,pa,ps),360,0.,TMath::TwoPi());
1873 fPhiPIDHist[pid][pa][ps]->GetXaxis()->SetTitle(
"#phi");
1895 fGetNProngsHist =
new TH1I(
"fGetNProngsHist",
"aAODv0->GetNProngs()",10,0,10);
1900 fMassK0ShortHist =
new TH1F(
"fMassK0ShortHist",
"aAODv0->MassK0Short()",1000000,0.,100.);
1903 Double_t dMassK0Short = TDatabasePDG::Instance()->GetParticle(310)->Mass();
1908 fMassLambdaHist =
new TH1F(
"fMassLambdaHist",
"aAODv0->MassLambda()",1000000,0.,100.);
1911 Double_t dMassLambda = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
1916 fMassAntiLambdaHist =
new TH1F(
"fMassAntiLambdaHist",
"aAODv0->MassAntiLambda()",1000000,0.,100.);
1919 Double_t dMassAntiLambda = TDatabasePDG::Instance()->GetParticle(-3122)->Mass();
1924 fOpenAngleV0Hist =
new TH1F(
"fOpenAngleV0Hist",
"aAODv0->fOpenAngleV0()",10000,-0.044,TMath::Pi()+0.044);
1929 fRadiusV0Hist =
new TH1F(
"fRadiusV0Hist",
"aAODv0->fRadiusV0()",10000,0.,1000.);
1934 fDcaV0ToPrimVertexHist =
new TH1F(
"fDcaV0ToPrimVertexHist",
"aAODv0->fDcaV0ToPrimVertex()",10000,0.,1000.);
1939 fMomV0XHist =
new TH1F(
"fMomV0XHist",
"aAODv0->fMomV0X() = px(+) + px(-)",10000,-1000.,1000.);
1944 fMomV0YHist =
new TH1F(
"fMomV0YHist",
"aAODv0->fMomV0Y() = py(+) + py(-)",10000,-1000.,1000.);
1949 fMomV0ZHist =
new TH1F(
"fMomV0ZHist",
"aAODv0->fMomV0Z() = pz(+) + pz(-)",10000,-1000.,1000.);
1954 fPtV0Hist =
new TH1F(
"fPtV0Hist",
"pow(aAODv0->fPt2V0(),0.5)",10000,0.,100.);
1959 fPseudoRapV0Hist =
new TH1F(
"fPseudoRapV0Hist",
"aAODv0->PseudoRapV0()",1000,-10.,10.);
1964 fPAHist =
new TH2F(
"fPAHist",
"TBI",100,-2.,2.,100,0.,1.);
1966 fPAHist->GetXaxis()->SetTitle(
"#alpha");
1967 fPAHist->GetYaxis()->SetTitle(
"p_{T}");
1983 fEBEObjectsFlagsPro =
new TProfile(
"fEBEObjectsFlagsPro",
"Flags and settings for event-by-event histograms",1,0,1);
2003 for(Int_t pid=0;pid<5;pid++)
2005 for(Int_t pa=0;pa<2;pa++)
2007 for(Int_t ps=0;ps<2;ps++)
2009 fPIDCA[pid][pa][ps] =
new TClonesArray(
"AliAODTrack",10000);
2015 for(Int_t pid=0;pid<1;pid++)
2017 fPIDV0sCA[pid] =
new TClonesArray(
"AliAODv0",10000);
2033 fCorrelationFunctionsFlagsPro =
new TProfile(
"fCorrelationFunctionsFlagsPro",
"Flags and settings for correlation functions histograms",2,0,2);
2047 const Int_t nParticleSpecies = 5;
2048 TString sParticles[2*nParticleSpecies] = {
"e^{+}",
"#mu^{+}",
"#pi^{+}",
"K^{+}",
"p^{+}",
"e^{-}",
"#mu^{-}",
"#pi^{-}",
"K^{-}",
"p^{-}"};
2053 for(Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
2055 for(Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
2058 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.);
2094 fBackgroundFlagsPro =
new TProfile(
"fBackgroundFlagsPro",
"Flags and settings for background histograms",1,0,1);
2107 const Int_t nParticleSpecies = 5;
2108 TString sParticles[2*nParticleSpecies] = {
"e^{+}",
"#mu^{+}",
"#pi^{+}",
"K^{+}",
"p^{+}",
"e^{-}",
"#mu^{-}",
"#pi^{-}",
"K^{-}",
"p^{-}"};
2113 for(Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
2115 for(Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
2118 fBackground[pid1][pid2] =
new TH1F(Form(
"fBackground[%d][%d]",pid1,pid2),Form(
"fBackground[%d][%d] = (%s,%s)",pid1,pid2,sParticles[pid1].
Data(),sParticles[pid2].
Data()),10000,0.,10.);
2129 for(Int_t me=0;me<2;me++)
2159 for(Int_t iTrack=0;iTrack<aAOD->GetNumberOfTracks();iTrack++)
2161 AliAODTrack *aodTrack =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack));
2164 Int_t
id = aodTrack->GetID();
2166 if(
id>=0 && !aodTrack->IsGlobalConstrained())
2181 if(run !=
fRun)
return kFALSE;
2183 else if(orbit !=
fOrbit)
return kFALSE;
2184 else if(period !=
fPeriod)
return kFALSE;
2195 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonGlobalTrackCuts(AliAODTrack *gtrack)";
2196 if(!gtrack){Fatal(sMethodName.Data(),
"!gtrack");}
2205 if(gtrack->Pt()<0.2)
return kFALSE;
2206 if(gtrack->Pt()>=5.0)
return kFALSE;
2207 if(gtrack->Eta()<-0.8)
return kFALSE;
2208 if(gtrack->Eta()>=0.8)
return kFALSE;
2227 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonTrackCuts(AliAODTrack *atrack)";
2228 if(!atrack){Fatal(sMethodName.Data(),
"!atrack");}
2230 if(!atrack->TestFilterBit(128))
return kFALSE;
2244 TString sMethodName =
"Bool_t AliAnalysisTaskMultiparticleFemtoscopy::PassesCommonTrackCuts(AliAODMCParticle *amcparticle)";
2245 if(!amcparticle){Fatal(sMethodName.Data(),
"!amcparticle");}
2247 if(TMath::Abs(amcparticle->Charge())<1.e-10)
return kFALSE;
2248 if(!amcparticle->IsPhysicalPrimary())
return kFALSE;
2249 if(amcparticle->Pt()<0.2)
return kFALSE;
2250 if(amcparticle->Pt()>=5.0)
return kFALSE;
2251 if(amcparticle->Eta()<-0.8)
return kFALSE;
2252 if(amcparticle->Eta()>=0.8)
return kFALSE;
2269 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
2270 AliESDEvent *aESD =
dynamic_cast<AliESDEvent*
>(ave);
2271 AliAODEvent *aAOD =
dynamic_cast<AliAODEvent*
>(ave);
2283 if(!aAOD->GetPrimaryVertex())
return kFALSE;
2284 if(TMath::Abs(aAOD->GetMagneticField())<0.001)
return kFALSE;
2285 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
2288 if(TMath::Abs(avtx->GetZ())>10.0)
return kFALSE;
2289 if(avtx->GetNContributors()<=2)
return kFALSE;
2305 AliMCEvent *aMC =
dynamic_cast<AliMCEvent*
>(ave);
2306 AliESDEvent *aESD =
dynamic_cast<AliESDEvent*
>(ave);
2307 AliAODEvent *aAOD =
dynamic_cast<AliAODEvent*
>(ave);
2319 if(!aAOD->GetPrimaryVertex())
return kFALSE;
2320 if(TMath::Abs(aAOD->GetMagneticField())<0.001)
return kFALSE;
2321 AliAODVertex *avtx = (AliAODVertex*)aAOD->GetPrimaryVertex();
2324 if(TMath::Abs(avtx->GetZ())>10.0)
return kFALSE;
2325 if(avtx->GetNContributors()<=2)
return kFALSE;
2342 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateCorrelationFunctions(AliAODEvent *aAOD)";
2343 if(!aAOD){Fatal(sMethodName.Data(),
"!aAOD");}
2348 Int_t nTracks = aAOD->GetNumberOfTracks();
2349 for(Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
2351 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack1));
2353 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
2354 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
2355 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
2358 Int_t id1 = atrack1->GetID();
2359 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id1)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id1+1))));
2360 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
2361 Int_t gid1 = (id1>=0 ? id1 : -(id1+1));
2366 for(Int_t iTrack2=iTrack1+1;iTrack2<nTracks;iTrack2++)
2368 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(aAOD->GetTrack(iTrack2));
2370 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
2371 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
2372 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
2375 Int_t id2 = atrack2->GetID();
2376 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(id2)) : aAOD->GetTrack(
fGlobalTracksAOD[0]->GetValue(-(id2+1))));
2377 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
2378 Int_t gid2 = (id2>=0 ? id2 : -(id2+1));
2379 if(gid1==gid2){
continue;}
2390 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE))
2395 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
2400 if((
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE)) || (
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,1,kTRUE)))
2407 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
2412 if(
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
2417 if((
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE)) || (
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,1,kTRUE)))
2429 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2442 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
2447 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
2452 if(
Kaon(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
2457 if(
Pion(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
2463 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
2468 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2473 if(
Proton(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
2478 if(
Pion(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2484 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
2489 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2494 if(
Proton(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
2499 if(
Kaon(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2519 TString pattern =
".11.13.211.321.2212.";
2522 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateCorrelationFunctions(AliMCEvent *aMC)";
2523 if(0 == aMC->GetNumberOfTracks()){
return;}
2526 Int_t nTracks = aMC->GetNumberOfTracks();
2527 for(Int_t iTrack1=0;iTrack1<nTracks;iTrack1++)
2529 AliAODMCParticle *amcparticle1 =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack1));
2530 if(!amcparticle1){Fatal(sMethodName.Data(),
"!amcparticle1");}
2535 for(Int_t iTrack2=iTrack1+1;iTrack2<nTracks;iTrack2++)
2537 AliAODMCParticle *amcparticle2 =
dynamic_cast<AliAODMCParticle*
>(aMC->GetTrack(iTrack2));
2538 if(!amcparticle2){Fatal(sMethodName.Data(),
"!amcparticle2");}
2544 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle1->GetPdgCode()))) && pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle2->GetPdgCode()))))){
continue;}
2559 if(-44 == index1){Fatal(sMethodName.Data(),
"-44 == index1");}
2560 if(-44 == index2){Fatal(sMethodName.Data(),
"-44 == index2");}
2579 Double_t p1x = agtrack1->Px();
2580 Double_t p1y = agtrack1->Py();
2581 Double_t p1z = agtrack1->Pz();
2583 Double_t p2x = agtrack2->Px();
2584 Double_t p2y = agtrack2->Py();
2585 Double_t p2z = agtrack2->Pz();
2587 k = 0.5*pow(pow(p1x-p2x,2.)+pow(p1y-p2y,2.)+pow(p1z-p2z,2.),0.5);
2591 cout<<Form(
"\nSelf-correlation !!!!")<<endl;
2592 cout<<Form(
"p1: %f %f %f",p1x,p1y,p1z)<<endl;
2593 cout<<Form(
"p2: %f %f %f\n",p2x,p2y,p2z)<<endl;
2610 Double_t p1x = amcparticle1->Px();
2611 Double_t p1y = amcparticle1->Py();
2612 Double_t p1z = amcparticle1->Pz();
2614 Double_t p2x = amcparticle2->Px();
2615 Double_t p2y = amcparticle2->Py();
2616 Double_t p2z = amcparticle2->Pz();
2618 k = 0.5*pow(pow(p1x-p2x,2.)+pow(p1y-p2y,2.)+pow(p1z-p2z,2.),0.5);
2622 cout<<Form(
"\nSelf-correlation !!!!")<<endl;
2623 cout<<Form(
"p1: %f %f %f",p1x,p1y,p1z)<<endl;
2624 cout<<Form(
"p2: %f %f %f\n",p2x,p2y,p2z)<<endl;
2647 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateBackground(TClonesArray *ca1, TClonesArray *ca2)";
2648 if(!ca1){Fatal(sMethodName.Data(),
"!ca1");}
2649 if(!ca2){Fatal(sMethodName.Data(),
"!ca2");}
2655 Int_t nTracks1 = ca1->GetEntries();
2656 Int_t nTracks2 = ca2->GetEntries();
2659 for(Int_t iTrack1=0;iTrack1<nTracks1;iTrack1++)
2661 AliAODTrack *atrack1 =
dynamic_cast<AliAODTrack*
>(ca1->UncheckedAt(iTrack1));
2663 if(!atrack1){Fatal(sMethodName.Data(),
"!atrack1");}
2664 if(atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->GetID()>=0 && atrack1->IsGlobalConstrained()");}
2665 if(atrack1->TestFilterBit(128) && atrack1->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack1->TestFiletrBit(128) && atrack1->IsGlobalConstrained()");}
2668 Int_t id1 = atrack1->GetID();
2669 AliAODTrack *gtrack1 =
dynamic_cast<AliAODTrack*
>(id1>=0 ? ca1->UncheckedAt(
fGlobalTracksAOD[1]->GetValue(id1)) : ca1->UncheckedAt(
fGlobalTracksAOD[1]->GetValue(-(id1+1))));
2670 if(!gtrack1){Fatal(sMethodName.Data(),
"!gtrack1");}
2675 for(Int_t iTrack2=0;iTrack2<nTracks2;iTrack2++)
2677 AliAODTrack *atrack2 =
dynamic_cast<AliAODTrack*
>(ca2->UncheckedAt(iTrack2));
2679 if(!atrack2){Fatal(sMethodName.Data(),
"!atrack2");}
2680 if(atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->GetID()>=0 && atrack2->IsGlobalConstrained()");}
2681 if(atrack2->TestFilterBit(128) && atrack2->IsGlobalConstrained()){Fatal(sMethodName.Data(),
"atrack2->TestFiletrBit(128) && atrack2->IsGlobalConstrained()");}
2684 Int_t id2 = atrack2->GetID();
2685 AliAODTrack *gtrack2 =
dynamic_cast<AliAODTrack*
>(id2>=0 ? ca2->UncheckedAt(
fGlobalTracksAOD[2]->GetValue(id2)) : ca2->UncheckedAt(
fGlobalTracksAOD[2]->GetValue(-(id2+1))));
2686 if(!gtrack2){Fatal(sMethodName.Data(),
"!gtrack2");}
2696 if(
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,1,kTRUE))
2701 if(
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
2706 if((
Pion(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE)) || (
Pion(gtrack1,-1,kTRUE) &&
Pion(gtrack2,1,kTRUE)))
2713 if(
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
2718 if(
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
2723 if((
Kaon(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE)) || (
Kaon(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,1,kTRUE)))
2735 if(
Proton(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2748 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,1,kTRUE))
2753 if(
Pion(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
2758 if(
Kaon(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
2763 if(
Pion(gtrack1,-1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
2769 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
2774 if(
Pion(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2779 if(
Proton(gtrack1,1,kTRUE) &&
Pion(gtrack2,-1,kTRUE))
2784 if(
Pion(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2790 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,1,kTRUE))
2795 if(
Kaon(gtrack1,1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2800 if(
Proton(gtrack1,1,kTRUE) &&
Kaon(gtrack2,-1,kTRUE))
2805 if(
Kaon(gtrack1,-1,kTRUE) &&
Proton(gtrack2,-1,kTRUE))
2839 TString pattern =
".11.13.211.321.2212.";
2843 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::CalculateBackground(TClonesArray *ca1, TClonesArray *ca2, Bool_t bMC)";
2844 if(!ca1){Fatal(sMethodName.Data(),
"!ca1");}
2845 if(!ca2){Fatal(sMethodName.Data(),
"!ca2");}
2851 Int_t nTracks1 = ca1->GetEntries();
2852 Int_t nTracks2 = ca2->GetEntries();
2855 for(Int_t iTrack1=0;iTrack1<nTracks1;iTrack1++)
2857 AliAODMCParticle *amcparticle1 =
dynamic_cast<AliAODMCParticle*
>(ca1->UncheckedAt(iTrack1));
2859 if(!amcparticle1){Fatal(sMethodName.Data(),
"!amcparticle1");}
2863 for(Int_t iTrack2=0;iTrack2<nTracks2;iTrack2++)
2865 AliAODMCParticle *amcparticle2 =
dynamic_cast<AliAODMCParticle*
>(ca2->UncheckedAt(iTrack2));
2867 if(!amcparticle2){Fatal(sMethodName.Data(),
"!amcparticle2");}
2871 if(!(pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle1->GetPdgCode()))) && pattern.Contains(Form(
".%d.",TMath::Abs(amcparticle2->GetPdgCode()))))){
continue;}
2886 if(-44 == index1){Fatal(sMethodName.Data(),
"-44 == index1");}
2887 if(-44 == index2){Fatal(sMethodName.Data(),
"-44 == index2");}
2916 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GetOutputHistograms(TList *histList)";
2920 if(!
fHistList){Fatal(sMethodName.Data(),
"fHistList is not around today...");}
2948 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GetPointersForCorrelationFunctions()";
2965 const Int_t nParticleSpecies = 5;
2966 for(Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
2968 for(Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
2971 if(!
fCorrelationFunctions[pid1][pid2]){Fatal(sMethodName.Data(),
"fCorrelationFunctions[%d][%d]",pid1,pid2);}
2988 TString sMethodName =
"void AliAnalysisTaskMultiparticleFemtoscopy::GetPointersForBackground()";
3004 const Int_t nParticleSpecies = 5;
3005 for(Int_t pid1=0;pid1<2*nParticleSpecies;pid1++)
3007 for(Int_t pid2=pid1;pid2<2*nParticleSpecies;pid2++)
3010 if(!
fBackground[pid1][pid2]){Fatal(sMethodName.Data(),
"fBackground[%d][%d]",pid1,pid2);}
TProfile * fControlHistogramsEventFlagsPro
TProfile * fBackgroundFlagsPro
Bool_t PassesMixedEventCuts(AliVEvent *ave)
TExMap * fCorrelationFunctionsIndices
AliAnalysisTaskMultiparticleFemtoscopy()
TProfile * fCorrelationFunctionsFlagsPro
Int_t CurrentEventNumber()
TH1I * fGetNumberOfTracksHist
virtual void AOD(AliAODEvent *aAOD)
TProfile * fEBEObjectsFlagsPro
Bool_t fFillCorrelationFunctions
TList * fCorrelationFunctionsList
holds AliAODv0 candidates for each event [0=Lambda,1=...]
UInt_t fOrbit
do something only for the specified event
TH1F * fPtPIDHist[5][2][2]
[0=e,1=mu,2=pi,3=K,4=p][particle(+q)/antiparticle(-q)][kPrimary/kFromDecayVtx]
TH1F * fPhiPIDHist[5][2][2]
[0=e,1=mu,2=pi,3=K,4=p][particle(+q)/antiparticle(-q)][kPrimary/kFromDecayVtx]
virtual void BookEverythingForCorrelationFunctions()
TH1F * fEtaPIDHist[5][2][2]
[0=e,1=mu,2=pi,3=K,4=p][particle(+q)/antiparticle(-q)][kPrimary/kFromDecayVtx]
TH1I * fGetNDaughtersHist
virtual void EstimateBackground(AliVEvent *ave)
TList * fControlHistogramsNonIdentifiedParticlesList
virtual void V0s(AliVEvent *ave)
virtual void CalculateCorrelationFunctions(AliAODEvent *aAOD)
virtual void InsanityChecksUserExec()
TH1F * fMassAntiLambdaHist
Bool_t fFillControlHistograms
ClassImp(AliAnalysisTaskMultiparticleFemtoscopy) AliAnalysisTaskMultiparticleFemtoscopy
Bool_t SpecifiedEvent(UInt_t run, UShort_t bunchCross, UInt_t orbit, UInt_t period)
virtual void MC(AliMCEvent *aMC)
Int_t fMaxNoGlobalTracksAOD
PID response object.
TProfile * fControlHistogramsV0sFlagsPro
TH1I * fGetNumberOfV0sHist
TH1I * fGetNumberOfCascadesHist
Bool_t Proton(AliAODTrack *atrack, Int_t charge=1, Bool_t bPrimary=kTRUE)
virtual void BookEverythingForBackground()
virtual void CalculateBackground(TClonesArray *ca1, TClonesArray *ca2)
UInt_t fRun
do something only for the specified event
virtual void InsanityChecksUserCreateOutputObjects()
virtual void GetPointersForBackground()
TH1I * fGetTPCsignalNHist
virtual void UserExec(Option_t *)
TH1F * fBackground[10][10]
TH1D * fGetCentralityHist
TList * fEBEHistogramsList
virtual void OnlineMonitoring()
virtual void FillControlHistogramsParticle(AliVEvent *ave)
virtual void InitializeArrays()
virtual void BookAndNestAllLists()
TList * fControlHistogramsEventList
virtual void DoSomeDebugging(AliVEvent *ave)
virtual void BookEverything()
virtual void InitializeArraysForCorrelationFunctions()
TH1D * fGetMagneticFieldHist
TClonesArray * fPIDCA[5][2][2]
TClonesArray * fPIDV0sCA[1]
holds AliAODTrack candidates for each event [0=e,1=mu,2=pi,3=K,4=p][particle(+q)/antiparticle(-q)][kP...
Double_t RelativeMomenta(AliAODTrack *agtrack1, AliAODTrack *agtrack2)
TList * fBackgroundList
[particle(+q): 0=e,1=mu,2=pi,3=K,4=p, anti-particle(-q): 5=e,6=mu,7=pi,8=K,9=p] x [same]...
TProfile * fControlHistogramsNonIdentifiedParticlesFlagsPro
TProfile * fControlHistogramsIdentifiedParticlesFlagsPro
TString * fUpdateWhichOutputFile
Bool_t Pion(AliAODTrack *atrack, Int_t charge=1, Bool_t bPrimary=kTRUE)
UShort_t fBunchCross
do something only for the specified event
TExMap * fGlobalTracksAOD[10]
virtual void GetOutputHistograms(TList *histList)
virtual void NormalizeCorrelationFunctions()
virtual void GetPointersForCorrelationFunctions()
virtual ~AliAnalysisTaskMultiparticleFemtoscopy()
Bool_t Kaon(AliAODTrack *atrack, Int_t charge=1, Bool_t bPrimary=kTRUE)
TH1F * fDcaV0ToPrimVertexHist
TProfile * fControlHistogramsFlagsPro
Bool_t fOnlineMonitoring
tracks for mixed events
virtual void GlobalTracksAOD(AliAODEvent *aAOD, Int_t index)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
AliPIDResponse * fPIDResponse
MC, ESD, or AOD.
virtual void InitializeArraysForBackground()
TH1F * fMassPIDHist[5][2][2]
virtual void ResetEBEObjects()
virtual void FillControlHistogramsNonIdentifiedParticles(AliAODTrack *atrack)
virtual void InitializeArraysForControlHistograms()
TH1I * fGetNumberOfGlobalTracksHist
virtual void FillControlHistogramsEvent(AliVEvent *ave)
Bool_t PassesCommonGlobalTrackCuts(AliAODTrack *gtrack)
Bool_t fFillControlHistogramsNonIdentifiedParticles
Bool_t fFillControlHistogramsEvent
virtual void InitializeArraysForEBEObjects()
virtual void BookEverythingForEBEObjects()
Bool_t fProcessBothKineAndReco
global tracks in AOD. [0] is used in the default analysis, [1] and [2] for event mixing, etc.
UInt_t fPeriod
do something only for the specified event
Double_t fInclusiveSigmaCuts[5]
[0=e,1=mu,2=pi,3=K,4=p][particle(+q)/antiparticle(-q)][kPrimary/kFromDecayVtx]
Bool_t fFillControlHistogramsV0s
Bool_t PassesCommonTrackCuts(AliAODTrack *atrack)
virtual void BookEverythingForControlHistograms()
Bool_t fFillControlHistogramsIdentifiedParticles
virtual void FillControlHistogramsIdentifiedParticles(AliAODTrack *atrack, AliAODTrack *gtrack)
virtual void Terminate(Option_t *)
TList * fControlHistogramsV0sList
[PID function][PID exclusive] see .cxx for detailed documentation
Bool_t fNormalizeCorrelationFunctions
virtual void ESD(AliESDEvent *aESD)
TList * fControlHistogramsList
Bool_t PassesCommonEventCuts(AliVEvent *ave)
Bool_t fWaitForSpecifiedEvent
enable call to function within which debugging is done. Set indirectly.
Bool_t fEstimateBackground
TClonesArray * fMixedEvents[2]
[particle(+q): 0=e,1=mu,2=pi,3=K,4=p, anti-particle(-q): 0=e,1=mu,2=pi,3=K,4=p] x [same]...
virtual void UserCreateOutputObjects()
TH1I * fGetNContributorsHist
[avtx->GetX(),avtx->GetY(),avtx->GetZ()]
Double_t fExclusiveSigmaCuts[5][5]
[PID function] see .cxx for detailed documentation
TH1F * fCorrelationFunctions[10][10]
TList * fControlHistogramsIdentifiedParticlesList
TH1F * fGetChi2perNDFHist