From bcc70d4e4eba783dd6a46e5d69c87d9bf1c28919 Mon Sep 17 00:00:00 2001 From: fchinu Date: Sat, 26 Sep 2026 15:22:45 +0200 Subject: [PATCH] Add possibility to run more loops on MC particles in dataCreatorCharmHadPiReduced --- .../dataCreatorCharmHadPiReduced.cxx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/PWGHF/D2H/TableProducer/dataCreatorCharmHadPiReduced.cxx b/PWGHF/D2H/TableProducer/dataCreatorCharmHadPiReduced.cxx index 07f0dae9c3d..6d09d96b998 100644 --- a/PWGHF/D2H/TableProducer/dataCreatorCharmHadPiReduced.cxx +++ b/PWGHF/D2H/TableProducer/dataCreatorCharmHadPiReduced.cxx @@ -177,6 +177,7 @@ struct HfDataCreatorCharmHadPiReduced { Configurable invMassWindowCharmHadPi{"invMassWindowCharmHadPi", 0.3, "invariant-mass window for CharmHad-Pi pair preselections (GeV/c2)"}; // MC extra Configurable checkDecayTypeMc{"checkDecayTypeMc", false, "flag to enable MC checks on decay type"}; + Configurable nMcLoops{"nMcLoops", 0, "number of extra loops over generated particles per MC collision"}; } configs; // vertexing struct : o2::framework::ConfigurableGroup { @@ -394,6 +395,9 @@ struct HfDataCreatorCharmHadPiReduced { hCandidatesLc = registry.add("hCandidatesLc", "Lc candidate counter", {HistType::kTH1D, {axisCands}}); hCandidatesD0FromDstar = registry.add("hCandidatesD0FromDstar", "D0 from D* candidate counter", {HistType::kTH1D, {axisCands}}); hCandidatesBHadron = registry.add("hCandidatesBHadron", "B hadron candidate counter", {HistType::kTH1D, {axisCands}}); + if (configs.nMcLoops > 0) { + registry.add("hNMatchedMcLoops", "matches found in extra MC loops;matches per MC collision;entries", {HistType::kTH1D, {{100, -0.5, 99.5}}}); + } setLabelHistoCands(hCandidatesD0); setLabelHistoCands(hCandidatesDPlus); @@ -1793,6 +1797,20 @@ struct HfDataCreatorCharmHadPiReduced { ptProngs[1], yProngs[1], etaProngs[1], hfRejMap, centFT0C, centFT0M); } } // gen + + // extra loops over generated particles (increases CPU time) + if (configs.nMcLoops > 0) { + int nMatched{0}; + for (int iLoop = 0; iLoop < configs.nMcLoops; ++iLoop) { + for (const auto& particle : mcParticlesPerMcColl) { + nMatched += RecoDecay::isMatchedMCGen(particlesMc, particle, Pdg::kB0, std::array{-static_cast(Pdg::kDPlus), +kPiPlus}, true); + nMatched += RecoDecay::isMatchedMCGen(particlesMc, particle, Pdg::kBPlus, std::array{-static_cast(Pdg::kDPlus), +kPiPlus}, true); + nMatched += RecoDecay::isMatchedMCGen(particlesMc, particle, Pdg::kBS, std::array{-static_cast(Pdg::kDPlus), +kPiPlus}, true); + nMatched += RecoDecay::isMatchedMCGen(particlesMc, particle, Pdg::kLambdaB0, std::array{-static_cast(Pdg::kDPlus), +kPiPlus}, true); + } + } + registry.fill(HIST("hNMatchedMcLoops"), nMatched); + } } ////////////////////////////////////////////////////////////////////////////////////////////////////