25 #include <THnSparse.h> 26 #include <TClonesArray.h> 28 #include <TDatabasePDG.h> 31 #include "AliAnalysisManager.h" 32 #include "AliInputEventHandler.h" 33 #include "AliAODEvent.h" 34 #include "AliAODMCHeader.h" 36 #include "AliEventPoolManager.h" 37 #include "AliPIDResponse.h" 38 #include "AliAODTrack.h" 39 #include "AliAODMCParticle.h" 40 #include "AliMCEvent.h" 41 #include "AliMultSelection.h" 61 Double_t AliAnalysisTaskV0sInJetsEmcal::fgkiZVtxMixBinRanges[] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10};
108 fbUseMultiplicity(0),
119 fbFindableClusters(0),
120 fdCutNCrossedRowsTPCMin(0),
121 fdCutCrossedRowsOverFindMin(0),
122 fdCutCrossedRowsOverFindMax(0),
123 fdCutPtDaughterMin(0),
124 fdCutDCAToPrimVtxMin(0),
125 fdCutDCADaughtersMax(0),
126 fdCutEtaDaughterMax(0),
127 fdCutNSigmadEdxMax(0),
132 fdCutRadiusDecayMin(0),
133 fdCutRadiusDecayMax(0),
143 fdCutPtTrackJetMin(0),
144 fdCutAreaPercJetMin(0),
145 fdDistanceV0JetMax(0.4),
148 fbCompareTriggers(0),
154 fh1EventCounterCut(0),
157 fh1EventCent2Jets(0),
158 fh1EventCent2NoJets(0),
159 fh2EventCentTracks(0),
161 fh1V0CandPerEvent(0),
168 fh3CCMassCorrelBoth(0),
169 fh3CCMassCorrelKNotL(0),
170 fh3CCMassCorrelLNotK(0)
661 DefineInput(0, TChain::Class());
664 DefineOutput(1, TList::Class());
665 DefineOutput(2, TList::Class());
666 DefineOutput(3, TList::Class());
667 DefineOutput(4, TList::Class());
714 const Int_t iNCategEvent = 12;
715 TString categEvent[iNCategEvent] = {
742 "V0 #it{y} & #it{#eta}",
752 fh1EventCounterCut =
new TH1D(
"fh1EventCounterCut",
"Number of events after filtering;selection filter;counts", iNCategEvent, 0, iNCategEvent);
753 for(
Int_t i = 0; i < iNCategEvent; i++)
755 fh1EventCent2 =
new TH1D(
"fh1EventCent2",
"Number of events vs centrality;centrality;counts", 100, 0, 100);
756 fh1EventCent2Jets =
new TH1D(
"fh1EventCent2Jets",
"Number of sel.-jet events vs centrality;centrality;counts", 100, 0, 100);
757 fh1EventCent2NoJets =
new TH1D(
"fh1EventCent2NoJets",
"Number of no-jet events vs centrality;centrality;counts", 100, 0, 100);
758 fh2EventCentTracks =
new TH2D(
"fh2EventCentTracks",
"Number of tracks vs centrality;centrality;tracks;counts", 100, 0, 100, 150, 0, 15e3);
759 fh2EventCentMult =
new TH2D(
"fh2EventCentMult",
"Ref. multiplicity vs centrality;centrality;multiplicity;counts", 100, 0, 100, 150, 0, 15e3);
763 fh1NRndConeCent =
new TH1D(
"fh1NRndConeCent",
"Number of rnd. cones in centrality bins;centrality;counts", fgkiNBinsCent, 0, fgkiNBinsCent);
766 fh1NMedConeCent =
new TH1D(
"fh1NMedConeCent",
"Number of med.-cl. cones in centrality bins;centrality;counts", fgkiNBinsCent, 0, fgkiNBinsCent);
769 fh1AreaExcluded =
new TH1D(
"fh1AreaExcluded",
"Area of excluded cones in centrality bins;centrality;area", fgkiNBinsCent, 0, fgkiNBinsCent);
783 fh1V0CandPerEvent =
new TH1D(
"fh1V0CandPerEvent",
"Number of all V0 candidates per event;candidates;events", 300, 0, 30000);
789 for(
Int_t j = 0; j < iNCategEvent; j++)
826 fh3CCMassCorrelBoth =
new THnSparseD(
"fh3CCMassCorrelBoth",
"Mass correlation: K0S && Lambda;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel);
827 fh3CCMassCorrelKNotL =
new THnSparseD(
"fh3CCMassCorrelKNotL",
"Mass correlation: K0S, not Lambda;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel);
828 fh3CCMassCorrelLNotK =
new THnSparseD(
"fh3CCMassCorrelLNotK",
"Mass correlation: Lambda, not K0S;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel);
837 const Int_t iNBinsEtaV0 = 2 *
Int_t(dRangeEtaV0Max / dStepEtaV0);
840 const Int_t iNDimIncl = 3;
848 const Int_t iNDimInJC = 4;
856 Int_t iNBinsDeltaPhi = 60;
857 const Int_t iNDimCorrel = 6;
862 Int_t iNBinsDeltaEtaCorrel = 1;
864 Int_t binsKCorrel[iNDimCorrel] = {
fgkiNBinsMassK0s / 2, iNBinsPtV0InJet, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaPhi, iNBinsDeltaEtaCorrel};
867 Int_t binsLCorrel[iNDimCorrel] = {
fgkiNBinsMassLambda / 2, iNBinsPtV0InJet, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaPhi, iNBinsDeltaEtaCorrel};
875 const Int_t iNBinsDeltaEta = 2 *
Int_t(dRangeDeltaEtaMax / dStepDeltaEta);
885 Int_t binsEtaKInRec[5] = {
fgkiNBinsMassK0s, iNBinsPtV0InJet, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaEta};
892 Int_t binsEtaInGen[4] = {iNBinsPtV0InJet, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaEta};
893 Double_t xminEtaInGen[4] = {dPtV0Min, -dRangeEtaV0Max, dJetPtMin, -dRangeDeltaEtaMax};
894 Double_t xmaxEtaInGen[4] = {dPtV0Max, dRangeEtaV0Max, dJetPtMax, dRangeDeltaEtaMax};
896 const Int_t iNDimEtaD = 6;
897 Int_t binsEtaDaughter[iNDimEtaD] = {2, 20, iNBinsPtV0, iNBinsEtaV0, iNBinsPtV0, iNJetPtBins};
898 Double_t xminEtaDaughter[iNDimEtaD] = {0, -1, dPtV0Min, -dRangeEtaV0Max, dPtV0Min, dJetPtMin};
899 Double_t xmaxEtaDaughter[iNDimEtaD] = {2, 1, dPtV0Max, dRangeEtaV0Max, dPtV0Max, dJetPtMax};
901 const Int_t iNDimDaughter = 5;
902 Int_t binsDaughter[iNDimDaughter] = {80, 80, iNBinsPtV0, iNJetPtBins, 80};
903 Double_t xminDaughter[iNDimDaughter] = {0, 0, dPtV0Min, dJetPtMin, 0};
904 Double_t xmaxDaughter[iNDimDaughter] = {20, 20, dPtV0Max, dJetPtMax, 20};
909 fhnPtDaughterK0s[i] =
new THnSparseD(Form(
"fhnPtDaughterK0s_%d", i), Form(
"K0s: Daughter Pt vs Pt, cent: %s;neg #it{p}_{T} (GeV/#it{c});pos #it{p}_{T} (GeV/#it{c});p_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T} leading track (GeV/#it{c});counts",
GetCentBinLabel(i).
Data()), iNDimDaughter, binsDaughter, xminDaughter, xmaxDaughter);
910 fhnPtDaughterLambda[i] =
new THnSparseD(Form(
"fhnPtDaughterLambda_%d", i), Form(
"Lambda: Daughter Pt vs Pt, cent: %s;neg #it{p}_{T} (GeV/#it{c});pos #it{p}_{T} (GeV/#it{c});p_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T} leading track (GeV/#it{c});counts",
GetCentBinLabel(i).
Data()), iNDimDaughter, binsDaughter, xminDaughter, xmaxDaughter);
911 fhnPtDaughterALambda[i] =
new THnSparseD(Form(
"fhnPtDaughterALambda_%d", i), Form(
"ALambda: Daughter Pt vs Pt, cent: %s;neg #it{p}_{T} (GeV/#it{c});pos #it{p}_{T} (GeV/#it{c});p_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T} leading track (GeV/#it{c});counts",
GetCentBinLabel(i).
Data()), iNDimDaughter, binsDaughter, xminDaughter, xmaxDaughter);
923 fhnV0InclusiveK0s[i] =
new THnSparseD(Form(
"fhnV0InclusiveK0s_C%d", i),
"K0s: V0 invariant mass vs pt;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};counts", iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl);
924 fhnV0InclusiveLambda[i] =
new THnSparseD(Form(
"fhnV0InclusiveLambda_C%d", i),
"Lambda: V0 invariant mass vs pt;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};counts", iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
925 fhnV0InclusiveALambda[i] =
new THnSparseD(Form(
"fhnV0InclusiveALambda_C%d", i),
"ALambda: V0 invariant mass vs pt;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};counts", iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
930 fhnV0InJetK0s[i] =
new THnSparseD(Form(
"fhnV0InJetK0s_%d", i), Form(
"K0s: Mass vs Pt in jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsKInJC, xminKInJC, xmaxKInJC);
932 fhnV0InPerpK0s[i] =
new THnSparseD(Form(
"fhnV0InPerpK0s_%d", i), Form(
"K0s: Mass vs Pt in perp. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsKInJC, xminKInJC, xmaxKInJC);
934 fhnV0InRndK0s[i] =
new THnSparseD(Form(
"fhnV0InRndK0s_%d", i), Form(
"K0s: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl);
936 fhnV0InMedK0s[i] =
new THnSparseD(Form(
"fhnV0InMedK0s_%d", i), Form(
"K0s: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl);
938 fhnV0OutJetK0s[i] =
new THnSparseD(Form(
"fhnV0OutJetK0s_%d", i), Form(
"K0s: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl);
940 fhnV0NoJetK0s[i] =
new THnSparseD(Form(
"fhnV0NoJetK0s_%d", i), Form(
"K0s: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl);
942 fhnV0InJetLambda[i] =
new THnSparseD(Form(
"fhnV0InJetLambda_%d", i), Form(
"Lambda: Mass vs Pt in jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC);
944 fhnV0InPerpLambda[i] =
new THnSparseD(Form(
"fhnV0InPerpLambda_%d", i), Form(
"Lambda: Mass vs Pt in perp. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC);
946 fhnV0InRndLambda[i] =
new THnSparseD(Form(
"fhnV0InRndLambda_%d", i), Form(
"Lambda: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
948 fhnV0InMedLambda[i] =
new THnSparseD(Form(
"fhnV0InMedLambda_%d", i), Form(
"Lambda: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
950 fhnV0OutJetLambda[i] =
new THnSparseD(Form(
"fhnV0OutJetLambda_%d", i), Form(
"Lambda: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
952 fhnV0NoJetLambda[i] =
new THnSparseD(Form(
"fhnV0NoJetLambda_%d", i), Form(
"Lambda: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
954 fhnV0InJetALambda[i] =
new THnSparseD(Form(
"fhnV0InJetALambda_%d", i), Form(
"ALambda: Mass vs Pt in jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC);
956 fhnV0InPerpALambda[i] =
new THnSparseD(Form(
"fhnV0InPerpALambda_%d", i), Form(
"ALambda: Mass vs Pt in perp. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC);
958 fhnV0InRndALambda[i] =
new THnSparseD(Form(
"fhnV0InRndALambda_%d", i), Form(
"ALambda: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
960 fhnV0InMedALambda[i] =
new THnSparseD(Form(
"fhnV0InMedALambda_%d", i), Form(
"ALambda: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
962 fhnV0OutJetALambda[i] =
new THnSparseD(Form(
"fhnV0OutJetALambda_%d", i), Form(
"ALambda: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
964 fhnV0NoJetALambda[i] =
new THnSparseD(Form(
"fhnV0NoJetALambda_%d", i), Form(
"ALambda: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0}",
GetCentBinLabel(i).
Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl);
967 fhnV0CorrelSEK0s[i] =
new THnSparseD(Form(
"fhnV0CorrelSEK0s_%d", i), Form(
"K0s: Correlations with jets in same events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c});#Delta#it{#phi}_{V0-jet};#Delta#it{#eta}_{V0-jet}",
GetCentBinLabel(i).
Data()), iNDimCorrel, binsKCorrel, xminKCorrel, xmaxKCorrel);
969 fhnV0CorrelMEK0s[i] =
new THnSparseD(Form(
"fhnV0CorrelMEK0s_%d", i), Form(
"K0s: Correlations with jets in mixed events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c});#Delta#it{#phi}_{V0-jet};#Delta#it{#eta}_{V0-jet}",
GetCentBinLabel(i).
Data()), iNDimCorrel, binsKCorrel, xminKCorrel, xmaxKCorrel);
971 fhnV0CorrelSELambda[i] =
new THnSparseD(Form(
"fhnV0CorrelSELambda_%d", i), Form(
"Lambda: Correlations with jets in same events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c});#Delta#it{#phi}_{V0-jet};#Delta#it{#eta}_{V0-jet}",
GetCentBinLabel(i).
Data()), iNDimCorrel, binsLCorrel, xminLCorrel, xmaxLCorrel);
973 fhnV0CorrelMELambda[i] =
new THnSparseD(Form(
"fhnV0CorrelMELambda_%d", i), Form(
"Lambda: Correlations with jets in mixed events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c});#Delta#it{#phi}_{V0-jet};#Delta#it{#eta}_{V0-jet}",
GetCentBinLabel(i).
Data()), iNDimCorrel, binsLCorrel, xminLCorrel, xmaxLCorrel);
976 fh2V0PtJetAngleK0s[i] =
new TH2D(Form(
"fh2V0PtJetAngleK0s_%d", i), Form(
"K0s: #it{p}_{T}^{jet} vs angle V0-jet, cent: %s;#it{p}_{T}^{jet};#it{#alpha}",
GetCentBinLabel(i).
Data()), 2 * iNJetPtBins, dJetPtMin, dJetPtMax, 100, 0,
fdDistanceV0JetMax + 0.1);
978 fh2V0PtJetAngleLambda[i] =
new TH2D(Form(
"fh2V0PtJetAngleLambda_%d", i), Form(
"Lambda: #it{p}_{T}^{jet} vs angle V0-jet, cent: %s;#it{p}_{T}^{jet};#it{#alpha}",
GetCentBinLabel(i).
Data()), 2 * iNJetPtBins, dJetPtMin, dJetPtMax, 100, 0,
fdDistanceV0JetMax + 0.1);
980 fh2V0PtJetAngleALambda[i] =
new TH2D(Form(
"fh2V0PtJetAngleALambda_%d", i), Form(
"ALambda: #it{p}_{T}^{jet} vs angle V0-jet, cent: %s;#it{p}_{T}^{jet};#it{#alpha}",
GetCentBinLabel(i).
Data()), 2 * iNJetPtBins, dJetPtMin, dJetPtMax, 100, 0,
fdDistanceV0JetMax + 0.1);
984 fh1PtJet[i] =
new TH1D(Form(
"fh1PtJet_%d", i), Form(
"Jet pt spectrum, cent: %s;#it{p}_{T} jet (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 2 * iNJetPtBins, dJetPtMin, dJetPtMax);
988 fh2EtaPtJet[i] =
new TH2D(Form(
"fh2EtaPtJet_%d", i), Form(
"Jet eta vs pT spectrum, cent: %s;#it{#eta} jet;#it{p}_{T} jet (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 80, -1., 1., 2 * iNJetPtBins, dJetPtMin, dJetPtMax);
992 fh2PtJetPtTrackLeading[i] =
new TH2D(Form(
"fh2PtJetPtTrackLeading_%d", i), Form(
"jet pt vs leading track pt, cent: %s;#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T} leading track (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 4 * iNJetPtBins, dJetPtMin, dJetPtMax, 200, 0., 20);
994 fh2PtJetPtTrigger[i] =
new TH2D(Form(
"fh2PtJetPtTrigger_%d", i), Form(
"jet pt vs trigger track pt, cent: %s;#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T} trigger track (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 4 * iNJetPtBins, dJetPtMin, dJetPtMax, 200, 0., 20);
1000 fh2EtaPhiRndCone[i] =
new TH2D(Form(
"fh2EtaPhiRndCone_%d", i), Form(
"Rnd. cones: eta vs phi, cent: %s;#it{#eta} cone;#it{#phi} cone",
GetCentBinLabel(i).
Data()), 80, -1., 1., 90, 0., TMath::TwoPi());
1002 fh2EtaPhiMedCone[i] =
new TH2D(Form(
"fh2EtaPhiMedCone_%d", i), Form(
"Med.-cl. cones: eta vs phi, cent: %s;#it{#eta} cone;#it{#phi} cone",
GetCentBinLabel(i).
Data()), 80, -1., 1., 90, 0., TMath::TwoPi());
1017 fh2VtxXY[i] =
new TH2D(Form(
"fh2VtxXY_%d", i), Form(
"#it{xy} coordinate of the primary vertex, cent: %s;#it{x} (cm);#it{y} (cm)",
GetCentBinLabel(i).
Data()), 200, -0.2, 0.2, 500, -0.5, 0.5);
1023 fh1V0K0sPtMCGen[i] =
new TH1D(Form(
"fh1V0K0sPtMCGen_%d", i), Form(
"MC K0s generated: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max);
1025 fh2V0K0sPtMassMCRec[i] =
new TH2D(Form(
"fh2V0K0sPtMassMCRec_%d", i), Form(
"MC K0s associated: pt-m spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{m}_{inv} (GeV/#it{c}^{2})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max,
fgkiNBinsMassK0s,
fgkdMassK0sMin,
fgkdMassK0sMax);
1030 fh2V0K0sEtaPtMCGen[i] =
new TH2D(Form(
"fh2V0K0sEtaPtMCGen_%d", i), Form(
"MC K0s generated: pt-eta spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsEtaV0, -dRangeEtaV0Max, dRangeEtaV0Max);
1032 fh3V0K0sEtaPtMassMCRec[i] =
new THnSparseD(Form(
"fh3V0K0sEtaPtMassMCRec_%d", i), Form(
"MC K0s associated: m-pt-eta spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta",
GetCentBinLabel(i).
Data()), 3, binsEtaK, xminEtaK, xmaxEtaK);
1035 fh2V0K0sInJetPtMCGen[i] =
new TH2D(Form(
"fh2V0K0sInJetPtMCGen_%d", i), Form(
"MC K0s in jet generated: pt-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0InJet, dPtV0Min, dPtV0Max, iNJetPtBins, dJetPtMin, dJetPtMax);
1037 fh3V0K0sInJetPtMassMCRec[i] =
new THnSparseD(Form(
"fh3V0K0sInJetPtMassMCRec_%d", i), Form(
"MC K0s in jet associated: m-pt-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsKInJC, xminKInJC, xmaxKInJC);
1040 fh3V0K0sInJetEtaPtMCGen[i] =
new THnSparseD(Form(
"fh3V0K0sInJetEtaPtMCGen_%d", i), Form(
"MC K0s generated: pt-eta-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 4, binsEtaInGen, xminEtaInGen, xmaxEtaInGen);
1042 fh4V0K0sInJetEtaPtMassMCRec[i] =
new THnSparseD(Form(
"fh4V0K0sInJetEtaPtMassMCRec_%d", i), Form(
"MC K0s associated: m-pt-eta-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 5, binsEtaKInRec, xminEtaKInRec, xmaxEtaKInRec);
1045 fh2V0K0sMCResolMPt[i] =
new TH2D(Form(
"fh2V0K0sMCResolMPt_%d", i), Form(
"MC K0s associated: #Delta#it{m} vs pt, cent %s;#Delta#it{m} = #it{m}_{inv} - #it{m}_{true} (GeV/#it{c}^{2});#it{p}_{T}^{rec} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 100, -0.02, 0.02, iNBinsPtV0, dPtV0Min, dPtV0Max);
1047 fh2V0K0sMCPtGenPtRec[i] =
new TH2D(Form(
"fh2V0K0sMCPtGenPtRec_%d", i), Form(
"MC K0s associated: pt gen vs pt rec, cent %s;#it{p}_{T}^{gen} (GeV/#it{c});#it{p}_{T}^{rec} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsPtV0, dPtV0Min, dPtV0Max);
1051 fh1V0LambdaPtMCGen[i] =
new TH1D(Form(
"fh1V0LambdaPtMCGen_%d", i), Form(
"MC Lambda generated: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max);
1053 fh2V0LambdaPtMassMCRec[i] =
new TH2D(Form(
"fh2V0LambdaPtMassMCRec_%d", i), Form(
"MC Lambda associated: pt-m spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{m}_{inv} (GeV/#it{c}^{2})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max,
fgkiNBinsMassLambda,
fgkdMassLambdaMin,
fgkdMassLambdaMax);
1058 fh2V0LambdaEtaPtMCGen[i] =
new TH2D(Form(
"fh2V0LambdaEtaPtMCGen_%d", i), Form(
"MC Lambda generated: pt-eta spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsEtaV0, -dRangeEtaV0Max, dRangeEtaV0Max);
1060 fh3V0LambdaEtaPtMassMCRec[i] =
new THnSparseD(Form(
"fh3V0LambdaEtaPtMassMCRec_%d", i), Form(
"MC Lambda associated: m-pt-eta spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta",
GetCentBinLabel(i).
Data()), 3, binsEtaL, xminEtaL, xmaxEtaL);
1063 fh2V0LambdaInJetPtMCGen[i] =
new TH2D(Form(
"fh2V0LambdaInJetPtMCGen_%d", i), Form(
"MC Lambda in jet generated: pt-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0InJet, dPtV0Min, dPtV0Max, iNJetPtBins, dJetPtMin, dJetPtMax);
1065 fh3V0LambdaInJetPtMassMCRec[i] =
new THnSparseD(Form(
"fh3V0LambdaInJetPtMassMCRec_%d", i), Form(
"MC Lambda in jet associated: m-pt-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC);
1068 fh3V0LambdaInJetEtaPtMCGen[i] =
new THnSparseD(Form(
"fh3V0LambdaInJetEtaPtMCGen_%d", i), Form(
"MC Lambda generated: pt-eta-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 4, binsEtaInGen, xminEtaInGen, xmaxEtaInGen);
1070 fh4V0LambdaInJetEtaPtMassMCRec[i] =
new THnSparseD(Form(
"fh4V0LambdaInJetEtaPtMassMCRec_%d", i), Form(
"MC Lambda associated: m-pt-eta-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 5, binsEtaLInRec, xminEtaLInRec, xmaxEtaLInRec);
1073 fh2V0LambdaMCResolMPt[i] =
new TH2D(Form(
"fh2V0LambdaMCResolMPt_%d", i), Form(
"MC Lambda associated: #Delta#it{m} vs pt, cent %s;#Delta#it{m} = #it{m}_{inv} - #it{m}_{true} (GeV/#it{c}^{2});#it{p}_{T}^{rec} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 100, -0.02, 0.02, iNBinsPtV0, dPtV0Min, dPtV0Max);
1075 fh2V0LambdaMCPtGenPtRec[i] =
new TH2D(Form(
"fh2V0LambdaMCPtGenPtRec_%d", i), Form(
"MC Lambda associated: pt gen vs pt rec, cent %s;#it{p}_{T}^{gen} (GeV/#it{c});#it{p}_{T}^{rec} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsPtV0, dPtV0Min, dPtV0Max);
1079 fh1V0ALambdaPtMCGen[i] =
new TH1D(Form(
"fh1V0ALambdaPtMCGen_%d", i), Form(
"MC ALambda generated: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max);
1081 fh2V0ALambdaPtMassMCRec[i] =
new TH2D(Form(
"fh2V0ALambdaPtMassMCRec_%d", i), Form(
"MC ALambda associated: pt-m spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{m}_{inv} (GeV/#it{c}^{2})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max,
fgkiNBinsMassLambda,
fgkdMassLambdaMin,
fgkdMassLambdaMax);
1086 fh2V0ALambdaEtaPtMCGen[i] =
new TH2D(Form(
"fh2V0ALambdaEtaPtMCGen_%d", i), Form(
"MC ALambda generated: pt-eta spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsEtaV0, -dRangeEtaV0Max, dRangeEtaV0Max);
1088 fh3V0ALambdaEtaPtMassMCRec[i] =
new THnSparseD(Form(
"fh3V0ALambdaEtaPtMassMCRec_%d", i), Form(
"MC ALambda associated: m-pt-eta spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta",
GetCentBinLabel(i).
Data()), 3, binsEtaL, xminEtaL, xmaxEtaL);
1091 fh2V0ALambdaInJetPtMCGen[i] =
new TH2D(Form(
"fh2V0ALambdaInJetPtMCGen_%d", i), Form(
"MC ALambda in jet generated: pt-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0InJet, dPtV0Min, dPtV0Max, iNJetPtBins, dJetPtMin, dJetPtMax);
1093 fh3V0ALambdaInJetPtMassMCRec[i] =
new THnSparseD(Form(
"fh3V0ALambdaInJetPtMassMCRec_%d", i), Form(
"MC ALambda in jet associated: m-pt-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC);
1096 fh3V0ALambdaInJetEtaPtMCGen[i] =
new THnSparseD(Form(
"fh3V0ALambdaInJetEtaPtMCGen_%d", i), Form(
"MC ALambda generated: pt-eta-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 4, binsEtaInGen, xminEtaInGen, xmaxEtaInGen);
1098 fh4V0ALambdaInJetEtaPtMassMCRec[i] =
new THnSparseD(Form(
"fh4V0ALambdaInJetEtaPtMassMCRec_%d", i), Form(
"MC ALambda associated: m-pt-eta-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 5, binsEtaLInRec, xminEtaLInRec, xmaxEtaLInRec);
1101 fh2V0ALambdaMCResolMPt[i] =
new TH2D(Form(
"fh2V0ALambdaMCResolMPt_%d", i), Form(
"MC ALambda associated: #Delta#it{m} vs pt, cent %s;#Delta#it{m} = #it{m}_{inv} - #it{m}_{true} (GeV/#it{c}^{2});#it{p}_{T}^{rec} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), 100, -0.02, 0.02, iNBinsPtV0, dPtV0Min, dPtV0Max);
1103 fh2V0ALambdaMCPtGenPtRec[i] =
new TH2D(Form(
"fh2V0ALambdaMCPtGenPtRec_%d", i), Form(
"MC ALambda associated: pt gen vs pt rec, cent %s;#it{p}_{T}^{gen} (GeV/#it{c});#it{p}_{T}^{rec} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsPtV0, dPtV0Min, dPtV0Max);
1106 Int_t iNBinsPtXi = 80;
1109 const Int_t iNDimFD = 3;
1110 Int_t binsFD[iNDimFD] = {iNBinsPtV0, iNBinsPtXi, iNJetPtBins};
1111 Double_t xminFD[iNDimFD] = {dPtV0Min, dPtXiMin, dJetPtMin};
1112 Double_t xmaxFD[iNDimFD] = {dPtV0Max, dPtXiMax, dJetPtMax};
1113 fhnV0LambdaInclMCFD[i] =
new THnSparseD(Form(
"fhnV0LambdaInclMCFD_%d", i), Form(
"MC Lambda associated, inclusive, from Xi: pt-pt, cent %s;#it{p}_{T}^{#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimFD, binsFD, xminFD, xmaxFD);
1115 fhnV0LambdaInJetsMCFD[i] =
new THnSparseD(Form(
"fhnV0LambdaInJetsMCFD_%d", i), Form(
"MC Lambda associated, in JC, from Xi: pt-pt-ptJet, cent %s;#it{p}_{T}^{#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimFD, binsFD, xminFD, xmaxFD);
1117 fhnV0LambdaBulkMCFD[i] =
new THnSparseD(Form(
"fhnV0LambdaBulkMCFD_%d", i), Form(
"MC Lambda associated, in no jet events, from Xi: pt-pt, cent %s;#it{p}_{T}^{#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimFD, binsFD, xminFD, xmaxFD);
1119 fh1V0XiPtMCGen[i] =
new TH1D(Form(
"fh1V0XiPtMCGen_%d", i), Form(
"MC Xi^{-} generated: Pt spectrum, cent %s;#it{p}_{T}^{#Xi^{-},gen.} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtXi, dPtXiMin, dPtXiMax);
1121 fhnV0ALambdaInclMCFD[i] =
new THnSparseD(Form(
"fhnV0ALambdaInclMCFD_%d", i), Form(
"MC ALambda associated, from AXi: pt-pt, cent %s;#it{p}_{T}^{A#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{A#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimFD, binsFD, xminFD, xmaxFD);
1123 fhnV0ALambdaInJetsMCFD[i] =
new THnSparseD(Form(
"fhnV0ALambdaInJetsMCFD_%d", i), Form(
"MC ALambda associated, in JC, from AXi: pt-pt-ptJet, cent %s;#it{p}_{T}^{A#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{A#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimFD, binsFD, xminFD, xmaxFD);
1125 fhnV0ALambdaBulkMCFD[i] =
new THnSparseD(Form(
"fhnV0ALambdaBulkMCFD_%d", i), Form(
"MC ALambda associated, in no jet events, from AXi: pt-pt-ptJet, cent %s;#it{p}_{T}^{A#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{A#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNDimFD, binsFD, xminFD, xmaxFD);
1127 fh1V0AXiPtMCGen[i] =
new TH1D(Form(
"fh1V0AXiPtMCGen_%d", i), Form(
"MC AXi^{-} generated: Pt spectrum, cent %s;#it{p}_{T}^{A#Xi^{-},gen.} (GeV/#it{c})",
GetCentBinLabel(i).
Data()), iNBinsPtXi, dPtXiMin, dPtXiMax);
1131 fhnV0K0sInclDaughterEtaPtPtMCRec[i] =
new THnSparseD(Form(
"fhnV0K0sInclDaughterEtaPtPtMCRec_%d", i), Form(
"MC K0S, inclusive, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta gen daughter;pT gen daughter;eta gen V0;pT gen V0;pT rec jet",
GetCentBinLabel(i).
Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter);
1132 fhnV0K0sInJetsDaughterEtaPtPtMCRec[i] =
new THnSparseD(Form(
"fhnV0K0sInJetsDaughterEtaPtPtMCRec_%d", i), Form(
"MC K0S, in JC, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta gen daughter;pT gen daughter;eta gen V0;pT gen V0;pT rec jet",
GetCentBinLabel(i).
Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter);
1133 fhnV0LambdaInclDaughterEtaPtPtMCRec[i] =
new THnSparseD(Form(
"fhnV0LambdaInclDaughterEtaPtPtMCRec_%d", i), Form(
"MC Lambda, inclusive, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta gen daughter;pT gen daughter;eta gen V0;pT gen V0;pT rec jet",
GetCentBinLabel(i).
Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter);
1134 fhnV0LambdaInJetsDaughterEtaPtPtMCRec[i] =
new THnSparseD(Form(
"fhnV0LambdaInJetsDaughterEtaPtPtMCRec_%d", i), Form(
"MC Lambda, in JC, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta gen daughter;pT gen daughter;eta gen V0;pT gen V0;pT rec jet",
GetCentBinLabel(i).
Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter);
1135 fhnV0ALambdaInclDaughterEtaPtPtMCRec[i] =
new THnSparseD(Form(
"fhnV0ALambdaInclDaughterEtaPtPtMCRec_%d", i), Form(
"MC ALambda, inclusive, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta gen daughter;pT gen daughter;eta gen V0;pT gen V0;pT rec jet",
GetCentBinLabel(i).
Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter);
1136 fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[i] =
new THnSparseD(Form(
"fhnV0ALambdaInJetsDaughterEtaPtPtMCRec_%d", i), Form(
"MC ALambda, in JC, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta gen daughter;pT gen daughter;eta gen V0;pT gen V0;pT rec jet",
GetCentBinLabel(i).
Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter);
1151 fh1QAV0Status[i] =
new TH1D(Form(
"fh1QAV0Status_%d", i),
"QA: V0 status", 2, 0, 2);
1153 fh1QAV0TPCRows[i] =
new TH1D(Form(
"fh1QAV0TPCRows_%d", i),
"QA: TPC Rows", 160, 0, 160);
1155 fh2QAV0PtNCls[i] =
new TH2D(Form(
"fh2QAV0PtNCls_%d", i),
"QA: Daughter Pt vs TPC clusters;pt;# TPC clusters", 100, 0, 10, 160, 0, 160);
1156 fh2QAV0PtChi[i] =
new TH2D(Form(
"fh2QAV0PtChi_%d", i),
"QA: Daughter Pt vs Chi2/ndf;pt;Chi2/ndf", 100, 0, 10, 100, 0, 100);
1158 fh1QAV0Eta[i] =
new TH1D(Form(
"fh1QAV0Eta_%d", i),
"QA: Daughter Eta", 200, -2, 2);
1159 fh2QAV0EtaRows[i] =
new TH2D(Form(
"fh2QAV0EtaRows_%d", i),
"QA: Daughter Eta vs TPC rows;#eta;TPC rows", 200, -2, 2, 160, 0, 160);
1160 fh2QAV0PtRows[i] =
new TH2D(Form(
"fh2QAV0PtRows_%d", i),
"QA: Daughter Pt vs TPC rows;pt;TPC rows", 100, 0, 10, 160, 0, 160);
1161 fh2QAV0PhiRows[i] =
new TH2D(Form(
"fh2QAV0PhiRows_%d", i),
"QA: Daughter Phi vs TPC rows;#phi;TPC rows", 90, 0, TMath::TwoPi(), 160, 0, 160);
1162 fh2QAV0NClRows[i] =
new TH2D(Form(
"fh2QAV0NClRows_%d", i),
"QA: Daughter NCl vs TPC rows;findable clusters;TPC rows", 160, 0, 160, 160, 0, 160);
1163 fh2QAV0EtaNCl[i] =
new TH2D(Form(
"fh2QAV0EtaNCl_%d", i),
"QA: Daughter Eta vs NCl;#eta;findable clusters", 200, -2, 2, 160, 0, 160);
1165 fh2QAV0EtaPtK0sPeak[i] =
new TH2D(Form(
"fh2QAV0EtaPtK0sPeak_%d", i),
"QA: K0s: Daughter Eta vs V0 pt, peak;track eta;V0 pt", 200, -2, 2, iNBinsPtV0, dPtV0Min, dPtV0Max);
1166 fh2QAV0EtaEtaK0s[i] =
new TH2D(Form(
"fh2QAV0EtaEtaK0s_%d", i),
"QA: K0s: Eta vs Eta Daughter", 200, -2, 2, 200, -2, 2);
1167 fh2QAV0PhiPhiK0s[i] =
new TH2D(Form(
"fh2QAV0PhiPhiK0s_%d", i),
"QA: K0s: Phi vs Phi Daughter", 90, 0, TMath::TwoPi(), 90, 0, TMath::TwoPi());
1168 fh1QAV0RapK0s[i] =
new TH1D(Form(
"fh1QAV0RapK0s_%d", i),
"QA: K0s: V0 Rapidity", 200, -2, 2);
1169 fh2QAV0PtPtK0sPeak[i] =
new TH2D(Form(
"fh2QAV0PtPtK0sPeak_%d", i),
"QA: K0s: Daughter Pt vs Pt;neg pt;pos pt", 100, 0, 5, 100, 0, 5);
1171 fh2QAV0EtaPtLambdaPeak[i] =
new TH2D(Form(
"fh2QAV0EtaPtLambdaPeak_%d", i),
"QA: Lambda: Daughter Eta vs V0 pt, peak;track eta;V0 pt", 200, -2, 2, iNBinsPtV0, dPtV0Min, dPtV0Max);
1172 fh2QAV0EtaEtaLambda[i] =
new TH2D(Form(
"fh2QAV0EtaEtaLambda_%d", i),
"QA: Lambda: Eta vs Eta Daughter", 200, -2, 2, 200, -2, 2);
1173 fh2QAV0PhiPhiLambda[i] =
new TH2D(Form(
"fh2QAV0PhiPhiLambda_%d", i),
"QA: Lambda: Phi vs Phi Daughter", 90, 0, TMath::TwoPi(), 90, 0, TMath::TwoPi());
1174 fh1QAV0RapLambda[i] =
new TH1D(Form(
"fh1QAV0RapLambda_%d", i),
"QA: Lambda: V0 Rapidity", 200, -2, 2);
1175 fh2QAV0PtPtLambdaPeak[i] =
new TH2D(Form(
"fh2QAV0PtPtLambdaPeak_%d", i),
"QA: Lambda: Daughter Pt vs Pt;neg pt;pos pt", 100, 0, 5, 100, 0, 5);
1177 fh2QAV0EtaPtALambdaPeak[i] =
new TH2D(Form(
"fh2QAV0EtaPtALambdaPeak_%d", i),
"QA: anti-Lambda: Daughter Eta vs V0 pt, peak;track eta;V0 pt", 200, -2, 2, iNBinsPtV0, dPtV0Min, dPtV0Max);
1178 fh2QAV0EtaEtaALambda[i] =
new TH2D(Form(
"fh2QAV0EtaEtaALambda_%d", i),
"QA: anti-Lambda: Eta vs Eta Daughter", 200, -2, 2, 200, -2, 2);
1179 fh2QAV0PhiPhiALambda[i] =
new TH2D(Form(
"fh2QAV0PhiPhiALambda_%d", i),
"QA: anti-Lambda: Phi vs Phi Daughter", 90, 0, TMath::TwoPi(), 90, 0, TMath::TwoPi());
1180 fh1QAV0RapALambda[i] =
new TH1D(Form(
"fh1QAV0RapALambda_%d", i),
"QA: anti-Lambda: V0 Rapidity", 200, -2, 2);
1181 fh2QAV0PtPtALambdaPeak[i] =
new TH2D(Form(
"fh2QAV0PtPtALambdaPeak_%d", i),
"QA: anti-Lambda: Daughter Pt vs Pt;neg pt;pos pt", 100, 0, 5, 100, 0, 5);
1183 fh2QAV0PhiPtK0sPeak[i] =
new TH2D(Form(
"fh2QAV0PhiPtK0sPeak_%d", i),
"QA: K0S: #phi-pt;#phi;pt", 90, 0, TMath::TwoPi(), iNBinsPtV0, dPtV0Min, dPtV0Max);
1184 fh2QAV0PhiPtLambdaPeak[i] =
new TH2D(Form(
"fh2QAV0PhiPtLambdaPeak_%d", i),
"QA: Lambda: #phi-pt;#phi;pt", 90, 0, TMath::TwoPi(), iNBinsPtV0, dPtV0Min, dPtV0Max);
1185 fh2QAV0PhiPtALambdaPeak[i] =
new TH2D(Form(
"fh2QAV0PhiPtALambdaPeak_%d", i),
"QA: anti-Lambda: #phi-pt;#phi;pt", 90, 0, TMath::TwoPi(), iNBinsPtV0, dPtV0Min, dPtV0Max);
1186 fh1QAV0Pt[i] =
new TH1D(Form(
"fh1QAV0Pt_%d", i),
"QA: Daughter Pt", 100, 0, 5);
1187 fh1QAV0Charge[i] =
new TH1D(Form(
"fh1QAV0Charge_%d", i),
"QA: V0 Charge", 3, -1, 2);
1188 fh1QAV0DCAVtx[i] =
new TH1D(Form(
"fh1QAV0DCAVtx_%d", i),
"QA: DCA daughters to primary vertex", 1000, 0, 10);
1189 fh1QAV0DCAV0[i] =
new TH1D(Form(
"fh1QAV0DCAV0_%d", i),
"QA: DCA daughters", 100, 0, 2);
1190 fh1QAV0Cos[i] =
new TH1D(Form(
"fh1QAV0Cos_%d", i),
"QA: CPA", 10000, 0.9, 1);
1191 fh1QAV0R[i] =
new TH1D(Form(
"fh1QAV0R_%d", i),
"QA: R", 1500, 0, 150);
1192 fh1QACTau2D[i] =
new TH1D(Form(
"fh1QACTau2D_%d", i),
"QA: K0s: c#tau 2D;mR/pt#tau", 100, 0, 10);
1193 fh1QACTau3D[i] =
new TH1D(Form(
"fh1QACTau3D_%d", i),
"QA: K0s: c#tau 3D;mL/p#tau", 100, 0, 10);
1195 fh2ArmPod[i] =
new TH2D(Form(
"fh2ArmPod_%d", i),
"Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25);
1196 fh2ArmPodK0s[i] =
new TH2D(Form(
"fh2ArmPodK0s_%d", i),
"K0s: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25);
1197 fh2ArmPodLambda[i] =
new TH2D(Form(
"fh2ArmPodLambda_%d", i),
"Lambda: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25);
1198 fh2ArmPodALambda[i] =
new TH2D(Form(
"fh2ArmPodALambda_%d", i),
"ALambda: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25);
1325 THnSparse* hn =
dynamic_cast<THnSparse*
>(
fOutputListQA->At(i));
1347 THnSparse* hn =
dynamic_cast<THnSparse*
>(
fOutputListMC->At(i));
1390 printf(
"=======================================================\n");
1391 printf(
"%s: Configuration summary:\n", ClassName());
1392 printf(
"task name: %s\n", GetName());
1393 printf(
"-------------------------------------------------------\n");
1394 printf(
"collision system: %s\n",
fbIsPbPb ?
"Pb+Pb" :
"p+p");
1395 printf(
"data type: %s\n",
fbMCAnalysis ?
"MC" :
"real");
1401 printf(
"centrality estimator: %s\n",
fbUseMultiplicity ?
"AliMultSelection" :
"AliCentrality");
1406 printf(
"-------------------------------------------------------\n");
1407 if(
fbTPCRefit) printf(
"TPC refit for daughter tracks\n");
1408 if(
fbRejectKinks) printf(
"reject kink-like production vertices of daughter tracks\n");
1419 printf(
"V0 reconstruction method: %s\n",
fbOnFly ?
"on-the-fly" :
"offline");
1427 if(
fbCutArmPod) printf(
"Armenteros-Podolanski cut for K0S\n");
1428 if(
fbCutCross) printf(
"cross-contamination cut\n");
1429 printf(
"-------------------------------------------------------\n");
1430 printf(
"analysis of V0s in jets: %s\n",
fbJetSelection ?
"yes" :
"no");
1433 printf(
"rho subtraction: ");
1440 if(
fdCutEtaV0Max > 0. && fdDistanceV0JetMax > 0.) printf(
"max |eta| of jet: %g\n", dCutEtaJetMax);
1441 printf(
"max distance between V0 and jet axis: %g\n", fdDistanceV0JetMax);
1442 printf(
"angular correlations of V0s with jets: %s\n",
fbCorrelations ?
"yes" :
"no");
1444 printf(
"pt correlations of jets with trigger tracks: %s\n",
fbCompareTriggers ?
"yes" :
"no");
1445 printf(
"-------------------------------------------------------\n");
1448 printf(
"Signal jet container parameters\n");
1453 printf(
"No signal jet container!\n");
1456 printf(
"Background jet container parameters\n");
1461 printf(
"No background jet container\n");
1463 printf(
"=======================================================\n");
1476 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Start");
1483 AliWarning(
"Input AOD not available from InputEvent() trying with AODEvent().");
1488 AliError(
"No input AOD found!");
1492 if(fDebug > 1) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Loading AOD OK");
1494 TClonesArray* arrayMC = 0;
1495 AliAODMCHeader* headerMC = 0;
1496 Int_t iNTracksMC = 0;
1497 Double_t dPrimVtxMCX = 0., dPrimVtxMCY = 0., dPrimVtxMCZ = 0.;
1503 arrayMC = (TClonesArray*)
fAODIn->FindListObject(AliAODMCParticle::StdBranchName());
1506 AliError(
"No MC array/event found!");
1509 if(fDebug > 1) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"MC array found");
1510 iNTracksMC = arrayMC->GetEntriesFast();
1511 if(fDebug > 2) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"There are %d MC tracks in this event", iNTracksMC));
1512 headerMC = (AliAODMCHeader*)
fAODIn->FindListObject(AliAODMCHeader::StdBranchName());
1515 AliError(
"No MC header found!");
1519 dPrimVtxMCX = headerMC->GetVtxX();
1520 dPrimVtxMCY = headerMC->GetVtxY();
1521 dPrimVtxMCZ = headerMC->GetVtxZ();
1525 AliPIDResponse* fPIDResponse = 0;
1529 AliInputEventHandler* inputHandler = (AliInputEventHandler*)mgr->GetInputEventHandler();
1530 fPIDResponse = inputHandler->GetPIDResponse();
1533 AliError(
"No PID response object found!");
1544 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Event rejected");
1547 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Event accepted: cent. %g",
fdCentrality));
1553 AliError(Form(
"Event is out of histogram range: cent: %g!",
fdCentrality));
1560 if(fDebug > 2) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"There are %d tracks in this event", iNTracks));
1561 AliAODHeader* header =
dynamic_cast<AliAODHeader*
>(
fAODIn->GetHeader());
1564 AliError(
"Cannot get AOD header");
1566 iNTracksRef = header->GetRefMultiplicityComb08();
1574 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"No V0s found in event");
1583 AliEventPool* pool = 0;
1584 Bool_t bPoolReady = kFALSE;
1588 AliAODVertex* vertex =
fAODIn->GetPrimaryVertex();
1589 dZVtxME = vertex->GetZ();
1593 AliError(Form(
"No pool found for centrality = %g, z_vtx = %g!",
fdCentrality, dZVtxME));
1596 bPoolReady = pool->IsReady();
1601 printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Pool %d-%d: events in pool = %d, jets in pool = %d", pool->MultBinIndex(), pool->ZvtxBinIndex(), pool->GetCurrentNEvents(), pool->NTracksInPool()));
1612 TVector3 vecV0Momentum;
1616 Int_t iNV0CandTot = 0;
1617 Int_t iNV0CandK0s = 0;
1618 Int_t iNV0CandLambda = 0;
1619 Int_t iNV0CandALambda = 0;
1622 Bool_t bPrintJetSelection = 0;
1633 Double_t dMassPDGK0s = TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass();
1634 Double_t dMassPDGLambda = TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass();
1637 Int_t iPdgCodePion = 211;
1638 Int_t iPdgCodeProton = 2212;
1639 Int_t iPdgCodeK0s = 310;
1640 Int_t iPdgCodeLambda = 3122;
1644 Bool_t bLeadingJetOnly = 0;
1647 TClonesArray* arrayJetSel =
new TClonesArray(
"AliAODJet", 0);
1649 TClonesArray* arrayJetPerp =
new TClonesArray(
"AliAODJet", 0);
1650 Int_t iNJetPerp = 0;
1652 arrayMixedEventAdd->SetOwner(kTRUE);
1655 AliAODJet* jetPerp = 0;
1656 AliAODJet* jetRnd = 0;
1658 TVector3 vecJetMomentum;
1659 TVector3 vecJetMomentumPair;
1660 Bool_t bJetEventGood = kTRUE;
1662 TLorentzVector vecJetSel;
1663 TLorentzVector vecPerpPlus;
1664 TLorentzVector vecPerpMinus;
1672 AliError(
"No signal jet container!");
1673 bJetEventGood = kFALSE;
1677 if(bJetEventGood && !iNJet)
1679 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"No jets in array");
1680 bJetEventGood = kFALSE;
1684 AliWarning(
"No bg jet container!");
1689 bJetEventGood = kFALSE;
1697 if(fDebug > 4) printf(
"%s::%s: %s\n", ClassName(), __func__, Form(
"Loaded rho value: %g", dRho));
1701 if(fDebug > 2) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Jet selection for %d jets", iNJet));
1702 for(
Int_t iJet = 0; iJet < iNJet; iJet++)
1709 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Jet %d not accepted in container", iJet));
1720 dPtJetCorr = jetSel->
PtSub(dRho);
1725 dPtJetCorr = vecJetSel.Pt();
1726 dEtaJetCorr = vecJetSel.Eta();
1727 dPhiJetCorr = TVector2::Phi_0_2pi(vecJetSel.Phi());
1730 if(bPrintJetSelection)
1731 if(fDebug > 4) printf(
"jet: i = %d, pT = %g, eta = %g, phi = %g, pt lead tr = %g ", iJet, dPtJetCorr, dEtaJetCorr, dPhiJetCorr, dPtTrackJet);
1734 if(bPrintJetSelection)
1735 if(fDebug > 4) printf(
"rejected (pt)\n");
1738 if(bPrintJetSelection)
1739 if(fDebug > 4) printf(
"accepted\n");
1740 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Jet %d with pt %g passed selection", iJet, dPtJetCorr));
1742 vecJetSel.SetPtEtaPhiM(dPtJetCorr, dEtaJetCorr, dPhiJetCorr, 0.);
1743 vecPerpPlus = vecJetSel;
1744 vecPerpMinus = vecJetSel;
1745 vecPerpPlus.RotateZ(TMath::Pi() / 2.);
1746 vecPerpMinus.RotateZ(-TMath::Pi() / 2.);
1747 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Adding perp. cones number %d, %d, pt %g", iNJetPerp, iNJetPerp + 1, vecPerpPlus.Pt()));
1748 new((*arrayJetPerp)[iNJetPerp++]) AliAODJet(vecPerpPlus);
1749 new((*arrayJetPerp)[iNJetPerp++]) AliAODJet(vecPerpMinus);
1750 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Adding jet number %d", iNJetSel));
1751 new((*arrayJetSel)[iNJetSel++]) AliAODJet(vecJetSel);
1752 ((AliAODJet*)arrayJetSel->At(iNJetSel - 1))->SetPtLeading(dPtTrackJet);
1755 arrayMixedEventAdd->Add(
new TLorentzVector(vecJetSel));
1757 if(fDebug > 3) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Added jets: %d", iNJetSel));
1758 iNJetSel = arrayJetSel->GetEntriesFast();
1759 if(fDebug > 2) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Selected jets in array: %d", iNJetSel));
1761 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
1763 jet = (AliAODJet*)arrayJetSel->At(iJet);
1764 fh1PtJet[iCentIndex]->Fill(jet->Pt());
1765 fh1EtaJet[iCentIndex]->Fill(jet->Eta());
1766 fh2EtaPtJet[iCentIndex]->Fill(jet->Eta(), jet->Pt());
1767 fh1PhiJet[iCentIndex]->Fill(jet->Phi());
1768 Double_t dAreaExcluded = TMath::Pi() * dRadiusExcludeCone * dRadiusExcludeCone;
1773 vecJetMomentum.SetXYZ(jet->Px(), jet->Py(), jet->Pz());
1774 for(
Int_t iJetPair = iJet + 1; iJetPair < iNJetSel; iJetPair++)
1776 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Calculating distance for jet pair: %d-%d/%d\n", iJet, iJetPair, iNJetSel));
1777 jet = (AliAODJet*)arrayJetSel->At(iJetPair);
1778 vecJetMomentumPair.SetXYZ(jet->Px(), jet->Py(), jet->Pz());
1779 fh1DistanceJets[iCentIndex]->Fill(vecJetMomentum.DeltaR(vecJetMomentumPair));
1803 jetRnd =
GetRandomCone(arrayJetSel, dCutEtaJetMax, 2 * fdDistanceV0JetMax);
1823 AliError(
"No track container!");
1826 AliAODJet* jetTrig = 0;
1836 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
1838 jetTrig = (AliAODJet*)arrayJetSel->At(iJet);
1853 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
1855 jetTrig = (AliAODJet*)arrayJetSel->At(iJet);
1866 AliAODVertex* primVtx =
fAODIn->GetPrimaryVertex();
1868 primVtx->GetXYZ(dPrimVtxPos);
1869 fh1VtxZ[iCentIndex]->Fill(dPrimVtxPos[2]);
1870 fh2VtxXY[iCentIndex]->Fill(dPrimVtxPos[0], dPrimVtxPos[1]);
1873 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Start of V0 loop");
1874 for(
Int_t iV0 = 0; iV0 < iNV0s; iV0++)
1883 Bool_t bIsCandidateK0s = kTRUE;
1884 Bool_t bIsCandidateLambda = kTRUE;
1885 Bool_t bIsCandidateALambda = kTRUE;
1886 Bool_t bIsInPeakK0s = kFALSE;
1887 Bool_t bIsInPeakLambda = kFALSE;
1888 Bool_t bIsInPeakALambda = kFALSE;
1889 Bool_t bIsInConeJet = kFALSE;
1890 Bool_t bIsInConePerp = kFALSE;
1891 Bool_t bIsInConeRnd = kFALSE;
1892 Bool_t bIsInConeMed = kFALSE;
1893 Bool_t bIsOutsideCones = kFALSE;
1896 dMassV0K0s = v0->MassK0Short();
1897 dMassV0Lambda = v0->MassLambda();
1898 dMassV0ALambda = v0->MassAntiLambda();
1900 Int_t iCutIndex = 0;
1903 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
1906 Double_t dPtV0 = TMath::Sqrt(v0->Pt2V0());
1907 vecV0Momentum = TVector3(v0->Px(), v0->Py(), v0->Pz());
1914 dMassPeakWindowK0s = 0.010;
1915 dMassPeakWindowLambda = 0.005;
1919 if(TMath::Abs(dMassV0K0s - dMassPDGK0s) < dMassPeakWindowK0s)
1920 bIsInPeakK0s = kTRUE;
1921 if(TMath::Abs(dMassV0Lambda - dMassPDGLambda) < dMassPeakWindowLambda)
1922 bIsInPeakLambda = kTRUE;
1923 if(TMath::Abs(dMassV0ALambda - dMassPDGLambda) < dMassPeakWindowLambda)
1924 bIsInPeakALambda = kTRUE;
1927 FillQAHistogramV0(primVtx, v0, 0, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, bIsInPeakK0s, bIsInPeakLambda, bIsInPeakALambda);
1931 bIsCandidateK0s = kFALSE;
1933 bIsCandidateLambda = kFALSE;
1935 bIsCandidateALambda = kFALSE;
1936 if(!bIsCandidateK0s && !bIsCandidateLambda && !bIsCandidateALambda)
1940 Bool_t bOnFlyStatus = v0->GetOnFlyStatus();
1941 const AliAODTrack* trackPos = (AliAODTrack*)v0->GetDaughter(0);
1942 const AliAODTrack* trackNeg = (AliAODTrack*)v0->GetDaughter(1);
1943 Double_t dPtDaughterPos = trackPos->Pt();
1944 Double_t dPtDaughterNeg = trackNeg->Pt();
1945 Double_t dNRowsPos = trackPos->GetTPCClusterInfo(2, 1);
1946 Double_t dNRowsNeg = trackNeg->GetTPCClusterInfo(2, 1);
1949 Double_t dDCAToPrimVtxPos = TMath::Abs(v0->DcaPosToPrimVertex());
1950 Double_t dDCAToPrimVtxNeg = TMath::Abs(v0->DcaNegToPrimVertex());
1951 Double_t dDCADaughters = v0->DcaV0Daughters();
1952 Double_t dCPA = v0->CosPointingAngle(primVtx);
1955 v0->GetSecondaryVtx(dSecVtxPos);
1956 Double_t dRadiusDecay = TMath::Sqrt(dSecVtxPos[0] * dSecVtxPos[0] + dSecVtxPos[1] * dSecVtxPos[1]);
1957 Double_t dEtaDaughterPos = trackPos->Eta();
1958 Double_t dEtaDaughterNeg = trackNeg->Eta();
1959 Double_t dRapK0s = v0->RapK0Short();
1960 Double_t dRapLambda = v0->RapLambda();
1964 for(
Int_t iPos = 0; iPos < 3; iPos++)
1965 dDecayPath[iPos] = dSecVtxPos[iPos] - dPrimVtxPos[iPos];
1966 Double_t dDecLen = TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1] + dDecayPath[2] * dDecayPath[2]);
1967 Double_t dDecLen2D = TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1]);
1968 Double_t dLOverP = dDecLen / v0->P();
1969 Double_t dROverPt = dDecLen2D / dPtV0;
1970 Double_t dMLOverPK0s = dMassPDGK0s * dLOverP;
1972 Double_t dMROverPtK0s = dMassPDGK0s * dROverPt;
1973 Double_t dMROverPtLambda = dMassPDGLambda * dROverPt;
1974 Double_t dNSigmaPosPion = (fPIDResponse ? TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackPos,
AliPID::kPion)) : 0.);
1975 Double_t dNSigmaPosProton = (fPIDResponse ? TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackPos,
AliPID::kProton)) : 0.);
1976 Double_t dNSigmaNegPion = (fPIDResponse ? TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackNeg,
AliPID::kPion)) : 0.);
1977 Double_t dNSigmaNegProton = (fPIDResponse ? TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackNeg,
AliPID::kProton)) : 0.);
1980 AliAODVertex* prodVtxDaughterPos = (AliAODVertex*)(trackPos->GetProdVertex());
1981 Char_t cTypeVtxProdPos = prodVtxDaughterPos->GetType();
1982 AliAODVertex* prodVtxDaughterNeg = (AliAODVertex*)(trackNeg->GetProdVertex());
1983 Char_t cTypeVtxProdNeg = prodVtxDaughterNeg->GetType();
2026 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2032 if(bPrintCuts) printf(
"Rec: Applying cut: Reconstruction method: %s\n", (
fbOnFly ?
"on-the-fly" :
"offline"));
2035 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2040 if(bPrintCuts) printf(
"Rec: Applying cut: Correct charge of daughters\n");
2041 if(!trackNeg || !trackPos)
2043 if(trackNeg->Charge() == trackPos->Charge())
2045 if(trackNeg->Charge() != -1)
2047 if(trackPos->Charge() != 1)
2052 if(bPrintCuts) printf(
"Rec: Applying cut: TPC refit\n");
2053 if(!trackNeg->IsOn(AliAODTrack::kTPCrefit))
2055 if(!trackPos->IsOn(AliAODTrack::kTPCrefit))
2061 if(bPrintCuts) printf(
"Rec: Applying cut: Type of production vertex of daughter: No kinks\n");
2062 if(cTypeVtxProdNeg == AliAODVertex::kKink)
2064 if(cTypeVtxProdPos == AliAODVertex::kKink)
2070 if(bPrintCuts) printf(
"Rec: Applying cut: Positive number of findable clusters\n");
2071 if(dFindableNeg <= 0.)
2073 if(dFindablePos <= 0.)
2104 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2114 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2122 if(bPrintCuts) printf(
"Rec: Applying cut: Daughter DCA to prim vtx >= %g\n",
fdCutDCAToPrimVtxMin);
2125 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2133 if(bPrintCuts) printf(
"Rec: Applying cut: DCA between daughters <= %g\n",
fdCutDCADaughtersMax);
2136 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2144 if(bPrintCuts) printf(
"Rec: Applying cut: CPA >= %g (K)\n",
fdCutCPAKMin);
2146 bIsCandidateK0s = kFALSE;
2150 if(bPrintCuts) printf(
"Rec: Applying cut: CPA >= %g (L, AL)\n",
fdCutCPALMin);
2153 bIsCandidateLambda = kFALSE;
2154 bIsCandidateALambda = kFALSE;
2158 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2168 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2179 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2189 if(bPrintCuts) printf(
"Rec: Applying cut: V0 |eta| < %g\n",
fdCutEtaV0Max);
2192 bIsCandidateK0s = kFALSE;
2193 bIsCandidateLambda = kFALSE;
2194 bIsCandidateALambda = kFALSE;
2199 if(bPrintCuts) printf(
"Rec: Applying cut: V0 |y| < %g\n",
fdCutRapV0Max);
2201 bIsCandidateK0s = kFALSE;
2204 bIsCandidateLambda = kFALSE;
2205 bIsCandidateALambda = kFALSE;
2209 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2216 if(bPrintCuts) printf(
"Rec: Applying cut: Proper lifetime < %g (K)\n",
fdCutNTauKMax);
2218 bIsCandidateK0s = kFALSE;
2222 if(bPrintCuts) printf(
"Rec: Applying cut: Proper lifetime < %g (L, AL)\n",
fdCutNTauLMax);
2225 bIsCandidateLambda = kFALSE;
2226 bIsCandidateALambda = kFALSE;
2230 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2241 bIsCandidateLambda = kFALSE;
2243 bIsCandidateALambda = kFALSE;
2247 if(bPrintCuts) printf(
"Rec: Applying cut: Delta dE/dx (both daughters): < %g\n",
fdCutNSigmadEdxMax);
2249 bIsCandidateK0s = kFALSE;
2251 bIsCandidateLambda = kFALSE;
2253 bIsCandidateALambda = kFALSE;
2255 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2259 Double_t valueCorrel[3] = {dMassV0K0s, dMassV0Lambda, dPtV0};
2260 if(bIsCandidateK0s && bIsCandidateLambda)
2262 if(bIsCandidateK0s && !bIsCandidateLambda)
2264 if(!bIsCandidateK0s && bIsCandidateLambda)
2271 if(bPrintCuts) printf(
"Rec: Applying cut: Armenteros-Podolanski (K0S) pT > %g * |alpha|\n", 0.2);
2272 if(dPtArm < TMath::Abs(0.2 * dAlpha))
2273 bIsCandidateK0s = kFALSE;
2274 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2296 bIsCandidateLambda = kFALSE;
2297 bIsCandidateALambda = kFALSE;
2301 bIsCandidateK0s = kFALSE;
2303 if(bIsInPeakALambda)
2305 bIsCandidateK0s = kFALSE;
2307 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2314 if(!bIsCandidateK0s && !bIsCandidateLambda && !bIsCandidateALambda)
2318 if(iNJetSel && (bIsCandidateK0s || bIsCandidateLambda || bIsCandidateALambda))
2322 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
2325 jet = (AliAODJet*)arrayJetSel->At(iJet);
2334 if(bIsCandidateLambda)
2336 if(bIsCandidateALambda)
2340 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for V0 %d %d in %d jet cones", bIsCandidateK0s, bIsCandidateLambda, iNJetSel));
2341 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
2343 jet = (AliAODJet*)arrayJetSel->At(iJet);
2346 vecJetMomentum.SetXYZ(jet->Px(), jet->Py(), jet->Pz());
2347 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Checking if V0 %d %d in jet cone %d", bIsCandidateK0s, bIsCandidateLambda, iJet));
2350 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found in jet cone %d", bIsCandidateK0s, bIsCandidateLambda, iJet));
2351 bIsInConeJet = kTRUE;
2352 dPtJetTrackLeading = jet->GetPtLeading();
2358 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for V0 %d %d in %d perp. cones", bIsCandidateK0s, bIsCandidateLambda, iNJetPerp));
2359 for(
Int_t iJet = 0; iJet < iNJetPerp; iJet++)
2361 jetPerp = (AliAODJet*)arrayJetPerp->At(iJet);
2362 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Checking if V0 %d %d in perp. cone %d", bIsCandidateK0s, bIsCandidateLambda, iJet));
2365 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found in perp. cone %d", bIsCandidateK0s, bIsCandidateLambda, iJet));
2366 bIsInConePerp = kTRUE;
2373 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for V0 %d %d in the rnd. cone", bIsCandidateK0s, bIsCandidateLambda));
2376 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found in the rnd. cone", bIsCandidateK0s, bIsCandidateLambda));
2377 bIsInConeRnd = kTRUE;
2383 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for V0 %d %d in the med. cone", bIsCandidateK0s, bIsCandidateLambda));
2386 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found in the med. cone", bIsCandidateK0s, bIsCandidateLambda));
2387 bIsInConeMed = kTRUE;
2391 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for V0 %d %d outside jet cones", bIsCandidateK0s, bIsCandidateLambda));
2394 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found outside jet cones", bIsCandidateK0s, bIsCandidateLambda));
2395 bIsOutsideCones = kTRUE;
2400 FillQAHistogramV0(primVtx, v0, 1, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, bIsInPeakK0s, bIsInPeakLambda, bIsInPeakALambda);
2441 dAngle = vecV0Momentum.Angle(vecJetMomentum);
2449 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex, iCentIndex);
2450 Double_t valueKIncl[3] = {dMassV0K0s, dPtV0, dEtaV0};
2461 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex + 1, iCentIndex);
2466 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex + 2, iCentIndex);
2467 Double_t valueKInJC[4] = {dMassV0K0s, dPtV0, dEtaV0, jet->Pt()};
2470 Double_t valuesDaughter[5] = {dPtDaughterPos, dPtDaughterNeg, dPtV0, dPtJet, dPtJetTrackLeading};
2475 Double_t valueKOutJC[3] = {dMassV0K0s, dPtV0, dEtaV0};
2480 Double_t valueKInPC[4] = {dMassV0K0s, dPtV0, dEtaV0, jetPerp->Pt()};
2485 Double_t valueKInRnd[3] = {dMassV0K0s, dPtV0, dEtaV0};
2490 Double_t valueKInMed[3] = {dMassV0K0s, dPtV0, dEtaV0};
2495 Double_t valueKNoJet[3] = {dMassV0K0s, dPtV0, dEtaV0};
2500 if(bIsCandidateLambda)
2504 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex, iCentIndex);
2505 Double_t valueLIncl[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2511 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex + 1, iCentIndex);
2516 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex + 2, iCentIndex);
2517 Double_t valueLInJC[4] = {dMassV0Lambda, dPtV0, dEtaV0, jet->Pt()};
2520 Double_t valuesDaughter[5] = {dPtDaughterPos, dPtDaughterNeg, dPtV0, dPtJet, dPtJetTrackLeading};
2525 Double_t valueLOutJet[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2530 Double_t valueLInPC[4] = {dMassV0Lambda, dPtV0, dEtaV0, jetPerp->Pt()};
2535 Double_t valueLInRnd[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2540 Double_t valueLInMed[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2545 Double_t valueLNoJet[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2550 if(bIsCandidateALambda)
2554 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex, iCentIndex);
2555 Double_t valueALIncl[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2561 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex + 1, iCentIndex);
2566 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex + 2, iCentIndex);
2567 Double_t valueLInJC[4] = {dMassV0ALambda, dPtV0, dEtaV0, jet->Pt()};
2570 Double_t valuesDaughter[5] = {dPtDaughterPos, dPtDaughterNeg, dPtV0, dPtJet, dPtJetTrackLeading};
2575 Double_t valueALOutJet[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2580 Double_t valueLInPC[4] = {dMassV0ALambda, dPtV0, dEtaV0, jetPerp->Pt()};
2585 Double_t valueALInRnd[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2590 Double_t valueALInMed[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2595 Double_t valueALNoJet[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2605 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
2607 AliAODJet* jetCorrel = (AliAODJet*)arrayJetSel->At(iJet);
2609 dDEta = dEtaV0 - jetCorrel->Eta();
2614 Double_t valueKCorrel[6] = {dMassV0K0s, dPtV0, dEtaV0, jetCorrel->Pt(), dDPhi, dDEta};
2617 if(bIsCandidateLambda)
2619 Double_t valueLCorrel[6] = {dMassV0Lambda, dPtV0, dEtaV0, jetCorrel->Pt(), dDPhi, dDEta};
2626 for(
Int_t iMix = 0; iMix < pool->GetCurrentNEvents(); iMix++)
2628 TObjArray* arrayMixedEvent = pool->GetEvent(iMix);
2629 if(!arrayMixedEvent)
2631 for(
Int_t iJet = 0; iJet < arrayMixedEvent->GetEntriesFast(); iJet++)
2633 TLorentzVector* jetMixed = (TLorentzVector*)arrayMixedEvent->At(iJet);
2637 dDEta = dEtaV0 - jetMixed->Eta();
2642 Double_t valueKCorrel[6] = {dMassV0K0s, dPtV0, dEtaV0, jetMixed->Pt(), dDPhi, dDEta};
2645 if(bIsCandidateLambda)
2647 Double_t valueLCorrel[6] = {dMassV0Lambda, dPtV0, dEtaV0, jetMixed->Pt(), dDPhi, dDEta};
2662 if(!(bIsCandidateK0s) && !(bIsCandidateLambda) && !(bIsCandidateALambda))
2666 Int_t iLabelPos = TMath::Abs(trackPos->GetLabel());
2667 Int_t iLabelNeg = TMath::Abs(trackNeg->GetLabel());
2670 if((iLabelNeg < 0) || (iLabelNeg >= iNTracksMC) || (iLabelPos < 0) || (iLabelPos >= iNTracksMC))
2674 AliAODMCParticle* particleMCDaughterNeg = (AliAODMCParticle*)arrayMC->At(iLabelNeg);
2675 AliAODMCParticle* particleMCDaughterPos = (AliAODMCParticle*)arrayMC->At(iLabelPos);
2676 if(!particleMCDaughterNeg || !particleMCDaughterPos)
2680 if((particleMCDaughterNeg->IsPhysicalPrimary()) || (particleMCDaughterPos->IsPhysicalPrimary()))
2684 Int_t iPdgCodeDaughterPos = particleMCDaughterPos->GetPdgCode();
2685 Int_t iPdgCodeDaughterNeg = particleMCDaughterNeg->GetPdgCode();
2688 Int_t iIndexMotherPos = particleMCDaughterPos->GetMother();
2689 Int_t iIndexMotherNeg = particleMCDaughterNeg->GetMother();
2691 if((iIndexMotherNeg < 0) || (iIndexMotherNeg >= iNTracksMC) || (iIndexMotherPos < 0) || (iIndexMotherPos >= iNTracksMC))
2695 if(iIndexMotherNeg != iIndexMotherPos)
2699 AliAODMCParticle* particleMCMother = (AliAODMCParticle*)arrayMC->At(iIndexMotherPos);
2700 if(!particleMCMother)
2704 Int_t iPdgCodeMother = particleMCMother->GetPdgCode();
2707 if((iPdgCodeMother != iPdgCodeK0s) && (TMath::Abs(iPdgCodeMother) != iPdgCodeLambda))
2712 Bool_t bV0MCIsK0s = ((iPdgCodeMother == iPdgCodeK0s) && (iPdgCodeDaughterPos == +iPdgCodePion) && (iPdgCodeDaughterNeg == -iPdgCodePion));
2714 Bool_t bV0MCIsLambda = ((iPdgCodeMother == +iPdgCodeLambda) && (iPdgCodeDaughterPos == +iPdgCodeProton) && (iPdgCodeDaughterNeg == -iPdgCodePion));
2716 Bool_t bV0MCIsALambda = ((iPdgCodeMother == -iPdgCodeLambda) && (iPdgCodeDaughterPos == +iPdgCodePion) && (iPdgCodeDaughterNeg == -iPdgCodeProton));
2718 Double_t dPtV0Gen = particleMCMother->Pt();
2719 Double_t dRapV0Gen = particleMCMother->Y();
2720 Double_t dEtaV0Gen = particleMCMother->Eta();
2726 if(bPrintCuts) printf(
"Rec->Gen: Applying cut: V0 |eta|: < %g\n",
fdCutEtaV0Max);
2733 if(bPrintCuts) printf(
"Rec->Gen: Applying cut: V0 |y|: < %g\n",
fdCutRapV0Max);
2745 Int_t iIndexMotherOfMother = particleMCMother->GetMother();
2746 AliAODMCParticle* particleMCMotherOfMother = 0;
2747 if(iIndexMotherOfMother >= 0)
2748 particleMCMotherOfMother = (AliAODMCParticle*)arrayMC->At(iIndexMotherOfMother);
2750 Int_t iPdgCodeMotherOfMother = 0;
2751 if(particleMCMotherOfMother)
2752 iPdgCodeMotherOfMother = particleMCMotherOfMother->GetPdgCode();
2760 Bool_t bV0MCComesFromXi = ((particleMCMotherOfMother) && ((iPdgCodeMotherOfMother == 3322) || (iPdgCodeMotherOfMother == 3312)));
2761 Bool_t bV0MCComesFromAXi = ((particleMCMotherOfMother) && ((iPdgCodeMotherOfMother == -3322) || (iPdgCodeMotherOfMother == -3312)));
2764 Double_t dx = dPrimVtxMCX - particleMCMother->Xv();
2765 Double_t dy = dPrimVtxMCY - particleMCMother->Yv();
2766 Double_t dz = dPrimVtxMCZ - particleMCMother->Zv();
2767 Double_t dDistPrimary = TMath::Sqrt(dx * dx + dy * dy + dz * dz);
2768 Bool_t bV0MCIsPrimaryDist = (dDistPrimary < dDistPrimaryMax);
2779 if(bV0MCIsK0s && bV0MCIsPrimaryDist)
2782 Double_t valueEtaK[3] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen};
2785 Double_t valueEtaDKNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2787 Double_t valueEtaDKPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2794 Double_t valueKInJCMC[4] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen, jet->Pt()};
2796 Double_t valueEtaKIn[5] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()};
2799 Double_t valueEtaDKJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2801 Double_t valueEtaDKJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2805 if(bV0MCIsK0s && !bV0MCIsPrimaryDist)
2812 if(bIsCandidateLambda)
2815 if(bV0MCIsLambda && bV0MCIsPrimaryDist)
2818 Double_t valueEtaL[3] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen};
2821 Double_t valueEtaDLNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2823 Double_t valueEtaDLPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2830 Double_t valueLInJCMC[4] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen, jet->Pt()};
2832 Double_t valueEtaLIn[5] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()};
2835 Double_t valueEtaDLJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2837 Double_t valueEtaDLJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2842 if(bV0MCIsLambda && bV0MCComesFromXi)
2844 Double_t valueFDLIncl[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), 0.};
2852 Double_t valueFDLInJets[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), jet->Pt()};
2856 if(bV0MCIsLambda && !bV0MCIsPrimaryDist && !bV0MCComesFromXi)
2863 if(bIsCandidateALambda)
2866 if(bV0MCIsALambda && bV0MCIsPrimaryDist)
2869 Double_t valueEtaAL[3] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen};
2872 Double_t valueEtaDALNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2874 Double_t valueEtaDALPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2881 Double_t valueALInJCMC[4] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen, jet->Pt()};
2883 Double_t valueEtaALIn[5] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()};
2886 Double_t valueEtaDALJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2888 Double_t valueEtaDALJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2893 if(bV0MCIsALambda && bV0MCComesFromAXi)
2895 Double_t valueFDALIncl[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), 0.};
2903 Double_t valueFDALInJets[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), jet->Pt()};
2907 if(bV0MCIsALambda && !bV0MCIsPrimaryDist && !bV0MCComesFromAXi)
2916 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"End of V0 loop");
2922 pool->UpdatePool(arrayMixedEventAdd);
2933 for(
Int_t iPartMC = 0; iPartMC < iNTracksMC; iPartMC++)
2936 AliAODMCParticle* particleMC = (AliAODMCParticle*)arrayMC->At(iPartMC);
2941 Int_t iPdgCodeParticleMC = particleMC->GetPdgCode();
2944 if((iPdgCodeParticleMC == 3312) && (TMath::Abs(particleMC->Y()) < 0.5) &&
IsFromGoodGenerator(iPartMC))
2948 else if((iPdgCodeParticleMC == -3312) && (TMath::Abs(particleMC->Y()) < 0.5) &&
IsFromGoodGenerator(iPartMC))
2953 if((iPdgCodeParticleMC != iPdgCodeK0s) && (TMath::Abs(iPdgCodeParticleMC) != iPdgCodeLambda))
2958 Bool_t bV0MCIsK0s = (iPdgCodeParticleMC == iPdgCodeK0s);
2960 Bool_t bV0MCIsLambda = (iPdgCodeParticleMC == +iPdgCodeLambda);
2962 Bool_t bV0MCIsALambda = (iPdgCodeParticleMC == -iPdgCodeLambda);
2964 Double_t dPtV0Gen = particleMC->Pt();
2965 Double_t dRapV0Gen = particleMC->Y();
2966 Double_t dEtaV0Gen = particleMC->Eta();
2971 if(bPrintCuts) printf(
"Gen: Applying cut: V0 |eta|: < %g\n",
fdCutEtaV0Max);
2978 if(bPrintCuts) printf(
"Gen: Applying cut: V0 |y|: < %g\n",
fdCutRapV0Max);
3004 Double_t dx = dPrimVtxMCX - particleMC->Xv();
3005 Double_t dy = dPrimVtxMCY - particleMC->Yv();
3006 Double_t dz = dPrimVtxMCZ - particleMC->Zv();
3007 Double_t dDistPrimary = TMath::Sqrt(dx * dx + dy * dy + dz * dz);
3008 Bool_t bV0MCIsPrimaryDist = (dDistPrimary < dDistPrimaryMax);
3011 if(!bV0MCIsPrimaryDist)
3019 AliAODJet* jetMC = 0;
3020 Bool_t bIsMCV0InJet = kFALSE;
3023 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for gen V0 in %d MC jets", iNJetSel));
3024 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
3026 jetMC = (AliAODJet*)arrayJetSel->At(iJet);
3027 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Checking if gen V0 in MC jet %d", iJet));
3030 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"gen V0 found in MC jet %d", iJet));
3031 bIsMCV0InJet = kTRUE;
3046 Double_t valueEtaKInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()};
3059 Double_t valueEtaLInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()};
3072 Double_t valueEtaALInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()};
3079 arrayJetSel->Delete();
3081 arrayJetPerp->Delete();
3082 delete arrayJetPerp;
3092 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"End");
3099 if(!IsCandK0s && !IsCandLambda && !IsCandALambda)
3107 AliAODTrack* trackNeg = (AliAODTrack*)vZero->GetDaughter(1);
3108 AliAODTrack* trackPos = (AliAODTrack*)vZero->GetDaughter(0);
3111 for(
Int_t i = 0; i < 2; i++)
3113 AliAODTrack* track = (AliAODTrack*)vZero->GetDaughter(i);
3115 fh1QAV0TPCRefit[iIndexHisto]->Fill(track->IsOn(AliAODTrack::kTPCrefit));
3116 Double_t nCrossedRowsTPC = track->GetTPCClusterInfo(2, 1);
3118 Int_t findable = track->GetTPCNclsF();
3129 fh2QAV0EtaRows[iIndexHisto]->Fill(track->Eta(), nCrossedRowsTPC);
3130 fh2QAV0PtRows[iIndexHisto]->Fill(track->Pt(), nCrossedRowsTPC);
3131 fh2QAV0PhiRows[iIndexHisto]->Fill(track->Phi(), nCrossedRowsTPC);
3134 fh2QAV0PtNCls[iIndexHisto]->Fill(track->Pt(), track->GetTPCNcls());
3135 fh2QAV0PtChi[iIndexHisto]->Fill(track->Pt(), track->Chi2perNDF());
3139 fh1QAV0Pt[iIndexHisto]->Fill(track->Pt());
3140 fTotalCharge += track->Charge();
3145 fh1QAV0DCAVtx[iIndexHisto]->Fill(TMath::Abs(vZero->DcaNegToPrimVertex()));
3146 fh1QAV0DCAVtx[iIndexHisto]->Fill(TMath::Abs(vZero->DcaPosToPrimVertex()));
3150 fh1QAV0DCAV0[iIndexHisto]->Fill(vZero->DcaV0Daughters());
3154 fh1QAV0Cos[iIndexHisto]->Fill(vZero->CosPointingAngle(vtx));
3159 vZero->GetSecondaryVtx(xyz);
3160 Double_t r2 = xyz[0] * xyz[0] + xyz[1] * xyz[1];
3161 fh1QAV0R[iIndexHisto]->Fill(TMath::Sqrt(r2));
3163 Double_t dAlpha = vZero->AlphaV0();
3164 Double_t dPtArm = vZero->PtArmV0();
3214 fh2ArmPod[iIndexHisto]->Fill(dAlpha, dPtArm);
3239 if(!part1 || !part2)
3242 TVector3 vecMom2(part2->Px(), part2->Py(), part2->Pz());
3243 TVector3 vecMom1(part1->Px(), part1->Py(), part1->Pz());
3244 Double_t dR = vecMom2.DeltaR(vecMom1);
3255 AliError(
"No particle!");
3260 AliError(
"No jet array!");
3263 Int_t iNJets = array->GetEntriesFast();
3266 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Warning: No jets");
3269 AliVParticle* jet = 0;
3270 for(
Int_t iJet = 0; iJet < iNJets; iJet++)
3272 jet = (AliVParticle*)array->At(iJet);
3275 AliError(Form(
"Failed to load jet %d/%d!", iJet, iNJets));
3287 if(fDebug > 3) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Generating random cone...");
3288 TLorentzVector vecCone;
3289 AliAODJet* part = 0;
3291 Int_t iNTrialsMax = 10;
3293 for(
Int_t iTry = 0; iTry < iNTrialsMax; iTry++)
3295 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Try %d", iTry));
3296 dEta = dEtaConeMax * (2 *
fRandom->Rndm() - 1.);
3297 dPhi = TMath::TwoPi() *
fRandom->Rndm();
3298 vecCone.SetPtEtaPhiM(1., dEta, dPhi, 0.);
3299 part =
new AliAODJet(vecCone);
3303 if(fDebug > 1) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Random cone successfully generated");
3311 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Failed to find a random cone");
3322 AliError(
"No jet container!");
3329 std::vector<std::vector<Double_t> > vecListClusters;
3330 if(fDebug > 3) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Loop over %d clusters.", iNClTot));
3331 for(
Int_t ij = 0; ij < iNClTot; ij++)
3336 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Cluster %d/%d used as accepted cluster %d.", ij, iNClTot,
int(vecListClusters.size())));
3341 dDensityBg = dPtBg / dAreaBg;
3342 std::vector<Double_t> vecCluster;
3343 vecCluster.push_back(ij);
3344 vecCluster.push_back(dDensityBg);
3345 vecListClusters.push_back(vecCluster);
3347 iNCl = vecListClusters.size();
3350 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Warning: Too little clusters");
3359 std::sort(vecListClusters.begin(), vecListClusters.end(),
CompareClusters);
3368 Int_t iIndexMed = 0;
3369 if(TMath::Odd(iNCl))
3371 iIndex = (
Int_t)(0.5 * (iNCl + 1));
3378 iIndex = ((
fRandom->Rndm() > 0.5) ? iIndex1 : iIndex2);
3381 iIndexMed =
Int_t((vecListClusters[iIndex])[0]);
3383 if(fDebug > 1) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Getting median cluster %d/%d ok, rho = %g", iIndexMed, iNClTot, (vecListClusters[iIndex])[1]));
3386 if(TMath::Abs(clusterMed->Eta()) > dEtaConeMax)
3388 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Chosen median cluster is out of window |eta| < %g, eta = %g", dEtaConeMax, clusterMed->Eta()));
3401 if(TMath::Abs(dR) < dEpsilon)
3403 AliError(Form(
"Too small radius: %g < %g!", dR, dEpsilon));
3409 return TMath::Pi() * dR * dR;
3410 return dR * dR * TMath::ACos(dD / dR) - dD * TMath::Sqrt(dR * dR - dD * dD);
3416 if(!part1 || !part2)
3419 TVector3 vecMom2(part2->Px(), part2->Py(), part2->Pz());
3420 TVector3 vecMom1(part1->Px(), part1->Py(), part1->Pz());
3421 Double_t dR = vecMom2.DeltaR(vecMom1);
3430 if(fAOD->IsPileupFromSPD())
3432 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"SPD pile-up");
3437 AliAODVertex* vertex = fAOD->GetPrimaryVertex();
3440 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"No vertex");
3443 Int_t iNContribMin = 3;
3444 if(vertex->GetNContributors() < iNContribMin)
3446 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Not enough contributors, %d", vertex->GetNContributors()));
3450 TString vtxTitle(vertex->GetTitle());
3451 if(vtxTitle.Contains(
"TPCVertex"))
3453 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"TPC vertex");
3458 if(TMath::Abs(zVertex) > dVtxZCut)
3460 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Cut on z, %g", zVertex));
3466 AliAODVertex* vertexSPD = fAOD->GetPrimaryVertexSPD();
3469 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"No SPD vertex");
3472 Double_t zVertexSPD = vertexSPD->GetZ();
3473 if(TMath::Abs(zVertex - zVertexSPD) > dDeltaZMax)
3475 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Cut on Delta z = %g - %g = %g", zVertex, zVertexSPD, zVertex - zVertexSPD));
3482 Double_t radiusSq = yVertex * yVertex + xVertex * xVertex;
3483 if(radiusSq > dVtxR2Cut)
3485 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Cut on r, %g", radiusSq));
3493 AliMultSelection* MultSelection = 0x0;
3494 MultSelection = (AliMultSelection*)fAOD->FindListObject(
"MultSelection");
3497 AliWarning(
"AliMultSelection object not found!");
3500 fdCentrality = MultSelection->GetMultiplicityPercentile(
"V0M");
3503 fdCentrality = ((AliVAODHeader*)fAOD->GetHeader())->GetCentralityP()->GetCentralityPercentile(
"V0M");
3506 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Negative centrality");
3509 if((dCentCutUp < 0) || (dCentCutLo < 0) || (dCentCutUp > 100) || (dCentCutLo > 100) || (dCentCutLo > dCentCutUp))
3511 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Wrong centrality limits");
3516 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Centrality cut, %g",
fdCentrality));
3549 return Form(
"%s-%s %%", lowerEdge.Data(), upperEdge.Data());
3558 return 0.0044 + 0.0004 * (pt - 1.);
3561 return 0.0023 + 0.00034 * (pt - 1.);
3571 return (cluster1[1] > cluster2[1]);
3578 AliError(
"No MC event!");
3584 Bool_t bCocktailOK =
fEventMC->GetCocktailGenerator(index, sGenName);
THnSparse * fhnV0InJetK0s[fgkiNBinsCent]
V0 inclusive, in a centrality bin, m_V0; pt_V0; eta_V0.
THnSparse * fhnV0InRndALambda[fgkiNBinsCent]
static const Double_t fgkdMassK0sMax
AliJetContainer * fJetsCont
THnSparse * fh3V0LambdaInJetPtMassMCRec[fgkiNBinsCent]
TH2D * fh2QAV0PtPtALambdaPeak[fgkiNQAIndeces]
TH1D * fh1DistanceV0JetsALambda[fgkiNBinsCent]
distance in eta-phi between V0 and the closest jet
TH2D * fh2QAV0PtChi[fgkiNQAIndeces]
pt vs TPC clusters
void SetParticlePtCut(Double_t cut)
Double_t fdCutEtaDaughterMax
AliEmcalJet * GetMedianCluster(AliJetContainer *cont, Double_t dEtaConeMax) const
TH2D * fh2QAV0PhiPtLambdaPeak[fgkiNQAIndeces]
K0S candidate in peak: azimuth; pt.
static const Int_t fgkiNBinsPtV0
Double_t fdPtProtonPIDMax
Double_t GetRhoVal() const
TH1D * fh1V0InvMassALambdaAll[fgkiNCategV0]
number of ALambda candidates after various cuts
TH2D * fh2QAV0EtaEtaLambda[fgkiNQAIndeces]
TList * fOutputListMC
Output list for checking cuts.
TH2D * fh2V0ALambdaPtMassMCRec[fgkiNBinsCent]
static const Int_t fgkiNBinsPtJet
THnSparse * fhnPtDaughterK0s[fgkiNBinsCent]
V0 in no-jet events, in a centrality bin, m_V0; pt_V0; eta_V0.
TH1D * fh1V0AXiPtMCGen[fgkiNBinsCent]
TH1D * fh1QAV0TPCRows[fgkiNQAIndeces]
TPC refit on vs off.
TH2D * fh2QAV0NClRows[fgkiNQAIndeces]
azimuth vs TPC rows
THnSparse * fh3V0K0sInJetPtMassMCRec[fgkiNBinsCent]
pt spectrum of generated K0s in jet
TH2D * fh2PtJetPtTrackLeading[fgkiNBinsCent]
jet phi
AliJetContainer * GetJetContainer(Int_t i=0) const
Double_t fdCutAreaPercJetMin
THnSparse * fhnV0ALambdaBulkMCFD[fgkiNBinsCent]
TH1D * fh1QAV0Status[fgkiNQAIndeces]
TH1D * fh1V0LambdaPtMCGen[fgkiNBinsCent]
THnSparse * fh3V0K0sInJetEtaPtMCGen[fgkiNBinsCent]
mass-pt spectrum of successfully reconstructed K0s in jet
THnSparse * fh3CCMassCorrelKNotL
mass correlation of candidates
TH1D * fh1V0K0sPtMCGen[fgkiNBinsCent]
pt jet vs angle V0-jet, in centrality bins
void SetPtBiasJetTrack(Float_t b)
Double_t fdCutDCAToPrimVtxMin
Container with name, TClonesArray and cuts for particles.
THnSparse * fhnV0InMedLambda[fgkiNBinsCent]
TH2D * fh2V0LambdaMCResolMPt[fgkiNBinsCent]
V0 in jets, reconstructed: charge_daughter; eta_daughter; pt_daughter; eta_V0; pt_V0; pt_jet...
TH1D * fh1V0ALambdaPtMCGen[fgkiNBinsCent]
TH2D * fh2QAV0EtaPtLambdaPeak[fgkiNQAIndeces]
TH2D * fh2V0LambdaEtaPtMCGen[fgkiNBinsCent]
THnSparse * fh3CCMassCorrelBoth
Lambda candidates in K0s peak.
TH1D * fh1QACTau2D[fgkiNQAIndeces]
radial distance between prim vtx and decay vertex
TH1D * fh1EventCounterCutCent[fgkiNBinsCent]
number of events for different selection steps
Double_t GetD(const AliVParticle *part1, const AliVParticle *part2) const
void ExecOnce()
Perform steps needed to initialize the analysis.
TH1D * fh1EventCounterCut
Tracks.
TH1D * fh1V0InvMassK0sCent[fgkiNBinsCent]
number of K0s candidates per event, in centrality bins
Double_t fdCutRadiusDecayMin
THnSparse * fhnV0OutJetLambda[fgkiNBinsCent]
THnSparse * fhnV0InPerpK0s[fgkiNBinsCent]
V0 in jet cones, in a centrality bin, m_V0; pt_V0; eta_V0; pt_jet.
TH2D * fh2VtxXY[fgkiNBinsCent]
z coordinate of the primary vertex for events used in mixed events
TH1D * fh1V0CandPerEventCentK0s[fgkiNBinsCent]
Armenteros-Podolanski.
TH2D * fh2V0K0sPtMassMCRec[fgkiNBinsCent]
pt spectrum of all generated K0s in event
TH1D * fh1EtaJet[fgkiNBinsCent]
pt spectra of jets for normalisation of in-jet V0 spectra
TH2D * fh2QAV0PtPtLambdaPeak[fgkiNQAIndeces]
Double_t fdCutCrossedRowsOverFindMax
static const Int_t fgkiNQAIndeces
TH2D * fh2V0PtJetAngleALambda[fgkiNBinsCent]
pt correlations, in a centrality bin, pt_neg-daughter;pt_pos-daughter;pt_V0;pt_jet;pt_leading-track ...
TH1D * fh1V0CounterCentK0s[fgkiNBinsCent]
pseudorapidity vs clusters
TH2D * fh2EventCentMult
number of tracks vs centrality
TH2D * fh2V0ALambdaEtaPtMCGen[fgkiNBinsCent]
void SetPercAreaCut(Float_t p)
THnSparse * fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]
THnSparse * fh3CCMassCorrelLNotK
mass correlation of candidates
THnSparse * fhnV0ALambdaInJetsMCFD[fgkiNBinsCent]
TH2D * fh2V0LambdaInJetPtMCGen[fgkiNBinsCent]
V0 inclusive, reconstructed: charge_daughter; eta_daughter; pt_daughter; eta_V0; pt_V0; pt_jet...
TH1D * fh1VtxZME[fgkiNBinsCent]
z coordinate of the primary vertex
TList * fOutputListQA
Output list for standard analysis results.
THnSparse * fh3V0ALambdaEtaPtMassMCRec[fgkiNBinsCent]
Double_t fdCutCrossedRowsOverFindMin
Double_t GetNormalPhi(Double_t phi)
THnSparse * fhnV0InJetLambda[fgkiNBinsCent]
Double_t fdCutPtTrackJetMin
TH2D * fh2CCK0s
Armenteros-Podolanski.
THnSparse * fhnV0NoJetK0s[fgkiNBinsCent]
V0 outside jet cones, in a centrality bin, m_V0; pt_V0; eta_V0.
TH2D * fh2QAV0PhiRows[fgkiNQAIndeces]
pt vs TPC rows
TH1D * fh1QAV0TPCRefit[fgkiNQAIndeces]
online vs offline reconstructed V0 candidates
static const Double_t fgkdDeltaPhiMax
THnSparse * fhnV0LambdaInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]
Bool_t fbUseMultiplicity
[%] centrality
TH2D * fh2V0K0sEtaPtMCGen[fgkiNBinsCent]
pt spectrum of false reconstructed K0s in event
AliMCEvent * fEventMC
Output AOD event.
THnSparse * fhnV0InRndK0s[fgkiNBinsCent]
V0 in perpendicular cones, in a centrality bin, m_V0; pt_V0; eta_V0; pt_jet.
TH2D * fh2EtaPhiRndCone[fgkiNBinsCent]
number of generated random cones in centrality bins
TH1D * fh1V0InvMassK0sAll[fgkiNCategV0]
number of K0s candidates after various cuts
THnSparse * fhnV0K0sInJetsDaughterEtaPtPtMCRec[fgkiNBinsCent]
mass-eta-pt spectrum of successfully reconstructed K0s in jet
TH1D * fh1V0CounterCentALambda[fgkiNBinsCent]
static Double_t fgkiCentMixBinRanges[fgkiNBinsCentMix+1]
THnSparse * fhnV0InPerpLambda[fgkiNBinsCent]
AliAODJet * GetRandomCone(const TClonesArray *array, Double_t dEtaConeMax, Double_t dDistance) const
TList * fOutputListStd
event pool manager
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
AliAODEvent * fAODOut
Input AOD event.
TH1D * fh1NMedConeCent
random cone eta-pT
TH1D * fh1AreaExcluded
median-cluster cone eta-phi
TH1D * fh1QAV0RapK0s[fgkiNQAIndeces]
daughters azimuth vs azimuth
Bool_t fbFindableClusters
AliEmcalJet * GetLeadingJet(const char *opt="")
Bool_t fbIsPbPb
Output list for MC related results.
static const Int_t fgkiNCategV0
distance in eta-phi between V0 and the closest jet
TH2D * fh2V0LambdaMCPtGenPtRec[fgkiNBinsCent]
AliEventPoolManager * fPoolMgr
random-number generator
static const Double_t fgkdMassLambdaMax
TH1D * fh1VtxZ[fgkiNBinsCent]
reference multiplicity vs centrality
THnSparse * fhnV0CorrelSELambda[fgkiNBinsCent]
pt correlations, in a centrality bin, pt_neg-daughter;pt_pos-daughter;pt_V0;pt_jet;pt_leading-track ...
TH1D * fh1V0K0sPtMCRecFalse[fgkiNBinsCent]
pt-mass spectrum of successfully reconstructed K0s in event
Double_t fdCutPtDaughterMin
TH1D * fh1DistanceV0JetsK0s[fgkiNBinsCent]
distance in eta-phi between jets within events
TH1D * fh1V0CandPerEvent
xy coordinates of the primary vertex
TH1D * fh1V0XiPtMCGen[fgkiNBinsCent]
TH2D * fh2ArmPodK0s[fgkiNQAIndeces]
daughters pt vs pt, in mass peak
TH1D * fh1EventCent
number of events for different selection steps and different centralities
THnSparse * fhnV0InclusiveLambda[fgkiNBinsCent]
Double_t fdCutRadiusDecayMax
static const Int_t fgkiNBinsCent
TH2D * fh2ArmPodLambda[fgkiNQAIndeces]
Double_t GetLeadingHadronPt(const AliEmcalJet *jet) const
virtual ~AliAnalysisTaskV0sInJetsEmcal()
TH2D * fh2QAV0EtaEtaALambda[fgkiNQAIndeces]
THnSparse * fh3V0ALambdaInJetPtMassMCRec[fgkiNBinsCent]
static const Double_t fgkdMassLambdaMin
static const Double_t fgkdBinsPtJet[2]
THnSparse * fhnV0LambdaInclDaughterEtaPtPtMCRec[fgkiNBinsCent]
TH2D * fh2ArmPod[fgkiNQAIndeces]
lifetime calculated in xyz
static const Int_t fgkiNBinsPtV0InitInJet
TH2D * fh2V0K0sMCResolMPt[fgkiNBinsCent]
V0 in jets, reconstructed: charge_daughter; eta_daughter; pt_daughter; eta_V0; pt_V0; pt_jet...
Double_t fdDistanceV0JetMax
TH1D * fh1DistanceV0JetsLambda[fgkiNBinsCent]
distance in eta-phi between V0 and the closest jet
TH1D * fh1QAV0DCAVtx[fgkiNQAIndeces]
charge
TH2D * fh2QAV0PhiPtK0sPeak[fgkiNQAIndeces]
TH1D * fh1NJetPerEvent[fgkiNBinsCent]
pt of trigger track
void SetFilterHybridTracks(Bool_t f)
THnSparse * fhnV0InRndLambda[fgkiNBinsCent]
THnSparse * fh3V0LambdaInJetEtaPtMCGen[fgkiNBinsCent]
TH2D * fh2EtaPtJet[fgkiNBinsCent]
jet eta
Int_t GetCentralityBinEdge(Int_t index)
TH2D * fh2QAV0PhiPhiLambda[fgkiNQAIndeces]
Double_t fdCutNSigmadEdxMax
TH1D * fh1QAV0Charge[fgkiNQAIndeces]
pt daughter
static const Int_t fgkiCentBinRanges[fgkiNBinsCent]
THnSparse * fh3V0LambdaEtaPtMassMCRec[fgkiNBinsCent]
void UserCreateOutputObjects()
TH1D * fh1PhiJet[fgkiNBinsCent]
jet eta-pT
TH1D * fh1QAV0RapALambda[fgkiNQAIndeces]
TLorentzVector SubtractRhoVect(Double_t rho, Bool_t save=kFALSE)
THnSparse * fh4V0LambdaInJetEtaPtMassMCRec[fgkiNBinsCent]
static const Int_t fgkiNBinsCentMix
static const Int_t fgkiNBinsZVtxMix
void FillQAHistogramV0(AliAODVertex *vtx, const AliAODv0 *vZero, Int_t iIndexHisto, Bool_t IsCandK0s, Bool_t IsCandLambda, Bool_t IsCandALambda, Bool_t IsInPeakK0s, Bool_t IsInPeakLambda, Bool_t IsInPeakALambda)
THnSparse * fhnV0NoJetALambda[fgkiNBinsCent]
static const Int_t fgkiNBinsMassK0s
TH1D * fh1DistanceJets[fgkiNBinsCent]
area of excluded cones for outside-cones V0s
TH1D * fh1QAV0DCAV0[fgkiNQAIndeces]
DCA of daughters to prim vtx.
THnSparse * fh4V0K0sInJetEtaPtMassMCRec[fgkiNBinsCent]
eta-pt spectrum of generated K0s in jet
AliJetContainer * fJetsBgCont
Signal Jets.
TH1D * fh1EventCent2Jets
number of events for different centralities
TH1D * fh1NRndConeCent
number of jets per event
static const Double_t fgkdMassK0sMin
TList * fOutputListCuts
Output list for quality assurance.
TH2D * fh2V0ALambdaMCResolMPt[fgkiNBinsCent]
V0 in jets, reconstructed: charge_daughter; eta_daughter; pt_daughter; eta_V0; pt_V0; pt_jet...
THnSparse * fhnV0LambdaBulkMCFD[fgkiNBinsCent]
TH2D * fh2V0K0sMCPtGenPtRec[fgkiNBinsCent]
K0s mass resolution vs pt.
THnSparse * fhnV0InPerpALambda[fgkiNBinsCent]
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
static const Double_t fgkdDeltaPhiMin
TH1D * fh1V0CounterCentLambda[fgkiNBinsCent]
K0s generated pt vs reconstructed pt.
TH1D * fh1EventCent2NoJets
number of events for different centralities
THnSparse * fhnV0InMedALambda[fgkiNBinsCent]
THnSparse * fhnV0OutJetALambda[fgkiNBinsCent]
THnSparse * fhnV0CorrelMEK0s[fgkiNBinsCent]
V0-jet phi,eta correlations in same events, in a centrality bin, m_V0; pt_V0; eta_V0; pt_jet; delta-p...
TRandom * fRandom
MC event.
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)
TH2D * fh2V0ALambdaInJetPtMCGen[fgkiNBinsCent]
V0 inclusive, reconstructed: charge_daughter; eta_daughter; pt_daughter; eta_V0; pt_V0; pt_jet...
THnSparse * fhnV0InclusiveALambda[fgkiNBinsCent]
THnSparse * fhnV0InclusiveK0s[fgkiNBinsCent]
V0 invariant mass, in centrality bins.
TH1D * fh1V0CandPerEventCentALambda[fgkiNBinsCent]
TH2D * fh2V0ALambdaMCPtGenPtRec[fgkiNBinsCent]
TH2D * fh2QAV0EtaPtK0sPeak[fgkiNQAIndeces]
V0 invariant mass for each selection steps.
TH1D * fh1QAV0TPCRowsFind[fgkiNQAIndeces]
pt vs Chi2/ndf
TH1D * fh1PtJet[fgkiNBinsCent]
number of V0 cand per event
TH2D * fh2PtJetPtTrigger[fgkiNBinsCent]
pt_jet; pt of leading jet track
THnSparse * fhnV0CorrelSEK0s[fgkiNBinsCent]
pt correlations, in a centrality bin, pt_neg-daughter;pt_pos-daughter;pt_V0;pt_jet;pt_leading-track ...
TH2D * fh2QAV0EtaNCl[fgkiNQAIndeces]
clusters vs TPC rows
static const Int_t fgkiNBinsPtV0Init
TH1D * fh1V0InvMassLambdaAll[fgkiNCategV0]
number of Lambda candidates after various cuts
static const Int_t fgkiNBinsPtJetInit
TH1D * fh1PtTrigger[fgkiNBinsCent]
pt_jet; pt of trigger track
static Double_t fgkiZVtxMixBinRanges[fgkiNBinsZVtxMix+1]
void SetParticleEtaLimits(Double_t min, Double_t max)
Double_t MassPeakSigmaOld(Double_t pt, Int_t particle)
Float_t GetJetRadius() const
TH1D * fh1EventCent2
number of events for different centralities
Int_t GetCentralityBinIndex(Double_t centrality)
TH2D * fh2V0PtJetAngleLambda[fgkiNBinsCent]
TH1D * fh1V0LambdaPtMCRecFalse[fgkiNBinsCent]
TH2D * fh2V0LambdaPtMassMCRec[fgkiNBinsCent]
TH1D * fh1V0InvMassLambdaCent[fgkiNBinsCent]
THnSparse * fhnV0K0sInclDaughterEtaPtPtMCRec[fgkiNBinsCent]
eta-pt-mass spectrum of successfully reconstructed K0s in event
static const Int_t fgkiNBinsMassLambda
TH1D * fh1V0CandPerEventCentLambda[fgkiNBinsCent]
TH2D * fh2QAV0PtRows[fgkiNQAIndeces]
pseudorapidity vs TPC rows
TH1D * fh1QACTau3D[fgkiNQAIndeces]
lifetime calculated in xy
THnSparse * fh3V0ALambdaInJetEtaPtMCGen[fgkiNBinsCent]
TString GetCentBinLabel(Int_t index)
AliTrackContainer * fTracksCont
Background Jets.
AliEmcalJet * GetAcceptJet(Int_t i) const
THnSparse * fhnV0NoJetLambda[fgkiNBinsCent]
static const Double_t fgkdBinsPtV0[2]
TH2D * fh2QAV0PtPtK0sPeak[fgkiNQAIndeces]
V0 rapidity.
TH2D * fh2V0PtJetAngleK0s[fgkiNBinsCent]
V0-jet phi,eta correlations in mixed events, in a centrality bin, m_V0; pt_V0; eta_V0; pt_jet; delta-...
Base task in the EMCAL jet framework.
AliAnalysisTaskV0sInJetsEmcal()
Represent a jet reconstructed using the EMCal jet framework.
TH2D * fh2EventCentTracks
number of events for different centralities
Bool_t IsSelectedForJets(AliAODEvent *fAOD, Double_t dVtxZCut, Double_t dVtxR2Cut, Double_t dCentCutLo, Double_t dCentCutUp, Double_t dDeltaZMax=-1)
Double_t fdCutNCrossedRowsTPCMin
TH2D * fh2ArmPodALambda[fgkiNQAIndeces]
TH2D * fh2QAV0EtaRows[fgkiNQAIndeces]
pseudorapidity
TH2D * fh2EtaPhiMedCone[fgkiNBinsCent]
number of found median-cluster cones in centrality bins
THnSparse * fhnV0InMedK0s[fgkiNBinsCent]
V0 in random cones, in a centrality bin, m_V0; pt_V0; eta_V0.
THnSparse * fhnV0CorrelMELambda[fgkiNBinsCent]
Double_t fdCutDCADaughtersMax
THnSparse * fhnV0ALambdaInclDaughterEtaPtPtMCRec[fgkiNBinsCent]
TH2D * fh2CCLambda
K0s candidates in Lambda peak.
void FillCandidates(Double_t mK, Double_t mL, Double_t mAL, Bool_t isK, Bool_t isL, Bool_t isAL, Int_t iCut, Int_t iCent)
void UserCreateOutputObjects()
Main initialization function on the worker.
TH2D * fh2QAV0EtaEtaK0s[fgkiNQAIndeces]
daughters pseudorapidity vs V0 pt, in mass peak
Bool_t FillHistograms()
Function filling histograms.
Bool_t OverlapWithJets(const TClonesArray *array, const AliVParticle *cone, Double_t dDistance) const
virtual AliVParticle * GetNextAcceptParticle()
THnSparse * fhnV0ALambdaInclMCFD[fgkiNBinsCent]
TH2D * fh2QAV0PhiPhiALambda[fgkiNQAIndeces]
void SetJetEtaLimits(Float_t min, Float_t max)
TH1D * fh1V0InvMassALambdaCent[fgkiNBinsCent]
THnSparse * fhnV0InJetALambda[fgkiNBinsCent]
THnSparse * fh4V0ALambdaInJetEtaPtMassMCRec[fgkiNBinsCent]
TH2D * fh2QAV0PhiPhiK0s[fgkiNQAIndeces]
daughters pseudorapidity vs pseudorapidity
TH1D * fh1QAV0Cos[fgkiNQAIndeces]
DCA between daughters.
THnSparse * fhnPtDaughterALambda[fgkiNBinsCent]
Double_t AreaCircSegment(Double_t dRadius, Double_t dDistance) const
TH2D * fh2QAV0PtNCls[fgkiNQAIndeces]
findable clusters
Container for jet within the EMCAL jet framework.
Bool_t IsParticleInCone(const AliVParticle *part1, const AliVParticle *part2, Double_t dRMax) const
THnSparse * fhnV0LambdaInJetsMCFD[fgkiNBinsCent]
TH2D * fh2QAV0PhiPtALambdaPeak[fgkiNQAIndeces]
Lambda candidate in peak: azimuth; pt.
TH1D * fh1QAV0Pt[fgkiNQAIndeces]
anti-Lambda candidate in peak: azimuth; pt
static bool CompareClusters(const std::vector< Double_t > cluster1, const std::vector< Double_t > cluster2)
TH1D * fh1QAV0R[fgkiNQAIndeces]
cosine of pointing angle (CPA)
TH1D * fh1V0ALambdaPtMCRecFalse[fgkiNBinsCent]
THnSparse * fh3V0K0sEtaPtMassMCRec[fgkiNBinsCent]
eta-pt spectrum of all generated K0s in event
TH2D * fh2V0K0sInJetPtMCGen[fgkiNBinsCent]
V0 inclusive, reconstructed: charge_daughter; eta_daughter; pt_daughter; eta_V0; pt_V0; pt_jet...
TH2D * fh2QAV0EtaPtALambdaPeak[fgkiNQAIndeces]
THnSparse * fhnPtDaughterLambda[fgkiNBinsCent]
THnSparse * fhnV0LambdaInclMCFD[fgkiNBinsCent]
TH1D * fh1QAV0Eta[fgkiNQAIndeces]
ratio rows/clusters
TH1D * fh1QAV0RapLambda[fgkiNQAIndeces]
Bool_t IsFromGoodGenerator(Int_t index)
THnSparse * fhnV0OutJetK0s[fgkiNBinsCent]
V0 in medium cones, in a centrality bin, m_V0; pt_V0; eta_V0.
TH1D * fh1QAV0TPCFindable[fgkiNQAIndeces]
crossed TPC pad rows