Skip to content

Commit e200ca6

Browse files
authored
[PWGCF] adding switch for different correlations (#10019)
1 parent d7f2515 commit e200ca6

File tree

1 file changed

+46
-20
lines changed

1 file changed

+46
-20
lines changed

PWGCF/Tasks/correlations.cxx

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ struct CorrelationTask {
7575
O2_DEFINE_CONFIGURABLE(cfgTriggerCharge, int, 0, "Select on charge of trigger particle: 0 = all; 1 = positive; -1 = negative");
7676
O2_DEFINE_CONFIGURABLE(cfgAssociatedCharge, int, 0, "Select on charge of associated particle: 0 = all; 1 = positive; -1 = negative");
7777
O2_DEFINE_CONFIGURABLE(cfgPairCharge, int, 0, "Select on charge of particle pair: 0 = all; 1 = like sign; -1 = unlike sign");
78-
O2_DEFINE_CONFIGURABLE(cfgCorrelateTheSame, int, 0, "Correlate the d0 with d0 or d0bar with d0bar, 0 = no, 1 = yes");
78+
O2_DEFINE_CONFIGURABLE(cfgCorrelationMethod, int, 0, "Correlation method, 0 = all, 1 = dd, 2 = ddbar");
7979

8080
O2_DEFINE_CONFIGURABLE(cfgTwoTrackCut, float, -1, "Two track cut: -1 = off; >0 otherwise distance value (suggested: 0.02)");
8181
O2_DEFINE_CONFIGURABLE(cfgTwoTrackCutMinRadius, float, 0.8f, "Two track cut: radius in m from which two track cuts are applied");
@@ -157,11 +157,11 @@ struct CorrelationTask {
157157
{
158158
registry.add("yields", "multiplicity/centrality vs pT vs eta", {HistType::kTH3F, {{100, 0, 100, "/multiplicity/centrality"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}});
159159
registry.add("etaphi", "multiplicity/centrality vs eta vs phi", {HistType::kTH3F, {{100, 0, 100, "multiplicity/centrality"}, {100, -2, 2, "#eta"}, {200, 0, o2::constants::math::TwoPI, "#varphi"}}});
160-
if (doprocessSame2ProngDerived || doprocessMixed2ProngDerived || doprocessSame2Prong2Prong) {
160+
if (doprocessSame2ProngDerived || doprocessSame2Prong2Prong || doprocessSame2Prong2ProngML) {
161161
registry.add("yieldsTrigger", "multiplicity/centrality vs pT vs eta (triggers)", {HistType::kTH3F, {{100, 0, 100, "/multiplicity/centrality"}, {40, 0, 20, "p_{T}"}, {100, -2, 2, "#eta"}}});
162162
registry.add("etaphiTrigger", "multiplicity/centrality vs eta vs phi (triggers)", {HistType::kTH3F, {{100, 0, 100, "multiplicity/centrality"}, {100, -2, 2, "#eta"}, {200, 0, o2::constants::math::TwoPI, "#varphi"}}});
163163
registry.add("invMass", "2-prong invariant mass (GeV/c^2)", {HistType::kTH3F, {axisInvMassHistogram, axisPtTrigger, axisMultiplicity}});
164-
if (doprocessSame2Prong2Prong) {
164+
if (doprocessSame2Prong2Prong || doprocessSame2Prong2ProngML) {
165165
registry.add("invMassTwoPart", "2D 2-prong invariant mass (GeV/c^2)", {HistType::kTHnSparseF, {axisInvMassHistogram, axisInvMassHistogram, axisPtTrigger, axisPtAssoc, axisMultiplicity}});
166166
}
167167
}
@@ -204,9 +204,9 @@ struct CorrelationTask {
204204
userAxis.emplace_back(axisInvMass, "m (GeV/c^2)");
205205
userMixingAxis.emplace_back(axisInvMass, "m (GeV/c^2)");
206206
}
207-
if (doprocessSame2Prong2Prong)
207+
if (doprocessSame2Prong2Prong || doprocessSame2Prong2ProngML)
208208
userAxis.emplace_back(axisInvMass, "m (GeV/c^2)");
209-
if (doprocessMixed2Prong2Prong)
209+
if (doprocessMixed2Prong2Prong || doprocessMixed2Prong2ProngML)
210210
userMixingAxis.emplace_back(axisInvMass, "m (GeV/c^2)");
211211

212212
same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, userAxis));
@@ -263,18 +263,45 @@ struct CorrelationTask {
263263
void fillQA(const TCollision& collision, float multiplicity, const TTracks1& tracks1, const TTracks2& tracks2)
264264
{
265265
for (const auto& track1 : tracks1) {
266-
if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks1::iterator>::value) {
267-
if constexpr (std::experimental::is_detected<HasDecay, typename TTracks1::iterator>::value) {
268-
if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast<uint32_t>(track1.decay()))) == 0u)
269-
continue;
270-
}
266+
if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks1::iterator>::value && std::experimental::is_detected<HasDecay, typename TTracks1::iterator>::value) {
267+
if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast<uint32_t>(track1.decay()))) == 0u)
268+
continue;
271269
registry.fill(HIST("invMass"), track1.invMass(), track1.pt(), multiplicity);
272270
for (const auto& track2 : tracks2) {
273271
if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks2::iterator>::value && std::experimental::is_detected<HasDecay, typename TTracks2::iterator>::value) {
274-
if (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong) {
272+
if (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong || doprocessSame2Prong2ProngML || doprocessMixed2Prong2ProngML) {
275273
if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast<uint32_t>(track1.decay()))) == 0u)
276274
continue;
277-
if ((track1.decay() != 0) || (track2.decay() != 1)) // D0 in trk1, D0bar in trk2
275+
276+
if constexpr (std::experimental::is_detected<HasProng0Id, typename TTracks1::iterator>::value) {
277+
if constexpr (std::experimental::is_detected<HasProng0Id, typename TTracks2::iterator>::value) {
278+
if (track1.cfTrackProng0Id() == track2.cfTrackProng0Id()) {
279+
continue;
280+
}
281+
}
282+
if constexpr (std::experimental::is_detected<HasProng1Id, typename TTracks2::iterator>::value) {
283+
if (track1.cfTrackProng0Id() == track2.cfTrackProng1Id()) {
284+
continue;
285+
}
286+
}
287+
}
288+
289+
if constexpr (std::experimental::is_detected<HasProng1Id, typename TTracks1::iterator>::value) {
290+
if constexpr (std::experimental::is_detected<HasProng0Id, typename TTracks2::iterator>::value) {
291+
if (track1.cfTrackProng1Id() == track2.cfTrackProng0Id()) {
292+
continue;
293+
}
294+
}
295+
if constexpr (std::experimental::is_detected<HasProng1Id, typename TTracks2::iterator>::value) {
296+
if (track1.cfTrackProng1Id() == track2.cfTrackProng1Id()) {
297+
continue;
298+
}
299+
}
300+
} // no shared prong for two mothers
301+
302+
if (cfgCorrelationMethod == 1 && track1.decay() != track2.decay())
303+
continue;
304+
if (cfgCorrelationMethod == 2 && track1.decay() == track2.decay())
278305
continue;
279306
registry.fill(HIST("invMassTwoPart"), track1.invMass(), track2.invMass(), track1.pt(), track2.pt(), multiplicity);
280307
}
@@ -386,7 +413,7 @@ struct CorrelationTask {
386413
continue;
387414
}
388415
}
389-
}
416+
} // ML selection
390417

