Skip to content

Commit cd0470e

Browse files
authored
[PWGLF] additional event selection to produce double phi table and add angular distance between phi pairs in analysis task (#9134)
1 parent b8923b6 commit cd0470e

File tree

2 files changed

+39
-37
lines changed

2 files changed

+39
-37
lines changed

PWGLF/TableProducer/Resonances/doublephitable.cxx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ struct doublephitable {
5858

5959
// events
6060
Configurable<float> cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"};
61+
Configurable<float> cfgCutCentralityMax{"cfgCutCentralityMax", 0.0f, "Accepted maximum Centrality"};
62+
Configurable<float> cfgCutCentralityMin{"cfgCutCentralityMin", 100.0f, "Accepted minimum Centrality"};
6163
// track
6264
Configurable<bool> useGlobalTrack{"useGlobalTrack", true, "use Global track"};
6365
Configurable<float> cfgCutTOFBeta{"cfgCutTOFBeta", 0.0, "cut TOF beta"};
@@ -74,13 +76,16 @@ struct doublephitable {
7476
Configurable<double> cfgDeepAngle{"cfgDeepAngle", 0.04, "Deep Angle cut value"};
7577
ConfigurableAxis configThnAxisInvMass{"configThnAxisInvMass", {120, 0.98, 1.1}, "#it{M} (GeV/#it{c}^{2})"};
7678
ConfigurableAxis configThnAxisPt{"configThnAxisPt", {100, 0.0, 10.}, "#it{p}_{T} (GeV/#it{c})"};
79+
Configurable<float> minPhiMass{"minPhiMass", 1.01, "Minimum phi mass"};
80+
Configurable<float> maxPhiMass{"maxPhiMass", 1.03, "Maximum phi mass"};
7781

7882
Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
83+
Filter centralityFilter = (nabs(aod::cent::centFT0C) < cfgCutCentralityMax && nabs(aod::cent::centFT0C) > cfgCutCentralityMin);
7984
Filter acceptanceFilter = (nabs(aod::track::eta) < cfgCutEta && nabs(aod::track::pt) > cfgCutPT);
8085
Filter DCAcutFilter = (nabs(aod::track::dcaXY) < cfgCutDCAxy) && (nabs(aod::track::dcaZ) < cfgCutDCAz);
8186
Filter PIDcutFilter = nabs(aod::pidtpc::tpcNSigmaKa) < nsigmaCutTPC;
8287

83-
using EventCandidates = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults>>;
88+
using EventCandidates = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs>>;
8489
using TrackCandidates = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection, aod::pidTOFbeta, aod::pidTPCFullKa, aod::pidTOFFullKa>>;
8590

8691
SliceCache cache;
@@ -202,7 +207,7 @@ struct doublephitable {
202207
KaonPlus = ROOT::Math::PxPyPzMVector(track1.px(), track1.py(), track1.pz(), massKa);
203208
KaonMinus = ROOT::Math::PxPyPzMVector(track2.px(), track2.py(), track2.pz(), massKa);
204209
PhiMesonMother = KaonPlus + KaonMinus;
205-
if (PhiMesonMother.M() > 1.0 && PhiMesonMother.M() < 1.04) {
210+
if (PhiMesonMother.M() > minPhiMass && PhiMesonMother.M() < maxPhiMass) {
206211
numberPhi = numberPhi + 1;
207212
ROOT::Math::PtEtaPhiMVector temp1(track1.pt(), track1.eta(), track1.phi(), massKa);
208213
ROOT::Math::PtEtaPhiMVector temp2(track2.pt(), track2.eta(), track2.phi(), massKa);
@@ -241,11 +246,11 @@ struct doublephitable {
241246
}
242247
}
243248
} // select collision
244-
if (numberPhi >= 2) {
249+
if (numberPhi > 1 && Npostrack > 1 && Nnegtrack > 1) {
245250
keepEventDoublePhi = true;
246251
}
247252
qaRegistry.fill(HIST("hEventstat"), 0.5);
248-
if (keepEventDoublePhi && numberPhi >= 2 && (phiresonance.size() == phiresonanced1.size()) && (phiresonance.size() == phiresonanced2.size())) {
253+
if (keepEventDoublePhi && numberPhi > 1 && Npostrack > 1 && Nnegtrack > 1 && (phiresonance.size() == phiresonanced1.size()) && (phiresonance.size() == phiresonanced2.size())) {
249254
qaRegistry.fill(HIST("hEventstat"), 1.5);
250255
/////////// Fill collision table///////////////
251256
redPhiEvents(bc.globalBC(), currentRunNumber, bc.timestamp(), collision.posZ(), collision.numContrib(), Npostrack, Nnegtrack);

PWGLF/Tasks/Resonances/doublephimeson.cxx

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ struct doublephimeson {
5656
ConfigurableAxis configThnAxisInvMass{"configThnAxisInvMass", {1500, 2.0, 3.5}, "#it{M} (GeV/#it{c}^{2})"};
5757
ConfigurableAxis configThnAxisDaugherPt{"configThnAxisDaugherPt", {25, 0.0, 50.}, "#it{p}_{T} (GeV/#it{c})"};
5858
ConfigurableAxis configThnAxisPt{"configThnAxisPt", {40, 0.0, 20.}, "#it{p}_{T} (GeV/#it{c})"};
59-
ConfigurableAxis configThnAxisKstar{"configThnAxisKstar", {50, 0.0, 0.5}, "#it{k}^{*} (GeV/#it{c})"};
59+
// ConfigurableAxis configThnAxisKstar{"configThnAxisKstar", {50, 0.0, 0.5}, "#it{k}^{*} (GeV/#it{c})"};
60+
ConfigurableAxis configThnAxisDeltaR{"configThnAxisDeltaR", {200, 0.0, 2.0}, "#it{k}^{*} (GeV/#it{c})"};
61+
ConfigurableAxis configThnAxisPhiMult{"configThnAxisPhiMult", {10, 0.5, 10.5}, "#Phi Multiplicity"};
6062

6163
// Initialize the ananlysis task
6264
void init(o2::framework::InitContext&)
@@ -70,13 +72,13 @@ struct doublephimeson {
7072
const AxisSpec thnAxisInvMass{configThnAxisInvMass, "#it{M} (GeV/#it{c}^{2})"};
7173
const AxisSpec thnAxisDaughterPt{configThnAxisDaugherPt, "#it{p}_{T} (GeV/#it{c})"};
7274
const AxisSpec thnAxisPt{configThnAxisPt, "#it{p}_{T} (GeV/#it{c})"};
73-
const AxisSpec thnAxisKstar{configThnAxisKstar, "#it{k}^{*} (GeV/#it{c})"};
75+
// const AxisSpec thnAxisKstar{configThnAxisKstar, "#it{k}^{*} (GeV/#it{c})"};
76+
const AxisSpec thnAxisDeltaR{configThnAxisDeltaR, "#Delta R)"};
77+
const AxisSpec thnAxisPhiMult{configThnAxisPhiMult, "#Phi Multiplicity)"};
7478

75-
histos.add("SEMassUnlike", "SEMassUnlike", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisDaughterPt, thnAxisDaughterPt, thnAxisKstar});
76-
histos.add("SEMassRot", "SEMassRot", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisDaughterPt, thnAxisDaughterPt, thnAxisKstar});
77-
78-
histos.add("MEMassUnlike", "MEMassUnlike", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisDaughterPt, thnAxisDaughterPt, thnAxisKstar});
79-
histos.add("MEMassRot", "MEMassRot", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisDaughterPt, thnAxisDaughterPt, thnAxisKstar});
79+
histos.add("SEMassUnlike", "SEMassUnlike", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisDaughterPt, thnAxisDaughterPt, thnAxisDeltaR, thnAxisPhiMult});
80+
histos.add("SEMassRot", "SEMassRot", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisDaughterPt, thnAxisDaughterPt, thnAxisDeltaR, thnAxisPhiMult});
81+
histos.add("MEMassUnlike", "MEMassUnlike", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisDaughterPt, thnAxisDaughterPt, thnAxisDeltaR, thnAxisPhiMult});
8082
}
8183

8284
// get kstar
@@ -189,6 +191,7 @@ struct doublephimeson {
189191
if (additionalEvsel && (collision.numPos() < 2 || collision.numNeg() < 2)) {
190192
return;
191193
}
194+
auto phimult = phitracks.size();
192195
for (auto phitrackd1 : phitracks) {
193196
if (phitrackd1.phiMass() < minPhiMass || phitrackd1.phiMass() > maxPhiMass) {
194197
continue;
@@ -234,10 +237,11 @@ struct doublephimeson {
234237
}
235238
Phid2.SetXYZM(phitrackd2.phiPx(), phitrackd2.phiPy(), phitrackd2.phiPz(), phitrackd2.phiMass());
236239
exotic = Phid1 + Phid2;
237-
auto kstar = getkstar(Phid1, Phid2);
238-
histos.fill(HIST("SEMassUnlike"), exotic.M(), exotic.Pt(), Phid1.Pt(), Phid2.Pt(), kstar);
240+
// auto kstar = getkstar(Phid1, Phid2);
241+
auto deltaR = TMath::Sqrt(TMath::Power(Phid1.Phi() - Phid2.Phi(), 2.0) + TMath::Power(Phid1.Eta() - Phid2.Eta(), 2.0));
242+
histos.fill(HIST("SEMassUnlike"), exotic.M(), exotic.Pt(), Phid1.Pt(), Phid2.Pt(), deltaR, phimult);
239243
if (fillRotation) {
240-
for (int nrotbkg = 0; nrotbkg < 9; nrotbkg++) {
244+
for (int nrotbkg = 0; nrotbkg < 5; nrotbkg++) {
241245
auto anglestart = 5.0 * TMath::Pi() / 6.0;
242246
auto angleend = 7.0 * TMath::Pi() / 6.0;
243247
auto anglestep = (angleend - anglestart) / (1.0 * (9.0 - 1.0));
@@ -246,8 +250,9 @@ struct doublephimeson {
246250
auto rotd1py = Phid1.Px() * std::sin(rotangle) + Phid1.Py() * std::cos(rotangle);
247251
Phid1Rot.SetXYZM(rotd1px, rotd1py, Phid1.Pz(), Phid1.M());
248252
exoticRot = Phid1Rot + Phid2;
249-
auto kstar_rot = getkstar(Phid1Rot, Phid2);
250-
histos.fill(HIST("SEMassRot"), exoticRot.M(), exoticRot.Pt(), Phid1Rot.Pt(), Phid2.Pt(), kstar_rot);
253+
// auto kstar_rot = getkstar(Phid1Rot, Phid2);
254+
auto deltaR_rot = TMath::Sqrt(TMath::Power(Phid1Rot.Phi() - Phid2.Phi(), 2.0) + TMath::Power(Phid1Rot.Eta() - Phid2.Eta(), 2.0));
255+
histos.fill(HIST("SEMassRot"), exoticRot.M(), exoticRot.Pt(), Phid1Rot.Pt(), Phid2.Pt(), deltaR_rot, phimult);
251256
}
252257
}
253258
}
@@ -266,26 +271,31 @@ struct doublephimeson {
266271
if (collision1.index() == collision2.index()) {
267272
continue;
268273
}
274+
if (additionalEvsel && (collision1.numPos() < 2 || collision1.numNeg() < 2)) {
275+
continue;
276+
}
277+
if (additionalEvsel && (collision2.numPos() < 2 || collision2.numNeg() < 2)) {
278+
continue;
279+
}
280+
auto phimult = tracks1.size();
269281
for (auto& [phitrackd1, phitrackd2] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(tracks1, tracks2))) {
270282
if (phitrackd1.phiMass() < minPhiMass || phitrackd1.phiMass() > maxPhiMass) {
271283
continue;
272284
}
273-
285+
if (phitrackd2.phiMass() < minPhiMass || phitrackd2.phiMass() > maxPhiMass) {
286+
continue;
287+
}
274288
auto kaonplusd1pt = TMath::Sqrt(phitrackd1.phid1Px() * phitrackd1.phid1Px() + phitrackd1.phid1Py() * phitrackd1.phid1Py());
275289
auto kaonminusd1pt = TMath::Sqrt(phitrackd1.phid2Px() * phitrackd1.phid2Px() + phitrackd1.phid2Py() * phitrackd1.phid2Py());
276290
auto kaonplusd2pt = TMath::Sqrt(phitrackd2.phid1Px() * phitrackd2.phid1Px() + phitrackd2.phid1Py() * phitrackd2.phid1Py());
277291
auto kaonminusd2pt = TMath::Sqrt(phitrackd2.phid2Px() * phitrackd2.phid2Px() + phitrackd2.phid2Py() * phitrackd2.phid2Py());
278-
279292
if (!selectionPID(phitrackd1.phid1TPC(), phitrackd1.phid1TOF(), phitrackd1.phid1TOFHit(), strategyPID, kaonplusd1pt)) {
280293
continue;
281294
}
282295
if (!selectionPID(phitrackd1.phid2TPC(), phitrackd1.phid2TOF(), phitrackd1.phid2TOFHit(), strategyPID, kaonminusd1pt)) {
283296
continue;
284297
}
285298
Phid1.SetXYZM(phitrackd1.phiPx(), phitrackd1.phiPy(), phitrackd1.phiPz(), phitrackd1.phiMass());
286-
if (phitrackd2.phiMass() < minPhiMass || phitrackd2.phiMass() > maxPhiMass) {
287-
continue;
288-
}
289299
if (!selectionPID(phitrackd2.phid1TPC(), phitrackd2.phid1TOF(), phitrackd2.phid1TOFHit(), strategyPID, kaonplusd2pt)) {
290300
continue;
291301
}
@@ -294,22 +304,9 @@ struct doublephimeson {
294304
}
295305
Phid2.SetXYZM(phitrackd2.phiPx(), phitrackd2.phiPy(), phitrackd2.phiPz(), phitrackd2.phiMass());
296306
exotic = Phid1 + Phid2;
297-
auto kstar = getkstar(Phid1, Phid2);
298-
histos.fill(HIST("MEMassUnlike"), exotic.M(), exotic.Pt(), Phid1.Pt(), Phid2.Pt(), kstar);
299-
if (fillRotation) {
300-
for (int nrotbkg = 0; nrotbkg < 9; nrotbkg++) {
301-
auto anglestart = 5.0 * TMath::Pi() / 6.0;
302-
auto angleend = 7.0 * TMath::Pi() / 6.0;
303-
auto anglestep = (angleend - anglestart) / (1.0 * (9.0 - 1.0));
304-
auto rotangle = anglestart + nrotbkg * anglestep;
305-
auto rotd1px = Phid1.Px() * std::cos(rotangle) - Phid1.Py() * std::sin(rotangle);
306-
auto rotd1py = Phid1.Px() * std::sin(rotangle) + Phid1.Py() * std::cos(rotangle);
307-
Phid1Rot.SetXYZM(rotd1px, rotd1py, Phid1.Pz(), Phid1.M());
308-
exoticRot = Phid1Rot + Phid2;
309-
auto kstar_rot = getkstar(Phid1Rot, Phid2);
310-
histos.fill(HIST("MEMassRot"), exoticRot.M(), exoticRot.Pt(), Phid1Rot.Pt(), Phid2.Pt(), kstar_rot);
311-
}
312-
}
307+
// auto kstar = getkstar(Phid1, Phid2);
308+
auto deltaR = TMath::Sqrt(TMath::Power(Phid1.Phi() - Phid2.Phi(), 2.0) + TMath::Power(Phid1.Eta() - Phid2.Eta(), 2.0));
309+
histos.fill(HIST("MEMassUnlike"), exotic.M(), exotic.Pt(), Phid1.Pt(), Phid2.Pt(), deltaR, phimult);
313310
}
314311
}
315312
}

0 commit comments

Comments
 (0)