Skip to content

Commit a169120

Browse files
authored
[PWGCF] Add process function to extract reflection distributions from MC (#14657)
1 parent 9f28e81 commit a169120

File tree

1 file changed

+34
-10
lines changed

1 file changed

+34
-10
lines changed

PWGCF/Tasks/correlations.cxx

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,12 @@ struct CorrelationTask {
189189
registry.add("invMassTwoPartDEta", "2D 2-prong invariant mass (GeV/c^2)", {HistType::kTHnSparseF, {axisSpecMass, axisSpecMass, axisPtTrigger, axisPtAssoc, axisDeltaEta}});
190190
}
191191
}
192+
if (doprocessMCReflection2ProngML) {
193+
const AxisSpec& a = AxisSpec(axisInvMass);
194+
AxisSpec axisSpecMass = {1000, a.binEdges[0], a.binEdges[a.getNbins()]};
195+
registry.add("invMassSignal", "2-prong invariant mass (GeV/c^2)", {HistType::kTH3F, {axisSpecMass, axisPtTrigger, axisMultiplicity}});
196+
registry.add("invMassReflected", "2-prong invariant mass (GeV/c^2)", {HistType::kTH3F, {axisSpecMass, axisPtTrigger, axisMultiplicity}});
197+
}
192198
if (doprocessSameDerivedMultSet) {
193199
if (cfgMultCorrelationsMask == 0)
194200
LOGF(fatal, "cfgMultCorrelationsMask can not be 0 when MultSet process functions are in use.");
@@ -281,7 +287,7 @@ struct CorrelationTask {
281287

282288
if (!cfgEfficiencyAssociated.value.empty())
283289
efficiencyAssociatedCache.reserve(512);
284-
if (doprocessMCEfficiency2Prong || doprocessMCEfficiency2ProngML) {
290+
if (doprocessMCEfficiency2Prong || doprocessMCEfficiency2ProngML || doprocessMCReflection2ProngML) {
285291
p2indexCache.reserve(16);
286292
if (cfgMcTriggerPDGs->empty())
287293
LOGF(fatal, "At least one PDG code in {} is to be selected to process 2-prong efficiency.", cfgMcTriggerPDGs.name);
@@ -1158,7 +1164,7 @@ struct CorrelationTask {
11581164
}
11591165
PROCESS_SWITCH(CorrelationTask, processMCEfficiency, "MC: Extract efficiencies", false);
11601166

1161-
template <class p2type>
1167+
template <bool reflectionSpec, class p2type>
11621168
void processMCEfficiency2ProngT(soa::Filtered<aod::CFMcCollisions>::iterator const& mcCollision, soa::Join<aod::CFMcParticles, aod::CF2ProngMcParts> const& mcParticles, soa::SmallGroups<aod::CFCollisionsWithLabel> const& collisions, aod::CFTracksWithLabel const&, p2type const& p2tracks, Preslice<p2type>& perCollision2Prong)
11631169
{
11641170
auto multiplicity = mcCollision.multiplicity();
@@ -1178,22 +1184,26 @@ struct CorrelationTask {
11781184
continue; // wrong decay channel
11791185
if (mcParticle.cfParticleDaugh0Id() < 0 && mcParticle.cfParticleDaugh1Id() < 0)
11801186
continue; // daughters not found
1181-
same->getTrackHistEfficiency()->Fill(CorrelationContainer::MC, mcParticle.eta(), mcParticle.pt(), 4, multiplicity, mcCollision.posZ());
1187+
if constexpr (!reflectionSpec)
1188+
same->getTrackHistEfficiency()->Fill(CorrelationContainer::MC, mcParticle.eta(), mcParticle.pt(), 4, multiplicity, mcCollision.posZ());
11821189
p2indexCache.push_back(mcParticle.globalIndex());
11831190
}
11841191
}
11851192
for (const auto& collision : collisions) {
11861193
auto grouped2ProngTracks = p2tracks.sliceBy(perCollision2Prong, collision.globalIndex());
11871194

11881195
for (const auto& p2track : grouped2ProngTracks) {
1189-
if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast<uint32_t>(p2track.decay()))) == 0u)
1190-
continue;
1196+
if constexpr (!reflectionSpec) {
1197+
if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast<uint32_t>(p2track.decay()))) == 0u)
1198+
continue;
1199+
}
11911200
// Check if the mc particles of the prongs are found.
11921201
if constexpr (std::experimental::is_detected<HasMlProbD0, typename p2type::iterator>::value) {
11931202
if (!passMLScore(p2track))
11941203
continue;
11951204
}
1196-
same->getTrackHistEfficiency()->Fill(CorrelationContainer::RecoAll, p2track.eta(), p2track.pt(), 4, multiplicity, mcCollision.posZ());
1205+
if constexpr (!reflectionSpec)
1206+
same->getTrackHistEfficiency()->Fill(CorrelationContainer::RecoAll, p2track.eta(), p2track.pt(), 4, multiplicity, mcCollision.posZ());
11971207
auto fillMC2p = [&](const aod::CFTracksWithLabel::iterator& p) -> bool {
11981208
if (!p.has_cfMCParticle())
11991209
return false;
@@ -1204,7 +1214,14 @@ struct CorrelationTask {
12041214
if (m == p2indexCache.end())
12051215
return false;
12061216
const auto& mcParticle = mcParticles.iteratorAt(*m - mcParticles.begin().globalIndex());
1207-
same->getTrackHistEfficiency()->Fill(CorrelationContainer::RecoPrimaries, mcParticle.eta(), mcParticle.pt(), 4, multiplicity, mcCollision.posZ());
1217+
if constexpr (!reflectionSpec) {
1218+
same->getTrackHistEfficiency()->Fill(CorrelationContainer::RecoPrimaries, mcParticle.eta(), mcParticle.pt(), 4, multiplicity, mcCollision.posZ());
1219+
} else {
1220+
if (mcParticle.mcDecay() == p2track.decay())
1221+
registry.fill(HIST("invMassSignal"), p2track.invMass(), p2track.pt(), multiplicity);
1222+
else // one particle may be filled into both histograms through duplicates
1223+
registry.fill(HIST("invMassReflected"), p2track.invMass(), p2track.pt(), multiplicity);
1224+
}
12081225
return true;
12091226
};
12101227
if (p2track.has_cfTrackProng0()) {
@@ -1218,25 +1235,32 @@ struct CorrelationTask {
12181235
}
12191236

12201237
// fake track
1221-
same->getTrackHistEfficiency()->Fill(CorrelationContainer::Fake, p2track.eta(), p2track.pt(), 4, multiplicity, mcCollision.posZ());
1238+
if constexpr (!reflectionSpec)
1239+
same->getTrackHistEfficiency()->Fill(CorrelationContainer::Fake, p2track.eta(), p2track.pt(), 4, multiplicity, mcCollision.posZ());
12221240
}
12231241
}
12241242
}
12251243