391418
if (cfgMassAxis) {
392419
if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks1::iterator>::value)
@@ -430,11 +457,10 @@ struct CorrelationTask {
430457
}
431458

432459
if constexpr (std::experimental::is_detected<HasDecay, typename TTracks1::iterator>::value && std::experimental::is_detected<HasDecay, typename TTracks2::iterator>::value) {
433-
if (cfgCorrelateTheSame == 0 && (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong) && (track1.decay() == track2.decay() || track1.decay() > 1 || track2.decay() > 1)) {
434-
continue; // D0 and anti-D0 selection
435-
} else if (cfgCorrelateTheSame == 1 && (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong) && (track1.decay() != track2.decay() || track1.decay() > 1 || track2.decay() > 1)) {
436-
continue; // the same particle selection
437-
}
460+
if (cfgCorrelationMethod == 1 && track1.decay() != track2.decay())
461+
continue;
462+
if (cfgCorrelationMethod == 2 && track1.decay() == track2.decay())
463+
continue;
438464
}
439465

440466
if constexpr (std::experimental::is_detected<HasProng0Id, typename TTracks1::iterator>::value) {
@@ -511,10 +537,10 @@ struct CorrelationTask {
511537
continue;
512538
}
513539
}
514-
}
540+
} // ML selection
515541

516542
// last param is the weight
517-
if (cfgMassAxis && (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong) && !(doprocessSame2ProngDerived || doprocessMixed2ProngDerived)) {
543+
if (cfgMassAxis && (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong || doprocessSame2Prong2ProngML || doprocessMixed2Prong2ProngML) && !(doprocessSame2ProngDerived || doprocessMixed2ProngDerived)) {
518544
if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks1::iterator>::value && std::experimental::is_detected<HasInvMass, typename TTracks2::iterator>::value)
519545
target->getPairHist()->Fill(step, track1.eta() - track2.eta(), track2.pt(), track1.pt(), multiplicity, deltaPhi, posZ, track2.invMass(), track1.invMass(), associatedWeight);
520546
else

0 commit comments

Comments
 (0)