26 #include <TDatabasePDG.h> 35 #include "TProfile2D.h" 36 #include "TProfile3D.h" 41 #include "AliAnalysisTask.h" 42 #include "AliAnalysisManager.h" 43 #include "AliAODInputHandler.h" 44 #include "AliAnalysisUtils.h" 45 #include "AliMultSelection.h" 46 #include "AliPIDResponse.h" 47 #include "AliPIDCombined.h" 50 #include "AliAODEvent.h" 51 #include "AliESDEvent.h" 52 #include "AliMCEvent.h" 53 #include "AliAODTrack.h" 55 #include "AliVTrack.h" 56 #include "AliESDpid.h" 58 #include "AliCollisionGeometry.h" 59 #include "AliGenEventHeader.h" 60 #include "AliGenAmpt.h" 89 fPDGMassPion(TDatabasePDG::Instance()->GetParticle(211)->Mass()),
90 fPDGMassKaon(TDatabasePDG::Instance()->GetParticle(321)->Mass()),
91 fPDGMassProton(TDatabasePDG::Instance()->GetParticle(2212)->Mass()),
289 fPDGMassPion(TDatabasePDG::Instance()->GetParticle(211)->Mass()),
290 fPDGMassKaon(TDatabasePDG::Instance()->GetParticle(321)->Mass()),
291 fPDGMassProton(TDatabasePDG::Instance()->GetParticle(2212)->Mass()),
489 fFlowVecPpos[iHarm][iPower][iPt] = TComplex(0,0,kFALSE);
490 fFlowVecPneg[iHarm][iPower][iPt] = TComplex(0,0,kFALSE);
491 fFlowVecS[iHarm][iPower][iPt] = TComplex(0,0,kFALSE);
609 DefineInput(0, TChain::Class());
610 DefineOutput(1, TList::Class());
611 DefineOutput(2, TList::Class());
612 DefineOutput(3, TList::Class());
613 DefineOutput(4, TList::Class());
614 DefineOutput(5, TList::Class());
615 DefineOutput(6, TList::Class());
616 DefineOutput(7, TList::Class());
697 const Short_t iEventCounterBins = 11;
698 TString sEventCounterLabel[iEventCounterBins] = {
"Input",
"Physics selection OK",
"Centr. Est. Consis. OK",
"PV OK",
"SPD Vtx OK",
"Pileup MV OK",
"Out-of-bunch Pileup OK",
"Vtx Consis. OK",
"PV #it{z} OK",
"ESD TPC Mult. Diff. OK",
"Selected"};
699 fhEventCounter =
new TH1D(
"fhEventCounter",
"Event Counter",iEventCounterBins,0,iEventCounterBins);
700 for(
Short_t i(0); i < iEventCounterBins; i++)
fhEventCounter->GetXaxis()->SetBinLabel(i+1, sEventCounterLabel[i].
Data() );
707 fh3BeforeNUAWeightsRefs =
new TH3D(
"fh3BeforeNUAWeightsRefs",
"Weights: Refs; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5, 20, -10,10);
710 fh3BeforeNUAWeightsCharged =
new TH3D(
"fh3BeforeNUAWeightsCharged",
"Weights: Charged; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5,20, -10,10);
713 fh3BeforeNUAWeightsPion =
new TH3D(
"fh3BeforeNUAWeightsPion",
"Weights: #pi; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5,20, -10,10);
716 fh3BeforeNUAWeightsKaon =
new TH3D(
"fh3BeforeNUAWeightsKaon",
"Weights: K; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5,20, -10,10);
719 fh3BeforeNUAWeightsProton =
new TH3D(
"fh3BeforeNUAWeightsProton",
"Weights: p; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5,20, -10,10);
742 fh3AfterNUAWeightsRefs =
new TH3D(
"fh3AfterNUAWeightsRefs",
"Weights: Refs; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5, 20, -10,10);
745 fh3AfterNUAWeightsCharged =
new TH3D(
"fh3AfterNUAWeightsCharged",
"Weights: Charged; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5,20, -10,10);
748 fh3AfterNUAWeightsPion =
new TH3D(
"fh3AfterNUAWeightsPion",
"Weights: #pi; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5,20, -10,10);
751 fh3AfterNUAWeightsKaon =
new TH3D(
"fh3AfterNUAWeightsKaon",
"Weights: K; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5,20, -10,10);
754 fh3AfterNUAWeightsProton =
new TH3D(
"fh3AfterNUAWeightsProton",
"Weights: p; #varphi; #eta; Prim. vtx_{z} (cm)", 100,0,TMath::TwoPi(), 151,-1.5,1.5,20, -10,10);
788 fpMixedRefsCor4[iSample][iGap][iMixedHarm] =
new TProfile(Form(
"fpRefs_<4>_MixedHarm%d_gap%02.2g_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Ref: <<4>> | Gap %g | v%d | sample %d ; centrality/multiplicity;",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax);
794 fpMixedRefsCor6[iSample][iGap] =
new TProfile(Form(
"fpRefs_<6>_MixedHarm%d_gap%02.2g_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Ref: <<6>> | Gap %g | v%d | sample %d ; centrality/multiplicity;",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax);
801 fpMixedChargedCor3Pos[iSample][iGap][iMixedHarm] =
new TProfile2D(Form(
"fp2Charged_<3>_MixedHarm%d_gap%02.2g_Pos_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Charged: <<3'>> | Gap %g | v%d | POIs pos | sample %d ; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
805 fpMixedChargedCor3Neg[iSample][iGap][iMixedHarm] =
new TProfile2D(Form(
"fp2Charged_<3>_MixedHarm%d_gap%02.2g_Neg_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Charged: <<3'>> | Gap %g | v%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
810 fpMixedChargedCor4Pos[iSample][iGap] =
new TProfile2D(Form(
"fp2Charged_<4>_MixedHarm%d_gap%02.2g_Pos_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Charged: <<4'>> | Gap %g | v%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
814 fpMixedChargedCor4Neg[iSample][iGap] =
new TProfile2D(Form(
"fp2Charged_<4>_MixedHarm%d_gap%02.2g_Neg_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Charged: <<4'>> | Gap %g | v%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
821 fpMixedPionCor3Pos[iSample][iGap][iMixedHarm] =
new TProfile2D(Form(
"fp2Pion_<3>_MixedHarm%d_gap%02.2g_Pos_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Pion: <<3'>> | Gap %g | v%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
825 fpMixedPionCor3Neg[iSample][iGap][iMixedHarm] =
new TProfile2D(Form(
"fp2Pion_<3>_MixedHarm%d_gap%02.2g_Neg_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Pion: <<3'>> | Gap %g | v%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
829 fpMixedKaonCor3Pos[iSample][iGap][iMixedHarm] =
new TProfile2D(Form(
"fp2Kaon_<3>_MixedHarm%d_gap%02.2g_Pos_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Pion: <<3'>> | Gap %g | v%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
833 fpMixedKaonCor3Neg[iSample][iGap][iMixedHarm] =
new TProfile2D(Form(
"fp2Kaon_<3>_MixedHarm%d_gap%02.2g_Neg_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Kaon: <<3'>> | Gap %g | v%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
837 fpMixedProtonCor3Pos[iSample][iGap][iMixedHarm] =
new TProfile2D(Form(
"fp2Proton_<3>_MixedHarm%d_gap%02.2g_Pos_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Proton: <<3'>> | Gap %g | v%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
841 fpMixedProtonCor3Neg[iSample][iGap][iMixedHarm] =
new TProfile2D(Form(
"fp2Proton_<3>_MixedHarm%d_gap%02.2g_Neg_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Proton: <<3'>> | Gap %g | v%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
846 fpMixedPionCor4Pos[iSample][iGap] =
new TProfile2D(Form(
"fp2Pion_<4>_MixedHarm%d_gap%02.2g_Pos_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Pion: <<4'>> | Gap %g | v%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
850 fpMixedPionCor4Neg[iSample][iGap] =
new TProfile2D(Form(
"fp2Pion_<4>_MixedHarm%d_gap%02.2g_Neg_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Pion: <<4'>> | Gap %g | v%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
854 fpMixedKaonCor4Pos[iSample][iGap] =
new TProfile2D(Form(
"fp2Kaon_<4>_MixedHarm%d_gap%02.2g_Pos_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Kaon: <<4'>> | Gap %g | v%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
858 fpMixedKaonCor4Neg[iSample][iGap] =
new TProfile2D(Form(
"fp2Kaon_<4>_MixedHarm%d_gap%02.2g_Neg_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Kaon: <<4'>> | Gap %g | v%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
862 fpMixedProtonCor4Pos[iSample][iGap] =
new TProfile2D(Form(
"fp2Proton_<4>_MixedHarm%d_gap%02.2g_Pos_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Proton: <<4'>> | Gap %g | v%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
866 fpMixedProtonCor4Neg[iSample][iGap] =
new TProfile2D(Form(
"fp2Proton_<4>_MixedHarm%d_gap%02.2g_Neg_sample%d",
fMixedHarmonics[iMixedHarm],10*
fEtaGap[iGap],iSample),Form(
"Proton: <<4'>> | Gap %g | v%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fMixedHarmonics[iMixedHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
884 fpRefsCor2[iSample][iGap][iHarm] =
new TProfile(Form(
"fpRefs_<2>_harm%d_gap%02.2g_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"Ref: <<2>> | Gap %g | n=%d | sample %d; centrality/multiplicity;",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax);
885 fpRefsCor2[iSample][iGap][iHarm]->Sumw2(kTRUE);
890 fp2ChargedCor2Pos[iSample][iGap][iHarm] =
new TProfile2D(Form(
"fp2Charged_<2>_harm%d_gap%02.2g_Pos_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"Charged: <<2'>> | Gap %g | n=%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
895 fp2ChargedCor2Neg[iSample][iGap][iHarm] =
new TProfile2D(Form(
"fp2Charged_<2>_harm%d_gap%02.2g_Neg_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"Charged: <<2'>> | Gap %g | n=%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
903 fp2PionCor2Pos[iSample][iGap][iHarm] =
new TProfile2D(Form(
"fp2Pion_<2>_harm%d_gap%02.2g_Pos_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"PID #pi: <<2'>> | Gap %g | n=%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
907 fp2KaonCor2Pos[iSample][iGap][iHarm] =
new TProfile2D(Form(
"fp2Kaon_<2>_harm%d_gap%02.2g_Pos_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"PID K: <<2'>> | Gap %g | n=%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
911 fp2ProtonCor2Pos[iSample][iGap][iHarm] =
new TProfile2D(Form(
"fp2Proton_<2>_harm%d_gap%02.2g_Pos_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"PID p: <<2'>> | Gap %g | n=%d | POIs pos | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
915 fp2PionCor2Neg[iSample][iGap][iHarm] =
new TProfile2D(Form(
"fp2Pion_<2>_harm%d_gap%02.2g_Neg_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"PID #pi: <<2'>> | Gap %g | n=%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
919 fp2KaonCor2Neg[iSample][iGap][iHarm] =
new TProfile2D(Form(
"fp2Kaon_<2>_harm%d_gap%02.2g_Neg_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"PID K: <<2'>> | Gap %g | n=%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
923 fp2ProtonCor2Neg[iSample][iGap][iHarm] =
new TProfile2D(Form(
"fp2Proton_<2>_harm%d_gap%02.2g_Neg_sample%d",
fHarmonics[iHarm],10*
fEtaGap[iGap],iSample),Form(
"PID p: <<2'>> | Gap %g | n=%d | POIs neg | sample %d; centrality/multiplicity; #it{p}_{T} (GeV/c)",
fEtaGap[iGap],
fHarmonics[iHarm],iSample),
fFlowCentNumBins,
fFlowCentMin,
fFlowCentMax,
fFlowPOIsPtNumBins,
fFlowPOIsPtMin,
fFlowPOIsPtMax);
944 TString sChargedCounterLabel[] = {
"Input",
"FB",
"#TPC-Cls",
"TPC-Chi2",
"DCA-z",
"DCA-xy",
"Eta",
"Selected"};
945 const Short_t iNBinsChargedCounter =
sizeof(sChargedCounterLabel)/
sizeof(sChargedCounterLabel[0]);
946 fhChargedCounter =
new TH1D(
"fhChargedCounter",
"Charged tracks: Counter",iNBinsChargedCounter,0,iNBinsChargedCounter);
987 fh2PIDPionTPCdEdx =
new TH2D(
"fh2PIDPionTPCdEdx",
"PID: #pi: TPC dE/dx; #it{p} (GeV/#it{c}); TPC dE/dx", 200,0,20, 131,-10,1000);
989 fh2PIDPionTOFbeta =
new TH2D(
"fh2PIDPionTOFbeta",
"PID: #pi: TOF #beta; #it{p} (GeV/#it{c});TOF #beta", 200,0,20, 101,-0.1,1.5);
991 fh2PIDKaonTPCdEdx =
new TH2D(
"fh2PIDKaonTPCdEdx",
"PID: K: TPC dE/dx; #it{p} (GeV/#it{c}); TPC dE/dx", 200,0,20, 131,-10,1000);
993 fh2PIDKaonTOFbeta =
new TH2D(
"fh2PIDKaonTOFbeta",
"PID: K: TOF #beta; #it{p} (GeV/#it{c});TOF #beta", 200,0,20, 101,-0.1,1.5);
995 fh2PIDProtonTPCdEdx =
new TH2D(
"fh2PIDProtonTPCdEdx",
"PID: p: TPC dE/dx; #it{p} (GeV/#it{c}); TPC dE/dx", 200,0,20, 131,-10,1000);
997 fh2PIDProtonTOFbeta =
new TH2D(
"fh2PIDProtonTOFbeta",
"PID: p: TOF #beta; #it{p} (GeV/#it{c});TOF #beta", 200,0,20, 101,-0.1,1.5);
999 fh2PIDPionTPCnSigmaPion =
new TH2D(
"fh2PIDPionTPCnSigmaPion",
"PID: #pi: TPC n#sigma (#pi hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1001 fh2PIDPionTOFnSigmaPion =
new TH2D(
"fh2PIDPionTOFnSigmaPion",
"PID: #pi: TOF n#sigma (#pi hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1003 fh2PIDPionTPCnSigmaKaon =
new TH2D(
"fh2PIDPionTPCnSigmaKaon",
"PID: #pi: TPC n#sigma (K hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1005 fh2PIDPionTOFnSigmaKaon =
new TH2D(
"fh2PIDPionTOFnSigmaKaon",
"PID: #pi: TOF n#sigma (K hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1007 fh2PIDPionTPCnSigmaProton =
new TH2D(
"fh2PIDPionTPCnSigmaProton",
"PID: #pi: TPC n#sigma (p hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1009 fh2PIDPionTOFnSigmaProton =
new TH2D(
"fh2PIDPionTOFnSigmaProton",
"PID: #pi: TOF n#sigma (p hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1011 fh2PIDKaonTPCnSigmaPion =
new TH2D(
"fh2PIDKaonTPCnSigmaPion",
"PID: K: TPC n#sigma (#pi hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1013 fh2PIDKaonTOFnSigmaPion =
new TH2D(
"fh2PIDKaonTOFnSigmaPion",
"PID: K: TOF n#sigma (#pi hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1015 fh2PIDKaonTPCnSigmaKaon =
new TH2D(
"fh2PIDKaonTPCnSigmaKaon",
"PID: K: TPC n#sigma (K hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1017 fh2PIDKaonTOFnSigmaKaon =
new TH2D(
"fh2PIDKaonTOFnSigmaKaon",
"PID: K: TOF n#sigma (K hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1019 fh2PIDKaonTPCnSigmaProton =
new TH2D(
"fh2PIDKaonTPCnSigmaProton",
"PID: K: TPC n#sigma (p hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1021 fh2PIDKaonTOFnSigmaProton =
new TH2D(
"fh2PIDKaonTOFnSigmaProton",
"PID: K: TOF n#sigma (p hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1023 fh2PIDProtonTPCnSigmaPion =
new TH2D(
"fh2PIDProtonTPCnSigmaPion",
"PID: p: TPC n#sigma (#pi hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1025 fh2PIDProtonTOFnSigmaPion =
new TH2D(
"fh2PIDProtonTOFnSigmaPion",
"PID: p: TOF n#sigma (#pi hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1027 fh2PIDProtonTPCnSigmaKaon =
new TH2D(
"fh2PIDProtonTPCnSigmaKaon",
"PID: p: TPC n#sigma (K hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1029 fh2PIDProtonTOFnSigmaKaon =
new TH2D(
"fh2PIDProtonTOFnSigmaKaon",
"PID: p: TOF n#sigma (K hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1031 fh2PIDProtonTPCnSigmaProton =
new TH2D(
"fh2PIDProtonTPCnSigmaProton",
"PID: p: TPC n#sigma (p hyp.); #it{p}_{T} (GeV/#it{c}); TPC n#sigma", 200,0,20, 42,-11,10);
1033 fh2PIDProtonTOFnSigmaProton =
new TH2D(
"fh2PIDProtonTOFnSigmaProton",
"PID: p: TOF n#sigma (p hyp.); #it{p}_{T} (GeV/#it{c}); TOF n#sigma", 200,0,20, 42,-11,10);
1039 const Short_t iNBinsPIDstatus = 4;
1040 TString sPIDstatus[iNBinsPIDstatus] = {
"kDetNoSignal",
"kDetPidOk",
"kDetMismatch",
"kDetNoParams"};
1041 const Short_t iNFilterMapBinBins = 32;
1050 fhQAEventsPVz[iQA] =
new TH1D(Form(
"fhQAEventsPVz_%s",sQAindex[iQA].
Data()),
"QA Events: PV-#it{z}", 101,-50,50);
1052 fhQAEventsNumContrPV[iQA] =
new TH1D(Form(
"fhQAEventsNumContrPV_%s",sQAindex[iQA].
Data()),
"QA Events: Number of contributors to AOD PV", 20,0,20);
1058 fhQAEventsSPDresol[iQA] =
new TH1D(Form(
"fhQAEventsSPDresol_%s",sQAindex[iQA].
Data()),
"QA Events: SPD resolution", 150,0,15);
1061 fhQAEventsCentralityOutliers[iQA] =
new TH2D(Form(
"fhQAEventsCentralityOutliers_%s",sQAindex[iQA].
Data()),
"QA Events: Centrality distribution; centrality percentile (V0M);centrality percentile (CL1)",100,0,100,100,0,100);
1064 fhQAEventsPileUp[iQA] =
new TH2D(Form(
"fhQAEventsPileUp_%s",sQAindex[iQA].
Data()),
"QA Events: TPC vs. ESD multiplicity; TPC multiplicity; ESD multiplicity",500,0,6000,500,0,6000);
1066 fhEventsMultTOFFilterbit32[iQA] =
new TH2D(Form(
"fhEventsMultTOFFilterbit32_%s",sQAindex[iQA].
Data()),
"filterbit32 vs. TOF multiplicity; multiplicity(fb32);multiplicity(fb32+TOF)", 4000,0,4000,2000,0,2000);
1071 fhQAChargedMult[iQA] =
new TH1D(Form(
"fhQAChargedMult_%s",sQAindex[iQA].
Data()),
"QA Charged: Number of Charged in selected events; #it{N}^{Charged}", 1500,0,1500);
1073 fhQAChargedCharge[iQA] =
new TH1D(Form(
"fhQAChargedCharge_%s",sQAindex[iQA].
Data()),
"QA Charged: Track charge; charge;", 3,-1.5,1.5);
1075 fhQAChargedPt[iQA] =
new TH1D(Form(
"fhQAChargedPt_%s",sQAindex[iQA].
Data()),
"QA Charged: Track #it{p}_{T}; #it{p}_{T} (GeV/#it{c})", 300,0.,30.);
1077 fhQAChargedEta[iQA] =
new TH1D(Form(
"fhQAChargedEta_%s",sQAindex[iQA].
Data()),
"QA Charged: Track #it{#eta}; #it{#eta}", 151,-1.5,1.5);
1079 fhQAChargedPhi[iQA] =
new TH1D(Form(
"fhQAChargedPhi_%s",sQAindex[iQA].
Data()),
"QA Charged: Track #it{#varphi}; #it{#varphi}", 100,0.,TMath::TwoPi());
1081 fhQAChargedFilterBit[iQA] =
new TH1D(Form(
"fhQAChargedFilterBit_%s",sQAindex[iQA].
Data()),
"QA Charged: Filter bit",iNFilterMapBinBins,0,iNFilterMapBinBins);
1082 for(
Int_t j = 0x0; j < iNFilterMapBinBins; j++)
fhQAChargedFilterBit[iQA]->GetXaxis()->SetBinLabel(j+1, Form(
"%g",TMath::Power(2,j)));
1084 fhQAChargedNumTPCcls[iQA] =
new TH1D(Form(
"fhQAChargedNumTPCcls_%s",sQAindex[iQA].
Data()),
"QA Charged: Track number of TPC clusters; #it{N}^{TPC clusters}", 160,0,160);
1086 fhQAChargedDCAxy[iQA] =
new TH1D(Form(
"fhQAChargedDCAxy_%s",sQAindex[iQA].
Data()),
"QA Charged: Track DCA-xy; DCA_{#it{xy}} (cm)", 100,0.,10);
1088 fhQAChargedDCAz[iQA] =
new TH1D(Form(
"fhQAChargedDCAz_%s",sQAindex[iQA].
Data()),
"QA Charged: Track DCA-z; DCA_{#it{z}} (cm)", 200,-10.,10.);
1095 fhQAPIDTPCstatus[iQA] =
new TH1D(Form(
"fhQAPIDTPCstatus_%s",sQAindex[iQA].
Data()),
"QA PID: PID status: TPC;", iNBinsPIDstatus,0,iNBinsPIDstatus);
1097 fhQAPIDTPCdEdx[iQA] =
new TH2D(Form(
"fhQAPIDTPCdEdx_%s",sQAindex[iQA].
Data()),
"QA PID: TPC PID information; #it{p} (GeV/#it{c}); TPC dEdx (au)", 100,0,10, 131,-10,1000);
1099 fhQAPIDTOFstatus[iQA] =
new TH1D(Form(
"fhQAPIDTOFstatus_%s",sQAindex[iQA].
Data()),
"QA PID: PID status: TOF;", iNBinsPIDstatus,0,iNBinsPIDstatus);
1101 fhQAPIDTOFbeta[iQA] =
new TH2D(Form(
"fhQAPIDTOFbeta_%s",sQAindex[iQA].
Data()),
"QA PID: TOF #beta information; #it{p} (GeV/#it{c}); TOF #beta", 100,0,10, 101,-0.1,1.5);
1104 fh3PIDPionTPCTOFnSigmaPion[iQA] =
new TH3D(Form(
"fh3PIDPionTPCTOFnSigmaPion_%s",sQAindex[iQA].
Data()),
"QA PID: #pi: TPC-TOF n#sigma (#pi hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1106 fh3PIDPionTPCTOFnSigmaKaon[iQA] =
new TH3D(Form(
"fh3PIDPionTPCTOFnSigmaKaon_%s",sQAindex[iQA].
Data()),
"QA PID: #pi: TPC-TOF n#sigma (K hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1108 fh3PIDPionTPCTOFnSigmaProton[iQA] =
new TH3D(Form(
"fh3PIDPionTPCTOFnSigmaProton_%s",sQAindex[iQA].
Data()),
"QA PID: #pi: TPC-TOF n#sigma (p hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1111 fh3PIDKaonTPCTOFnSigmaPion[iQA] =
new TH3D(Form(
"fh3PIDKaonTPCTOFnSigmaPion_%s",sQAindex[iQA].
Data()),
"QA PID: K: TPC-TOF n#sigma (#pi hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1113 fh3PIDKaonTPCTOFnSigmaKaon[iQA] =
new TH3D(Form(
"fh3PIDKaonTPCTOFnSigmaKaon_%s",sQAindex[iQA].
Data()),
"QA PID: K: TPC-TOF n#sigma (K hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1115 fh3PIDKaonTPCTOFnSigmaProton[iQA] =
new TH3D(Form(
"fh3PIDKaonTPCTOFnSigmaProton_%s",sQAindex[iQA].
Data()),
"QA PID: K: TPC-TOF n#sigma (p hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1118 fh3PIDProtonTPCTOFnSigmaPion[iQA] =
new TH3D(Form(
"fh3PIDProtonTPCTOFnSigmaPion_%s",sQAindex[iQA].
Data()),
"QA PID: p: TPC-TOF n#sigma (#pi hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1120 fh3PIDProtonTPCTOFnSigmaKaon[iQA] =
new TH3D(Form(
"fh3PIDProtonTPCTOFnSigmaKaon_%s",sQAindex[iQA].
Data()),
"QA PID: p: TPC-TOF n#sigma (K hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1122 fh3PIDProtonTPCTOFnSigmaProton[iQA] =
new TH3D(Form(
"fh3PIDProtonTPCTOFnSigmaProton_%s",sQAindex[iQA].
Data()),
"QA PID: p: TPC-TOF n#sigma (p hyp.); n#sigma^{TPC}; n#sigma^{TOF}; #it{p}_{T}", 22,-11,10, 22,-11,10, 100,0,10);
1127 for(
Int_t j = 0x0; j < iNBinsPIDstatus; j++)
1152 printf(
"\n======= List of parameters ========================================\n");
1153 printf(
" -------- Analysis task ---------------------------------------\n");
1154 printf(
" fRunMode: (RunMode) %d\n",
fRunMode);
1155 printf(
" fAnalType: (AnalType) %d\n",
fAnalType);
1156 printf(
" fFillQA: (Bool_t) %s\n",
fFillQA ?
"kTRUE" :
"kFALSE");
1157 printf(
" fProcessCharged: (Bool_t) %s\n",
fProcessCharged ?
"kTRUE" :
"kFALSE");
1158 printf(
" fProcessPID: (Bool_t) %s\n",
fProcessPID ?
"kTRUE" :
"kFALSE");
1159 printf(
" -------- Flow related ----------------------------------------\n");
1163 printf(
" fFlowPOIsPtMin: (Float_t) %g (GeV/c)\n",
fFlowPOIsPtMin);
1164 printf(
" fFlowPOIsPtMax: (Float_t) %g (GeV/c)\n",
fFlowPOIsPtMax);
1166 printf(
" fFlowCentMin: (Int_t) %d (GeV/c)\n",
fFlowCentMin);
1167 printf(
" fFlowCentMax: (Int_t) %d (GeV/c)\n",
fFlowCentMax);
1168 printf(
" fFlowUseNUAWeights: (Bool_t) %s\n",
fFlowUseNUAWeights ?
"kTRUE" :
"kFALSE");
1169 printf(
" fFlowUseNUEWeights: (Bool_t) %s\n",
fFlowUseNUEWeights ?
"kTRUE" :
"kFALSE");
1176 printf(
" -------- Events ----------------------------------------------\n");
1177 printf(
" fTrigger: (Short_t) %d\n",
fTrigger);
1178 printf(
" fMultEstimator: (TString) '%s'\n",
fMultEstimator.Data());
1179 printf(
" fPVtxCutZ: (Double_t) %g (cm)\n",
fPVtxCutZ);
1180 printf(
" fFullCentralityRange: (Bool_t) runs over %s centrality range \n",
fFullCentralityRange ?
"0-100%" :
"50-100%");
1181 printf(
" -------- Charge tracks ---------------------------------------\n");
1189 printf(
" -------- PID (pi,K,p) tracks ---------------------------------\n");
1195 printf(
"=====================================================================\n\n");
1207 printf(
"====== InitializeTask AliAnalysisTaskFlowModesMC =========================\n");
1210 ::Error(
"InitializeTask",
"Analysis type not specified! Terminating!");
1216 ::Error(
"InitializeTask",
"Analysis type: ESD not implemented! Terminating!");
1222 ::Error(
"InitializeTask",
"Analysis type: MCAOD not implemented! Terminating!");
1228 ::Error(
"InitializeTask",
"Collisional system not specified! Terminating!");
1232 AliInputEventHandler* inputHandler = (AliInputEventHandler*)mgr->GetInputEventHandler();
1238 ::Error(
"InitializeTask",
"AliPIDResponse object not found! Terminating!");
1244 ::Error(
"InitializeTask",
"AliPIDCombined object not found! Terminating!");
1249 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF);
1251 ::Info(
"InitializeTask",
"Checking task parameters setting conflicts (ranges, etc)");
1262 ::Error(
"InitializeTask",
"NUA flow weights file not found");
1271 ::Error(
"InitializeTask",
"NUE flow weights file not found");
1282 ::Error(
"InitializeTask",
"Cut: RFPs Pt range wrong!");
1286 ::Info(
"InitializeTask",
"Initialization succesfull!");
1287 printf(
"======================================================================\n\n");
1329 Bool_t eventSelected = kFALSE;
1337 AliInputEventHandler* inputHandler = (AliInputEventHandler*) mgr->GetInputEventHandler();
1338 eventSelected = kTRUE;
1347 return eventSelected;
1360 AliInputEventHandler* inputHandler = (AliInputEventHandler*) mgr->GetInputEventHandler();
1361 UInt_t fSelectMask = inputHandler->IsEventSelected();
1363 Bool_t isTriggerSelected = kFALSE;
1367 isTriggerSelected = fSelectMask& AliVEvent::kINT7;
1371 isTriggerSelected = fSelectMask& AliVEvent::kHighMultV0;
1375 isTriggerSelected = fSelectMask& AliVEvent::kHighMultSPD;
1378 default: isTriggerSelected = kFALSE;
1380 if(!isTriggerSelected){
return kFALSE;}
1387 AliMultSelection* fMultSelection = 0x0;
1388 fMultSelection = (AliMultSelection*)
fEventAOD->FindListObject(
"MultSelection");
1389 Double_t centrV0M = fMultSelection->GetMultiplicityPercentile(
"V0M");
1390 Double_t centrCL1 = fMultSelection->GetMultiplicityPercentile(
"CL1");
1393 if(fabs(centrV0M-centrCL1)>7.5)
return kFALSE;
1398 const AliAODVertex* vtx =
dynamic_cast<const AliAODVertex*
>(
fEventAOD->GetPrimaryVertex());
1399 if(!vtx || vtx->GetNContributors() < 1){
return kFALSE;}
1403 const AliAODVertex* vtxSPD =
dynamic_cast<const AliAODVertex*
>(
fEventAOD->GetPrimaryVertexSPD());
1406 if (((AliAODHeader*)
fEventAOD->GetHeader())->GetRefMultiplicityComb08() < 0)
return kFALSE;
1408 if (
fEventAOD->IsIncompleteDAQ())
return kFALSE;
1410 if (vtx->GetNContributors() < 2 || vtxSPD->GetNContributors()<1)
return kFALSE;
1411 double cov[6]={0};
double covSPD[6]={0};
1412 vtx->GetCovarianceMatrix(cov);
1413 vtxSPD->GetCovarianceMatrix(covSPD);
1416 double zRes = TMath::Sqrt(covSPD[5]);
1417 double fMaxResol=0.25;
1418 if ( vtxSPD->IsFromVertexerZ() && (zRes>fMaxResol))
return kFALSE;
1449 AliAnalysisUtils utils;
1450 utils.SetMinPlpContribMV(5);
1451 utils.SetMaxPlpChi2MV(5);
1452 utils.SetMinWDistMV(15);
1453 utils.SetCheckPlpFromDifferentBCMV(kTRUE);
1457 if(isPileupFromMV)
return kFALSE;
1469 double dz = vtx->GetZ() - vtxSPD->GetZ();
1470 double errTot = TMath::Sqrt(cov[5]+covSPD[5]);
1471 double err = TMath::Sqrt(cov[5]);
1472 double nsigTot = dz/errTot;
1473 double nsig = dz/err;
1474 if (TMath::Abs(dz)>0.2 || TMath::Abs(nsigTot)>10 || TMath::Abs(nsig)>20)
return kFALSE;
1478 const Double_t aodVtxZ = vtx->GetZ();
1479 if( TMath::Abs(aodVtxZ) >
fPVtxCutZ ){
return kFALSE;}
1484 Int_t multEsd = ((AliAODHeader*)
fEventAOD->GetHeader())->GetNumberOfESDTracks();
1487 Int_t multTrkTOF = 0;
1489 for (
Int_t it = 0; it < nTracks; it++) {
1490 AliAODTrack* AODTrk = (AliAODTrack*)
fEventAOD->GetTrack(it);
1491 if (!AODTrk){
delete AODTrk;
continue; }
1492 if (AODTrk->TestFilterBit(128)) {multTPC++;}
1493 if (AODTrk->TestFilterBit(32)){
1495 if ( TMath::Abs(AODTrk->GetTOFsignalDz()) <= 10 && AODTrk->GetTOFsignal() >= 12000 && AODTrk->GetTOFsignal() <= 25000) multTrkTOF++;
1501 Double_t multESDTPCDif = multEsdn - multTPCn*3.38;
1503 if (multESDTPCDif > 15000.)
return kFALSE;
1510 if(
fExtraPileUp && multTrkTOFn< (-32+ 0.32*multTrkn+0.000037*multTrkn*multTrkn))
return kFALSE;
1511 if(
fExtraPileUp && multTrkTOFn> (13+0.46*multTrkn+0.000018*multTrkn*multTrkn))
return kFALSE;
1535 AliInputEventHandler* inputHandler = (AliInputEventHandler*) mgr->GetInputEventHandler();
1536 UInt_t fSelectMask = inputHandler->IsEventSelected();
1538 Bool_t isTriggerSelected = kFALSE;
1542 isTriggerSelected = fSelectMask& AliVEvent::kINT7;
1546 isTriggerSelected = fSelectMask& AliVEvent::kHighMultV0;
1550 isTriggerSelected = fSelectMask& AliVEvent::kHighMultSPD;
1553 default: isTriggerSelected = kFALSE;
1556 if(!isTriggerSelected)
1563 const AliAODVertex* vtx =
dynamic_cast<const AliAODVertex*
>(
fEventAOD->GetPrimaryVertex());
1564 if(!vtx || vtx->GetNContributors() < 1)
1569 const AliAODVertex* vtxSPD =
dynamic_cast<const AliAODVertex*
>(
fEventAOD->GetPrimaryVertexSPD());
1573 vtxSPD->GetCovarianceMatrix(cov);
1574 Double_t zRes = TMath::Sqrt(cov[5]);
1575 if ( vtxSPD->IsFromVertexerZ() && (zRes > dMaxResol))
return kFALSE;
1592 AliAnalysisUtils utils;
1593 utils.SetMinPlpContribMV(5);
1594 utils.SetMaxPlpChi2MV(5);
1595 utils.SetMinWDistMV(15);
1596 utils.SetCheckPlpFromDifferentBCMV(kFALSE);
1598 utils.SetCheckPlpFromDifferentBCMV(kTRUE);
1600 if(isPileupFromMV)
return kFALSE;
1630 const Double_t aodVtxZ = vtx->GetZ();
1646 const AliAODVertex* aodVtx =
fEventAOD->GetPrimaryVertex();
1647 const Double_t dVtxZ = aodVtx->GetZ();
1648 const Int_t iNumContr = aodVtx->GetNContributors();
1649 const AliAODVertex* spdVtx =
fEventAOD->GetPrimaryVertexSPD();
1650 const Int_t iNumContrSPD = spdVtx->GetNContributors();
1651 const Double_t spdVtxZ = spdVtx->GetZ();
1660 spdVtx->GetCovarianceMatrix(cov);
1661 Double_t zRes = TMath::Sqrt(cov[5]);
1664 AliMultSelection* fMultSelection = 0x0;
1665 fMultSelection = (AliMultSelection*)
fEventAOD->FindListObject(
"MultSelection");
1666 Double_t centrV0M = fMultSelection->GetMultiplicityPercentile(
"V0M");
1667 Double_t centrCL1 = fMultSelection->GetMultiplicityPercentile(
"CL1");
1672 Int_t multEsd = ((AliAODHeader*)
fEventAOD->GetHeader())->GetNumberOfESDTracks();
1675 Int_t multTrkTOF = 0;
1676 for (
Int_t it = 0; it < nTracks; it++) {
1677 AliAODTrack* AODTrk = (AliAODTrack*)
fEventAOD->GetTrack(it);
1678 if (!AODTrk){
delete AODTrk;
continue; }
1679 if (AODTrk->TestFilterBit(128)) {multTPC++;}
1680 if (AODTrk->TestFilterBit(32)){
1682 if ( TMath::Abs(AODTrk->GetTOFsignalDz()) <= 10 && AODTrk->GetTOFsignal() >= 12000 && AODTrk->GetTOFsignal() <= 25000) multTrkTOF++;
1757 AliAODTrack* track = 0x0;
1758 AliMCParticle* particle = 0x0;
1765 if(iNumTracks < 1)
return;
1776 for(
Double_t iTrack(0); iTrack < iNumTracks; iTrack++)
1779 particle =
static_cast<AliMCParticle*
>(
fEventMC->GetTrack(iTrack));
1791 track =
static_cast<AliAODTrack*
>(
fEventAOD->GetTrack(iTrack));
1792 if(!track)
continue;
1881 if(!track)
return kFALSE;
1894 chi2TPC = track->Chi2perNDF();
1905 const AliAODVertex* vertex =
fEventAOD->GetPrimaryVertex();
1906 if(!vertex)
return kFALSE;
1908 track->GetXYZ(dTrackXYZ);
1909 vertex->GetXYZ(dVertexXYZ);
1912 dDCAXYZ[i] = dTrackXYZ[i] - dVertexXYZ[i];
1936 if(iQAindex == 0)
return;
1947 if(!particle)
return;
1948 if(iQAindex == 0)
return;
1964 for(
Short_t i(0); i < 32; i++)
1966 if(track->TestFilterBit(TMath::Power(2.,i)))
1977 Double_t dDCAXYZ[3] = {-999., -999., -999.};
1978 const AliAODVertex* vertex =
fEventAOD->GetPrimaryVertex();
1981 Double_t dTrackXYZ[3] = {-999., -999., -999.};
1982 Double_t dVertexXYZ[3] = {-999., -999., -999.};
1984 track->GetXYZ(dTrackXYZ);
1985 vertex->GetXYZ(dVertexXYZ);
1988 dDCAXYZ[i] = dTrackXYZ[i] - dVertexXYZ[i];
1990 fhQAChargedDCAxy[iQAindex]->Fill(TMath::Sqrt(dDCAXYZ[0]*dDCAXYZ[0] + dDCAXYZ[1]*dDCAXYZ[1]));
2019 if(iNumTracks < 1)
return;
2025 AliAODTrack* track = 0x0;
2026 AliMCParticle* particle = 0x0;
2038 for(
Double_t iTrack(0); iTrack < iNumTracks; iTrack++)
2144 switch (TMath::Abs(particle->PdgCode())) {
2147 fVectorPion->emplace_back(
FlowPart(particle->Pt(),particle->Phi(),particle->Eta(), particle->Charge(),
kPion,
fPDGMassPion, particle->Px(), particle->Py(), particle->Pz()) );
2152 fVectorKaon->emplace_back(
FlowPart(particle->Pt(),particle->Phi(),particle->Eta(), particle->Charge(),
kKaon,
fPDGMassKaon, particle->Px(), particle->Py(), particle->Pz()) );
2192 Bool_t bIsTPCok = (pidStatusTPC == AliPIDResponse::kDetPidOk);
2193 Bool_t bIsTOFok = ((pidStatusTOF == AliPIDResponse::kDetPidOk) && (track->GetStatus()& AliVTrack::kTOFout) && (track->GetStatus()& AliVTrack::kTIME) && (track->GetTOFsignal() > 12000) && (track->GetTOFsignal() < 100000));
2201 Double_t dNumSigmaTPC[5] = {-99,-99,-99,-99,-99};
2202 Double_t dNumSigmaTOF[5] = {-99,-99,-99,-99,-99};
2206 Float_t ProbBayes[5] = {0,0,0,0,0};
2208 Double_t probTPC[AliPID::kSPECIES]={0.};
2209 Double_t probTOF[AliPID::kSPECIES]={0.};
2210 Double_t probTPCTOF[AliPID::kSPECIES]={0.};
2216 dNumSigmaTPC[0] = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(track, AliPID::kElectron));
2217 dNumSigmaTPC[1] = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(track, AliPID::kMuon));
2218 dNumSigmaTPC[2] = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(track, AliPID::kPion));
2219 dNumSigmaTPC[3] = TMath::Abs(
fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon));
2225 dNumSigmaTOF[0] = TMath::Abs(
fPIDResponse->NumberOfSigmasTOF(track, AliPID::kElectron));
2226 dNumSigmaTOF[1] = TMath::Abs(
fPIDResponse->NumberOfSigmasTOF(track, AliPID::kMuon));
2227 dNumSigmaTOF[2] = TMath::Abs(
fPIDResponse->NumberOfSigmasTOF(track, AliPID::kPion));
2228 dNumSigmaTOF[3] = TMath::Abs(
fPIDResponse->NumberOfSigmasTOF(track, AliPID::kKaon));
2243 Int_t ParticleFlag[]={0,0,0,0};
2244 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
2249 if(dP>0.2 && dP <= 0.5)
2252 Double_t dMinSigmasTPC = TMath::MinElement(5,dNumSigmaTPC);
2255 if(dMinSigmasTPC == dNumSigmaTPC[2] && TMath::Abs(dNumSigmaTPC[2]) <=
fCutPIDnSigmaPionMax) ParticleFlag[1] = 1;
2256 if(dMinSigmasTPC == dNumSigmaTPC[3] && TMath::Abs(dNumSigmaTPC[3]) <=
fCutPIDnSigmaKaonMax) ParticleFlag[2] = 1;
2257 if(dMinSigmasTPC == dNumSigmaTPC[4] && TMath::Abs(dNumSigmaTPC[4]) <=
fCutPIDnSigmaProtonMax) ParticleFlag[3] = 1;
2260 ProbBayes[0] = probTPC[0];
2261 ProbBayes[1] = probTPC[1];
2262 ProbBayes[2] = probTPC[2];
2263 ProbBayes[3] = probTPC[3];
2264 ProbBayes[4] = probTPC[4];
2266 Double_t dMaxBayesianProb = TMath::MaxElement(5,ProbBayes);
2269 if(dMaxBayesianProb == ProbBayes[2] && TMath::Abs(dNumSigmaTPC[2]) <=
fCutPIDnSigmaPionMax)ParticleFlag[1] = 1;
2270 if(dMaxBayesianProb == ProbBayes[3] && TMath::Abs(dNumSigmaTPC[3]) <=
fCutPIDnSigmaKaonMax)ParticleFlag[2] = 1;
2271 if(dMaxBayesianProb == ProbBayes[4] && TMath::Abs(dNumSigmaTPC[4]) <=
fCutPIDnSigmaProtonMax)ParticleFlag[3] = 1;
2294 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF|AliPIDResponse::kDetTPC);
2298 AliAODPid* pidObj = track->GetDetPid();
2299 if ((detUsed >= AliPIDResponse::kDetTOF) && (pidObj && pidObj->GetTOFsignal() < 99999)){
2304 Double_t dNumSigmaCombined[5] = {-99,-99,-99,-99,-99};
2312 if(bIsTOFok) { dNumSigmaCombined[i] = TMath::Sqrt(dNumSigmaTPC[i]*dNumSigmaTPC[i] + dNumSigmaTOF[i]*dNumSigmaTOF[i]); }
2313 else { dNumSigmaCombined[i] = dNumSigmaTPC[i]; }
2317 Double_t dMinSigmasCombined = TMath::MinElement(5,dNumSigmaCombined);
2320 if(dMinSigmasCombined == dNumSigmaCombined[0] && TMath::Abs(dNumSigmaCombined[0]) <=
fCutPIDnSigmaPionMax) ParticleFlag[0] = 1;
2325 if(dMinSigmasCombined == dNumSigmaCombined[2] && TMath::Abs(dNumSigmaCombined[2]) <= 3.) ParticleFlag[1] = 1;
2326 if(dMinSigmasCombined == dNumSigmaCombined[3] && TMath::Abs(dNumSigmaCombined[3]) <= 2.5) ParticleFlag[2] = 1;
2327 if(dMinSigmasCombined == dNumSigmaCombined[4] && TMath::Abs(dNumSigmaCombined[4]) <= 3.) ParticleFlag[3] = 1;
2331 if(dP < 2.5 && dMinSigmasCombined == dNumSigmaCombined[2] && TMath::Abs(dNumSigmaCombined[2]) <= 3.) ParticleFlag[1] = 1;
2332 if(dP > 2.5 && dMinSigmasCombined == dNumSigmaCombined[2] && TMath::Abs(dNumSigmaCombined[2]) <= 2.) ParticleFlag[1] = 1;
2334 if(dP < 2. && dMinSigmasCombined == dNumSigmaCombined[3] && TMath::Abs(dNumSigmaCombined[3]) <= 2.5) ParticleFlag[2] = 1;
2335 if(dP > 2. && dP < 3. && dMinSigmasCombined == dNumSigmaCombined[3] && TMath::Abs(dNumSigmaCombined[3]) <= 2.) ParticleFlag[2] = 1;
2336 if(dP > 3. && dMinSigmasCombined == dNumSigmaCombined[3] && TMath::Abs(dNumSigmaCombined[3]) <= 1.5) ParticleFlag[2] = 1;
2338 if(dP < 3. && dMinSigmasCombined == dNumSigmaCombined[4] && TMath::Abs(dNumSigmaCombined[4]) <= 3.) ParticleFlag[3] = 1;
2339 if(dP > 3. && dP < 5. && dMinSigmasCombined == dNumSigmaCombined[4] && TMath::Abs(dNumSigmaCombined[4]) <= 2.) ParticleFlag[3] = 1;
2340 if(dP > 5. && dMinSigmasCombined == dNumSigmaCombined[4] && TMath::Abs(dNumSigmaCombined[4]) <= 1.5) ParticleFlag[3] = 1;
2345 if(dP < 2.5 && dMinSigmasCombined == dNumSigmaCombined[2] && TMath::Abs(dNumSigmaCombined[2]) <= 3.) ParticleFlag[1] = 1;
2346 if(dP > 2.5 && dP < 4. && dMinSigmasCombined == dNumSigmaCombined[2] && TMath::Abs(dNumSigmaCombined[2]) <= 1.5) ParticleFlag[1] = 1;
2347 if(dP > 4. && dMinSigmasCombined == dNumSigmaCombined[2] && TMath::Abs(dNumSigmaCombined[2]) <= 1.) ParticleFlag[1] = 1;
2349 if(dP < 2. && dMinSigmasCombined == dNumSigmaCombined[3] && TMath::Abs(dNumSigmaCombined[3]) <= 2.5) ParticleFlag[2] = 1;
2350 if(dP > 2. && dP < 3. && dMinSigmasCombined == dNumSigmaCombined[3] && TMath::Abs(dNumSigmaCombined[3]) <= 1.5)ParticleFlag[2] = 1;
2351 if(dP > 3. && dMinSigmasCombined == dNumSigmaCombined[3] && TMath::Abs(dNumSigmaCombined[3]) <= 1.) ParticleFlag[2] = 1;
2353 if(dP < 3. && dMinSigmasCombined == dNumSigmaCombined[4] && TMath::Abs(dNumSigmaCombined[4]) <= 3.) ParticleFlag[3] = 1;
2354 if(dP > 3. && dP < 5. && dMinSigmasCombined == dNumSigmaCombined[4] && TMath::Abs(dNumSigmaCombined[4]) <= 2.) ParticleFlag[3] = 1;
2355 if(dP > 5. && dMinSigmasCombined == dNumSigmaCombined[4] && TMath::Abs(dNumSigmaCombined[4]) <= 1.) ParticleFlag[3] = 1;
2362 ProbBayes[0] = probTPCTOF[0];
2363 ProbBayes[1] = probTPCTOF[1];
2364 ProbBayes[2] = probTPCTOF[2];
2365 ProbBayes[3] = probTPCTOF[3];
2366 ProbBayes[4] = probTPCTOF[4];
2367 Double_t dMaxBayesianProb = TMath::MaxElement(5,ProbBayes);
2369 if(dMaxBayesianProb == ProbBayes[0] && TMath::Abs(dNumSigmaCombined[0]) <=
fCutPIDnSigmaPionMax) ParticleFlag[0] = 1;
2370 if(dMaxBayesianProb == ProbBayes[2] && TMath::Abs(dNumSigmaCombined[2]) <=
fCutPIDnSigmaPionMax) ParticleFlag[1] = 1;
2371 if(dMaxBayesianProb == ProbBayes[3] && TMath::Abs(dNumSigmaCombined[3]) <=
fCutPIDnSigmaKaonMax) ParticleFlag[2] = 1;
2372 if(dMaxBayesianProb == ProbBayes[4] && TMath::Abs(dNumSigmaCombined[4]) <=
fCutPIDnSigmaProtonMax) ParticleFlag[3] = 1;
2373 }
else{ParticleFlag[0] = 1;}
2400 if(!ParticleFlag[0] && ParticleFlag[1] && !ParticleFlag[2] && !ParticleFlag[3]){
2402 }
else if(!ParticleFlag[0] && !ParticleFlag[1] && ParticleFlag[2] && !ParticleFlag[3]){
2404 }
else if(!ParticleFlag[0] && !ParticleFlag[1] && !ParticleFlag[2] && ParticleFlag[3]){
2420 ::Error(
"FillPIDQA",
"AliPIDResponse or AliPIDCombined object not found!");
2431 Bool_t bIsTPCok = (pidStatusTPC == AliPIDResponse::kDetPidOk);
2434 Bool_t bIsTOFok = ((pidStatusTOF == AliPIDResponse::kDetPidOk) && (track->GetStatus()& AliVTrack::kTOFout) && (track->GetStatus()& AliVTrack::kTIME) && (track->GetTOFsignal() > 12000) && (track->GetTOFsignal() < 100000));
2448 dNumSigmaTPC[0] =
fPIDResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
2449 dNumSigmaTPC[1] =
fPIDResponse->NumberOfSigmasTPC(track, AliPID::kMuon);
2450 dNumSigmaTPC[2] =
fPIDResponse->NumberOfSigmasTPC(track, AliPID::kPion);
2451 dNumSigmaTPC[3] =
fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
2454 dTPCdEdx = track->GetTPCsignal();
2459 dNumSigmaTPC[0] = -11.;
2460 dNumSigmaTPC[1] = -11.;
2461 dNumSigmaTPC[2] = -11.;
2462 dNumSigmaTPC[3] = -11.;
2463 dNumSigmaTPC[4] = -11.;
2470 dNumSigmaTOF[0] =
fPIDResponse->NumberOfSigmasTOF(track, AliPID::kElectron);
2471 dNumSigmaTOF[1] =
fPIDResponse->NumberOfSigmasTOF(track, AliPID::kMuon);
2472 dNumSigmaTOF[2] =
fPIDResponse->NumberOfSigmasTOF(track, AliPID::kPion);
2473 dNumSigmaTOF[3] =
fPIDResponse->NumberOfSigmasTOF(track, AliPID::kKaon);
2477 track->GetIntegratedTimes(dTOF);
2478 dTOFbeta = dTOF[0] / track->GetTOFsignal();
2483 dNumSigmaTOF[0] = -11.;
2484 dNumSigmaTOF[1] = -11.;
2485 dNumSigmaTOF[2] = -11.;
2486 dNumSigmaTOF[3] = -11.;
2487 dNumSigmaTOF[4] = -11.;
2608 if(fRunNumber < 0 || fRunNumber != fEventAOD->
GetRunNumber() )
2615 if(!dirFlowNUAWeights) {::Error(
"ProcessEvent",
"TList from flow weights not found.");
return kFALSE; }
2644 TDirectory* dirFlowNUEWeights[5] = {0x0};
2646 const char* gCentrality[] = {
"0-10cc",
"10-20cc",
"20-30cc",
"30-40cc",
"40-50cc"};
2648 dirFlowNUEWeights[iCentrality] = (TDirectory*)
fFlowNUEWeightsFile->Get(gCentrality[iCentrality]);
2649 if(!dirFlowNUEWeights[iCentrality]) {::Error(
"ProcessEvent",
"TDirectoy from NUE weights not found.");
return kFALSE; }
2650 fhNUEWeightRefsPlus[iCentrality] =
dynamic_cast<TH1F*
>( dirFlowNUEWeights[iCentrality]->FindObject(
"ChargedPlus"));
if(!
fhNUEWeightRefsPlus[iCentrality]) { ::Error(
"ProcessEvent",
"Positive Refs NUE weights not found");
return kFALSE; }
2651 fhNUEWeightRefsMinus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"ChargedMinus"));
if(!
fhNUEWeightRefsMinus[iCentrality]) { ::Error(
"ProcessEvent",
"Negative Refs NUE weights not found");
return kFALSE; }
2652 fhNUEWeightChargedPlus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"ChargedPlus"));
if(!
fhNUEWeightChargedPlus[iCentrality]) { ::Error(
"ProcessEvent",
"Positive Charged NUE weights not found");
return kFALSE; }
2653 fhNUEWeightChargedMinus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"ChargedMinus"));
if(!
fhNUEWeightChargedMinus[iCentrality]) { ::Error(
"ProcessEvent",
"Negative Charged NUE weights not found");
return kFALSE; }
2654 fhNUEWeightPionPlus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"PionPlus"));
if(!
fhNUEWeightPionPlus[iCentrality]) { ::Error(
"ProcessEvent",
"Positive Pion NUE weights not found");
return kFALSE; }
2655 fhNUEWeightPionMinus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"PionMinus"));
if(!
fhNUEWeightPionMinus[iCentrality]) { ::Error(
"ProcessEvent",
"Negative Pion NUE weights not found");
return kFALSE; }
2656 fhNUEWeightKaonPlus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"KaonPlus"));
if(!
fhNUEWeightKaonPlus[iCentrality]) { ::Error(
"ProcessEvent",
"Positive Kaon NUE weights not found");
return kFALSE; }
2657 fhNUEWeightKaonMinus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"KaonMinus"));
if(!
fhNUEWeightKaonMinus[iCentrality]) { ::Error(
"ProcessEvent",
"Negative Kaon NUE weights not found");
return kFALSE; }
2658 fhNUEWeightProtonPlus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"ProtonPlus"));
if(!
fhNUEWeightProtonPlus[iCentrality]) { ::Error(
"ProcessEvent",
"Positive Proton NUE weights not found");
return kFALSE; }
2659 fhNUEWeightProtonMinus[iCentrality] =
dynamic_cast<TH1F*
>(dirFlowNUEWeights[iCentrality]->FindObject(
"ProtonMinus"));
if(!
fhNUEWeightProtonMinus[iCentrality]) { ::Error(
"ProcessEvent",
"Negative Proton NUE weights not found");
return kFALSE; }
2727 TComplex vector = TComplex(0,0,kFALSE);
2739 vector =
TwoGap(iHarmonics,-iHarmonics);
2740 dValue = vector.Re()/Cn2;
2742 if( TMath::Abs(dValue < 1) )
2756 TComplex Four_2222_GapP =
FourGapPos(2, 2, -2, -2);
2757 double c4_2222_GapP = Four_2222_GapP.Re()/Dn4GapP;
2762 TComplex Four_3333_GapP =
FourGapPos(3, 3, -3, -3);
2763 double c4_3333_GapP = Four_3333_GapP.Re()/Dn4GapP;
2768 TComplex Four_3232_GapP =
FourGapPos(3, 2, -3, -2);
2769 double c4_3232_GapP = Four_3232_GapP.Re()/Dn4GapP;
2778 TComplex Six_222222_GapP =
SixGapPos(2, 2, 2, -2, -2, -2);
2779 double c6_222222_GapP = Six_222222_GapP.Re()/Dn6GapP;
2801 TComplex vector = TComplex(0,0,kFALSE);
2817 dValue = vector.Re()/Dn2;
2818 if( TMath::Abs(dValue < 1) )
2832 dValue = vector.Re()/Dn2;
2833 if( TMath::Abs(dValue < 1) )
2850 dValue = vector.Re()/DDn3GapP;
2851 if( TMath::Abs(dValue < 1) ){
2866 dValue = vector.Re()/DDn3GapP;
2867 if( TMath::Abs(dValue < 1) ){
2879 if( TMath::Abs(dValue < 1) ){
2889 if( TMath::Abs(dValue < 1) ){
2904 TProfile2D** profile2Pos = 0x0;
2905 TProfile2D** profile2Neg = 0x0;
2907 TProfile2D** profile3Pos = 0x0;
2908 TProfile2D** profile3Neg = 0x0;
2909 TProfile2D* profile4Pos = 0x0;
2910 TProfile2D* profile4Neg = 0x0;
2936 ::Error(
"DoFlowPID",
"Unexpected species! Terminating!");
2970 ::Error(
"DoFlowPID with mixed harmonics",
"Unexpected species! Terminating!");
2982 TComplex vector = TComplex(0,0,kFALSE);
3002 dValue = vector.Re()/Dn2;
3003 if( TMath::Abs(dValue < 1) ){
3017 dValue = vector.Re()/Dn2;
3018 if( TMath::Abs(dValue < 1) ){
3036 dValue = vector.Re()/DDn3GapP;
3037 if( TMath::Abs(dValue < 1) ){
3052 dValue = vector.Re()/DDn3GapP;
3053 if( TMath::Abs(dValue < 1) ){
3066 dValue = vector.Re()/DDn4GapP;
3067 if( TMath::Abs(dValue < 1) ){
3077 dValue = vector.Re()/DDn4GapP;
3078 if( TMath::Abs(dValue < 1) ){
3096 TH3D* h3NUAWeights = 0x0;
3097 TH1F* hNUEWeights = 0x0;
3116 Double_t dQcosPos, dQcosNeg, dQsinPos, dQsinNeg;
3123 ::Warning(
"FillRefsVectors",
"Unexpected part. species (%d) in selected sample (expected %d)",part->species,
kCharged);
3131 if(!h3NUAWeights) { ::Error(
"FillRefsVectors",
"Histogram with NUA weights not found.");
continue; }
3139 if(!hNUEWeights) { ::Error(
"FillRefsVectors",
"Histogram with NUE weights not found.");
return; }
3157 dNUAWeight = h3NUAWeights->GetBinContent(h3NUAWeights->FindBin(part->phi,part->eta,
fEventAOD->GetPrimaryVertex()->GetZ()));
3158 if(dNUAWeight <= 0) dNUAWeight = 1.;
3163 dNUEWeight = hNUEWeights->GetBinContent(hNUEWeights->FindBin(part->pt));
3164 if(dNUEWeight <= 0) dNUEWeight = 1.;
3170 if(part->eta > dEtaGap / 2)
3176 dQcosPos = TMath::Power(dNUAWeight*dNUEWeight,iPower) * TMath::Cos(iHarm * part->phi);
3177 dQsinPos = TMath::Power(dNUAWeight*dNUEWeight,iPower) * TMath::Sin(iHarm * part->phi);
3178 fFlowVecQpos[iHarm][iPower] += TComplex(dQcosPos,dQsinPos,kFALSE);
3182 if(part->eta < -dEtaGap / 2 )
3188 dQcosNeg = TMath::Power(dNUAWeight*dNUEWeight,iPower) * TMath::Cos(iHarm * part->phi);
3189 dQsinNeg = TMath::Power(dNUAWeight*dNUEWeight,iPower) * TMath::Sin(iHarm * part->phi);
3190 fFlowVecQneg[iHarm][iPower] += TComplex(dQcosNeg,dQsinNeg,kFALSE);
3224 std::vector<FlowPart>* vector = 0x0;
3227 TH3D* h3NUAWeights = 0x0;
3228 TH1F* hNUEWeights = 0x0;
3258 ::Error(
"FillPOIsVectors",
"Selected species unknown.");
3268 for (
auto part = vector->begin(); part != vector->end(); part++)
3319 ::Error(
"FillPOIsVectors",
"Selected species unknown.");
3323 if(
fFlowUseNUAWeights && !h3NUAWeights) { ::Error(
"FillPOIsVectors",
"Histogram with NUA weights not found.");
continue; }
3324 if(
fFlowUseNUEWeights && !hNUEWeights) { ::Error(
"FillPOIsVectors",
"Histogram with NUE weights not found.");
return; }
3327 if( part->species != species)
3329 ::Warning(
"FillPOIsVectors",
"Unexpected part. species (%d) in selected sample (expected %d)",part->species,species);
3345 dNUAWeight = h3NUAWeights->GetBinContent(h3NUAWeights->FindBin(part->phi,part->eta,
fEventAOD->GetPrimaryVertex()->GetZ()));
3346 if(dNUAWeight <= 0){ dNUAWeight = 1.;}
3347 if(iEtaGapIndex == 0){
3363 ::Error(
"Fill fh3AfterNUAWeights",
"Selected species unknown.");
3371 dNUEWeight = hNUEWeights->GetBinContent(hNUEWeights->FindBin(part->pt));
3372 if(dNUEWeight <= 0) dNUEWeight = 1.;
3373 if(iEtaGapIndex == 0){
3389 ::Error(
"Fill fhAfterNUEWeights",
"Selected species unknown.");
3395 if(part->eta > dEtaGap / 2 )
3401 dCos = TMath::Power(dNUAWeight*dNUEWeight,iPower) * TMath::Cos(iHarm * part->phi);
3402 dSin = TMath::Power(dNUAWeight*dNUEWeight,iPower) * TMath::Sin(iHarm * part->phi);
3403 fFlowVecPpos[iHarm][iPower][iPtBin] += TComplex(dCos,dSin,kFALSE);
3407 if(part->eta < -dEtaGap / 2 ){
3412 dCos = TMath::Power(dNUAWeight*dNUEWeight,iPower) * TMath::Cos(iHarm * part->phi);
3413 dSin = TMath::Power(dNUAWeight*dNUEWeight,iPower) * TMath::Sin(iHarm * part->phi);
3414 fFlowVecPneg[iHarm][iPower][iPtBin] += TComplex(dCos,dSin,kFALSE);
3428 return (
Short_t) (pt / dPtBinWidth);
3437 array[iHarm][iPower] = TComplex(0,0,kFALSE);
3446 array[iHarm][iPower][iPt] = TComplex(0,0,kFALSE);
3454 printf(
" ### Listing (TComplex) flow vector array ###########################\n");
3457 printf(
"Harm %d (power):",iHarm);
3460 printf(
"|(%d) %g+%g(i)",iPower, array[iHarm][iPower].Re(), array[iHarm][iPower].Im());
3483 if(generated < (i+1) )
3515 AliMultSelection* multSelection = 0x0;
3516 multSelection = (AliMultSelection*)
fEventAOD->FindListObject(
"MultSelection");
3517 if(!multSelection) { AliError(
"AliMultSelection object not found! Returning -1");
return -1;}
3519 dPercentile = multSelection->GetMultiplicityPercentile(
fMultEstimator.Data());
3523 if(dPercentile > 100 || dPercentile < 0) { AliWarning(
"Centrality percentile estimated not within 0-100 range. Returning -1");
return -1;}
3524 else {
return dPercentile;}
3527 if(dPercentile > 100 || dPercentile <50) { AliWarning(
"Centrality percentile estimated not within 50-100 range. Returning -1");
return -1;}
3528 else {
return dPercentile;}
3538 AliWarning(Form(
"Multiplicity estimator '%s' not supported. Returning -1\n",
fMultEstimator.Data()));
3551 AliCollisionGeometry* headerH =
dynamic_cast<AliCollisionGeometry*
>(
dynamic_cast<AliMCEvent*
>(
fEventMC)->GenEventHeader());
3552 if(headerH) gImpactParameter = headerH->ImpactParameter();
3564 printf(
"One of vertices is not valid\n");
3567 static TMatrixDSym vVb(3);
3569 double dx = v0->GetX()-v1->GetX();
3570 double dy = v0->GetY()-v1->GetY();
3571 double dz = v0->GetZ()-v1->GetZ();
3572 double cov0[6],cov1[6];
3573 v0->GetCovarianceMatrix(cov0);
3574 v1->GetCovarianceMatrix(cov1);
3575 vVb(0,0) = cov0[0]+cov1[0];
3576 vVb(1,1) = cov0[2]+cov1[2];
3577 vVb(2,2) = cov0[5]+cov1[5];
3578 vVb(1,0) = vVb(0,1) = cov0[1]+cov1[1];
3579 vVb(0,2) = vVb(1,2) = vVb(2,0) = vVb(2,1) = 0.;
3581 if (!vVb.IsValid()) {printf(
"Singular Matrix\n");
return dist;}
3582 dist = vVb(0,0)*dx*dx + vVb(1,1)*dy*dy + vVb(2,2)*dz*dz+2*vVb(0,1)*dx*dy + 2*vVb(0,2)*dx*dz + 2*vVb(1,2)*dy*dz;
3583 return dist>0 ? TMath::Sqrt(dist) : -1;
3602 if (n < 0)
return TComplex::Conjugate(
fFlowVecQpos[-n][p]);
3608 if (n < 0)
return TComplex::Conjugate(
fFlowVecQpos[-n][p]);
3614 if(n < 0)
return TComplex::Conjugate(
fFlowVecQneg[-n][p]);
3620 if(n < 0)
return TComplex::Conjugate(
fFlowVecPpos[-n][p][pt]);
3626 if(n < 0)
return TComplex::Conjugate(
fFlowVecPpos[-n][p][pt]);
3632 if(n < 0)
return TComplex::Conjugate(
fFlowVecPneg[-n][p][pt]);
3638 if(n < 0)
return TComplex::Conjugate(
fFlowVecS[-n][p][pt]);
3647 TComplex formula =
Q(n1,1)*
Q(n2,1) -
Q(n1+n2,2);
3659 TComplex formula =
P(n1,1,pt)*
Q(n2,1) -
S(n1+n2,1,pt);
3689 TComplex formula =
Q(n1,1)*
Q(n2,1)*
Q(n3,1)*
Q(n4,1)-
Q(n1+n2,2)*
Q(n3,1)*
Q(n4,1)-
Q(n2,1)*
Q(n1+n3,2)*
Q(n4,1)
3690 -
Q(n1,1)*
Q(n2+n3,2)*
Q(n4,1)+2.*
Q(n1+n2+n3,3)*
Q(n4,1)-
Q(n2,1)*
Q(n3,1)*
Q(n1+n4,2)
3691 +
Q(n2+n3,2)*
Q(n1+n4,2)-
Q(n1,1)*
Q(n3,1)*
Q(n2+n4,2)+
Q(n1+n3,2)*
Q(n2+n4,2)
3692 + 2.*
Q(n3,1)*
Q(n1+n2+n4,3)-
Q(n1,1)*
Q(n2,1)*
Q(n3+n4,2)+
Q(n1+n2,2)*
Q(n3+n4,2)
3693 + 2.*
Q(n2,1)*
Q(n1+n3+n4,3)+2.*
Q(n1,1)*
Q(n2+n3+n4,3)-6.*
Q(n1+n2+n3+n4,4);
3699 TComplex formula =
P(n1,1,pt)*
Q(n2,1)*
Q(n3,1)*
Q(n4,1)-
S(n1+n2,2,pt)*
Q(n3,1)*
Q(n4,1)-
Q(n2,1)*
S(n1+n3,2,pt)*
Q(n4,1)
3700 -
P(n1,1,pt)*
Q(n2+n3,2)*
Q(n4,1)+2.*
S(n1+n2+n3,3,pt)*
Q(n4,1)-
Q(n2,1)*
Q(n3,1)*
S(n1+n4,2,pt)
3701 +
Q(n2+n3,2)*
S(n1+n4,2,pt)-
P(n1,1,pt)*
Q(n3,1)*
Q(n2+n4,2)+
S(n1+n3,2,pt)*
Q(n2+n4,2)
3702 + 2.*
Q(n3,1)*
S(n1+n2+n4,3,pt)-
P(n1,1,pt)*
Q(n2,1)*
Q(n3+n4,2)+
S(n1+n2,2,pt)*
Q(n3+n4,2)
3703 + 2.*
Q(n2,1)*
S(n1+n3+n4,3,pt)+2.*
P(n1,1,pt)*
Q(n2+n3+n4,3)-6.*
S(n1+n2+n3+n4,4,pt);
3709 TComplex formula =
QGapPos(n1,1)*
QGapPos(n2,1)*
QGapNeg(n3,1)*
QGapNeg(n4,1)-
QGapPos(n1+n2,2)*
QGapNeg(n3,1)*
QGapNeg(n4,1)-
QGapPos(n1,1)*
QGapPos(n2,1)*
QGapNeg(n3+n4,2)+
QGapPos(n1+n2,2)*
QGapNeg(n3+n4,2);
3716 TComplex formula =
QGapNeg(n1,1)*
QGapNeg(n2,1)*
QGapPos(n3,1)*
QGapPos(n4,1)-
QGapNeg(n1+n2,2)*
QGapPos(n3,1)*
QGapPos(n4,1)-
QGapNeg(n1,1)*
QGapNeg(n2,1)*
QGapPos(n3+n4,2)+
QGapNeg(n1+n2,2)*
QGapPos(n3+n4,2);
3723 TComplex formula =
PGapPos(n1,1,pt)*
QGapNeg(n2,1)*
QGapNeg(n3,1)*
QGapNeg(n4,1)-
PGapPos(n1,1,pt)*
QGapNeg(n2+n3,2)*
QGapNeg(n4,1) -
PGapPos(n1,1,pt)*
QGapNeg(n2+n4,2)*
QGapNeg(n3,1) -
PGapPos(n1,1,pt)*
QGapNeg(n3+n4,2)*
QGapNeg(n2,1) + 2.*
PGapPos(n1,1,pt)*
QGapNeg(n2+n3+n4,3);
3729 TComplex formula =
PGapNeg(n1,1,pt)*
QGapPos(n2,1)*
QGapPos(n3,1)*
QGapPos(n4,1)-
PGapNeg(n1,1,pt)*
QGapPos(n2+n3,2)*
QGapPos(n4,1) -
PGapNeg(n1,1,pt)*
QGapPos(n2+n4,2)*
QGapPos(n3,1) -
PGapNeg(n1,1,pt)*
QGapPos(n3+n4,2)*
QGapPos(n2,1) + 2.*
PGapNeg(n1,1,pt)*
QGapPos(n2+n3+n4,3);
3735 TComplex formula =
QGapPos(n1,1)*
QGapPos(n2,1)*
QGapPos(n3,1)*
QGapNeg(n4,1)*
QGapNeg(n5,1)*
QGapNeg(n6,1) -
QGapPos(n1,1)*
QGapPos(n2,1)*
QGapPos(n3,1)*
QGapNeg(n4+n5,2)*
QGapNeg(n6,1) -
QGapPos(n1,1)*
QGapPos(n2,1)*
QGapPos(n3,1)*
QGapNeg(n4+n6,2)*
QGapNeg(n5,1) -
QGapPos(n1,1)*
QGapPos(n2,1)*
QGapPos(n3,1)*
QGapNeg(n5+n6,2)*
QGapNeg(n4,1) + 2.*
QGapPos(n1,1)*
QGapPos(n2,1)*
QGapPos(n3,1)*
QGapNeg(n4+n5+n6,3) -
QGapPos(n1+n2,2)*
QGapPos(n3,1)*
QGapNeg(n4,1)*
QGapNeg(n5,1)*
QGapNeg(n6,1) +
QGapPos(n1+n2,2)*
QGapPos(n3,1)*
QGapNeg(n4+n5,2)*
QGapNeg(n6,1) +
QGapPos(n1+n2,2)*
QGapPos(n3,1)*
QGapNeg(n4+n6,2)*
QGapNeg(n5,1) +
QGapPos(n1+n2,2)*
QGapPos(n3,1)*
QGapNeg(n5+n6,2)*
QGapNeg(n4,1) - 2.*
QGapPos(n1+n2,2)*
QGapPos(n3,1)*
QGapNeg(n4+n5+n6,3) -
QGapPos(n1+n3,2)*
QGapPos(n2,1)*
QGapNeg(n4,1)*
QGapNeg(n5,1)*
QGapNeg(n6,1) +
QGapPos(n1+n3,2)*
QGapPos(n2,1)*
QGapNeg(n4+n5,2)*
QGapNeg(n6,1) +
QGapPos(n1+n3,2)*
QGapPos(n2,1)*
QGapNeg(n4+n6,2)*
QGapNeg(n5,1) +
QGapPos(n1+n3,2)*
QGapPos(n2,1)*
QGapNeg(n5+n6,2)*
QGapNeg(n4,1) - 2.*
QGapPos(n1+n3,2)*
QGapPos(n2,1)*
QGapNeg(n4+n5+n6,3) -
QGapPos(n2+n3,2)*
QGapPos(n1,1)*
QGapNeg(n4,1)*
QGapNeg(n5,1)*
QGapNeg(n6,1) +
QGapPos(n2+n3,2)*
QGapPos(n1,1)*
QGapNeg(n4+n5,2)*
QGapNeg(n6,1) +
QGapPos(n2+n3,2)*
QGapPos(n1,1)*
QGapNeg(n4+n6,2)*
QGapNeg(n5,1) +
QGapPos(n2+n3,2)*
QGapPos(n1,1)*
QGapNeg(n5+n6,2)*
QGapNeg(n4,1) - 2.*
QGapPos(n2+n3,2)*
QGapPos(n1,1)*
QGapNeg(n4+n5+n6,3)+ 2.*
QGapPos(n1+n2+n3,3)*
QGapNeg(n4,1)*
QGapNeg(n5,1)*
QGapNeg(n6,1) - 2.*
QGapPos(n1+n2+n3,3)*
QGapNeg(n4+n5,2)*
QGapNeg(n6,1) - 2.*
QGapPos(n1+n2+n3,3)*
QGapNeg(n4+n6,2)*
QGapNeg(n5,1) - 2.*
QGapPos(n1+n2+n3,3)*
QGapNeg(n5+n6,2)*
QGapNeg(n4,1) + 4.*
QGapPos(n1+n2+n3,3)*
QGapNeg(n4+n5+n6,3);
3742 TComplex formula =
QGapNeg(n1,1)*
QGapNeg(n2,1)*
QGapNeg(n3,1)*
QGapPos(n4,1)*
QGapPos(n5,1)*
QGapPos(n6,1) -
QGapNeg(n1,1)*
QGapNeg(n2,1)*
QGapNeg(n3,1)*
QGapPos(n4+n5,2)*
QGapPos(n6,1) -
QGapNeg(n1,1)*
QGapNeg(n2,1)*
QGapNeg(n3,1)*
QGapPos(n4+n6,2)*
QGapPos(n5,1) -
QGapNeg(n1,1)*
QGapNeg(n2,1)*
QGapNeg(n3,1)*
QGapPos(n5+n6,2)*
QGapPos(n4,1) + 2.*
QGapNeg(n1,1)*
QGapNeg(n2,1)*
QGapNeg(n3,1)*
QGapPos(n4+n5+n6,3)-
QGapNeg(n1+n2,2)*
QGapNeg(n3,1)*
QGapPos(n4,1)*
QGapPos(n5,1)*
QGapPos(n6,1) +
QGapNeg(n1+n2,2)*
QGapNeg(n3,1)*
QGapPos(n4+n5,2)*
QGapPos(n6,1) +
QGapNeg(n1+n2,2)*
QGapNeg(n3,1)*
QGapPos(n4+n6,2)*
QGapPos(n5,1) +
QGapNeg(n1+n2,2)*
QGapNeg(n3,1)*
QGapPos(n5+n6,2)*
QGapPos(n4,1) - 2.*
QGapNeg(n1+n2,2)*
QGapNeg(n3,1)*
QGapPos(n4+n5+n6,3) -
QGapNeg(n1+n3,2)*
QGapNeg(n2,1)*
QGapPos(n4,1)*
QGapPos(n5,1)*
QGapPos(n6,1) +
QGapNeg(n1+n3,2)*
QGapNeg(n2,1)*
QGapPos(n4+n5,2)*
QGapPos(n6,1) +
QGapNeg(n1+n3,2)*
QGapNeg(n2,1)*
QGapPos(n4+n6,2)*
QGapPos(n5,1) +
QGapNeg(n1+n3,2)*
QGapNeg(n2,1)*
QGapPos(n5+n6,2)*
QGapPos(n4,1) - 2.*
QGapNeg(n1+n3,2)*
QGapNeg(n2,1)*
QGapPos(n4+n5+n6,3) -
QGapNeg(n2+n3,2)*
QGapNeg(n1,1)*
QGapPos(n4,1)*
QGapPos(n5,1)*
QGapPos(n6,1) +
QGapNeg(n2+n3,2)*
QGapNeg(n1,1)*
QGapPos(n4+n5,2)*
QGapPos(n6,1) +
QGapNeg(n2+n3,2)*
QGapNeg(n1,1)*
QGapPos(n4+n6,2)*
QGapPos(n5,1) +
QGapNeg(n2+n3,2)*
QGapNeg(n1,1)*
QGapPos(n5+n6,2)*
QGapPos(n4,1) - 2.*
QGapNeg(n2+n3,2)*
QGapNeg(n1,1)*
QGapPos(n4+n5+n6,3)+ 2.*
QGapNeg(n1+n2+n3,3)*
QGapPos(n4,1)*
QGapPos(n5,1)*
QGapPos(n6,1) -2.*
QGapNeg(n1+n2+n3,3)*
QGapPos(n4+n5,2)*
QGapPos(n6,1) - 2.*
QGapNeg(n1+n2+n3,3)*
QGapPos(n4+n6,2)*
QGapPos(n5,1) - 2.*
QGapNeg(n1+n2+n3,3)*
QGapPos(n5+n6,2)*
QGapPos(n4,1) + 4.*
QGapNeg(n1+n2+n3,3)*
QGapPos(n4+n5+n6,3);
3885 fC[i][0] =
fC[17][0];
3886 fC[i][1] =
fC[17][1];
3887 fC[i][2] =
fC[17][2];
3888 fC[i][3] =
fC[17][3];
3889 fC[i][4] =
fC[17][4];
3893 else if(centrCur < 20){
4003 fC[i][0] =
fC[17][0];
4004 fC[i][1] =
fC[17][1];
4005 fC[i][2] =
fC[17][2];
4006 fC[i][3] =
fC[17][3];
4007 fC[i][4] =
fC[17][4];
4011 else if(centrCur < 30){
4121 fC[i][0] =
fC[17][0];
4122 fC[i][1] =
fC[17][1];
4123 fC[i][2] =
fC[17][2];
4124 fC[i][3] =
fC[17][3];
4125 fC[i][4] =
fC[17][4];
4129 else if(centrCur < 40){
4194 fC[10][4] = 0.3679;<