12261244
Preslice<aod::CF2ProngTracks> perCollision2Prong = aod::cftrack::cfCollisionId;
12271245
void processMCEfficiency2Prong(soa::Filtered<aod::CFMcCollisions>::iterator const& mcCollision, soa::Join<aod::CFMcParticles, aod::CF2ProngMcParts> const& mcParticles, soa::SmallGroups<aod::CFCollisionsWithLabel> const& collisions, aod::CFTracksWithLabel const& tracks, aod::CF2ProngTracks const& p2tracks)
12281246
{
1229-
processMCEfficiency2ProngT(mcCollision, mcParticles, collisions, tracks, p2tracks, perCollision2Prong);
1247+
processMCEfficiency2ProngT<false>(mcCollision, mcParticles, collisions, tracks, p2tracks, perCollision2Prong);
12301248
}
12311249
PROCESS_SWITCH(CorrelationTask, processMCEfficiency2Prong, "MC: Extract efficiencies for 2-prong particles", false);
12321250

12331251
Preslice<soa::Join<aod::CF2ProngTracks, aod::CF2ProngTrackmls>> perCollision2ProngML = aod::cftrack::cfCollisionId;
12341252
void processMCEfficiency2ProngML(soa::Filtered<aod::CFMcCollisions>::iterator const& mcCollision, soa::Join<aod::CFMcParticles, aod::CF2ProngMcParts> const& mcParticles, soa::SmallGroups<aod::CFCollisionsWithLabel> const& collisions, aod::CFTracksWithLabel const& tracks, soa::Join<aod::CF2ProngTracks, aod::CF2ProngTrackmls> const& p2tracks)
12351253
{
1236-
processMCEfficiency2ProngT(mcCollision, mcParticles, collisions, tracks, p2tracks, perCollision2ProngML);
1254+
processMCEfficiency2ProngT<false>(mcCollision, mcParticles, collisions, tracks, p2tracks, perCollision2ProngML);
12371255
}
12381256
PROCESS_SWITCH(CorrelationTask, processMCEfficiency2ProngML, "MC: Extract efficiencies for 2-prong particles with ML scores", false);
12391257

1258+
void processMCReflection2ProngML(soa::Filtered<aod::CFMcCollisions>::iterator const& mcCollision, soa::Join<aod::CFMcParticles, aod::CF2ProngMcParts> const& mcParticles, soa::SmallGroups<aod::CFCollisionsWithLabel> const& collisions, aod::CFTracksWithLabel const& tracks, soa::Join<aod::CF2ProngTracks, aod::CF2ProngTrackmls> const& p2tracks)
1259+
{
1260+
processMCEfficiency2ProngT<true>(mcCollision, mcParticles, collisions, tracks, p2tracks, perCollision2ProngML);
1261+
}
1262+
PROCESS_SWITCH(CorrelationTask, processMCReflection2ProngML, "MC: Extract reflection distributions for 2-prong particles with ML scores", false);
1263+
12401264
template <class Particles1, class Particles2>
12411265
void processMCSameDerivedT(soa::Filtered<aod::CFMcCollisions>::iterator const& mcCollision, Particles1 const& mcParticles1, Particles2 const& mcParticles2, soa::SmallGroups<aod::CFCollisionsWithLabel> const& collisions)
12421266
{

0 commit comments

Comments
 (0)