From 43c367f70a2d5523511496ba333461f89488c1d4 Mon Sep 17 00:00:00 2001 From: GiorgioAlbertoLucia Date: Thu, 30 Oct 2025 12:00:43 +0100 Subject: [PATCH 1/3] added rapidity check in mc particle processing, moved to a switch-case logic for flag particle setting --- PWGLF/TableProducer/QC/nucleiQC.cxx | 51 ++++++++++++++++------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/PWGLF/TableProducer/QC/nucleiQC.cxx b/PWGLF/TableProducer/QC/nucleiQC.cxx index acb0ef32834..927dfcc7573 100644 --- a/PWGLF/TableProducer/QC/nucleiQC.cxx +++ b/PWGLF/TableProducer/QC/nucleiQC.cxx @@ -9,15 +9,10 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. // -// Nuclei spectra analysis task -// ======================== -// -// Executable + dependencies: -// -// Data (run3): -// o2-analysis-lf-nuclei-spectra, o2-analysis-timestamp -// o2-analysis-pid-tof-base, o2-analysis-multiplicity-table, o2-analysis-event-selection -// (to add flow: o2-analysis-qvector-table, o2-analysis-centrality-table) +/// \brief TableProducer/Task for nuclei QC. The produced table can be disabled with a configurable. +/// +/// \author Giorgio Alberto Lucia (giorgio.alberto.lucia@cern.ch) +/// #include "PWGLF/DataModel/EPCalibrationTables.h" #include "PWGLF/DataModel/LFSlimNucleiTables.h" @@ -250,20 +245,28 @@ struct nucleiQC { } else { candidate.flags |= nuclei::Flags::kIsSecondaryFromMaterial; } - - mFilledMcParticleIds.emplace_back(particle.globalIndex()); } template void fillNucleusFlagsPdgs(const int iSpecies, const Tcollision& collision, const Ttrack& track, nuclei::SlimCandidate& candidate) { candidate.flags = static_cast((track.pidForTracking() & 0xF) << 12); - candidate.flags |= iSpecies == nuclei::Species::kPr ? nuclei::Flags::kProton : iSpecies == nuclei::Species::kDe ? nuclei::Flags::kDeuteron - : iSpecies == nuclei::Species::kTr ? nuclei::Flags::kTriton - : iSpecies == nuclei::Species::kHe ? nuclei::Flags::kHe3 - : iSpecies == nuclei::Species::kAl ? nuclei::Flags::kHe4 - : 0; + switch (iSpecies) { + case nuclei::Species::kPr: + candidate.flags |= nuclei::Flags::kProton; + case nuclei::Species::kDe: + candidate.flags |= nuclei::Flags::kDeuteron; + case nuclei::Species::kTr: + candidate.flags |= nuclei::Flags::kTriton; + case nuclei::Species::kHe: + candidate.flags |= nuclei::Flags::kHe3; + case nuclei::Species::kAl: + candidate.flags |= nuclei::Flags::kHe4; + default: + candidate.flags |= 0; + } + if (track.hasTOF()) candidate.flags |= nuclei::Flags::kHasTOF; @@ -414,11 +417,6 @@ struct nucleiQC { if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary()) return; - nuclei::SlimCandidate candidate; - candidate = fillCandidate(kSpeciesCt, collision, track); - if ((candidate.flags >> 10) & 0b1) - LOG(info) << "track from material before track selection"; - mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kNoCuts); if (!trackSelection(track)) return; @@ -428,10 +426,11 @@ struct nucleiQC { return; mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kPidCuts); - // nuclei::SlimCandidate candidate; - // candidate = fillCandidate(kSpeciesCt, collision, track); + nuclei::SlimCandidate candidate; + candidate = fillCandidate(kSpeciesCt, collision, track); mNucleiCandidates.emplace_back(candidate); + mFilledMcParticleIds.emplace_back(particle.globalIndex()); dispatchFillHistograms(kSpeciesRt, candidate); dispatchFillHistograms(kSpeciesRt, candidate); }); @@ -442,12 +441,16 @@ struct nucleiQC { mcParticlesThisCollision.bindExternalIndices(&mcParticles); for (const auto& particle : mcParticlesThisCollision) { + if (std::find(mFilledMcParticleIds.begin(), mFilledMcParticleIds.end(), particle.globalIndex()) != mFilledMcParticleIds.end()) continue; if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary()) continue; + if ((particle.y() - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y() - cfgRapidityCenterMass) > cfgRapidityMax) + continue; + int iSpecies = nuclei::getSpeciesFromPdg(particle.pdgCode()); if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), iSpecies) == mSpeciesToProcess.end()) continue; @@ -457,6 +460,7 @@ struct nucleiQC { fillNucleusGeneratedVariables(particle, candidate); mNucleiCandidates.emplace_back(candidate); + mFilledMcParticleIds.emplace_back(particle.globalIndex()); dispatchFillHistograms(iSpecies, candidate); } @@ -480,6 +484,7 @@ struct nucleiQC { } } PROCESS_SWITCH(nucleiQC, processMc, "Mc analysis", false); + }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From 40c862a064c8b7902c12fcb47a3a26eb7849aec4 Mon Sep 17 00:00:00 2001 From: GiorgioAlbertoLucia Date: Thu, 30 Oct 2025 12:03:25 +0100 Subject: [PATCH 2/3] clang-format --- PWGLF/TableProducer/QC/nucleiQC.cxx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/PWGLF/TableProducer/QC/nucleiQC.cxx b/PWGLF/TableProducer/QC/nucleiQC.cxx index 927dfcc7573..7adcbfef159 100644 --- a/PWGLF/TableProducer/QC/nucleiQC.cxx +++ b/PWGLF/TableProducer/QC/nucleiQC.cxx @@ -266,7 +266,7 @@ struct nucleiQC { default: candidate.flags |= 0; } - + if (track.hasTOF()) candidate.flags |= nuclei::Flags::kHasTOF; @@ -441,7 +441,7 @@ struct nucleiQC { mcParticlesThisCollision.bindExternalIndices(&mcParticles); for (const auto& particle : mcParticlesThisCollision) { - + if (std::find(mFilledMcParticleIds.begin(), mFilledMcParticleIds.end(), particle.globalIndex()) != mFilledMcParticleIds.end()) continue; @@ -484,7 +484,6 @@ struct nucleiQC { } } PROCESS_SWITCH(nucleiQC, processMc, "Mc analysis", false); - }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From cc2e922765a80b18b60ae23eba81a6001b0a3f89 Mon Sep 17 00:00:00 2001 From: Giorgio Alberto Lucia <87222843+GiorgioAlbertoLucia@users.noreply.github.com> Date: Fri, 31 Oct 2025 14:08:08 +0100 Subject: [PATCH 3/3] Solving the build failing --- PWGLF/TableProducer/QC/nucleiQC.cxx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/PWGLF/TableProducer/QC/nucleiQC.cxx b/PWGLF/TableProducer/QC/nucleiQC.cxx index 7adcbfef159..d802cbb819b 100644 --- a/PWGLF/TableProducer/QC/nucleiQC.cxx +++ b/PWGLF/TableProducer/QC/nucleiQC.cxx @@ -255,16 +255,22 @@ struct nucleiQC { switch (iSpecies) { case nuclei::Species::kPr: candidate.flags |= nuclei::Flags::kProton; + break; case nuclei::Species::kDe: candidate.flags |= nuclei::Flags::kDeuteron; + break; case nuclei::Species::kTr: candidate.flags |= nuclei::Flags::kTriton; + break; case nuclei::Species::kHe: candidate.flags |= nuclei::Flags::kHe3; + break; case nuclei::Species::kAl: candidate.flags |= nuclei::Flags::kHe4; + break; default: candidate.flags |= 0; + break; } if (track.hasTOF())