Skip to content

Commit 8fade11

Browse files
authored
PWGCF: Add V0 flow and optimize mass axis in flowGFWOmegaXi.cxx (AliceO2Group#7902)
* Add files via upload * Add files via upload * Add files via upload * Add files via upload
1 parent 6aa65f0 commit 8fade11

File tree

1 file changed

+101
-19
lines changed

1 file changed

+101
-19
lines changed

PWGCF/Flow/Tasks/flowGFWOmegaXi.cxx

Lines changed: 101 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,27 @@ struct FlowGFWOmegaXi {
6060
O2_DEFINE_CONFIGURABLE(cfgNbootstrap, int, 10, "Number of subsamples")
6161
O2_DEFINE_CONFIGURABLE(cfgEfficiency, std::string, "", "CCDB path to efficiency object")
6262
O2_DEFINE_CONFIGURABLE(cfgAcceptance, std::string, "", "CCDB path to acceptance object")
63+
O2_DEFINE_CONFIGURABLE(cfgOmegaMassbins, int, 16, "Number of Omega mass axis bins for c22")
64+
O2_DEFINE_CONFIGURABLE(cfgXiMassbins, int, 14, "Number of Xi mass axis bins for c22")
65+
O2_DEFINE_CONFIGURABLE(cfgK0sMassbins, int, 80, "Number of K0s mass axis bins for c22")
66+
O2_DEFINE_CONFIGURABLE(cfgLambdaMassbins, int, 32, "Number of Lambda mass axis bins for c22")
67+
// topological cut for V0
68+
O2_DEFINE_CONFIGURABLE(cfgv0_radius, float, 5.0f, "minimum decay radius")
69+
O2_DEFINE_CONFIGURABLE(cfgv0_v0cospa, float, 0.995f, "minimum cosine of pointing angle")
70+
O2_DEFINE_CONFIGURABLE(cfgv0_dcav0topv, float, 0.1f, "minimum daughter DCA to PV")
71+
O2_DEFINE_CONFIGURABLE(cfgv0_dcav0dau, float, 0.5f, "maximum DCA among V0 daughters")
72+
O2_DEFINE_CONFIGURABLE(cfgv0_mk0swindow, float, 0.1f, "Invariant mass window of K0s")
73+
O2_DEFINE_CONFIGURABLE(cfgv0_mlambdawindow, float, 0.04f, "Invariant mass window of lambda")
74+
O2_DEFINE_CONFIGURABLE(cfgv0_ArmPodocut, float, 0.2f, "Armenteros Podolski cut for K0")
6375
// topological cut for cascade
6476
O2_DEFINE_CONFIGURABLE(cfgcasc_radius, float, 0.5f, "minimum decay radius")
65-
O2_DEFINE_CONFIGURABLE(cfgcasc_cospa, float, 0.998f, "minimum cosine of pointing angle")
77+
O2_DEFINE_CONFIGURABLE(cfgcasc_casccospa, float, 0.999f, "minimum cosine of pointing angle")
78+
O2_DEFINE_CONFIGURABLE(cfgcasc_v0cospa, float, 0.998f, "minimum cosine of pointing angle")
6679
O2_DEFINE_CONFIGURABLE(cfgcasc_dcav0topv, float, 0.01f, "minimum daughter DCA to PV")
6780
O2_DEFINE_CONFIGURABLE(cfgcasc_dcabachtopv, float, 0.01f, "minimum bachelor DCA to PV")
6881
O2_DEFINE_CONFIGURABLE(cfgcasc_dcacascdau, float, 0.3f, "maximum DCA among cascade daughters")
6982
O2_DEFINE_CONFIGURABLE(cfgcasc_dcav0dau, float, 1.0f, "maximum DCA among V0 daughters")
70-
O2_DEFINE_CONFIGURABLE(cfgcasc_mlamdawindow, float, 0.04f, "Invariant mass window of lamda")
83+
O2_DEFINE_CONFIGURABLE(cfgcasc_mlambdawindow, float, 0.04f, "Invariant mass window of lambda")
7184
// track quality and type selections
7285
O2_DEFINE_CONFIGURABLE(cfgtpcclusters, int, 70, "minimum number of TPC clusters requirement")
7386
O2_DEFINE_CONFIGURABLE(cfgitsclusters, int, 1, "minimum number of ITS clusters requirement")
@@ -81,6 +94,8 @@ struct FlowGFWOmegaXi {
8194
AxisSpec axisMultiplicity{{0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90}, "Centrality (%)"};
8295
AxisSpec axisOmegaminusMass = {80, 1.63f, 1.71f, "Inv. Mass (GeV)"};
8396
AxisSpec axisXiminusMass = {70, 1.3f, 1.37f, "Inv. Mass (GeV)"};
97+
AxisSpec axisK0sMass = {400, 0.4f, 0.6f, "Inv. Mass (GeV)"};
98+
AxisSpec axisLambdaMass = {160, 1.08f, 1.16f, "Inv. Mass (GeV)"};
8499

85100
Configurable<bool> cfgcheckDauTPC{"checkDauTPC", false, "check if daughter tracks have TPC match"};
86101
Configurable<float> cfgCasc_rapidity{"Casc_rapidity", 0.5, "rapidity"};
@@ -133,20 +148,20 @@ struct FlowGFWOmegaXi {
133148
double* MultBins = &(axisMult.binEdges)[0];
134149
TAxis* fMultAxis = new TAxis(nMultBins, MultBins);
135150

136-
o2::framework::AxisSpec axisphi = cfgaxisPhi;
137-
int nPhiBins = axisphi.binEdges.size() - 1;
138-
double* PhiBins = &(axisphi.binEdges)[0];
139-
TAxis* fPhiAxis = new TAxis(nPhiBins, PhiBins);
151+
int nPhiBins = 60;
152+
TAxis* fPhiAxis = new TAxis(nPhiBins, 0, constants::math::TwoPI);
140153

141-
o2::framework::AxisSpec axisOmegamass = axisOmegaminusMass;
142-
int nOmegaMassBins = axisOmegamass.binEdges.size() - 1;
143-
double* OmegaMassBins = &(axisOmegamass.binEdges)[0];
144-
TAxis* fOmegaMass = new TAxis(nOmegaMassBins, OmegaMassBins);
154+
int nOmegaMassBins = cfgOmegaMassbins;
155+
TAxis* fOmegaMass = new TAxis(nOmegaMassBins, 1.63, 1.71);
145156

146-
o2::framework::AxisSpec axisXimass = axisXiminusMass;
147-
int nXiMassBins = axisXimass.binEdges.size() - 1;
148-
double* XiMassBins = &(axisXimass.binEdges)[0];
149-
TAxis* fXiMass = new TAxis(nXiMassBins, XiMassBins);
157+
int nXiMassBins = cfgXiMassbins;
158+
TAxis* fXiMass = new TAxis(nXiMassBins, 1.3, 1.37);
159+
160+
int nK0sMassBins = cfgK0sMassbins;
161+
TAxis* fK0sMass = new TAxis(nK0sMassBins, 0.4, 0.6);
162+
163+
int nLambdaMassBins = cfgLambdaMassbins;
164+
TAxis* fLambdaMass = new TAxis(nLambdaMassBins, 1.08, 1.16);
150165

151166
void init(InitContext const&) // Initialization
152167
{
@@ -164,17 +179,25 @@ struct FlowGFWOmegaXi {
164179
registry.add("hEtaPhiREF", "", {HistType::kTH2D, {cfgaxisEta, cfgaxisPhi}});
165180
registry.add("hEtaPhiPOIXi", "", {HistType::kTH2D, {cfgaxisEta, cfgaxisPhi}});
166181
registry.add("hEtaPhiPOIOmega", "", {HistType::kTH2D, {cfgaxisEta, cfgaxisPhi}});
182+
registry.add("hEtaPhiPOIK0s", "", {HistType::kTH2D, {cfgaxisEta, cfgaxisPhi}});
183+
registry.add("hEtaPhiPOILambda", "", {HistType::kTH2D, {cfgaxisEta, cfgaxisPhi}});
167184
// cumulant of flow
168185
registry.add("c22", ";Centrality (%) ; C_{2}{2}", {HistType::kTProfile, {axisMultiplicity}});
169186
registry.add("c24", ";Centrality (%) ; C_{2}{4}", {HistType::kTProfile, {axisMultiplicity}});
170187
// pt-diff cumulant of flow
171188
registry.add("Xic22dpt", ";pt ; C_{2}{2} ", {HistType::kTProfile3D, {axisPt, axisXiminusMass, axisMultiplicity}});
172189
registry.add("Omegac22dpt", ";pt ; C_{2}{2} ", {HistType::kTProfile3D, {axisPt, axisOmegaminusMass, axisMultiplicity}});
173-
// InvMass(GeV) of casc
190+
registry.add("K0sc22dpt", ";pt ; C_{2}{2} ", {HistType::kTProfile3D, {axisPt, axisK0sMass, axisMultiplicity}});
191+
registry.add("Lambdac22dpt", ";pt ; C_{2}{2} ", {HistType::kTProfile3D, {axisPt, axisLambdaMass, axisMultiplicity}});
192+
// InvMass(GeV) of casc and v0
174193
registry.add("InvMassXiMinus_all", "", {HistType::kTHnSparseF, {axisPt, axisXiminusMass, cfgaxisEta, axisMultiplicity}});
175194
registry.add("InvMassOmegaMinus_all", "", {HistType::kTHnSparseF, {axisPt, axisOmegaminusMass, cfgaxisEta, axisMultiplicity}});
176195
registry.add("InvMassOmegaMinus", "", {HistType::kTHnSparseF, {axisPt, axisOmegaminusMass, cfgaxisEta, axisMultiplicity}});
177196
registry.add("InvMassXiMinus", "", {HistType::kTHnSparseF, {axisPt, axisXiminusMass, cfgaxisEta, axisMultiplicity}});
197+
registry.add("InvMassK0s_all", "", {HistType::kTHnSparseF, {axisPt, axisK0sMass, cfgaxisEta, axisMultiplicity}});
198+
registry.add("InvMassLambda_all", "", {HistType::kTHnSparseF, {axisPt, axisLambdaMass, cfgaxisEta, axisMultiplicity}});
199+
registry.add("InvMassK0s", "", {HistType::kTHnSparseF, {axisPt, axisK0sMass, cfgaxisEta, axisMultiplicity}});
200+
registry.add("InvMassLambda", "", {HistType::kTHnSparseF, {axisPt, axisLambdaMass, cfgaxisEta, axisMultiplicity}});
178201

179202
fGFW->AddRegion("full", -0.8, 0.8, 1, 1); // ("name", etamin, etamax, ptbinnum, bitmask)eta region -0.8 to 0.8
180203
// with (-0.5, 0.5) eta gap
@@ -184,11 +207,17 @@ struct FlowGFWOmegaXi {
184207
fGFW->AddRegion("poiXiP", 0.5, 0.8, nXiptMassBins, 2);
185208
int nOmegaptMassBins = nPtBins * nOmegaMassBins;
186209
fGFW->AddRegion("poiOmegaP", 0.5, 0.8, nOmegaptMassBins, 4);
210+
int nK0sptMassBins = nPtBins * nK0sMassBins;
211+
fGFW->AddRegion("poiK0sP", 0.5, 0.8, nK0sptMassBins, 8);
212+
int nLambdaptMassBins = nPtBins * nLambdaMassBins;
213+
fGFW->AddRegion("poiLambdaP", 0.5, 0.8, nLambdaptMassBins, 16);
187214
// pushback
188215
corrconfigs.push_back(fGFW->GetCorrelatorConfig("refP10 {2} refN10 {-2}", "ChFull220", kFALSE));
189216
corrconfigs.push_back(fGFW->GetCorrelatorConfig("refP10 {2 2} refN10 {-2 -2}", "ChFull240", kFALSE));
190217
corrconfigs.push_back(fGFW->GetCorrelatorConfig("poiXiP {2} refN10 {-2}", "Ch10Gap22", kTRUE));
191218
corrconfigs.push_back(fGFW->GetCorrelatorConfig("poiOmegaP {2} refN10 {-2}", "Ch10Gap22", kTRUE));
219+
corrconfigs.push_back(fGFW->GetCorrelatorConfig("poiK0sP {2} refN10 {-2}", "Ch10Gap22", kTRUE));
220+
corrconfigs.push_back(fGFW->GetCorrelatorConfig("poiLambdaP {2} refN10 {-2}", "Ch10Gap22", kTRUE));
192221
//
193222
fGFW->CreateRegions(); // finalize the initialization
194223

@@ -236,8 +265,14 @@ struct FlowGFWOmegaXi {
236265
} else if (partical == 3334) {
237266
nMassBins = nOmegaMassBins;
238267
fMass = fOmegaMass;
268+
} else if (partical == 310) {
269+
nMassBins = nK0sMassBins;
270+
fMass = fK0sMass;
271+
} else if (partical == 3122) {
272+
nMassBins = nLambdaMassBins;
273+
fMass = fLambdaMass;
239274
} else {
240-
LOGF(error, "Error, partical = 3312 for Xi and 3334 for Omega");
275+
LOGF(error, "Error, please put in correct PDG particalID of K0s, Lambda, Xi or Omega");
241276
return;
242277
}
243278
for (int massbin = 1; massbin <= nMassBins; massbin++) {
@@ -347,7 +382,7 @@ struct FlowGFWOmegaXi {
347382
return true;
348383
}
349384

350-
void process(aodCollisions::iterator const& collision, aod::BCsWithTimestamps const&, aodTracks const& tracks, aod::CascDataExt const& Cascades, DaughterTracks&)
385+
void process(aodCollisions::iterator const& collision, aod::BCsWithTimestamps const&, aodTracks const& tracks, aod::CascDataExt const& Cascades, aod::V0Datas const& V0s, DaughterTracks&)
351386
{
352387
int Ntot = tracks.size();
353388
if (Ntot < 1)
@@ -381,6 +416,49 @@ struct FlowGFWOmegaXi {
381416
fGFW->Fill(track.eta(), ptbin, track.phi(), wacc * weff, 1); //(eta, ptbin, phi, wacc*weff, bitmask)
382417
}
383418
}
419+
// fill GFW of V0 flow
420+
for (auto& v0 : V0s) {
421+
auto v0posdau = v0.posTrack_as<DaughterTracks>();
422+
auto v0negdau = v0.negTrack_as<DaughterTracks>();
423+
// check tpc
424+
int partical = 0;
425+
if (v0.qtarm() / TMath::Abs(v0.alpha()) > cfgv0_ArmPodocut && TMath::Abs(v0posdau.tpcNSigmaPi()) < cfgNSigmaCascPion && TMath::Abs(v0negdau.tpcNSigmaPi()) < cfgNSigmaCascPion) {
426+
registry.fill(HIST("InvMassK0s_all"), v0.pt(), v0.mK0Short(), v0.eta(), cent);
427+
partical = 310;
428+
} else if (v0.qtarm() / TMath::Abs(v0.alpha()) < cfgv0_ArmPodocut && TMath::Abs(v0posdau.tpcNSigmaPr()) < cfgNSigmaCascProton && TMath::Abs(v0negdau.tpcNSigmaPi()) < cfgNSigmaCascPion) {
429+
registry.fill(HIST("InvMassLambda_all"), v0.pt(), v0.mLambda(), v0.eta(), cent);
430+
partical = 3122;
431+
}
432+
// track quality check
433+
if (v0posdau.tpcNClsFound() < cfgtpcclusters)
434+
continue;
435+
if (v0negdau.tpcNClsFound() < cfgtpcclusters)
436+
continue;
437+
if (v0posdau.itsNCls() < cfgitsclusters)
438+
continue;
439+
if (v0negdau.itsNCls() < cfgitsclusters)
440+
continue;
441+
// topological cut
442+
if (v0.v0radius() < cfgv0_radius)
443+
continue;
444+
if (v0.v0cosPA() < cfgv0_v0cospa)
445+
continue;
446+
if (v0.dcaV0daughters() > cfgv0_dcav0dau)
447+
continue;
448+
if (partical == 310) {
449+
if (TMath::Abs(v0.mK0Short() - 0.49761) < cfgv0_mk0swindow) {
450+
registry.fill(HIST("InvMassK0s"), v0.pt(), v0.mK0Short(), v0.eta(), cent);
451+
registry.fill(HIST("hEtaPhiPOIK0s"), v0.eta(), v0.phi());
452+
fGFW->Fill(v0.eta(), fPtAxis->FindBin(v0.pt()) - 1 + ((fK0sMass->FindBin(v0.mK0Short()) - 1) * nPtBins), v0.phi(), wacc * weff, 8);
453+
}
454+
} else if (partical == 3122) {
455+
if (TMath::Abs(v0.mLambda() - 1.115683) < cfgv0_mlambdawindow) {
456+
registry.fill(HIST("InvMassLambda"), v0.pt(), v0.mLambda(), v0.eta(), cent);
457+
registry.fill(HIST("hEtaPhiPOILambda"), v0.eta(), v0.phi());
458+
fGFW->Fill(v0.eta(), fPtAxis->FindBin(v0.pt()) - 1 + ((fLambdaMass->FindBin(v0.mLambda()) - 1) * nPtBins), v0.phi(), wacc * weff, 16);
459+
}
460+
}
461+
}
384462
// fill GFW of casc flow
385463
for (auto& casc : Cascades) {
386464
auto bachelor = casc.bachelor_as<DaughterTracks>();
@@ -403,7 +481,9 @@ struct FlowGFWOmegaXi {
403481
// topological cut
404482
if (casc.cascradius() < cfgcasc_radius)
405483
continue;
406-
if (casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()) < cfgcasc_cospa)
484+
if (casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()) < cfgcasc_casccospa)
485+
continue;
486+
if (casc.v0cosPA(collision.posX(), collision.posY(), collision.posZ()) < cfgcasc_v0cospa)
407487
continue;
408488
if (casc.dcav0topv(collision.posX(), collision.posY(), collision.posZ()) < cfgcasc_dcav0topv)
409489
continue;
@@ -413,7 +493,7 @@ struct FlowGFWOmegaXi {
413493
continue;
414494
if (casc.dcaV0daughters() > cfgcasc_dcav0dau)
415495
continue;
416-
if (TMath::Abs(casc.mLambda() - 1.115683) > cfgcasc_mlamdawindow)
496+
if (TMath::Abs(casc.mLambda() - 1.115683) > cfgcasc_mlambdawindow)
417497
continue;
418498
// track quality check
419499
if (bachelor.tpcNClsFound() < cfgtpcclusters)
@@ -450,6 +530,8 @@ struct FlowGFWOmegaXi {
450530
{
451531
FillProfilepT(corrconfigs.at(2), HIST("Xic22dpt"), i, 3312, cent);
452532
FillProfilepT(corrconfigs.at(3), HIST("Omegac22dpt"), i, 3334, cent);
533+
FillProfilepT(corrconfigs.at(4), HIST("K0sc22dpt"), i, 310, cent);
534+
FillProfilepT(corrconfigs.at(5), HIST("Lambdac22dpt"), i, 3122, cent);
453535
}
454536
}
455537
};

0 commit comments

Comments
 (0)