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"
60 Double_t AliAnalysisTaskV0sInJetsEmcal::fgkiZVtxMixBinRanges[] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10};
117 fbFindableClusters(0),
118 fdCutNCrossedRowsTPCMin(0),
119 fdCutCrossedRowsOverFindMin(0),
120 fdCutCrossedRowsOverFindMax(0),
121 fdCutPtDaughterMin(0),
122 fdCutDCAToPrimVtxMin(0),
123 fdCutDCADaughtersMax(0),
124 fdCutEtaDaughterMax(0),
125 fdCutNSigmadEdxMax(0),
130 fdCutRadiusDecayMin(0),
131 fdCutRadiusDecayMax(0),
141 fdCutPtTrackJetMin(0),
142 fdCutAreaPercJetMin(0),
143 fdDistanceV0JetMax(0.4),
146 fbCompareTriggers(0),
152 fh1EventCounterCut(0),
155 fh1EventCent2Jets(0),
156 fh1EventCent2NoJets(0),
157 fh2EventCentTracks(0),
158 fh1V0CandPerEvent(0),
165 fh3CCMassCorrelBoth(0),
166 fh3CCMassCorrelKNotL(0),
167 fh3CCMassCorrelLNotK(0)
403 fbFindableClusters(0),
404 fdCutNCrossedRowsTPCMin(0),
405 fdCutCrossedRowsOverFindMin(0),
406 fdCutCrossedRowsOverFindMax(0),
407 fdCutPtDaughterMin(0),
408 fdCutDCAToPrimVtxMin(0),
409 fdCutDCADaughtersMax(0),
410 fdCutEtaDaughterMax(0),
411 fdCutNSigmadEdxMax(0),
416 fdCutRadiusDecayMin(0),
417 fdCutRadiusDecayMax(0),
427 fdCutPtTrackJetMin(0),
428 fdCutAreaPercJetMin(0),
429 fdDistanceV0JetMax(0.4),
432 fbCompareTriggers(0),
438 fh1EventCounterCut(0),
441 fh1EventCent2Jets(0),
442 fh1EventCent2NoJets(0),
443 fh2EventCentTracks(0),
444 fh1V0CandPerEvent(0),
451 fh3CCMassCorrelBoth(0),
452 fh3CCMassCorrelKNotL(0),
453 fh3CCMassCorrelLNotK(0)
656 DefineInput(0, TChain::Class());
659 DefineOutput(1, TList::Class());
660 DefineOutput(2, TList::Class());
661 DefineOutput(3, TList::Class());
662 DefineOutput(4, TList::Class());
709 const Int_t iNCategEvent = 12;
710 TString categEvent[iNCategEvent] = {
737 "V0 #it{y} & #it{#eta}",
747 fh1EventCounterCut =
new TH1D(
"fh1EventCounterCut",
"Number of events after filtering;selection filter;counts", iNCategEvent, 0, iNCategEvent);
748 for(
Int_t i = 0; i < iNCategEvent; i++)
750 fh1EventCent2 =
new TH1D(
"fh1EventCent2",
"Number of events vs centrality;centrality;counts", 100, 0, 100);
751 fh1EventCent2Jets =
new TH1D(
"fh1EventCent2Jets",
"Number of sel.-jet events vs centrality;centrality;counts", 100, 0, 100);
752 fh1EventCent2NoJets =
new TH1D(
"fh1EventCent2NoJets",
"Number of no-jet events vs centrality;centrality;counts", 100, 0, 100);
753 fh2EventCentTracks =
new TH2D(
"fh2EventCentTracks",
"Number of tracks vs centrality;centrality;tracks;counts", 100, 0, 100, 150, 0, 15e3);
757 fh1NRndConeCent =
new TH1D(
"fh1NRndConeCent",
"Number of rnd. cones in centrality bins;centrality;counts", fgkiNBinsCent, 0, fgkiNBinsCent);
760 fh1NMedConeCent =
new TH1D(
"fh1NMedConeCent",
"Number of med.-cl. cones in centrality bins;centrality;counts", fgkiNBinsCent, 0, fgkiNBinsCent);
763 fh1AreaExcluded =
new TH1D(
"fh1AreaExcluded",
"Area of excluded cones in centrality bins;centrality;area", fgkiNBinsCent, 0, fgkiNBinsCent);
776 fh1V0CandPerEvent =
new TH1D(
"fh1V0CandPerEvent",
"Number of all V0 candidates per event;candidates;events", 300, 0, 30000);
782 for(
Int_t j = 0; j < iNCategEvent; j++)
819 fh3CCMassCorrelBoth =
new THnSparseD(
"fh3CCMassCorrelBoth",
"Mass correlation: K0S && Lambda;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel);
820 fh3CCMassCorrelKNotL =
new THnSparseD(
"fh3CCMassCorrelKNotL",
"Mass correlation: K0S, not Lambda;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel);
821 fh3CCMassCorrelLNotK =
new THnSparseD(
"fh3CCMassCorrelLNotK",
"Mass correlation: Lambda, not K0S;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel);
830 const Int_t iNBinsEtaV0 = 2 *
Int_t(dRangeEtaV0Max / dStepEtaV0);
833 const Int_t iNDimIncl = 3;
841 const Int_t iNDimInJC = 4;
849 Int_t iNBinsDeltaPhi = 60;
850 const Int_t iNDimCorrel = 6;
855 Int_t iNBinsDeltaEtaCorrel = 1;
857 Int_t binsKCorrel[iNDimCorrel] = {
fgkiNBinsMassK0s / 2, iNBinsPtV0InJet, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaPhi, iNBinsDeltaEtaCorrel};
860 Int_t binsLCorrel[iNDimCorrel] = {
fgkiNBinsMassLambda / 2, iNBinsPtV0InJet, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaPhi, iNBinsDeltaEtaCorrel};
868 const Int_t iNBinsDeltaEta = 2 *
Int_t(dRangeDeltaEtaMax / dStepDeltaEta);
878 Int_t binsEtaKInRec[5] = {
fgkiNBinsMassK0s, iNBinsPtV0InJet, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaEta};
885 Int_t binsEtaInGen[4] = {iNBinsPtV0InJet, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaEta};
886 Double_t xminEtaInGen[4] = {dPtV0Min, -dRangeEtaV0Max, dJetPtMin, -dRangeDeltaEtaMax};
887 Double_t xmaxEtaInGen[4] = {dPtV0Max, dRangeEtaV0Max, dJetPtMax, dRangeDeltaEtaMax};
889 const Int_t iNDimEtaD = 6;
890 Int_t binsEtaDaughter[iNDimEtaD] = {2, 20, iNBinsPtV0, iNBinsEtaV0, iNBinsPtV0, iNJetPtBins};
891 Double_t xminEtaDaughter[iNDimEtaD] = {0, -1, dPtV0Min, -dRangeEtaV0Max, dPtV0Min, dJetPtMin};
892 Double_t xmaxEtaDaughter[iNDimEtaD] = {2, 1, dPtV0Max, dRangeEtaV0Max, dPtV0Max, dJetPtMax};
894 const Int_t iNDimDaughter = 5;
895 Int_t binsDaughter[iNDimDaughter] = {80, 80, iNBinsPtV0, iNJetPtBins, 80};
896 Double_t xminDaughter[iNDimDaughter] = {0, 0, dPtV0Min, dJetPtMin, 0};
897 Double_t xmaxDaughter[iNDimDaughter] = {20, 20, dPtV0Max, dJetPtMax, 20};
902 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);
903 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);
904 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);
916 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);
917 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);
918 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);
923 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);
925 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);
927 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);
929 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);
931 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);
933 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);
935 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);
937 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);
939 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);
941 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);
943 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);
945 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);
947 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);
949 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);
951 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);
953 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);
955 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);
957 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);
960 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);
962 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);
964 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);
966 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);
969 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);
971 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);
973 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);
977 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);
981 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);
985 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);
987 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);
993 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());
995 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());
1010 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);
1016 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);
1018 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);
1023 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);
1025 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);
1028 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);
1030 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);
1033 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);
1035 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);
1038 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);
1040 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);
1044 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);
1046 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);
1051 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);
1053 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);
1056 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);
1058 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);
1061 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);
1063 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);
1066 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);
1068 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);
1072 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);
1074 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);
1079 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);
1081 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);
1084 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);
1086 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);
1089 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);
1091 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);
1094 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);
1096 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);
1099 Int_t iNBinsPtXi = 80;
1102 const Int_t iNDimFD = 3;
1103 Int_t binsFD[iNDimFD] = {iNBinsPtV0, iNBinsPtXi, iNJetPtBins};
1104 Double_t xminFD[iNDimFD] = {dPtV0Min, dPtXiMin, dJetPtMin};
1105 Double_t xmaxFD[iNDimFD] = {dPtV0Max, dPtXiMax, dJetPtMax};
1106 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);
1108 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);
1110 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);
1112 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);
1114 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);
1116 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);
1118 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);
1120 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);
1124 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);
1125 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);
1126 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);
1127 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);
1128 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);
1129 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);
1144 fh1QAV0Status[i] =
new TH1D(Form(
"fh1QAV0Status_%d", i),
"QA: V0 status", 2, 0, 2);
1146 fh1QAV0TPCRows[i] =
new TH1D(Form(
"fh1QAV0TPCRows_%d", i),
"QA: TPC Rows", 160, 0, 160);
1148 fh2QAV0PtNCls[i] =
new TH2D(Form(
"fh2QAV0PtNCls_%d", i),
"QA: Daughter Pt vs TPC clusters;pt;# TPC clusters", 100, 0, 10, 160, 0, 160);
1149 fh2QAV0PtChi[i] =
new TH2D(Form(
"fh2QAV0PtChi_%d", i),
"QA: Daughter Pt vs Chi2/ndf;pt;Chi2/ndf", 100, 0, 10, 100, 0, 100);
1151 fh1QAV0Eta[i] =
new TH1D(Form(
"fh1QAV0Eta_%d", i),
"QA: Daughter Eta", 200, -2, 2);
1152 fh2QAV0EtaRows[i] =
new TH2D(Form(
"fh2QAV0EtaRows_%d", i),
"QA: Daughter Eta vs TPC rows;#eta;TPC rows", 200, -2, 2, 160, 0, 160);
1153 fh2QAV0PtRows[i] =
new TH2D(Form(
"fh2QAV0PtRows_%d", i),
"QA: Daughter Pt vs TPC rows;pt;TPC rows", 100, 0, 10, 160, 0, 160);
1154 fh2QAV0PhiRows[i] =
new TH2D(Form(
"fh2QAV0PhiRows_%d", i),
"QA: Daughter Phi vs TPC rows;#phi;TPC rows", 90, 0, TMath::TwoPi(), 160, 0, 160);
1155 fh2QAV0NClRows[i] =
new TH2D(Form(
"fh2QAV0NClRows_%d", i),
"QA: Daughter NCl vs TPC rows;findable clusters;TPC rows", 100, 0, 160, 160, 0, 160);
1156 fh2QAV0EtaNCl[i] =
new TH2D(Form(
"fh2QAV0EtaNCl_%d", i),
"QA: Daughter Eta vs NCl;#eta;findable clusters", 200, -2, 2, 160, 0, 160);
1158 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);
1159 fh2QAV0EtaEtaK0s[i] =
new TH2D(Form(
"fh2QAV0EtaEtaK0s_%d", i),
"QA: K0s: Eta vs Eta Daughter", 200, -2, 2, 200, -2, 2);
1160 fh2QAV0PhiPhiK0s[i] =
new TH2D(Form(
"fh2QAV0PhiPhiK0s_%d", i),
"QA: K0s: Phi vs Phi Daughter", 90, 0, TMath::TwoPi(), 90, 0, TMath::TwoPi());
1161 fh1QAV0RapK0s[i] =
new TH1D(Form(
"fh1QAV0RapK0s_%d", i),
"QA: K0s: V0 Rapidity", 200, -2, 2);
1162 fh2QAV0PtPtK0sPeak[i] =
new TH2D(Form(
"fh2QAV0PtPtK0sPeak_%d", i),
"QA: K0s: Daughter Pt vs Pt;neg pt;pos pt", 100, 0, 5, 100, 0, 5);
1164 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);
1165 fh2QAV0EtaEtaLambda[i] =
new TH2D(Form(
"fh2QAV0EtaEtaLambda_%d", i),
"QA: Lambda: Eta vs Eta Daughter", 200, -2, 2, 200, -2, 2);
1166 fh2QAV0PhiPhiLambda[i] =
new TH2D(Form(
"fh2QAV0PhiPhiLambda_%d", i),
"QA: Lambda: Phi vs Phi Daughter", 90, 0, TMath::TwoPi(), 90, 0, TMath::TwoPi());
1167 fh1QAV0RapLambda[i] =
new TH1D(Form(
"fh1QAV0RapLambda_%d", i),
"QA: Lambda: V0 Rapidity", 200, -2, 2);
1168 fh2QAV0PtPtLambdaPeak[i] =
new TH2D(Form(
"fh2QAV0PtPtLambdaPeak_%d", i),
"QA: Lambda: Daughter Pt vs Pt;neg pt;pos pt", 100, 0, 5, 100, 0, 5);
1170 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);
1171 fh2QAV0EtaEtaALambda[i] =
new TH2D(Form(
"fh2QAV0EtaEtaALambda_%d", i),
"QA: anti-Lambda: Eta vs Eta Daughter", 200, -2, 2, 200, -2, 2);
1172 fh2QAV0PhiPhiALambda[i] =
new TH2D(Form(
"fh2QAV0PhiPhiALambda_%d", i),
"QA: anti-Lambda: Phi vs Phi Daughter", 90, 0, TMath::TwoPi(), 90, 0, TMath::TwoPi());
1173 fh1QAV0RapALambda[i] =
new TH1D(Form(
"fh1QAV0RapALambda_%d", i),
"QA: anti-Lambda: V0 Rapidity", 200, -2, 2);
1174 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);
1176 fh2QAV0PhiPtK0sPeak[i] =
new TH2D(Form(
"fh2QAV0PhiPtK0sPeak_%d", i),
"QA: K0S: #phi-pt;#phi;pt", 90, 0, TMath::TwoPi(), iNBinsPtV0, dPtV0Min, dPtV0Max);
1177 fh2QAV0PhiPtLambdaPeak[i] =
new TH2D(Form(
"fh2QAV0PhiPtLambdaPeak_%d", i),
"QA: Lambda: #phi-pt;#phi;pt", 90, 0, TMath::TwoPi(), iNBinsPtV0, dPtV0Min, dPtV0Max);
1178 fh2QAV0PhiPtALambdaPeak[i] =
new TH2D(Form(
"fh2QAV0PhiPtALambdaPeak_%d", i),
"QA: anti-Lambda: #phi-pt;#phi;pt", 90, 0, TMath::TwoPi(), iNBinsPtV0, dPtV0Min, dPtV0Max);
1179 fh1QAV0Pt[i] =
new TH1D(Form(
"fh1QAV0Pt_%d", i),
"QA: Daughter Pt", 100, 0, 5);
1180 fh1QAV0Charge[i] =
new TH1D(Form(
"fh1QAV0Charge_%d", i),
"QA: V0 Charge", 3, -1, 2);
1181 fh1QAV0DCAVtx[i] =
new TH1D(Form(
"fh1QAV0DCAVtx_%d", i),
"QA: DCA daughters to primary vertex", 1000, 0, 10);
1182 fh1QAV0DCAV0[i] =
new TH1D(Form(
"fh1QAV0DCAV0_%d", i),
"QA: DCA daughters", 100, 0, 2);
1183 fh1QAV0Cos[i] =
new TH1D(Form(
"fh1QAV0Cos_%d", i),
"QA: CPA", 10000, 0.9, 1);
1184 fh1QAV0R[i] =
new TH1D(Form(
"fh1QAV0R_%d", i),
"QA: R", 1500, 0, 150);
1185 fh1QACTau2D[i] =
new TH1D(Form(
"fh1QACTau2D_%d", i),
"QA: K0s: c#tau 2D;mR/pt#tau", 100, 0, 10);
1186 fh1QACTau3D[i] =
new TH1D(Form(
"fh1QACTau3D_%d", i),
"QA: K0s: c#tau 3D;mL/p#tau", 100, 0, 10);
1188 fh2ArmPod[i] =
new TH2D(Form(
"fh2ArmPod_%d", i),
"Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25);
1189 fh2ArmPodK0s[i] =
new TH2D(Form(
"fh2ArmPodK0s_%d", i),
"K0s: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25);
1190 fh2ArmPodLambda[i] =
new TH2D(Form(
"fh2ArmPodLambda_%d", i),
"Lambda: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25);
1191 fh2ArmPodALambda[i] =
new TH2D(Form(
"fh2ArmPodALambda_%d", i),
"ALambda: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25);
1318 THnSparse* hn =
dynamic_cast<THnSparse*
>(
fOutputListQA->At(i));
1340 THnSparse* hn =
dynamic_cast<THnSparse*
>(
fOutputListMC->At(i));
1383 printf(
"=======================================================\n");
1384 printf(
"%s: Configuration summary:\n", ClassName());
1385 printf(
"task name: %s\n", GetName());
1386 printf(
"-------------------------------------------------------\n");
1387 printf(
"collision system: %s\n",
fbIsPbPb ?
"Pb+Pb" :
"p+p");
1388 printf(
"data type: %s\n",
fbMCAnalysis ?
"MC" :
"real");
1396 printf(
"-------------------------------------------------------\n");
1397 if(
fbTPCRefit) printf(
"TPC refit for daughter tracks\n");
1398 if(
fbRejectKinks) printf(
"reject kink-like production vertices of daughter tracks\n");
1409 printf(
"V0 reconstruction method: %s\n",
fbOnFly ?
"on-the-fly" :
"offline");
1417 if(
fbCutArmPod) printf(
"Armenteros-Podolanski cut for K0S\n");
1418 if(
fbCutCross) printf(
"cross-contamination cut\n");
1419 printf(
"-------------------------------------------------------\n");
1420 printf(
"analysis of V0s in jets: %s\n",
fbJetSelection ?
"yes" :
"no");
1423 printf(
"rho subtraction: ");
1430 if(
fdCutEtaV0Max > 0. && fdDistanceV0JetMax > 0.) printf(
"max |eta| of jet: %g\n", dCutEtaJetMax);
1431 printf(
"max distance between V0 and jet axis: %g\n", fdDistanceV0JetMax);
1432 printf(
"angular correlations of V0s with jets: %s\n",
fbCorrelations ?
"yes" :
"no");
1434 printf(
"pt correlations of jets with trigger tracks: %s\n",
fbCompareTriggers ?
"yes" :
"no");
1435 printf(
"-------------------------------------------------------\n");
1438 printf(
"Signal jet container parameters\n");
1443 printf(
"No signal jet container!\n");
1446 printf(
"Background jet container parameters\n");
1451 printf(
"No background jet container\n");
1453 printf(
"=======================================================\n");
1466 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Start");
1473 AliError(
"No input AOD found!");
1476 if(fDebug > 1) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Loading AOD OK");
1478 TClonesArray* arrayMC = 0;
1479 AliAODMCHeader* headerMC = 0;
1480 Int_t iNTracksMC = 0;
1481 Double_t dPrimVtxMCX = 0., dPrimVtxMCY = 0., dPrimVtxMCZ = 0.;
1487 arrayMC = (TClonesArray*)
fAODIn->FindListObject(AliAODMCParticle::StdBranchName());
1490 AliError(
"No MC array/event found!");
1493 if(fDebug > 1) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"MC array found");
1494 iNTracksMC = arrayMC->GetEntriesFast();
1495 if(fDebug > 2) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"There are %d MC tracks in this event", iNTracksMC));
1496 headerMC = (AliAODMCHeader*)
fAODIn->FindListObject(AliAODMCHeader::StdBranchName());
1499 AliError(
"No MC header found!");
1503 dPrimVtxMCX = headerMC->GetVtxX();
1504 dPrimVtxMCY = headerMC->GetVtxY();
1505 dPrimVtxMCZ = headerMC->GetVtxZ();
1509 AliPIDResponse* fPIDResponse = 0;
1513 AliInputEventHandler* inputHandler = (AliInputEventHandler*)mgr->GetInputEventHandler();
1514 fPIDResponse = inputHandler->GetPIDResponse();
1517 AliError(
"No PID response object found!");
1528 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Event rejected");
1531 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Event accepted: cent. %g",
fdCentrality));
1537 AliError(Form(
"Event is out of histogram range: cent: %g!",
fdCentrality));
1544 if(fDebug > 2) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"There are %d tracks in this event", iNTracks));
1552 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"No V0s found in event");
1560 AliEventPool* pool = 0;
1561 Bool_t bPoolReady = kFALSE;
1565 AliAODVertex* vertex =
fAODIn->GetPrimaryVertex();
1566 dZVtxME = vertex->GetZ();
1570 AliError(Form(
"No pool found for centrality = %g, z_vtx = %g!",
fdCentrality, dZVtxME));
1573 bPoolReady = pool->IsReady();
1578 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()));
1589 TVector3 vecV0Momentum;
1593 Int_t iNV0CandTot = 0;
1594 Int_t iNV0CandK0s = 0;
1595 Int_t iNV0CandLambda = 0;
1596 Int_t iNV0CandALambda = 0;
1599 Bool_t bPrintJetSelection = 0;
1610 Double_t dMassPDGK0s = TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass();
1611 Double_t dMassPDGLambda = TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass();
1614 Int_t iPdgCodePion = 211;
1615 Int_t iPdgCodeProton = 2212;
1616 Int_t iPdgCodeK0s = 310;
1617 Int_t iPdgCodeLambda = 3122;
1621 Bool_t bLeadingJetOnly = 0;
1624 TClonesArray* arrayJetSel =
new TClonesArray(
"AliAODJet", 0);
1626 TClonesArray* arrayJetPerp =
new TClonesArray(
"AliAODJet", 0);
1627 Int_t iNJetPerp = 0;
1629 arrayMixedEventAdd->SetOwner(kTRUE);
1632 AliAODJet* jetPerp = 0;
1633 AliAODJet* jetRnd = 0;
1635 TVector3 vecJetMomentum;
1636 TVector3 vecJetMomentumPair;
1637 Bool_t bJetEventGood = kTRUE;
1639 TLorentzVector vecJetSel;
1640 TLorentzVector vecPerpPlus;
1641 TLorentzVector vecPerpMinus;
1649 AliError(
"No signal jet container!");
1650 bJetEventGood = kFALSE;
1654 if(bJetEventGood && !iNJet)
1656 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"No jets in array");
1657 bJetEventGood = kFALSE;
1661 AliWarning(
"No bg jet container!");
1666 bJetEventGood = kFALSE;
1674 if(fDebug > 4) printf(
"%s::%s: %s\n", ClassName(), __func__, Form(
"Loaded rho value: %g", dRho));
1678 if(fDebug > 2) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Jet selection for %d jets", iNJet));
1679 for(
Int_t iJet = 0; iJet < iNJet; iJet++)
1686 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Jet %d not accepted in container", iJet));
1697 dPtJetCorr = jetSel->
PtSub(dRho);
1702 dPtJetCorr = vecJetSel.Pt();
1703 dEtaJetCorr = vecJetSel.Eta();
1704 dPhiJetCorr = TVector2::Phi_0_2pi(vecJetSel.Phi());
1707 if(bPrintJetSelection)
1708 if(fDebug > 4) printf(
"jet: i = %d, pT = %g, eta = %g, phi = %g, pt lead tr = %g ", iJet, dPtJetCorr, dEtaJetCorr, dPhiJetCorr, dPtTrackJet);
1711 if(bPrintJetSelection)
1712 if(fDebug > 4) printf(
"rejected (pt)\n");
1715 if(bPrintJetSelection)
1716 if(fDebug > 4) printf(
"accepted\n");
1717 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Jet %d with pt %g passed selection", iJet, dPtJetCorr));
1719 vecJetSel.SetPtEtaPhiM(dPtJetCorr, dEtaJetCorr, dPhiJetCorr, 0.);
1720 vecPerpPlus = vecJetSel;
1721 vecPerpMinus = vecJetSel;
1722 vecPerpPlus.RotateZ(TMath::Pi() / 2.);
1723 vecPerpMinus.RotateZ(-TMath::Pi() / 2.);
1724 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()));
1725 new((*arrayJetPerp)[iNJetPerp++]) AliAODJet(vecPerpPlus);
1726 new((*arrayJetPerp)[iNJetPerp++]) AliAODJet(vecPerpMinus);
1727 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Adding jet number %d", iNJetSel));
1728 new((*arrayJetSel)[iNJetSel++]) AliAODJet(vecJetSel);
1729 ((AliAODJet*)arrayJetSel->At(iNJetSel - 1))->SetPtLeading(dPtTrackJet);
1732 arrayMixedEventAdd->Add(
new TLorentzVector(vecJetSel));
1734 if(fDebug > 3) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Added jets: %d", iNJetSel));
1735 iNJetSel = arrayJetSel->GetEntriesFast();
1736 if(fDebug > 2) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Selected jets in array: %d", iNJetSel));
1738 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
1740 jet = (AliAODJet*)arrayJetSel->At(iJet);
1741 fh1PtJet[iCentIndex]->Fill(jet->Pt());
1742 fh1EtaJet[iCentIndex]->Fill(jet->Eta());
1743 fh2EtaPtJet[iCentIndex]->Fill(jet->Eta(), jet->Pt());
1744 fh1PhiJet[iCentIndex]->Fill(jet->Phi());
1745 Double_t dAreaExcluded = TMath::Pi() * dRadiusExcludeCone * dRadiusExcludeCone;
1750 vecJetMomentum.SetXYZ(jet->Px(), jet->Py(), jet->Pz());
1751 for(
Int_t iJetPair = iJet + 1; iJetPair < iNJetSel; iJetPair++)
1753 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));
1754 jet = (AliAODJet*)arrayJetSel->At(iJetPair);
1755 vecJetMomentumPair.SetXYZ(jet->Px(), jet->Py(), jet->Pz());
1756 fh1DistanceJets[iCentIndex]->Fill(vecJetMomentum.DeltaR(vecJetMomentumPair));
1780 jetRnd =
GetRandomCone(arrayJetSel, dCutEtaJetMax, 2 * fdDistanceV0JetMax);
1800 AliError(
"No track container!");
1803 AliAODJet* jetTrig = 0;
1813 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
1815 jetTrig = (AliAODJet*)arrayJetSel->At(iJet);
1830 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
1832 jetTrig = (AliAODJet*)arrayJetSel->At(iJet);
1843 AliAODVertex* primVtx =
fAODIn->GetPrimaryVertex();
1845 primVtx->GetXYZ(dPrimVtxPos);
1846 fh1VtxZ[iCentIndex]->Fill(dPrimVtxPos[2]);
1847 fh2VtxXY[iCentIndex]->Fill(dPrimVtxPos[0], dPrimVtxPos[1]);
1850 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Start of V0 loop");
1851 for(
Int_t iV0 = 0; iV0 < iNV0s; iV0++)
1860 Bool_t bIsCandidateK0s = kTRUE;
1861 Bool_t bIsCandidateLambda = kTRUE;
1862 Bool_t bIsCandidateALambda = kTRUE;
1863 Bool_t bIsInPeakK0s = kFALSE;
1864 Bool_t bIsInPeakLambda = kFALSE;
1865 Bool_t bIsInPeakALambda = kFALSE;
1866 Bool_t bIsInConeJet = kFALSE;
1867 Bool_t bIsInConePerp = kFALSE;
1868 Bool_t bIsInConeRnd = kFALSE;
1869 Bool_t bIsInConeMed = kFALSE;
1870 Bool_t bIsOutsideCones = kFALSE;
1873 dMassV0K0s = v0->MassK0Short();
1874 dMassV0Lambda = v0->MassLambda();
1875 dMassV0ALambda = v0->MassAntiLambda();
1877 Int_t iCutIndex = 0;
1880 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
1883 Double_t dPtV0 = TMath::Sqrt(v0->Pt2V0());
1884 vecV0Momentum = TVector3(v0->Px(), v0->Py(), v0->Pz());
1891 dMassPeakWindowK0s = 0.010;
1892 dMassPeakWindowLambda = 0.005;
1896 if(TMath::Abs(dMassV0K0s - dMassPDGK0s) < dMassPeakWindowK0s)
1897 bIsInPeakK0s = kTRUE;
1898 if(TMath::Abs(dMassV0Lambda - dMassPDGLambda) < dMassPeakWindowLambda)
1899 bIsInPeakLambda = kTRUE;
1900 if(TMath::Abs(dMassV0ALambda - dMassPDGLambda) < dMassPeakWindowLambda)
1901 bIsInPeakALambda = kTRUE;
1904 FillQAHistogramV0(primVtx, v0, 0, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, bIsInPeakK0s, bIsInPeakLambda, bIsInPeakALambda);
1908 bIsCandidateK0s = kFALSE;
1910 bIsCandidateLambda = kFALSE;
1912 bIsCandidateALambda = kFALSE;
1913 if(!bIsCandidateK0s && !bIsCandidateLambda && !bIsCandidateALambda)
1917 Bool_t bOnFlyStatus = v0->GetOnFlyStatus();
1918 const AliAODTrack* trackPos = (AliAODTrack*)v0->GetDaughter(0);
1919 const AliAODTrack* trackNeg = (AliAODTrack*)v0->GetDaughter(1);
1920 Double_t dPtDaughterPos = trackPos->Pt();
1921 Double_t dPtDaughterNeg = trackNeg->Pt();
1922 Double_t dNRowsPos = trackPos->GetTPCClusterInfo(2, 1);
1923 Double_t dNRowsNeg = trackNeg->GetTPCClusterInfo(2, 1);
1926 Double_t dDCAToPrimVtxPos = TMath::Abs(v0->DcaPosToPrimVertex());
1927 Double_t dDCAToPrimVtxNeg = TMath::Abs(v0->DcaNegToPrimVertex());
1928 Double_t dDCADaughters = v0->DcaV0Daughters();
1929 Double_t dCPA = v0->CosPointingAngle(primVtx);
1932 v0->GetSecondaryVtx(dSecVtxPos);
1933 Double_t dRadiusDecay = TMath::Sqrt(dSecVtxPos[0] * dSecVtxPos[0] + dSecVtxPos[1] * dSecVtxPos[1]);
1934 Double_t dEtaDaughterPos = trackPos->Eta();
1935 Double_t dEtaDaughterNeg = trackNeg->Eta();
1936 Double_t dRapK0s = v0->RapK0Short();
1937 Double_t dRapLambda = v0->RapLambda();
1941 for(
Int_t iPos = 0; iPos < 3; iPos++)
1942 dDecayPath[iPos] = dSecVtxPos[iPos] - dPrimVtxPos[iPos];
1943 Double_t dDecLen = TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1] + dDecayPath[2] * dDecayPath[2]);
1944 Double_t dDecLen2D = TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1]);
1945 Double_t dLOverP = dDecLen / v0->P();
1946 Double_t dROverPt = dDecLen2D / dPtV0;
1947 Double_t dMLOverPK0s = dMassPDGK0s * dLOverP;
1949 Double_t dMROverPtK0s = dMassPDGK0s * dROverPt;
1950 Double_t dMROverPtLambda = dMassPDGLambda * dROverPt;
1951 Double_t dNSigmaPosPion = (fPIDResponse ? TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackPos, AliPID::kPion)) : 0.);
1952 Double_t dNSigmaPosProton = (fPIDResponse ? TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackPos,
AliPID::kProton)) : 0.);
1953 Double_t dNSigmaNegPion = (fPIDResponse ? TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackNeg, AliPID::kPion)) : 0.);
1954 Double_t dNSigmaNegProton = (fPIDResponse ? TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackNeg,
AliPID::kProton)) : 0.);
1957 AliAODVertex* prodVtxDaughterPos = (AliAODVertex*)(trackPos->GetProdVertex());
1958 Char_t cTypeVtxProdPos = prodVtxDaughterPos->GetType();
1959 AliAODVertex* prodVtxDaughterNeg = (AliAODVertex*)(trackNeg->GetProdVertex());
1960 Char_t cTypeVtxProdNeg = prodVtxDaughterNeg->GetType();
2003 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2009 if(bPrintCuts) printf(
"Rec: Applying cut: Reconstruction method: %s\n", (
fbOnFly ?
"on-the-fly" :
"offline"));
2012 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2017 if(bPrintCuts) printf(
"Rec: Applying cut: Correct charge of daughters\n");
2018 if(!trackNeg || !trackPos)
2020 if(trackNeg->Charge() == trackPos->Charge())
2022 if(trackNeg->Charge() != -1)
2024 if(trackPos->Charge() != 1)
2029 if(bPrintCuts) printf(
"Rec: Applying cut: TPC refit\n");
2030 if(!trackNeg->IsOn(AliAODTrack::kTPCrefit))
2032 if(!trackPos->IsOn(AliAODTrack::kTPCrefit))
2038 if(bPrintCuts) printf(
"Rec: Applying cut: Type of production vertex of daughter: No kinks\n");
2039 if(cTypeVtxProdNeg == AliAODVertex::kKink)
2041 if(cTypeVtxProdPos == AliAODVertex::kKink)
2047 if(bPrintCuts) printf(
"Rec: Applying cut: Positive number of findable clusters\n");
2048 if(dFindableNeg <= 0.)
2050 if(dFindablePos <= 0.)
2081 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2091 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2099 if(bPrintCuts) printf(
"Rec: Applying cut: Daughter DCA to prim vtx >= %g\n",
fdCutDCAToPrimVtxMin);
2102 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2110 if(bPrintCuts) printf(
"Rec: Applying cut: DCA between daughters <= %g\n",
fdCutDCADaughtersMax);
2113 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2121 if(bPrintCuts) printf(
"Rec: Applying cut: CPA >= %g (K)\n",
fdCutCPAKMin);
2123 bIsCandidateK0s = kFALSE;
2127 if(bPrintCuts) printf(
"Rec: Applying cut: CPA >= %g (L, AL)\n",
fdCutCPALMin);
2130 bIsCandidateLambda = kFALSE;
2131 bIsCandidateALambda = kFALSE;
2135 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2145 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2156 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2166 if(bPrintCuts) printf(
"Rec: Applying cut: V0 |eta| < %g\n",
fdCutEtaV0Max);
2169 bIsCandidateK0s = kFALSE;
2170 bIsCandidateLambda = kFALSE;
2171 bIsCandidateALambda = kFALSE;
2176 if(bPrintCuts) printf(
"Rec: Applying cut: V0 |y| < %g\n",
fdCutRapV0Max);
2178 bIsCandidateK0s = kFALSE;
2181 bIsCandidateLambda = kFALSE;
2182 bIsCandidateALambda = kFALSE;
2186 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2193 if(bPrintCuts) printf(
"Rec: Applying cut: Proper lifetime < %g (K)\n",
fdCutNTauKMax);
2195 bIsCandidateK0s = kFALSE;
2199 if(bPrintCuts) printf(
"Rec: Applying cut: Proper lifetime < %g (L, AL)\n",
fdCutNTauLMax);
2202 bIsCandidateLambda = kFALSE;
2203 bIsCandidateALambda = kFALSE;
2207 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2218 bIsCandidateLambda = kFALSE;
2220 bIsCandidateALambda = kFALSE;
2224 if(bPrintCuts) printf(
"Rec: Applying cut: Delta dE/dx (both daughters): < %g\n",
fdCutNSigmadEdxMax);
2226 bIsCandidateK0s = kFALSE;
2228 bIsCandidateLambda = kFALSE;
2230 bIsCandidateALambda = kFALSE;
2232 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2236 Double_t valueCorrel[3] = {dMassV0K0s, dMassV0Lambda, dPtV0};
2237 if(bIsCandidateK0s && bIsCandidateLambda)
2239 if(bIsCandidateK0s && !bIsCandidateLambda)
2241 if(!bIsCandidateK0s && bIsCandidateLambda)
2248 if(bPrintCuts) printf(
"Rec: Applying cut: Armenteros-Podolanski (K0S) pT > %g * |alpha|\n", 0.2);
2249 if(dPtArm < TMath::Abs(0.2 * dAlpha))
2250 bIsCandidateK0s = kFALSE;
2251 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2273 bIsCandidateLambda = kFALSE;
2274 bIsCandidateALambda = kFALSE;
2278 bIsCandidateK0s = kFALSE;
2280 if(bIsInPeakALambda)
2282 bIsCandidateK0s = kFALSE;
2284 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex);
2291 if(!bIsCandidateK0s && !bIsCandidateLambda && !bIsCandidateALambda)
2295 if(iNJetSel && (bIsCandidateK0s || bIsCandidateLambda || bIsCandidateALambda))
2299 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
2302 jet = (AliAODJet*)arrayJetSel->At(iJet);
2311 if(bIsCandidateLambda)
2313 if(bIsCandidateALambda)
2317 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));
2318 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
2320 jet = (AliAODJet*)arrayJetSel->At(iJet);
2323 vecJetMomentum.SetXYZ(jet->Px(), jet->Py(), jet->Pz());
2324 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));
2327 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found in jet cone %d", bIsCandidateK0s, bIsCandidateLambda, iJet));
2328 bIsInConeJet = kTRUE;
2329 dPtJetTrackLeading = jet->GetPtLeading();
2335 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));
2336 for(
Int_t iJet = 0; iJet < iNJetPerp; iJet++)
2338 jetPerp = (AliAODJet*)arrayJetPerp->At(iJet);
2339 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));
2342 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found in perp. cone %d", bIsCandidateK0s, bIsCandidateLambda, iJet));
2343 bIsInConePerp = kTRUE;
2350 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for V0 %d %d in the rnd. cone", bIsCandidateK0s, bIsCandidateLambda));
2353 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found in the rnd. cone", bIsCandidateK0s, bIsCandidateLambda));
2354 bIsInConeRnd = kTRUE;
2360 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for V0 %d %d in the med. cone", bIsCandidateK0s, bIsCandidateLambda));
2363 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found in the med. cone", bIsCandidateK0s, bIsCandidateLambda));
2364 bIsInConeMed = kTRUE;
2368 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for V0 %d %d outside jet cones", bIsCandidateK0s, bIsCandidateLambda));
2371 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"V0 %d %d found outside jet cones", bIsCandidateK0s, bIsCandidateLambda));
2372 bIsOutsideCones = kTRUE;
2377 FillQAHistogramV0(primVtx, v0, 1, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, bIsInPeakK0s, bIsInPeakLambda, bIsInPeakALambda);
2418 dAngle = vecV0Momentum.Angle(vecJetMomentum);
2426 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex, iCentIndex);
2427 Double_t valueKIncl[3] = {dMassV0K0s, dPtV0, dEtaV0};
2438 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex + 1, iCentIndex);
2443 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex + 2, iCentIndex);
2444 Double_t valueKInJC[4] = {dMassV0K0s, dPtV0, dEtaV0, jet->Pt()};
2447 Double_t valuesDaughter[5] = {dPtDaughterPos, dPtDaughterNeg, dPtV0, dPtJet, dPtJetTrackLeading};
2452 Double_t valueKOutJC[3] = {dMassV0K0s, dPtV0, dEtaV0};
2457 Double_t valueKInPC[4] = {dMassV0K0s, dPtV0, dEtaV0, jetPerp->Pt()};
2462 Double_t valueKInRnd[3] = {dMassV0K0s, dPtV0, dEtaV0};
2467 Double_t valueKInMed[3] = {dMassV0K0s, dPtV0, dEtaV0};
2472 Double_t valueKNoJet[3] = {dMassV0K0s, dPtV0, dEtaV0};
2477 if(bIsCandidateLambda)
2481 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex, iCentIndex);
2482 Double_t valueLIncl[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2488 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex + 1, iCentIndex);
2493 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex + 2, iCentIndex);
2494 Double_t valueLInJC[4] = {dMassV0Lambda, dPtV0, dEtaV0, jet->Pt()};
2497 Double_t valuesDaughter[5] = {dPtDaughterPos, dPtDaughterNeg, dPtV0, dPtJet, dPtJetTrackLeading};
2502 Double_t valueLOutJet[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2507 Double_t valueLInPC[4] = {dMassV0Lambda, dPtV0, dEtaV0, jetPerp->Pt()};
2512 Double_t valueLInRnd[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2517 Double_t valueLInMed[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2522 Double_t valueLNoJet[3] = {dMassV0Lambda, dPtV0, dEtaV0};
2527 if(bIsCandidateALambda)
2531 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex, iCentIndex);
2532 Double_t valueALIncl[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2538 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex + 1, iCentIndex);
2543 FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex + 2, iCentIndex);
2544 Double_t valueLInJC[4] = {dMassV0ALambda, dPtV0, dEtaV0, jet->Pt()};
2547 Double_t valuesDaughter[5] = {dPtDaughterPos, dPtDaughterNeg, dPtV0, dPtJet, dPtJetTrackLeading};
2552 Double_t valueALOutJet[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2557 Double_t valueLInPC[4] = {dMassV0ALambda, dPtV0, dEtaV0, jetPerp->Pt()};
2562 Double_t valueALInRnd[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2567 Double_t valueALInMed[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2572 Double_t valueALNoJet[3] = {dMassV0ALambda, dPtV0, dEtaV0};
2582 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
2584 AliAODJet* jetCorrel = (AliAODJet*)arrayJetSel->At(iJet);
2586 dDEta = dEtaV0 - jetCorrel->Eta();
2591 Double_t valueKCorrel[6] = {dMassV0K0s, dPtV0, dEtaV0, jetCorrel->Pt(), dDPhi, dDEta};
2594 if(bIsCandidateLambda)
2596 Double_t valueLCorrel[6] = {dMassV0Lambda, dPtV0, dEtaV0, jetCorrel->Pt(), dDPhi, dDEta};
2603 for(
Int_t iMix = 0; iMix < pool->GetCurrentNEvents(); iMix++)
2605 TObjArray* arrayMixedEvent = pool->GetEvent(iMix);
2606 if(!arrayMixedEvent)
2608 for(
Int_t iJet = 0; iJet < arrayMixedEvent->GetEntriesFast(); iJet++)
2610 TLorentzVector* jetMixed = (TLorentzVector*)arrayMixedEvent->At(iJet);
2614 dDEta = dEtaV0 - jetMixed->Eta();
2619 Double_t valueKCorrel[6] = {dMassV0K0s, dPtV0, dEtaV0, jetMixed->Pt(), dDPhi, dDEta};
2622 if(bIsCandidateLambda)
2624 Double_t valueLCorrel[6] = {dMassV0Lambda, dPtV0, dEtaV0, jetMixed->Pt(), dDPhi, dDEta};
2639 if(!(bIsCandidateK0s) && !(bIsCandidateLambda) && !(bIsCandidateALambda))
2643 Int_t iLabelPos = TMath::Abs(trackPos->GetLabel());
2644 Int_t iLabelNeg = TMath::Abs(trackNeg->GetLabel());
2647 if((iLabelNeg < 0) || (iLabelNeg >= iNTracksMC) || (iLabelPos < 0) || (iLabelPos >= iNTracksMC))
2651 AliAODMCParticle* particleMCDaughterNeg = (AliAODMCParticle*)arrayMC->At(iLabelNeg);
2652 AliAODMCParticle* particleMCDaughterPos = (AliAODMCParticle*)arrayMC->At(iLabelPos);
2653 if(!particleMCDaughterNeg || !particleMCDaughterPos)
2657 if((particleMCDaughterNeg->IsPhysicalPrimary()) || (particleMCDaughterPos->IsPhysicalPrimary()))
2661 Int_t iPdgCodeDaughterPos = particleMCDaughterPos->GetPdgCode();
2662 Int_t iPdgCodeDaughterNeg = particleMCDaughterNeg->GetPdgCode();
2665 Int_t iIndexMotherPos = particleMCDaughterPos->GetMother();
2666 Int_t iIndexMotherNeg = particleMCDaughterNeg->GetMother();
2668 if((iIndexMotherNeg < 0) || (iIndexMotherNeg >= iNTracksMC) || (iIndexMotherPos < 0) || (iIndexMotherPos >= iNTracksMC))
2672 if(iIndexMotherNeg != iIndexMotherPos)
2676 AliAODMCParticle* particleMCMother = (AliAODMCParticle*)arrayMC->At(iIndexMotherPos);
2677 if(!particleMCMother)
2681 Int_t iPdgCodeMother = particleMCMother->GetPdgCode();
2684 if((iPdgCodeMother != iPdgCodeK0s) && (TMath::Abs(iPdgCodeMother) != iPdgCodeLambda))
2689 Bool_t bV0MCIsK0s = ((iPdgCodeMother == iPdgCodeK0s) && (iPdgCodeDaughterPos == +iPdgCodePion) && (iPdgCodeDaughterNeg == -iPdgCodePion));
2691 Bool_t bV0MCIsLambda = ((iPdgCodeMother == +iPdgCodeLambda) && (iPdgCodeDaughterPos == +iPdgCodeProton) && (iPdgCodeDaughterNeg == -iPdgCodePion));
2693 Bool_t bV0MCIsALambda = ((iPdgCodeMother == -iPdgCodeLambda) && (iPdgCodeDaughterPos == +iPdgCodePion) && (iPdgCodeDaughterNeg == -iPdgCodeProton));
2695 Double_t dPtV0Gen = particleMCMother->Pt();
2696 Double_t dRapV0Gen = particleMCMother->Y();
2697 Double_t dEtaV0Gen = particleMCMother->Eta();
2703 if(bPrintCuts) printf(
"Rec->Gen: Applying cut: V0 |eta|: < %g\n",
fdCutEtaV0Max);
2710 if(bPrintCuts) printf(
"Rec->Gen: Applying cut: V0 |y|: < %g\n",
fdCutRapV0Max);
2722 Int_t iIndexMotherOfMother = particleMCMother->GetMother();
2723 AliAODMCParticle* particleMCMotherOfMother = 0;
2724 if(iIndexMotherOfMother >= 0)
2725 particleMCMotherOfMother = (AliAODMCParticle*)arrayMC->At(iIndexMotherOfMother);
2727 Int_t iPdgCodeMotherOfMother = 0;
2728 if(particleMCMotherOfMother)
2729 iPdgCodeMotherOfMother = particleMCMotherOfMother->GetPdgCode();
2737 Bool_t bV0MCComesFromXi = ((particleMCMotherOfMother) && ((iPdgCodeMotherOfMother == 3322) || (iPdgCodeMotherOfMother == 3312)));
2738 Bool_t bV0MCComesFromAXi = ((particleMCMotherOfMother) && ((iPdgCodeMotherOfMother == -3322) || (iPdgCodeMotherOfMother == -3312)));
2741 Double_t dx = dPrimVtxMCX - particleMCMother->Xv();
2742 Double_t dy = dPrimVtxMCY - particleMCMother->Yv();
2743 Double_t dz = dPrimVtxMCZ - particleMCMother->Zv();
2744 Double_t dDistPrimary = TMath::Sqrt(dx * dx + dy * dy + dz * dz);
2745 Bool_t bV0MCIsPrimaryDist = (dDistPrimary < dDistPrimaryMax);
2756 if(bV0MCIsK0s && bV0MCIsPrimaryDist)
2759 Double_t valueEtaK[3] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen};
2762 Double_t valueEtaDKNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2764 Double_t valueEtaDKPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2771 Double_t valueKInJCMC[4] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen, jet->Pt()};
2773 Double_t valueEtaKIn[5] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()};
2776 Double_t valueEtaDKJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2778 Double_t valueEtaDKJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2782 if(bV0MCIsK0s && !bV0MCIsPrimaryDist)
2789 if(bIsCandidateLambda)
2792 if(bV0MCIsLambda && bV0MCIsPrimaryDist)
2795 Double_t valueEtaL[3] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen};
2798 Double_t valueEtaDLNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2800 Double_t valueEtaDLPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2807 Double_t valueLInJCMC[4] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen, jet->Pt()};
2809 Double_t valueEtaLIn[5] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()};
2812 Double_t valueEtaDLJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2814 Double_t valueEtaDLJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2819 if(bV0MCIsLambda && bV0MCComesFromXi)
2821 Double_t valueFDLIncl[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), 0.};
2829 Double_t valueFDLInJets[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), jet->Pt()};
2833 if(bV0MCIsLambda && !bV0MCIsPrimaryDist && !bV0MCComesFromXi)
2840 if(bIsCandidateALambda)
2843 if(bV0MCIsALambda && bV0MCIsPrimaryDist)
2846 Double_t valueEtaAL[3] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen};
2849 Double_t valueEtaDALNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2851 Double_t valueEtaDALPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0};
2858 Double_t valueALInJCMC[4] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen, jet->Pt()};
2860 Double_t valueEtaALIn[5] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()};
2863 Double_t valueEtaDALJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2865 Double_t valueEtaDALJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()};
2870 if(bV0MCIsALambda && bV0MCComesFromAXi)
2872 Double_t valueFDALIncl[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), 0.};
2880 Double_t valueFDALInJets[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), jet->Pt()};
2884 if(bV0MCIsALambda && !bV0MCIsPrimaryDist && !bV0MCComesFromAXi)
2893 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"End of V0 loop");
2899 pool->UpdatePool(arrayMixedEventAdd);
2910 for(
Int_t iPartMC = 0; iPartMC < iNTracksMC; iPartMC++)
2913 AliAODMCParticle* particleMC = (AliAODMCParticle*)arrayMC->At(iPartMC);
2918 Int_t iPdgCodeParticleMC = particleMC->GetPdgCode();
2921 if((iPdgCodeParticleMC == 3312) && (TMath::Abs(particleMC->Y()) < 0.5) &&
IsFromGoodGenerator(iPartMC))
2925 else if((iPdgCodeParticleMC == -3312) && (TMath::Abs(particleMC->Y()) < 0.5) &&
IsFromGoodGenerator(iPartMC))
2930 if((iPdgCodeParticleMC != iPdgCodeK0s) && (TMath::Abs(iPdgCodeParticleMC) != iPdgCodeLambda))
2935 Bool_t bV0MCIsK0s = (iPdgCodeParticleMC == iPdgCodeK0s);
2937 Bool_t bV0MCIsLambda = (iPdgCodeParticleMC == +iPdgCodeLambda);
2939 Bool_t bV0MCIsALambda = (iPdgCodeParticleMC == -iPdgCodeLambda);
2941 Double_t dPtV0Gen = particleMC->Pt();
2942 Double_t dRapV0Gen = particleMC->Y();
2943 Double_t dEtaV0Gen = particleMC->Eta();
2948 if(bPrintCuts) printf(
"Gen: Applying cut: V0 |eta|: < %g\n",
fdCutEtaV0Max);
2955 if(bPrintCuts) printf(
"Gen: Applying cut: V0 |y|: < %g\n",
fdCutRapV0Max);
2981 Double_t dx = dPrimVtxMCX - particleMC->Xv();
2982 Double_t dy = dPrimVtxMCY - particleMC->Yv();
2983 Double_t dz = dPrimVtxMCZ - particleMC->Zv();
2984 Double_t dDistPrimary = TMath::Sqrt(dx * dx + dy * dy + dz * dz);
2985 Bool_t bV0MCIsPrimaryDist = (dDistPrimary < dDistPrimaryMax);
2988 if(!bV0MCIsPrimaryDist)
2996 AliAODJet* jetMC = 0;
2997 Bool_t bIsMCV0InJet = kFALSE;
3000 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Searching for gen V0 in %d MC jets", iNJetSel));
3001 for(
Int_t iJet = 0; iJet < iNJetSel; iJet++)
3003 jetMC = (AliAODJet*)arrayJetSel->At(iJet);
3004 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Checking if gen V0 in MC jet %d", iJet));
3007 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"gen V0 found in MC jet %d", iJet));
3008 bIsMCV0InJet = kTRUE;
3023 Double_t valueEtaKInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()};
3036 Double_t valueEtaLInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()};
3049 Double_t valueEtaALInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()};
3056 arrayJetSel->Delete();
3058 arrayJetPerp->Delete();
3059 delete arrayJetPerp;
3069 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"End");
3076 if(!IsCandK0s && !IsCandLambda && !IsCandALambda)
3084 AliAODTrack* trackNeg = (AliAODTrack*)vZero->GetDaughter(1);
3085 AliAODTrack* trackPos = (AliAODTrack*)vZero->GetDaughter(0);
3088 for(
Int_t i = 0; i < 2; i++)
3090 AliAODTrack* track = (AliAODTrack*)vZero->GetDaughter(i);
3092 fh1QAV0TPCRefit[iIndexHisto]->Fill(track->IsOn(AliAODTrack::kTPCrefit));
3093 Double_t nCrossedRowsTPC = track->GetTPCClusterInfo(2, 1);
3095 Int_t findable = track->GetTPCNclsF();
3106 fh2QAV0EtaRows[iIndexHisto]->Fill(track->Eta(), nCrossedRowsTPC);
3107 fh2QAV0PtRows[iIndexHisto]->Fill(track->Pt(), nCrossedRowsTPC);
3108 fh2QAV0PhiRows[iIndexHisto]->Fill(track->Phi(), nCrossedRowsTPC);
3111 fh2QAV0PtNCls[iIndexHisto]->Fill(track->Pt(), track->GetTPCNcls());
3112 fh2QAV0PtChi[iIndexHisto]->Fill(track->Pt(), track->Chi2perNDF());
3116 fh1QAV0Pt[iIndexHisto]->Fill(track->Pt());
3117 fTotalCharge += track->Charge();
3122 fh1QAV0DCAVtx[iIndexHisto]->Fill(TMath::Abs(vZero->DcaNegToPrimVertex()));
3123 fh1QAV0DCAVtx[iIndexHisto]->Fill(TMath::Abs(vZero->DcaPosToPrimVertex()));
3127 fh1QAV0DCAV0[iIndexHisto]->Fill(vZero->DcaV0Daughters());
3131 fh1QAV0Cos[iIndexHisto]->Fill(vZero->CosPointingAngle(vtx));
3136 vZero->GetSecondaryVtx(xyz);
3137 Double_t r2 = xyz[0] * xyz[0] + xyz[1] * xyz[1];
3138 fh1QAV0R[iIndexHisto]->Fill(TMath::Sqrt(r2));
3140 Double_t dAlpha = vZero->AlphaV0();
3141 Double_t dPtArm = vZero->PtArmV0();
3191 fh2ArmPod[iIndexHisto]->Fill(dAlpha, dPtArm);
3216 if(!part1 || !part2)
3219 TVector3 vecMom2(part2->Px(), part2->Py(), part2->Pz());
3220 TVector3 vecMom1(part1->Px(), part1->Py(), part1->Pz());
3221 Double_t dR = vecMom2.DeltaR(vecMom1);
3232 AliError(
"No particle!");
3237 AliError(
"No jet array!");
3240 Int_t iNJets = array->GetEntriesFast();
3243 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Warning: No jets");
3246 AliVParticle* jet = 0;
3247 for(
Int_t iJet = 0; iJet < iNJets; iJet++)
3249 jet = (AliVParticle*)array->At(iJet);
3252 AliError(Form(
"Failed to load jet %d/%d!", iJet, iNJets));
3264 if(fDebug > 3) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Generating random cone...");
3265 TLorentzVector vecCone;
3266 AliAODJet* part = 0;
3268 Int_t iNTrialsMax = 10;
3270 for(
Int_t iTry = 0; iTry < iNTrialsMax; iTry++)
3272 if(fDebug > 4) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Try %d", iTry));
3273 dEta = dEtaConeMax * (2 *
fRandom->Rndm() - 1.);
3274 dPhi = TMath::TwoPi() *
fRandom->Rndm();
3275 vecCone.SetPtEtaPhiM(1., dEta, dPhi, 0.);
3276 part =
new AliAODJet(vecCone);
3280 if(fDebug > 1) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Random cone successfully generated");
3288 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Failed to find a random cone");
3299 AliError(
"No jet container!");
3306 std::vector<std::vector<Double_t> > vecListClusters;
3307 if(fDebug > 3) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Loop over %d clusters.", iNClTot));
3308 for(
Int_t ij = 0; ij < iNClTot; ij++)
3313 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())));
3318 dDensityBg = dPtBg / dAreaBg;
3319 std::vector<Double_t> vecCluster;
3320 vecCluster.push_back(ij);
3321 vecCluster.push_back(dDensityBg);
3322 vecListClusters.push_back(vecCluster);
3324 iNCl = vecListClusters.size();
3327 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Warning: Too little clusters");
3336 std::sort(vecListClusters.begin(), vecListClusters.end(),
CompareClusters);
3345 Int_t iIndexMed = 0;
3346 if(TMath::Odd(iNCl))
3348 iIndex = (
Int_t)(0.5 * (iNCl + 1));
3355 iIndex = ((
fRandom->Rndm() > 0.5) ? iIndex1 : iIndex2);
3358 iIndexMed =
Int_t((vecListClusters[iIndex])[0]);
3360 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]));
3363 if(TMath::Abs(clusterMed->Eta()) > dEtaConeMax)
3365 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()));
3378 if(TMath::Abs(dR) < dEpsilon)
3380 AliError(Form(
"Too small radius: %g < %g!", dR, dEpsilon));
3386 return TMath::Pi() * dR * dR;
3387 return dR * dR * TMath::ACos(dD / dR) - dD * TMath::Sqrt(dR * dR - dD * dD);
3393 if(!part1 || !part2)
3396 TVector3 vecMom2(part2->Px(), part2->Py(), part2->Pz());
3397 TVector3 vecMom1(part1->Px(), part1->Py(), part1->Pz());
3398 Double_t dR = vecMom2.DeltaR(vecMom1);
3407 if(fAOD->IsPileupFromSPD())
3409 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"SPD pile-up");
3414 AliAODVertex* vertex = fAOD->GetPrimaryVertex();
3417 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"No vertex");
3420 Int_t iNContribMin = 3;
3421 if(vertex->GetNContributors() < iNContribMin)
3423 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Not enough contributors, %d", vertex->GetNContributors()));
3427 TString vtxTitle(vertex->GetTitle());
3428 if(vtxTitle.Contains(
"TPCVertex"))
3430 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"TPC vertex");
3435 if(TMath::Abs(zVertex) > dVtxZCut)
3437 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Cut on z, %g", zVertex));
3443 AliAODVertex* vertexSPD = fAOD->GetPrimaryVertexSPD();
3446 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"No SPD vertex");
3449 Double_t zVertexSPD = vertexSPD->GetZ();
3450 if(TMath::Abs(zVertex - zVertexSPD) > dDeltaZMax)
3452 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Cut on Delta z = %g - %g = %g", zVertex, zVertexSPD, zVertex - zVertexSPD));
3459 Double_t radiusSq = yVertex * yVertex + xVertex * xVertex;
3460 if(radiusSq > dVtxR2Cut)
3462 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Cut on r, %g", radiusSq));
3468 fdCentrality = ((AliVAODHeader*)fAOD->GetHeader())->GetCentralityP()->GetCentralityPercentile(
"V0M");
3471 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Negative centrality");
3474 if((dCentCutUp < 0) || (dCentCutLo < 0) || (dCentCutUp > 100) || (dCentCutLo > 100) || (dCentCutLo > dCentCutUp))
3476 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__,
"Wrong centrality limits");
3481 if(fDebug > 0) printf(
"%s %s::%s: %s\n", GetName(), ClassName(), __func__, Form(
"Centrality cut, %g",
fdCentrality));
3514 return Form(
"%s-%s %%", lowerEdge.Data(), upperEdge.Data());
3523 return 0.0044 + 0.0004 * (pt - 1.);
3526 return 0.0023 + 0.00034 * (pt - 1.);
3536 return (cluster1[1] > cluster2[1]);
3543 AliError(
"No MC event!");
3549 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 * 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]
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.
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]
number of tracks 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.
Bool_t fbCorrelations
[%] centrality
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