From 9ea81c0db8f87219e81965a241bcd8c41f1d6bc0 Mon Sep 17 00:00:00 2001 From: Cristian Moscatelli Date: Wed, 25 Feb 2026 11:03:38 +0100 Subject: [PATCH 1/2] Change Gen Event selection --- PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx | 60 ++++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx b/PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx index 6ba0b483c46..95663bd60a5 100644 --- a/PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx +++ b/PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx @@ -55,6 +55,8 @@ #include #include // for PDG codes #include +#include +#include #include #include @@ -334,6 +336,7 @@ struct nucleiSpectra { ConfigurableAxis cfgNTPCClusBins{"cfgNTPCClusBins", {3, 89.5, 159.5}, "N TPC clusters binning"}; Configurable cfgSkimmedProcessing{"cfgSkimmedProcessing", false, "Skimmed dataset processing"}; + Configurable cfgTriggerList{"cfgTriggerList", "fHe", "Trigger List"}; // running variables for track tuner o2::dataformats::DCA mDcaInfoCov; @@ -453,7 +456,7 @@ struct nucleiSpectra { return; } if (cfgSkimmedProcessing) { - zorro.initCCDB(ccdb.service, bc.runNumber(), bc.timestamp(), "fHe"); + zorro.initCCDB(ccdb.service, bc.runNumber(), bc.timestamp(), cfgTriggerList); zorro.populateHistRegistry(spectra, bc.runNumber()); } auto timestamp = bc.timestamp(); @@ -911,21 +914,70 @@ struct nucleiSpectra { PROCESS_SWITCH(nucleiSpectra, processDataFlowAlternative, "Data analysis with flow - alternative framework", false); Preslice tracksPerCollisions = aod::track::collisionId; + Preslice particlesPerMcCollision = aod::mcparticle::mcCollisionId; void processMC(soa::Join const& collisions, aod::McCollisions const& mcCollisions, soa::Join const& tracks, aod::McParticles const& particlesMC, aod::BCsWithTimestamps const&) { nuclei::candidates.clear(); + + bool selectINELgt0 = cfgEventSelections->get(nuclei::evSel::kINELgt0); + std::vector goodCollisions(mcCollisions.size(), false); + + auto *pdgDB = TDatabasePDG::Instance(); // Useful for evaluating the particle charge + for (const auto& c : mcCollisions) { - spectra.fill(HIST("hGenVtxZ"), c.posZ()); + + // Apply the |z| < 10 cm condition + if (std::abs(c.posZ()) > 10.f) + continue; + + const auto& slicedParticles = particlesMC.sliceBy(particlesPerMcCollision, c.globalIndex()); + + bool hasHitFT0A(false); + bool hasHitFT0C(false); + bool acceptEvent = !selectINELgt0; + + for (const auto& p : slicedParticles) { + if (!p.isPhysicalPrimary()) + continue; + + // Apply the TVX trigger condition + if (p.eta() > 3.5f && p.eta() < 4.9f) + hasHitFT0A = true; + else if (p.eta() > -3.3f && p.eta() < -2.1f) + hasHitFT0C = true; + + // Apply the INEL>0 selection (only in case of active configurable) + if (selectINELgt0 && !acceptEvent) { + if (std::abs(p.eta()) < 1.0f) { + auto* pdg = pdgDB->GetParticle(p.pdgCode()); + if (pdg && pdg->Charge()!= 0) + acceptEvent = true; + } + } + + if (hasHitFT0A && hasHitFT0C && acceptEvent) + break; + } + + if (hasHitFT0A && hasHitFT0C && acceptEvent) { + goodCollisions[c.globalIndex()] = true; + spectra.fill(HIST("hGenVtxZ"), c.posZ()); + } } - std::vector goodCollisions(mcCollisions.size(), false); + for (const auto& collision : collisions) { if (!eventSelectionWithHisto(collision)) { continue; } - goodCollisions[collision.mcCollisionId()] = true; + + int mcId = collision.mcCollisionId(); + if (mcId < 0) continue; + if(!goodCollisions[mcId]) continue; + const auto& slicedTracks = tracks.sliceBy(tracksPerCollisions, collision.globalIndex()); fillDataInfo(collision, slicedTracks); } + std::vector isReconstructed(particlesMC.size(), false); for (auto& c : nuclei::candidates) { auto label = tracks.iteratorAt(c.globalIndex); From 45987a48c17a516c45de961a74d1e47398b76607 Mon Sep 17 00:00:00 2001 From: Cristian Moscatelli Date: Wed, 25 Feb 2026 11:37:21 +0100 Subject: [PATCH 2/2] Clang-format correction --- PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx b/PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx index 95663bd60a5..1c1ee16a4fb 100644 --- a/PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx +++ b/PWGLF/TableProducer/Nuspex/nucleiSpectra.cxx @@ -52,11 +52,11 @@ #include "ReconstructionDataFormats/Track.h" #include +#include #include #include // for PDG codes -#include -#include #include +#include #include #include @@ -922,7 +922,7 @@ struct nucleiSpectra { bool selectINELgt0 = cfgEventSelections->get(nuclei::evSel::kINELgt0); std::vector goodCollisions(mcCollisions.size(), false); - auto *pdgDB = TDatabasePDG::Instance(); // Useful for evaluating the particle charge + auto* pdgDB = TDatabasePDG::Instance(); // Useful for evaluating the particle charge for (const auto& c : mcCollisions) { @@ -950,7 +950,7 @@ struct nucleiSpectra { if (selectINELgt0 && !acceptEvent) { if (std::abs(p.eta()) < 1.0f) { auto* pdg = pdgDB->GetParticle(p.pdgCode()); - if (pdg && pdg->Charge()!= 0) + if (pdg && pdg->Charge() != 0) acceptEvent = true; } } @@ -971,8 +971,10 @@ struct nucleiSpectra { } int mcId = collision.mcCollisionId(); - if (mcId < 0) continue; - if(!goodCollisions[mcId]) continue; + if (mcId < 0) + continue; + if (!goodCollisions[mcId]) + continue; const auto& slicedTracks = tracks.sliceBy(tracksPerCollisions, collision.globalIndex()); fillDataInfo(collision, slicedTracks);