diff --git a/PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx b/PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx index fd01a746887..af32e057959 100644 --- a/PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx +++ b/PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx @@ -135,6 +135,8 @@ struct FemtoUniverseProducerTask { Configurable confStoreMCmothers{"confStoreMCmothers", false, "MC truth: Fill with not only primary particles and store mothers' PDG in tempFitVar."}; Configurable confFillCollExt{"confFillCollExt", false, "Option to fill collision extended table"}; + Configurable confCollMCTruthOnlyReco{"confCollMCTruthOnlyReco", false, "Fill only MC truth collisions that were reconstructed and selected"}; + /// Event filtering (used for v0-cascade analysis) Configurable zorroMask{"zorroMask", "", "zorro trigger class to select on (empty: none)"}; @@ -2601,6 +2603,7 @@ struct FemtoUniverseProducerTask { { // recos std::set recoMcIds; + std::set mcCollisions; for (const auto& col : collisions) { auto groupedTracks = tracks.sliceBy(perCollisionTracks, col.globalIndex()); auto bc = col.bc_as(); @@ -2616,6 +2619,7 @@ struct FemtoUniverseProducerTask { } if (colcheck) { + mcCollisions.insert(col.mcCollisionId()); fillCollisionsCentRun3ColExtra(col, ir); fillTracks(groupedTracks); } @@ -2627,6 +2631,9 @@ struct FemtoUniverseProducerTask { // truth for (const auto& mccol : mccols) { + if (confCollMCTruthOnlyReco && !mcCollisions.contains(mccol.globalIndex())) { + continue; + } auto groupedCollisions = collisions.sliceBy(recoCollsPerMCCollCentPbPb, mccol.globalIndex()); for (const auto& col : groupedCollisions) { const auto colcheck = fillMCTruthCollisionsCentRun3(col); // fills the reco collisions for mc collision @@ -2871,12 +2878,14 @@ struct FemtoUniverseProducerTask { // MCReco std::set recoMcIds; + std::set mcCollisions; for (const auto& col : collisions) { // loop over collisions auto groupedTracks = tracks.sliceBy(perCollisionTracks, col.globalIndex()); // slicing for tracks auto groupedV0Parts = fullV0s.sliceBy(perCollisionV0s, col.globalIndex()); // slicing for V0 getMagneticFieldTesla(col.bc_as()); const auto colcheck = fillCollisionsCentRun3(col); if (colcheck) { + mcCollisions.insert(col.mcCollisionId()); fillTracks(groupedTracks); fillV0(col, groupedV0Parts, groupedTracks); } @@ -2888,6 +2897,9 @@ struct FemtoUniverseProducerTask { // MCTruth for (const auto& mccol : mccols) { + if (confCollMCTruthOnlyReco && !mcCollisions.contains(mccol.globalIndex())) { + continue; + } auto groupedCollisions = collisions.sliceBy(recoCollsPerMCCollCentPbPb, mccol.globalIndex()); // slicing for MC collisions auto groupedMCParticles = mcParticles.sliceBy(perMCCollision, mccol.globalIndex()); // slicing for MC particles for (const auto& col : groupedCollisions) {