From 3cb7d4709597ccefeb95084d74547f9155715f42 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:23:25 +0800 Subject: [PATCH 01/27] Add files via upload --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 263 +++++++++++++++++++++-------- 1 file changed, 197 insertions(+), 66 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index 40efcbbcc31..cec9c47aea2 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -10,7 +10,7 @@ // or submit itself to any jurisdiction. /// \file taskXic0ToXiPi.cxx -/// \brief Task for Ξc^0 → Ξ∓ π± Kf analysis +/// \brief Task for Ξc^0 → Ξ∓ π± analysis /// \author Tao Fang , Central China Normal University /// \author Ran Tu , Fudan University @@ -62,10 +62,14 @@ struct HfTaskXic0ToXiPi { using TracksMc = soa::Join; + using Xic0Cands = soa::Filtered>; using Xic0CandsKF = soa::Filtered>; + using Xic0CandsMc = soa::Filtered>; using Xic0CandsMcKF = soa::Filtered>; + using Xic0CandsMl = soa::Filtered>; using Xic0CandsMlKF = soa::Filtered>; + using Xic0CandsMlMc = soa::Filtered>; using Xic0CandsMlMcKF = soa::Filtered>; using Xic0Gen = soa::Filtered>; @@ -78,7 +82,9 @@ struct HfTaskXic0ToXiPi { Filter filterSelectXic0Candidates = aod::hf_sel_toxipi::resultSelections == true; Filter filterXicMatchedRec = nabs(aod::hf_cand_xic0_omegac0::flagMcMatchRec) == static_cast(BIT(aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi)); Filter filterXicMatchedGen = nabs(aod::hf_cand_xic0_omegac0::flagMcMatchGen) == static_cast(BIT(aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi)); + Preslice candXicPerCollision = aod::hf_cand_xic0_omegac0::collisionId; Preslice candXicKFPerCollision = aod::hf_cand_xic0_omegac0::collisionId; + Preslice candXicMlPerCollision = aod::hf_cand_xic0_omegac0::collisionId; Preslice candXicKFMlPerCollision = aod::hf_cand_xic0_omegac0::collisionId; PresliceUnsorted colPerMcCollision = aod::mccollisionlabel::mcCollisionId; @@ -100,7 +106,10 @@ struct HfTaskXic0ToXiPi { void init(InitContext&) { - std::array doprocess{doprocessDataWithKFParticle, doprocessMcWithKFParticle, doprocessDataWithKFParticleMl, doprocessMcWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0M}; + std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, \ + doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, \ + doprocessMcWithKFParticle, doprocessMcWithKFParticleMl,doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl + }; if ((std::accumulate(doprocess.begin(), doprocess.end(), 0)) != 1) { LOGP(fatal, "One and only one process function should be enabled at a time."); } @@ -162,59 +171,47 @@ struct HfTaskXic0ToXiPi { } if constexpr (applyMl) { - registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), candidate.kfptXic(), candidate.kfRapXic()); + registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.kfRapXic()); } else { - registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), candidate.kfptXic(), candidate.kfRapXic()); + registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.kfRapXic()); } } } - template - void processDataCent(const CandType& candidates, CollType const& collisions) + template < bool useCentrality, bool applyMl, typename CandType, typename CollType> + void processDataCent(const CandType& candidate, CollType const& collision) { - for (const auto& collision : collisions) { - - auto thisCollId = collision.globalIndex(); - auto groupedXicCandidates = applyMl - ? candidates.sliceBy(candXicKFMlPerCollision, thisCollId) - : candidates.sliceBy(candXicKFPerCollision, thisCollId); - // auto numPvContributors = collision.numContrib(); + if (candidate.resultSelections() != true) { + return; + } + if (yCandRecMax >= 0. && std::abs(candidate.etaCharmBaryon()) > yCandRecMax) { + return; + } - for (const auto& candidate : groupedXicCandidates) { - if (candidate.resultSelections() != true) { - continue; - } - if (yCandRecMax >= 0. && std::abs(candidate.kfRapXic()) > yCandRecMax) { - continue; - } - - auto numPvContributors = candidate.template collision_as().numContrib(); - float centrality = -999.f; - if constexpr (useCentrality) { - auto const& collision = candidate.template collision_as(); - centrality = o2::hf_centrality::getCentralityColl(collision); - } - double kfptXic = RecoDecay::sqrtSumOfSquares(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); - double kfptPiFromXic = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); - if constexpr (applyMl) { - registry.fill(HIST("hBdtScoreVsMassVsPtVsYVsCentVsPtPion"), - candidate.mlProbToXiPi()[0], - candidate.invMassCharmBaryon(), - kfptXic, - candidate.kfRapXic(), - centrality, - kfptPiFromXic, - numPvContributors); - } else { - registry.fill(HIST("hMassVsPtVsYVsCentVsPtPion"), - candidate.invMassCharmBaryon(), - kfptXic, - candidate.kfRapXic(), - centrality, - kfptPiFromXic, - numPvContributors); - } - } + auto numPvContributors = collision.numContrib(); + float centrality = -999.f; + if constexpr (useCentrality) { + centrality = o2::hf_centrality::getCentralityColl(collision); + } + double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + double kfptPiFromXic = RecoDecay::pt(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); + if constexpr (applyMl) { + registry.fill(HIST("hBdtScoreVsMassVsPtVsYVsCentVsPtPion"), + candidate.mlProbToXiPi()[0], + candidate.invMassCharmBaryon(), + ptXic, + candidate.etaCharmBaryon(), + centrality, + kfptPiFromXic, + numPvContributors); + } else { + registry.fill(HIST("hMassVsPtVsYVsCentVsPtPion"), + candidate.invMassCharmBaryon(), + ptXic, + candidate.etaCharmBaryon(), + centrality, + kfptPiFromXic, + numPvContributors); } } @@ -230,18 +227,18 @@ struct HfTaskXic0ToXiPi { if (candidate.resultSelections() != true) { continue; } - if (yCandRecMax >= 0. && std::abs(candidate.kfRapXic()) > yCandRecMax) { + if (yCandRecMax >= 0. && std::abs(candidate.etaCharmBaryon()) > yCandRecMax) { continue; } auto numPvContributors = candidate.template collision_as().numContrib(); - double kfptXic = RecoDecay::sqrtSumOfSquares(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); if constexpr (applyMl) { registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), - kfptXic, - candidate.kfRapXic(), + ptXic, + candidate.etaCharmBaryon(), candidate.ptBhadMotherPart(), candidate.originMcRec(), candidate.flagMcMatchRec(), @@ -249,8 +246,8 @@ struct HfTaskXic0ToXiPi { } else { registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), - kfptXic, - candidate.kfRapXic(), + ptXic, + candidate.etaCharmBaryon(), candidate.ptBhadMotherPart(), candidate.originMcRec(), candidate.flagMcMatchRec(), @@ -291,48 +288,172 @@ struct HfTaskXic0ToXiPi { } } } + + void processDataWithDCAFitter(Xic0Cands const& candidates, + CollisionsWithEvSels const& collisions) + { + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } + } + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitter, "process HfTaskXic0ToXiPi with DCAFitter", true); void processDataWithKFParticle(Xic0CandsKF const& candidates, CollisionsWithEvSels const& collisions) { - processDataCent(candidates, collisions); + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } } - PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true); + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true); + + void processDataWithDCAFitterMl(Xic0CandsMl const& candidates, + CollisionsWithEvSels const& collisions) + { + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } + } + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMl, "process HfTaskXic0ToXiPi with DCAFitter and ML selections", false); void processDataWithKFParticleMl(Xic0CandsMlKF const& candidates, CollisionsWithEvSels const& collisions) { - processDataCent(candidates, collisions); + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } + } + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false); + + void processDataWithDCAFitterFT0C(Xic0Cands const& candidates, + CollisionsWithFT0C const& collisions) + { + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } } - PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false); + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterFT0C, "process HfTaskXic0ToXiPi with DCAFitter and with FT0C centrality", false); void processDataWithKFParticleFT0C(Xic0CandsKF const& candidates, CollisionsWithFT0C const& collisions) { - processDataCent(candidates, collisions); + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } + } + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false); + + void processDataWithDCAFitterFT0M(Xic0Cands const& candidates, + CollisionsWithFT0M const& collisions) + { + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } } - PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false); + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterFT0M, "process HfTaskXic0ToXiPi with DCAFitter and with FT0M centrality", false); void processDataWithKFParticleFT0M(Xic0CandsKF const& candidates, CollisionsWithFT0M const& collisions) { - processDataCent(candidates, collisions); + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } } - PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false); + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false); + void processDataWithDCAFitterMlFT0C(Xic0CandsMl const& candidates, + CollisionsWithFT0C const& collisions) + { + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } + } + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0C, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0C centrality", false); + void processDataWithKFParticleMlFT0C(Xic0CandsMlKF const& candidates, CollisionsWithFT0C const& collisions) { - processDataCent(candidates, collisions); + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } } - PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false); + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false); + + void processDataWithDCAFitterMlFT0M(Xic0CandsMl const& candidates, + CollisionsWithFT0M const& collisions) + { + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } + } + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0M, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0M centrality", false); void processDataWithKFParticleMlFT0M(Xic0CandsMlKF const& candidates, CollisionsWithFT0M const& collisions) { - processDataCent(candidates, collisions); + for (const auto& collision : collisions) { + auto thisCollId = collision.globalIndex(); + auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId); + for (const auto& candidate : groupedXicCandidates) { + processDataCent(candidate, collision); + } + } + } + PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false); + + void processMcWithDCAFitter(Xic0CandsMc const& Xic0CandidatesMc, + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) + { + processMc(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); } - PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false); + PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitter, "Process MC with KFParticle", false); void processMcWithKFParticle(Xic0CandsMcKF const& Xic0CandidatesMcKF, Xic0Gen const& mcParticles, @@ -344,6 +465,16 @@ struct HfTaskXic0ToXiPi { } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticle, "Process MC with KFParticle", false); + void processMcWithDCAFitterMl(Xic0CandsMlMc const& Xic0CandidatesMlMc, + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) + { + processMc(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); + } + PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitterMl, "Process MC with KFParticle and ML selections", false); + void processMcWithKFParticleMl(Xic0CandsMlMcKF const& Xic0CandidatesMlMcKF, Xic0Gen const& mcParticles, TracksMc const& tracks, From 6fd6bb11ee52fa6e18d0a3c18856e058dceb4cea Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:24:24 +0800 Subject: [PATCH 02/27] Add files via upload --- PWGHF/DataModel/CandidateSelectionTables.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/PWGHF/DataModel/CandidateSelectionTables.h b/PWGHF/DataModel/CandidateSelectionTables.h index 125b0fb7286..bae45d660be 100644 --- a/PWGHF/DataModel/CandidateSelectionTables.h +++ b/PWGHF/DataModel/CandidateSelectionTables.h @@ -231,12 +231,10 @@ DECLARE_SOA_TABLE(HfSelJpsi, "AOD", "HFSELJPSI", //! namespace hf_sel_candidate_lc_to_k0s_p { DECLARE_SOA_COLUMN(IsSelLcToK0sP, isSelLcToK0sP, int); -DECLARE_SOA_COLUMN(MlProbLcToK0sP, mlProbLcToK0sP, std::vector); //! } // namespace hf_sel_candidate_lc_to_k0s_p + DECLARE_SOA_TABLE(HfSelLcToK0sP, "AOD", "HFSELLCK0SP", //! hf_sel_candidate_lc_to_k0s_p::IsSelLcToK0sP); -DECLARE_SOA_TABLE(HfMlLcToK0sP, "AOD", "HFMLLcK0sP", //! - hf_sel_candidate_lc_to_k0s_p::MlProbLcToK0sP); namespace hf_sel_candidate_b0 { @@ -381,6 +379,9 @@ DECLARE_SOA_TABLE(HfSelToXiPiKf, "AOD", "HFSELTOXIPIKF", hf_sel_toxipi::TpcNSigmaPiFromCharmBaryon, hf_sel_toxipi::TpcNSigmaPiFromCasc, hf_sel_toxipi::TpcNSigmaPiFromLambda, hf_sel_toxipi::TpcNSigmaPrFromLambda, hf_sel_toxipi::TofNSigmaPiFromCharmBaryon, hf_sel_toxipi::TofNSigmaPiFromCasc, hf_sel_toxipi::TofNSigmaPiFromLambda, hf_sel_toxipi::TofNSigmaPrFromLambda); +DECLARE_SOA_TABLE(HfMlToXiPi, "AOD", "HFMLSELTOXIPI", + hf_sel_toxipi::MlProbToXiPi); + DECLARE_SOA_TABLE(HfMlToXiPiKf, "AOD", "HFMLSELTOXIPIKF", hf_sel_toxipi::MlProbToXiPi); From 9629f7a9965ea077ad2bb5be1537ca73fff32002 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:26:31 +0800 Subject: [PATCH 03/27] Add files via upload --- PWGHF/TableProducer/CMakeLists.txt | 2 +- .../TableProducer/candidateSelectorToXiPi.cxx | 51 +++++++++++++++++++ PWGHF/TableProducer/treeCreatorToXiPi.cxx | 22 +++++--- 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/PWGHF/TableProducer/CMakeLists.txt b/PWGHF/TableProducer/CMakeLists.txt index e57147f6cfc..9328bf5775c 100644 --- a/PWGHF/TableProducer/CMakeLists.txt +++ b/PWGHF/TableProducer/CMakeLists.txt @@ -184,7 +184,7 @@ o2physics_add_dpl_workflow(candidate-selector-xic0-to-xi-pi-kf o2physics_add_dpl_workflow(candidate-selector-to-xi-pi SOURCES candidateSelectorToXiPi.cxx - PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore + PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::MLCore COMPONENT_NAME Analysis) o2physics_add_dpl_workflow(candidate-selector-xic-to-p-k-pi diff --git a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx index 4372e3cb40a..f501c6a7963 100644 --- a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx @@ -12,6 +12,13 @@ /// \file candidateSelectorToXiPi.cxx /// \brief Xic0 and Omegac0 → Xi Pi selection task /// \author Federica Zanone , Heidelberg University +/// \author Tao Fang , Central China Normal University + +#include +#include + +#include "PWGHF/Core/HfMlResponseXic0ToXiPi.h" +#include "PWGHF/Core/SelectorCuts.h" #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" @@ -54,6 +61,7 @@ enum PidInfoStored { /// Struct for applying Omegac0/Xic0 selection cuts struct HfCandidateSelectorToXiPi { Produces hfSelToXiPi; + Produces hfMlToXiPi; // LF analysis selections Configurable radiusCascMin{"radiusCascMin", 0.6, "Min cascade radius"}; @@ -129,6 +137,25 @@ struct HfCandidateSelectorToXiPi { Configurable nClustersItsInnBarrMin{"nClustersItsInnBarrMin", 1, "Minimum number of ITS clusters in inner barrel requirement for pi <- charm baryon"}; Configurable itsChi2PerClusterMax{"itsChi2PerClusterMax", 36, "Maximum value of chi2 fit over ITS clusters for pi <- charm baryon"}; + // ML inference + Configurable applyMl{"applyMl", true, "Flag to apply ML selections"}; + Configurable> binsPtMl{"binsPtMl", std::vector{hf_cuts_ml::vecBinsPt}, "pT bin limits for ML application"}; + Configurable> cutDirMl{"cutDirMl", std::vector{hf_cuts_ml::vecCutDir}, "Whether to reject score values greater or smaller than the threshold"}; + Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsCutScore}, "ML selections per pT bin"}; + Configurable nClassesMl{"nClassesMl", static_cast(hf_cuts_ml::NCutScores), "Number of classes in ML model"}; + Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"feature1", "feature2"}, "Names of ML model input features"}; + + // CCDB configuration + Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{"EventFiltering/PWGHF/BDTXic0ToXipiKf"}, "Paths of models on CCDB"}; + Configurable> onnxFileNames{"onnxFileNames", std::vector{"ModelHandler_onnx_Xic0ToXipiKf.onnx"}, "ONNX file names for each pT bin (if not from CCDB full path)"}; + Configurable timestampCCDB{"timestampCCDB", -1, "timestamp of the ONNX file for ML model used to query in CCDB"}; + Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; + + o2::analysis::HfMlResponseXic0ToXiPi hfMlResponse; + std::vector outputMlXic0ToXiPi = {}; + o2::ccdb::CcdbApi ccdbApi; + TrackSelectorPi selectorPion; TrackSelectorPr selectorProton; @@ -189,6 +216,18 @@ struct HfCandidateSelectorToXiPi { registry.add("hSelMassCharmBaryon", "hSelMassCharmBaryon;status;entries", {HistType::kTH1F, {axisSel}}); registry.add("hSelDcaXYToPvV0Daughters", "hSelDcaXYToPvV0Daughters;status;entries", {HistType::kTH1F, {axisSel}}); registry.add("hSelDcaXYToPvPiFromCasc", "hSelDcaXYToPvPiFromCasc;status;entries", {HistType::kTH1F, {axisSel}}); + + if (applyMl) { + hfMlResponse.configure(binsPtMl, cutsMl, cutDirMl, nClassesMl); + if (loadModelsFromCCDB) { + ccdbApi.init(ccdbUrl); + hfMlResponse.setModelPathsCCDB(onnxFileNames, ccdbApi, modelPathsCCDB, timestampCCDB); + } else { + hfMlResponse.setModelPathsLocal(onnxFileNames); + } + hfMlResponse.cacheInputFeaturesIndices(namesInputFeatures); + hfMlResponse.init(); + } } void process(aod::HfCandToXiPi const& candidates, @@ -204,6 +243,7 @@ struct HfCandidateSelectorToXiPi { bool resultSelections = true; // True if the candidate passes all the selections, False otherwise + auto ptCand = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); auto trackV0PosDauId = candidate.posTrackId(); // positive V0 daughter auto trackV0NegDauId = candidate.negTrackId(); // negative V0 daughter auto trackPiFromCascId = candidate.bachelorId(); // pion <- cascade @@ -518,6 +558,17 @@ struct HfCandidateSelectorToXiPi { } else { registry.fill(HIST("hSelMassCharmBaryon"), 0); } + + // ML selections + if (applyMl) { + bool isSelectedMlXic0 = false; + std::vector inputFeaturesXic0 = hfMlResponse.getInputFeatures(candidate, trackPiFromLam, trackPiFromCasc, trackPiFromCharm); + isSelectedMlXic0 = hfMlResponse.isSelectedMl(inputFeaturesXic0, ptCand, outputMlXic0ToXiPi); + if (!isSelectedMlXic0) { + continue; + } + hfMlToXiPi(outputMlXic0ToXiPi); + } hfSelToXiPi(statusPidLambda, statusPidCascade, statusPidCharmBaryon, statusInvMassLambda, statusInvMassCascade, statusInvMassCharmBaryon, resultSelections, infoTpcStored, infoTofStored, trackPiFromCharm.tpcNSigmaPi(), trackPiFromCasc.tpcNSigmaPi(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), diff --git a/PWGHF/TableProducer/treeCreatorToXiPi.cxx b/PWGHF/TableProducer/treeCreatorToXiPi.cxx index 01e40cfb2c8..513016cb9e4 100644 --- a/PWGHF/TableProducer/treeCreatorToXiPi.cxx +++ b/PWGHF/TableProducer/treeCreatorToXiPi.cxx @@ -75,6 +75,8 @@ DECLARE_SOA_COLUMN(PzPiFromCharmBaryon, pzPiFromCharmBaryon, float); DECLARE_SOA_COLUMN(PxLambda, pxLambda, float); DECLARE_SOA_COLUMN(PyLambda, pyLambda, float); DECLARE_SOA_COLUMN(PzLambda, pzLambda, float); +DECLARE_SOA_COLUMN(PtCharmBaryon, ptCharmBaryon, float); +DECLARE_SOA_COLUMN(PtPiFromCharmBaryon, ptPiFromCharmBaryon, float); DECLARE_SOA_COLUMN(PxPiFromCasc, pxPiFromCasc, float); DECLARE_SOA_COLUMN(PyPiFromCasc, pyPiFromCasc, float); DECLARE_SOA_COLUMN(PzPiFromCasc, pzPiFromCasc, float); @@ -169,6 +171,7 @@ DECLARE_SOA_TABLE(HfToXiPiFulls, "AOD", "HFTOXIPIFULL", full::XDecayVtxV0, full::YDecayVtxV0, full::ZDecayVtxV0, full::SignDecay, full::CovVtxCharmBaryonXX, full::CovVtxCharmBaryonYY, full::CovVtxCharmBaryonZZ, + full::PtCharmBaryon, full::PtPiFromCharmBaryon, full::PxCharmBaryon, full::PyCharmBaryon, full::PzCharmBaryon, full::PxCasc, full::PyCasc, full::PzCasc, full::PxPiFromCharmBaryon, full::PyPiFromCharmBaryon, full::PzPiFromCharmBaryon, @@ -202,15 +205,16 @@ DECLARE_SOA_TABLE(HfToXiPiLites, "AOD", "HFTOXIPILITE", full::XDecayVtxCascade, full::YDecayVtxCascade, full::ZDecayVtxCascade, full::XDecayVtxV0, full::YDecayVtxV0, full::ZDecayVtxV0, full::SignDecay, - full::PxCharmBaryon, full::PyCharmBaryon, full::PzCharmBaryon, - full::PxPiFromCharmBaryon, full::PyPiFromCharmBaryon, full::PzPiFromCharmBaryon, + full::PtCharmBaryon, full::PtPiFromCharmBaryon, full::PxPiFromCasc, full::PyPiFromCasc, full::PzPiFromCasc, full::PxPosV0Dau, full::PyPosV0Dau, full::PzPosV0Dau, full::PxNegV0Dau, full::PyNegV0Dau, full::PzNegV0Dau, full::ImpactParCascXY, full::ImpactParPiFromCharmBaryonXY, full::ErrImpactParCascXY, full::ErrImpactParPiFromCharmBaryonXY, full::InvMassLambda, full::InvMassCascade, full::InvMassCharmBaryon, + full::CosPAV0, full::CosPACharmBaryon, full::CosPACasc, full::EtaV0PosDau, full::EtaV0NegDau, full::EtaPiFromCasc, full::EtaPiFromCharmBaryon, + full::EtaCharmBaryon, full::DcaXYToPvV0Dau0, full::DcaXYToPvV0Dau1, full::DcaXYToPvCascDau, full::DcaCascDau, full::DcaV0Dau, full::DcaCharmBaryonDau, full::ErrorDecayLengthCharmBaryon, full::NormImpParCascade, full::NormImpParPiFromCharmBar, @@ -283,6 +287,8 @@ struct HfTreeCreatorToXiPi { candidate.covVtxCharmBaryon0(), candidate.covVtxCharmBaryon3(), candidate.covVtxCharmBaryon5(), + RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()), + RecoDecay::pt(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()), candidate.pxCharmBaryon(), candidate.pyCharmBaryon(), candidate.pzCharmBaryon(), @@ -404,15 +410,11 @@ struct HfTreeCreatorToXiPi { candidate.yDecayVtxV0(), candidate.zDecayVtxV0(), candidate.signDecay(), + RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()), + RecoDecay::pt(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()), candidate.pxCharmBaryon(), candidate.pyCharmBaryon(), candidate.pzCharmBaryon(), - candidate.pxBachFromCharmBaryon(), - candidate.pyBachFromCharmBaryon(), - candidate.pzBachFromCharmBaryon(), - candidate.pxBachFromCasc(), - candidate.pyBachFromCasc(), - candidate.pzBachFromCasc(), candidate.pxPosV0Dau(), candidate.pyPosV0Dau(), candidate.pzPosV0Dau(), @@ -426,10 +428,14 @@ struct HfTreeCreatorToXiPi { candidate.invMassLambda(), candidate.invMassCascade(), candidate.invMassCharmBaryon(), + candidate.cosPAV0(), + candidate.cosPACharmBaryon(), + candidate.cosPACasc(), candidate.etaV0PosDau(), candidate.etaV0NegDau(), candidate.etaBachFromCasc(), candidate.etaBachFromCharmBaryon(), + candidate.etaCharmBaryon(), candidate.dcaXYToPvV0Dau0(), candidate.dcaXYToPvV0Dau1(), candidate.dcaXYToPvCascDau(), From a5a9bd4915b3f544cefcccb0759929b853664e13 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:41:51 +0800 Subject: [PATCH 04/27] Update taskXic0ToXiPi.cxx --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index cec9c47aea2..def500df2a3 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -166,14 +166,14 @@ struct HfTaskXic0ToXiPi { if (candidate.resultSelections() != true) { continue; } - if (yCandRecMax >= 0. && std::abs(candidate.kfRapXic()) > yCandRecMax) { + if (yCandRecMax >= 0. && std::abs(candidate.etaCharmBaryon()) > yCandRecMax) { continue; } if constexpr (applyMl) { - registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.kfRapXic()); + registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.etaCharmBaryon()); } else { - registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.kfRapXic()); + registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.etaCharmBaryon()); } } } @@ -194,7 +194,7 @@ struct HfTaskXic0ToXiPi { centrality = o2::hf_centrality::getCentralityColl(collision); } double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); - double kfptPiFromXic = RecoDecay::pt(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); + double ptPiFromXic = RecoDecay::pt(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); if constexpr (applyMl) { registry.fill(HIST("hBdtScoreVsMassVsPtVsYVsCentVsPtPion"), candidate.mlProbToXiPi()[0], @@ -202,7 +202,7 @@ struct HfTaskXic0ToXiPi { ptXic, candidate.etaCharmBaryon(), centrality, - kfptPiFromXic, + ptPiFromXic, numPvContributors); } else { registry.fill(HIST("hMassVsPtVsYVsCentVsPtPion"), @@ -210,7 +210,7 @@ struct HfTaskXic0ToXiPi { ptXic, candidate.etaCharmBaryon(), centrality, - kfptPiFromXic, + ptPiFromXic, numPvContributors); } } From 1fee4a5fe542a8810772ef5d0911cc993595dc93 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 27 Aug 2025 08:42:21 +0000 Subject: [PATCH 05/27] Please consider the following formatting changes --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 47 +++++++++---------- .../TableProducer/candidateSelectorToXiPi.cxx | 12 ++--- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index def500df2a3..baa549b054d 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -106,10 +106,9 @@ struct HfTaskXic0ToXiPi { void init(InitContext&) { - std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, \ - doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, \ - doprocessMcWithKFParticle, doprocessMcWithKFParticleMl,doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl - }; + std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, + doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, + doprocessMcWithKFParticle, doprocessMcWithKFParticleMl, doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl}; if ((std::accumulate(doprocess.begin(), doprocess.end(), 0)) != 1) { LOGP(fatal, "One and only one process function should be enabled at a time."); } @@ -178,7 +177,7 @@ struct HfTaskXic0ToXiPi { } } - template < bool useCentrality, bool applyMl, typename CandType, typename CollType> + template void processDataCent(const CandType& candidate, CollType const& collision) { if (candidate.resultSelections() != true) { @@ -288,7 +287,7 @@ struct HfTaskXic0ToXiPi { } } } - + void processDataWithDCAFitter(Xic0Cands const& candidates, CollisionsWithEvSels const& collisions) { @@ -316,7 +315,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true); void processDataWithDCAFitterMl(Xic0CandsMl const& candidates, - CollisionsWithEvSels const& collisions) + CollisionsWithEvSels const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -342,7 +341,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false); void processDataWithDCAFitterFT0C(Xic0Cands const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -368,7 +367,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false); void processDataWithDCAFitterFT0M(Xic0Cands const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -394,7 +393,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false); void processDataWithDCAFitterMlFT0C(Xic0CandsMl const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -402,10 +401,10 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0C, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0C centrality", false); - + void processDataWithKFParticleMlFT0C(Xic0CandsMlKF const& candidates, CollisionsWithFT0C const& collisions) { @@ -415,12 +414,12 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false); void processDataWithDCAFitterMlFT0M(Xic0CandsMl const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -428,7 +427,7 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0M, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0M centrality", false); @@ -441,15 +440,15 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false); void processMcWithDCAFitter(Xic0CandsMc const& Xic0CandidatesMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { processMc(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); } @@ -466,10 +465,10 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticle, "Process MC with KFParticle", false); void processMcWithDCAFitterMl(Xic0CandsMlMc const& Xic0CandidatesMlMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { processMc(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); } diff --git a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx index f501c6a7963..5005de0122a 100644 --- a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx @@ -14,12 +14,8 @@ /// \author Federica Zanone , Heidelberg University /// \author Tao Fang , Central China Normal University -#include -#include - #include "PWGHF/Core/HfMlResponseXic0ToXiPi.h" #include "PWGHF/Core/SelectorCuts.h" - #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" #include "PWGHF/Utils/utilsAnalysis.h" @@ -45,6 +41,8 @@ #include #include +#include +#include using namespace o2; using namespace o2::aod; @@ -144,14 +142,14 @@ struct HfCandidateSelectorToXiPi { Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsCutScore}, "ML selections per pT bin"}; Configurable nClassesMl{"nClassesMl", static_cast(hf_cuts_ml::NCutScores), "Number of classes in ML model"}; Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"feature1", "feature2"}, "Names of ML model input features"}; - + // CCDB configuration Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{"EventFiltering/PWGHF/BDTXic0ToXipiKf"}, "Paths of models on CCDB"}; Configurable> onnxFileNames{"onnxFileNames", std::vector{"ModelHandler_onnx_Xic0ToXipiKf.onnx"}, "ONNX file names for each pT bin (if not from CCDB full path)"}; Configurable timestampCCDB{"timestampCCDB", -1, "timestamp of the ONNX file for ML model used to query in CCDB"}; Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; - + o2::analysis::HfMlResponseXic0ToXiPi hfMlResponse; std::vector outputMlXic0ToXiPi = {}; o2::ccdb::CcdbApi ccdbApi; @@ -558,7 +556,7 @@ struct HfCandidateSelectorToXiPi { } else { registry.fill(HIST("hSelMassCharmBaryon"), 0); } - + // ML selections if (applyMl) { bool isSelectedMlXic0 = false; From dbc579b44aba3ee284093dc33c7c7c6f024fd3f3 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 27 Aug 2025 17:35:03 +0800 Subject: [PATCH 06/27] Add files via upload --- PWGHF/Core/HfMlResponseXic0ToXiPi.h | 129 ++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 PWGHF/Core/HfMlResponseXic0ToXiPi.h diff --git a/PWGHF/Core/HfMlResponseXic0ToXiPi.h b/PWGHF/Core/HfMlResponseXic0ToXiPi.h new file mode 100644 index 00000000000..698685ac726 --- /dev/null +++ b/PWGHF/Core/HfMlResponseXic0ToXiPi.h @@ -0,0 +1,129 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +/// \file HfMlResponseXic0ToXiPi.h +/// \brief Class to compute the ML response for Ξc^0 → Ξ∓ π± analysis selections +/// \author Tao Fang , Central China Normal University + +#ifndef PWGHF_CORE_HFMLRESPONSEXIC0TOXIPI_H_ +#define PWGHF_CORE_HFMLRESPONSEXIC0TOXIPI_H_ + +#include "PWGHF/Core/HfMlResponse.h" + +#include "Tools/ML/MlResponse.h" + +#include +#include + +// Fill the map of available input features +// the key is the feature's name (std::string) +// the value is the corresponding value in EnumInputFeatures +#define FILL_MAP_XIC0TOXIPI(FEATURE) \ + { \ + #FEATURE, static_cast(InputFeaturesXic0ToXiPi::FEATURE) \ + } + +// Check if the index of mCachedIndices (index associated to a FEATURE) +// matches the entry in EnumInputFeatures associated to this FEATURE +// if so, the inputFeatures vector is filled with the FEATURE's value +// by calling the corresponding GETTER from OBJECT +#define CHECK_AND_FILL_VEC_XIC0TOXIPI_FULL(OBJECT, FEATURE, GETTER) \ + case static_cast(InputFeaturesXic0ToXiPi::FEATURE): { \ + inputFeatures.emplace_back(OBJECT.GETTER()); \ + break; \ + } + +// where OBJECT is named candidate and FEATURE = GETTER +#define CHECK_AND_FILL_VEC_XIC0TOXIPI(GETTER) \ + case static_cast(InputFeaturesXic0ToXiPi::GETTER): { \ + inputFeatures.emplace_back(candidate.GETTER()); \ + break; \ + } + +namespace o2::analysis +{ + +enum class InputFeaturesXic0ToXiPi : uint8_t { + tpcNSigmaPiFromLambda, + tpcNSigmaPiFromCasc, + tpcNSigmaPiFromCharmBaryon, + dcaCascDau, + dcaCharmBaryonDau, + cosPACharmBaryon, + cosPAV0, + impactParBachFromCharmBaryonXY, + impactParCascXY +}; + +template +class HfMlResponseXic0ToXiPi : public HfMlResponse +{ + public: + /// Default constructor + HfMlResponseXic0ToXiPi() = default; + /// Default destructor + virtual ~HfMlResponseXic0ToXiPi() = default; + + /// Method to get the input features vector needed for ML inference + /// \param candidate is the Xic0 candidate + /// \return inputFeatures vector + template + // std::vector getInputFeatures(T1 const& candidate) + std::vector getInputFeatures(T1 const& candidate, T2 const& lamProngPi, T2 const& cascProngPi, T3 const& charmBaryonProngPi) + { + std::vector inputFeatures; + + for (const auto& idx : MlResponse::mCachedIndices) { + switch (idx) { + // PID variables + CHECK_AND_FILL_VEC_XIC0TOXIPI_FULL(lamProngPi, tpcNSigmaPiFromLambda, tpcNSigmaPi); + CHECK_AND_FILL_VEC_XIC0TOXIPI_FULL(cascProngPi, tpcNSigmaPiFromCasc, tpcNSigmaPi); + CHECK_AND_FILL_VEC_XIC0TOXIPI_FULL(charmBaryonProngPi, tpcNSigmaPiFromCharmBaryon, tpcNSigmaPi); + // DCA + CHECK_AND_FILL_VEC_XIC0TOXIPI(dcaCascDau); + CHECK_AND_FILL_VEC_XIC0TOXIPI(dcaCharmBaryonDau); + // CosPA + CHECK_AND_FILL_VEC_XIC0TOXIPI(cosPACharmBaryon); + CHECK_AND_FILL_VEC_XIC0TOXIPI(cosPAV0); + // ImpactPar + CHECK_AND_FILL_VEC_XIC0TOXIPI(impactParBachFromCharmBaryonXY); + CHECK_AND_FILL_VEC_XIC0TOXIPI(impactParCascXY); + } + } + + return inputFeatures; + } + + protected: + /// Method to fill the map of available input features + void setAvailableInputFeatures() + { + MlResponse::mAvailableInputFeatures = { + FILL_MAP_XIC0TOXIPI(tpcNSigmaPiFromLambda), + FILL_MAP_XIC0TOXIPI(tpcNSigmaPiFromCasc), + FILL_MAP_XIC0TOXIPI(tpcNSigmaPiFromCharmBaryon), + FILL_MAP_XIC0TOXIPI(dcaCascDau), + FILL_MAP_XIC0TOXIPI(dcaCharmBaryonDau), + FILL_MAP_XIC0TOXIPI(cosPACharmBaryon), + FILL_MAP_XIC0TOXIPI(cosPAV0), + FILL_MAP_XIC0TOXIPI(impactParBachFromCharmBaryonXY), + FILL_MAP_XIC0TOXIPI(impactParCascXY) + }; + } +}; + +} // namespace o2::analysis + +#undef FILL_MAP_XIC0TOXIPI +#undef CHECK_AND_FILL_VEC_XIC0TOXIPI_FULL +#undef CHECK_AND_FILL_VEC_XIC0TOXIPI + +#endif // PWGHF_CORE_HFMLRESPONSEXIC0TOXIPI_H_ From f478f549e08123646b54df27b1d220788e881714 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 27 Aug 2025 09:35:42 +0000 Subject: [PATCH 07/27] Please consider the following formatting changes --- PWGHF/Core/HfMlResponseXic0ToXiPi.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/PWGHF/Core/HfMlResponseXic0ToXiPi.h b/PWGHF/Core/HfMlResponseXic0ToXiPi.h index 698685ac726..2a8d8c145b5 100644 --- a/PWGHF/Core/HfMlResponseXic0ToXiPi.h +++ b/PWGHF/Core/HfMlResponseXic0ToXiPi.h @@ -27,7 +27,7 @@ // the key is the feature's name (std::string) // the value is the corresponding value in EnumInputFeatures #define FILL_MAP_XIC0TOXIPI(FEATURE) \ - { \ + { \ #FEATURE, static_cast(InputFeaturesXic0ToXiPi::FEATURE) \ } @@ -37,15 +37,15 @@ // by calling the corresponding GETTER from OBJECT #define CHECK_AND_FILL_VEC_XIC0TOXIPI_FULL(OBJECT, FEATURE, GETTER) \ case static_cast(InputFeaturesXic0ToXiPi::FEATURE): { \ - inputFeatures.emplace_back(OBJECT.GETTER()); \ - break; \ + inputFeatures.emplace_back(OBJECT.GETTER()); \ + break; \ } // where OBJECT is named candidate and FEATURE = GETTER #define CHECK_AND_FILL_VEC_XIC0TOXIPI(GETTER) \ case static_cast(InputFeaturesXic0ToXiPi::GETTER): { \ - inputFeatures.emplace_back(candidate.GETTER()); \ - break; \ + inputFeatures.emplace_back(candidate.GETTER()); \ + break; \ } namespace o2::analysis @@ -115,8 +115,7 @@ class HfMlResponseXic0ToXiPi : public HfMlResponse FILL_MAP_XIC0TOXIPI(cosPACharmBaryon), FILL_MAP_XIC0TOXIPI(cosPAV0), FILL_MAP_XIC0TOXIPI(impactParBachFromCharmBaryonXY), - FILL_MAP_XIC0TOXIPI(impactParCascXY) - }; + FILL_MAP_XIC0TOXIPI(impactParCascXY)}; } }; From ee5f69b0b61039df0ff90df33bf66e9aca1ecb01 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Tue, 2 Sep 2025 13:49:47 +0800 Subject: [PATCH 08/27] Update CandidateSelectionTables.h --- PWGHF/DataModel/CandidateSelectionTables.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PWGHF/DataModel/CandidateSelectionTables.h b/PWGHF/DataModel/CandidateSelectionTables.h index bae45d660be..c64a2f55c7c 100644 --- a/PWGHF/DataModel/CandidateSelectionTables.h +++ b/PWGHF/DataModel/CandidateSelectionTables.h @@ -231,10 +231,12 @@ DECLARE_SOA_TABLE(HfSelJpsi, "AOD", "HFSELJPSI", //! namespace hf_sel_candidate_lc_to_k0s_p { DECLARE_SOA_COLUMN(IsSelLcToK0sP, isSelLcToK0sP, int); +DECLARE_SOA_COLUMN(MlProbLcToK0sP, mlProbLcToK0sP, std::vector); //! } // namespace hf_sel_candidate_lc_to_k0s_p - DECLARE_SOA_TABLE(HfSelLcToK0sP, "AOD", "HFSELLCK0SP", //! hf_sel_candidate_lc_to_k0s_p::IsSelLcToK0sP); +DECLARE_SOA_TABLE(HfMlLcToK0sP, "AOD", "HFMLLcK0sP", //! + hf_sel_candidate_lc_to_k0s_p::MlProbLcToK0sP); namespace hf_sel_candidate_b0 { From ecb66b4d36aca68ce62f2bc87ef77c5a1e15a297 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Mon, 6 Oct 2025 16:37:08 +0800 Subject: [PATCH 09/27] Update HfMlResponseXic0ToXiPi.h --- PWGHF/Core/HfMlResponseXic0ToXiPi.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PWGHF/Core/HfMlResponseXic0ToXiPi.h b/PWGHF/Core/HfMlResponseXic0ToXiPi.h index 2a8d8c145b5..88c402617f8 100644 --- a/PWGHF/Core/HfMlResponseXic0ToXiPi.h +++ b/PWGHF/Core/HfMlResponseXic0ToXiPi.h @@ -58,6 +58,7 @@ enum class InputFeaturesXic0ToXiPi : uint8_t { dcaCascDau, dcaCharmBaryonDau, cosPACharmBaryon, + cosPACasc, cosPAV0, impactParBachFromCharmBaryonXY, impactParCascXY @@ -92,6 +93,7 @@ class HfMlResponseXic0ToXiPi : public HfMlResponse CHECK_AND_FILL_VEC_XIC0TOXIPI(dcaCharmBaryonDau); // CosPA CHECK_AND_FILL_VEC_XIC0TOXIPI(cosPACharmBaryon); + CHECK_AND_FILL_VEC_XIC0TOXIPI(cosPACasc); CHECK_AND_FILL_VEC_XIC0TOXIPI(cosPAV0); // ImpactPar CHECK_AND_FILL_VEC_XIC0TOXIPI(impactParBachFromCharmBaryonXY); @@ -113,6 +115,7 @@ class HfMlResponseXic0ToXiPi : public HfMlResponse FILL_MAP_XIC0TOXIPI(dcaCascDau), FILL_MAP_XIC0TOXIPI(dcaCharmBaryonDau), FILL_MAP_XIC0TOXIPI(cosPACharmBaryon), + FILL_MAP_XIC0TOXIPI(cosPACasc), FILL_MAP_XIC0TOXIPI(cosPAV0), FILL_MAP_XIC0TOXIPI(impactParBachFromCharmBaryonXY), FILL_MAP_XIC0TOXIPI(impactParCascXY)}; From e7cc03cb9a38cf5cc38472f16ec26a3ec9fc9511 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Mon, 6 Oct 2025 16:37:51 +0800 Subject: [PATCH 10/27] Update taskXic0ToXiPi.cxx --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 120 +++++++++++++---------------- 1 file changed, 52 insertions(+), 68 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index baa549b054d..ef3e862f5dc 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -106,9 +106,10 @@ struct HfTaskXic0ToXiPi { void init(InitContext&) { - std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, - doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, - doprocessMcWithKFParticle, doprocessMcWithKFParticleMl, doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl}; + std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, \ + doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, \ + doprocessMcWithKFParticle, doprocessMcWithKFParticleMl,doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl + }; if ((std::accumulate(doprocess.begin(), doprocess.end(), 0)) != 1) { LOGP(fatal, "One and only one process function should be enabled at a time."); } @@ -158,32 +159,14 @@ struct HfTaskXic0ToXiPi { } } - template - void processData(const CandType& candidates, CollType const&) - { - for (const auto& candidate : candidates) { - if (candidate.resultSelections() != true) { - continue; - } - if (yCandRecMax >= 0. && std::abs(candidate.etaCharmBaryon()) > yCandRecMax) { - continue; - } - - if constexpr (applyMl) { - registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.etaCharmBaryon()); - } else { - registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.etaCharmBaryon()); - } - } - } - - template + template void processDataCent(const CandType& candidate, CollType const& collision) { if (candidate.resultSelections() != true) { return; } - if (yCandRecMax >= 0. && std::abs(candidate.etaCharmBaryon()) > yCandRecMax) { + double etaCharmBaryon = useKfParticle ? candidate.kfRapXic() : candidate.etaCharmBaryon(); + if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { return; } @@ -199,7 +182,7 @@ struct HfTaskXic0ToXiPi { candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), ptXic, - candidate.etaCharmBaryon(), + etaCharmBaryon, centrality, ptPiFromXic, numPvContributors); @@ -207,14 +190,14 @@ struct HfTaskXic0ToXiPi { registry.fill(HIST("hMassVsPtVsYVsCentVsPtPion"), candidate.invMassCharmBaryon(), ptXic, - candidate.etaCharmBaryon(), + etaCharmBaryon, centrality, ptPiFromXic, numPvContributors); } } - template + template void processMc(const CandType& candidates, Xic0Gen const& mcParticles, TracksMc const&, @@ -224,20 +207,21 @@ struct HfTaskXic0ToXiPi { // MC rec. for (const auto& candidate : candidates) { if (candidate.resultSelections() != true) { - continue; + return; } - if (yCandRecMax >= 0. && std::abs(candidate.etaCharmBaryon()) > yCandRecMax) { - continue; + double etaCharmBaryon = useKfParticle ? candidate.kfRapXic() : candidate.etaCharmBaryon(); + if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { + return; } auto numPvContributors = candidate.template collision_as().numContrib(); - double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); if constexpr (applyMl) { registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), ptXic, - candidate.etaCharmBaryon(), + etaCharmBaryon, candidate.ptBhadMotherPart(), candidate.originMcRec(), candidate.flagMcMatchRec(), @@ -246,7 +230,7 @@ struct HfTaskXic0ToXiPi { registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), ptXic, - candidate.etaCharmBaryon(), + etaCharmBaryon, candidate.ptBhadMotherPart(), candidate.originMcRec(), candidate.flagMcMatchRec(), @@ -287,7 +271,7 @@ struct HfTaskXic0ToXiPi { } } } - + void processDataWithDCAFitter(Xic0Cands const& candidates, CollisionsWithEvSels const& collisions) { @@ -295,7 +279,7 @@ struct HfTaskXic0ToXiPi { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } } } @@ -308,20 +292,20 @@ struct HfTaskXic0ToXiPi { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true); void processDataWithDCAFitterMl(Xic0CandsMl const& candidates, - CollisionsWithEvSels const& collisions) + CollisionsWithEvSels const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } } } @@ -334,20 +318,20 @@ struct HfTaskXic0ToXiPi { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false); void processDataWithDCAFitterFT0C(Xic0Cands const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } } } @@ -360,20 +344,20 @@ struct HfTaskXic0ToXiPi { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false); void processDataWithDCAFitterFT0M(Xic0Cands const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } } } @@ -386,25 +370,25 @@ struct HfTaskXic0ToXiPi { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false); void processDataWithDCAFitterMlFT0C(Xic0CandsMl const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0C, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0C centrality", false); - + void processDataWithKFParticleMlFT0C(Xic0CandsMlKF const& candidates, CollisionsWithFT0C const& collisions) { @@ -412,22 +396,22 @@ struct HfTaskXic0ToXiPi { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false); void processDataWithDCAFitterMlFT0M(Xic0CandsMl const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0M, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0M centrality", false); @@ -438,19 +422,19 @@ struct HfTaskXic0ToXiPi { auto thisCollId = collision.globalIndex(); auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId); for (const auto& candidate : groupedXicCandidates) { - processDataCent(candidate, collision); + processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false); void processMcWithDCAFitter(Xic0CandsMc const& Xic0CandidatesMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { - processMc(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); + processMc(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitter, "Process MC with KFParticle", false); @@ -460,17 +444,17 @@ struct HfTaskXic0ToXiPi { CollisionsWithMcLabels const& collisions, aod::McCollisions const& mcCollisions) { - processMc(Xic0CandidatesMcKF, mcParticles, tracks, collisions, mcCollisions); + processMc(Xic0CandidatesMcKF, mcParticles, tracks, collisions, mcCollisions); } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticle, "Process MC with KFParticle", false); void processMcWithDCAFitterMl(Xic0CandsMlMc const& Xic0CandidatesMlMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { - processMc(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); + processMc(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitterMl, "Process MC with KFParticle and ML selections", false); @@ -480,7 +464,7 @@ struct HfTaskXic0ToXiPi { CollisionsWithMcLabels const& collisions, aod::McCollisions const& mcCollisions) { - processMc(Xic0CandidatesMlMcKF, mcParticles, tracks, collisions, mcCollisions); + processMc(Xic0CandidatesMlMcKF, mcParticles, tracks, collisions, mcCollisions); } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticleMl, "Process MC with KFParticle and ML selections", false); }; From 40c08f12a7b999f1e7b5332e03d13003c99808f6 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Mon, 6 Oct 2025 08:38:39 +0000 Subject: [PATCH 11/27] Please consider the following formatting changes --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 47 +++++++++++++++--------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index ef3e862f5dc..b16a102caea 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -106,10 +106,9 @@ struct HfTaskXic0ToXiPi { void init(InitContext&) { - std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, \ - doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, \ - doprocessMcWithKFParticle, doprocessMcWithKFParticleMl,doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl - }; + std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, + doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, + doprocessMcWithKFParticle, doprocessMcWithKFParticleMl, doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl}; if ((std::accumulate(doprocess.begin(), doprocess.end(), 0)) != 1) { LOGP(fatal, "One and only one process function should be enabled at a time."); } @@ -215,7 +214,7 @@ struct HfTaskXic0ToXiPi { } auto numPvContributors = candidate.template collision_as().numContrib(); - double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); if constexpr (applyMl) { registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], @@ -271,7 +270,7 @@ struct HfTaskXic0ToXiPi { } } } - + void processDataWithDCAFitter(Xic0Cands const& candidates, CollisionsWithEvSels const& collisions) { @@ -299,7 +298,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true); void processDataWithDCAFitterMl(Xic0CandsMl const& candidates, - CollisionsWithEvSels const& collisions) + CollisionsWithEvSels const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -325,7 +324,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false); void processDataWithDCAFitterFT0C(Xic0Cands const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -351,7 +350,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false); void processDataWithDCAFitterFT0M(Xic0Cands const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -377,7 +376,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false); void processDataWithDCAFitterMlFT0C(Xic0CandsMl const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -385,10 +384,10 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0C, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0C centrality", false); - + void processDataWithKFParticleMlFT0C(Xic0CandsMlKF const& candidates, CollisionsWithFT0C const& collisions) { @@ -398,12 +397,12 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false); void processDataWithDCAFitterMlFT0M(Xic0CandsMl const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -411,7 +410,7 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0M, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0M centrality", false); @@ -424,15 +423,15 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false); void processMcWithDCAFitter(Xic0CandsMc const& Xic0CandidatesMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { processMc(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); } @@ -449,10 +448,10 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticle, "Process MC with KFParticle", false); void processMcWithDCAFitterMl(Xic0CandsMlMc const& Xic0CandidatesMlMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { processMc(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); } From 75dfc7e9d2e97c941cb84b001b66cb339052b5c4 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Tue, 7 Oct 2025 13:58:07 +0800 Subject: [PATCH 12/27] Update taskXic0ToXiPi.cxx --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 61 ++++++++++++++++++------------ 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index b16a102caea..602782c7845 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -106,9 +106,10 @@ struct HfTaskXic0ToXiPi { void init(InitContext&) { - std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, - doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, - doprocessMcWithKFParticle, doprocessMcWithKFParticleMl, doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl}; + std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, \ + doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, \ + doprocessMcWithKFParticle, doprocessMcWithKFParticleMl,doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl + }; if ((std::accumulate(doprocess.begin(), doprocess.end(), 0)) != 1) { LOGP(fatal, "One and only one process function should be enabled at a time."); } @@ -164,7 +165,12 @@ struct HfTaskXic0ToXiPi { if (candidate.resultSelections() != true) { return; } - double etaCharmBaryon = useKfParticle ? candidate.kfRapXic() : candidate.etaCharmBaryon(); + double etaCharmBaryon; + if constexpr (useKfParticle) { + etaCharmBaryon = candidate.kfRapXic(); + } else { + etaCharmBaryon = candidate.etaCharmBaryon(); + } if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { return; } @@ -208,13 +214,18 @@ struct HfTaskXic0ToXiPi { if (candidate.resultSelections() != true) { return; } - double etaCharmBaryon = useKfParticle ? candidate.kfRapXic() : candidate.etaCharmBaryon(); + double etaCharmBaryon; + if constexpr (useKfParticle) { + etaCharmBaryon = candidate.kfRapXic(); + } else { + etaCharmBaryon = candidate.etaCharmBaryon(); + } if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { return; } auto numPvContributors = candidate.template collision_as().numContrib(); - double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); if constexpr (applyMl) { registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], @@ -270,7 +281,7 @@ struct HfTaskXic0ToXiPi { } } } - + void processDataWithDCAFitter(Xic0Cands const& candidates, CollisionsWithEvSels const& collisions) { @@ -298,7 +309,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true); void processDataWithDCAFitterMl(Xic0CandsMl const& candidates, - CollisionsWithEvSels const& collisions) + CollisionsWithEvSels const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -324,7 +335,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false); void processDataWithDCAFitterFT0C(Xic0Cands const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -350,7 +361,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false); void processDataWithDCAFitterFT0M(Xic0Cands const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -376,7 +387,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false); void processDataWithDCAFitterMlFT0C(Xic0CandsMl const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -384,10 +395,10 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0C, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0C centrality", false); - + void processDataWithKFParticleMlFT0C(Xic0CandsMlKF const& candidates, CollisionsWithFT0C const& collisions) { @@ -397,12 +408,12 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false); void processDataWithDCAFitterMlFT0M(Xic0CandsMl const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -410,7 +421,7 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0M, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0M centrality", false); @@ -423,15 +434,15 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false); void processMcWithDCAFitter(Xic0CandsMc const& Xic0CandidatesMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { processMc(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); } @@ -448,10 +459,10 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticle, "Process MC with KFParticle", false); void processMcWithDCAFitterMl(Xic0CandsMlMc const& Xic0CandidatesMlMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { processMc(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); } From 935f4e5af698bfbfc7a886569a0dba7aa615c787 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 7 Oct 2025 05:58:49 +0000 Subject: [PATCH 13/27] Please consider the following formatting changes --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 55 +++++++++++++++--------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index 602782c7845..fa4211f4bd1 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -106,10 +106,9 @@ struct HfTaskXic0ToXiPi { void init(InitContext&) { - std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, \ - doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, \ - doprocessMcWithKFParticle, doprocessMcWithKFParticleMl,doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl - }; + std::array doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, + doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, + doprocessMcWithKFParticle, doprocessMcWithKFParticleMl, doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl}; if ((std::accumulate(doprocess.begin(), doprocess.end(), 0)) != 1) { LOGP(fatal, "One and only one process function should be enabled at a time."); } @@ -167,9 +166,9 @@ struct HfTaskXic0ToXiPi { } double etaCharmBaryon; if constexpr (useKfParticle) { - etaCharmBaryon = candidate.kfRapXic(); + etaCharmBaryon = candidate.kfRapXic(); } else { - etaCharmBaryon = candidate.etaCharmBaryon(); + etaCharmBaryon = candidate.etaCharmBaryon(); } if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { return; @@ -216,16 +215,16 @@ struct HfTaskXic0ToXiPi { } double etaCharmBaryon; if constexpr (useKfParticle) { - etaCharmBaryon = candidate.kfRapXic(); + etaCharmBaryon = candidate.kfRapXic(); } else { - etaCharmBaryon = candidate.etaCharmBaryon(); + etaCharmBaryon = candidate.etaCharmBaryon(); } if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { return; } auto numPvContributors = candidate.template collision_as().numContrib(); - double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); if constexpr (applyMl) { registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], @@ -281,7 +280,7 @@ struct HfTaskXic0ToXiPi { } } } - + void processDataWithDCAFitter(Xic0Cands const& candidates, CollisionsWithEvSels const& collisions) { @@ -309,7 +308,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true); void processDataWithDCAFitterMl(Xic0CandsMl const& candidates, - CollisionsWithEvSels const& collisions) + CollisionsWithEvSels const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -335,7 +334,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false); void processDataWithDCAFitterFT0C(Xic0Cands const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -361,7 +360,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false); void processDataWithDCAFitterFT0M(Xic0Cands const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -387,7 +386,7 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false); void processDataWithDCAFitterMlFT0C(Xic0CandsMl const& candidates, - CollisionsWithFT0C const& collisions) + CollisionsWithFT0C const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -395,10 +394,10 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0C, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0C centrality", false); - + void processDataWithKFParticleMlFT0C(Xic0CandsMlKF const& candidates, CollisionsWithFT0C const& collisions) { @@ -408,12 +407,12 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false); void processDataWithDCAFitterMlFT0M(Xic0CandsMl const& candidates, - CollisionsWithFT0M const& collisions) + CollisionsWithFT0M const& collisions) { for (const auto& collision : collisions) { auto thisCollId = collision.globalIndex(); @@ -421,7 +420,7 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0M, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0M centrality", false); @@ -434,15 +433,15 @@ struct HfTaskXic0ToXiPi { for (const auto& candidate : groupedXicCandidates) { processDataCent(candidate, collision); } - } + } } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false); void processMcWithDCAFitter(Xic0CandsMc const& Xic0CandidatesMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { processMc(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); } @@ -459,10 +458,10 @@ struct HfTaskXic0ToXiPi { PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticle, "Process MC with KFParticle", false); void processMcWithDCAFitterMl(Xic0CandsMlMc const& Xic0CandidatesMlMc, - Xic0Gen const& mcParticles, - TracksMc const& tracks, - CollisionsWithMcLabels const& collisions, - aod::McCollisions const& mcCollisions) + Xic0Gen const& mcParticles, + TracksMc const& tracks, + CollisionsWithMcLabels const& collisions, + aod::McCollisions const& mcCollisions) { processMc(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); } From 3cc644c6b6bb048207b7728ac9c41123ce141f78 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:46:34 +0800 Subject: [PATCH 14/27] Update taskXic0ToXiPi.cxx --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index b827232be3c..fa4211f4bd1 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -124,7 +124,7 @@ struct HfTaskXic0ToXiPi { const AxisSpec thnAxisNumPvContr{thnConfigAxisNumPvContr, "Number of PV contributors"}; if (doprocessMcWithKFParticle || doprocessMcWithKFParticleMl) { - std::vector const axesAcc = {thnAxisGenPtD, thnAxisGenPtB, thnAxisY, thnAxisOrigin, thnAxisNumPvContr}; + std::vector axesAcc = {thnAxisGenPtD, thnAxisGenPtB, thnAxisY, thnAxisOrigin, thnAxisNumPvContr}; registry.add("hSparseAcc", "Thn for generated Xic0 from charm and beauty", HistType::kTHnSparseD, axesAcc); registry.get(HIST("hSparseAcc"))->Sumw2(); } @@ -149,8 +149,8 @@ struct HfTaskXic0ToXiPi { const AxisSpec thnAxisPromptScore{thnConfigAxisPromptScore, "BDT score prompt."}; const AxisSpec thnAxisCent{thnConfigAxisCent, "Centrality."}; const AxisSpec thnAxisPtPion{thnConfigAxisPtPion, "Pt of Pion from Xic0."}; - std::vector const axesWithBdtCent = {thnAxisPromptScore, thnAxisMass, thnAxisPt, thnAxisY, thnAxisCent, thnAxisPtPion, thnConfigAxisNumPvContr}; - std::vector const axesWithCent = {thnAxisMass, thnAxisPt, thnAxisY, thnAxisCent, thnAxisPtPion, thnConfigAxisNumPvContr}; + std::vector axesWithBdtCent = {thnAxisPromptScore, thnAxisMass, thnAxisPt, thnAxisY, thnAxisCent, thnAxisPtPion, thnConfigAxisNumPvContr}; + std::vector axesWithCent = {thnAxisMass, thnAxisPt, thnAxisY, thnAxisCent, thnAxisPtPion, thnConfigAxisNumPvContr}; registry.add("hBdtScoreVsMassVsPtVsYVsCentVsPtPion", "Thn for Xic0 candidates with BDT&Cent&pTpi", HistType::kTHnSparseD, axesWithBdtCent); registry.add("hMassVsPtVsYVsCentVsPtPion", "Thn for Xic0 candidates with Cent&pTpi", HistType::kTHnSparseD, axesWithCent); registry.get(HIST("hBdtScoreVsMassVsPtVsYVsCentVsPtPion"))->Sumw2(); @@ -270,7 +270,7 @@ struct HfTaskXic0ToXiPi { RecoDecay::OriginType::Prompt, maxNumContrib); } else { - float const ptGenB = mcParticles.rawIteratorAt(particle.idxBhadMotherPart()).pt(); + float ptGenB = mcParticles.rawIteratorAt(particle.idxBhadMotherPart()).pt(); registry.fill(HIST("hSparseAcc"), ptGen, ptGenB, @@ -447,7 +447,7 @@ struct HfTaskXic0ToXiPi { } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitter, "Process MC with KFParticle", false); - void processMcWithKFParticle(Xic0CandsMcKF const& xic0CandidatesMcKf, + void processMcWithKFParticle(Xic0CandsMcKF const& Xic0CandidatesMcKF, Xic0Gen const& mcParticles, TracksMc const& tracks, CollisionsWithMcLabels const& collisions, From 748728ffaca1f536e72a45b4397d704499f7b606 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 8 Oct 2025 19:59:30 +0800 Subject: [PATCH 15/27] Update taskXic0ToXiPi.cxx --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 44 +++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index fa4211f4bd1..e6237ca7e96 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -124,7 +124,7 @@ struct HfTaskXic0ToXiPi { const AxisSpec thnAxisNumPvContr{thnConfigAxisNumPvContr, "Number of PV contributors"}; if (doprocessMcWithKFParticle || doprocessMcWithKFParticleMl) { - std::vector axesAcc = {thnAxisGenPtD, thnAxisGenPtB, thnAxisY, thnAxisOrigin, thnAxisNumPvContr}; + std::vector const axesAcc = {thnAxisGenPtD, thnAxisGenPtB, thnAxisY, thnAxisOrigin, thnAxisNumPvContr}; registry.add("hSparseAcc", "Thn for generated Xic0 from charm and beauty", HistType::kTHnSparseD, axesAcc); registry.get(HIST("hSparseAcc"))->Sumw2(); } @@ -149,8 +149,8 @@ struct HfTaskXic0ToXiPi { const AxisSpec thnAxisPromptScore{thnConfigAxisPromptScore, "BDT score prompt."}; const AxisSpec thnAxisCent{thnConfigAxisCent, "Centrality."}; const AxisSpec thnAxisPtPion{thnConfigAxisPtPion, "Pt of Pion from Xic0."}; - std::vector axesWithBdtCent = {thnAxisPromptScore, thnAxisMass, thnAxisPt, thnAxisY, thnAxisCent, thnAxisPtPion, thnConfigAxisNumPvContr}; - std::vector axesWithCent = {thnAxisMass, thnAxisPt, thnAxisY, thnAxisCent, thnAxisPtPion, thnConfigAxisNumPvContr}; + std::vector const axesWithBdtCent = {thnAxisPromptScore, thnAxisMass, thnAxisPt, thnAxisY, thnAxisCent, thnAxisPtPion, thnConfigAxisNumPvContr}; + std::vector const axesWithCent = {thnAxisMass, thnAxisPt, thnAxisY, thnAxisCent, thnAxisPtPion, thnConfigAxisNumPvContr}; registry.add("hBdtScoreVsMassVsPtVsYVsCentVsPtPion", "Thn for Xic0 candidates with BDT&Cent&pTpi", HistType::kTHnSparseD, axesWithBdtCent); registry.add("hMassVsPtVsYVsCentVsPtPion", "Thn for Xic0 candidates with Cent&pTpi", HistType::kTHnSparseD, axesWithCent); registry.get(HIST("hBdtScoreVsMassVsPtVsYVsCentVsPtPion"))->Sumw2(); @@ -158,14 +158,14 @@ struct HfTaskXic0ToXiPi { } } - template + template void processDataCent(const CandType& candidate, CollType const& collision) { if (candidate.resultSelections() != true) { return; } double etaCharmBaryon; - if constexpr (useKfParticle) { + if constexpr (UseKfParticle) { etaCharmBaryon = candidate.kfRapXic(); } else { etaCharmBaryon = candidate.etaCharmBaryon(); @@ -176,12 +176,12 @@ struct HfTaskXic0ToXiPi { auto numPvContributors = collision.numContrib(); float centrality = -999.f; - if constexpr (useCentrality) { + if constexpr (UseCentrality) { centrality = o2::hf_centrality::getCentralityColl(collision); } - double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); - double ptPiFromXic = RecoDecay::pt(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); - if constexpr (applyMl) { + double const ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + double const ptPiFromXic = RecoDecay::pt(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); + if constexpr (ApplyMl) { registry.fill(HIST("hBdtScoreVsMassVsPtVsYVsCentVsPtPion"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), @@ -201,7 +201,7 @@ struct HfTaskXic0ToXiPi { } } - template + template void processMc(const CandType& candidates, Xic0Gen const& mcParticles, TracksMc const&, @@ -214,7 +214,7 @@ struct HfTaskXic0ToXiPi { return; } double etaCharmBaryon; - if constexpr (useKfParticle) { + if constexpr (UseKfParticle) { etaCharmBaryon = candidate.kfRapXic(); } else { etaCharmBaryon = candidate.etaCharmBaryon(); @@ -224,8 +224,8 @@ struct HfTaskXic0ToXiPi { } auto numPvContributors = candidate.template collision_as().numContrib(); - double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); - if constexpr (applyMl) { + double const ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + if constexpr (ApplyMl) { registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), @@ -270,7 +270,7 @@ struct HfTaskXic0ToXiPi { RecoDecay::OriginType::Prompt, maxNumContrib); } else { - float ptGenB = mcParticles.rawIteratorAt(particle.idxBhadMotherPart()).pt(); + float const ptGenB = mcParticles.rawIteratorAt(particle.idxBhadMotherPart()).pt(); registry.fill(HIST("hSparseAcc"), ptGen, ptGenB, @@ -437,43 +437,43 @@ struct HfTaskXic0ToXiPi { } PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false); - void processMcWithDCAFitter(Xic0CandsMc const& Xic0CandidatesMc, + void processMcWithDCAFitter(Xic0CandsMc const& xic0CandidatesMc, Xic0Gen const& mcParticles, TracksMc const& tracks, CollisionsWithMcLabels const& collisions, aod::McCollisions const& mcCollisions) { - processMc(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); + processMc(xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions); } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitter, "Process MC with KFParticle", false); - void processMcWithKFParticle(Xic0CandsMcKF const& Xic0CandidatesMcKF, + void processMcWithKFParticle(Xic0CandsMcKF const& xic0CandidatesMcKf, Xic0Gen const& mcParticles, TracksMc const& tracks, CollisionsWithMcLabels const& collisions, aod::McCollisions const& mcCollisions) { - processMc(Xic0CandidatesMcKF, mcParticles, tracks, collisions, mcCollisions); + processMc(xic0CandidatesMcKf, mcParticles, tracks, collisions, mcCollisions); } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticle, "Process MC with KFParticle", false); - void processMcWithDCAFitterMl(Xic0CandsMlMc const& Xic0CandidatesMlMc, + void processMcWithDCAFitterMl(Xic0CandsMlMc const& xic0CandidatesMlMc, Xic0Gen const& mcParticles, TracksMc const& tracks, CollisionsWithMcLabels const& collisions, aod::McCollisions const& mcCollisions) { - processMc(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); + processMc(xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions); } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitterMl, "Process MC with KFParticle and ML selections", false); - void processMcWithKFParticleMl(Xic0CandsMlMcKF const& Xic0CandidatesMlMcKF, + void processMcWithKFParticleMl(Xic0CandsMlMcKF const& xic0CandidatesMlMcKf, Xic0Gen const& mcParticles, TracksMc const& tracks, CollisionsWithMcLabels const& collisions, aod::McCollisions const& mcCollisions) { - processMc(Xic0CandidatesMlMcKF, mcParticles, tracks, collisions, mcCollisions); + processMc(xic0CandidatesMlMcKf, mcParticles, tracks, collisions, mcCollisions); } PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticleMl, "Process MC with KFParticle and ML selections", false); }; From 45950c76a603dc3c25de5d83ef35c4dbeca12e0f Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 8 Oct 2025 20:00:40 +0800 Subject: [PATCH 16/27] Update candidateSelectorToXiPi.cxx --- PWGHF/TableProducer/candidateSelectorToXiPi.cxx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx index 5d382964b39..7b3f09ebd35 100644 --- a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx @@ -14,8 +14,12 @@ /// \author Federica Zanone , Heidelberg University /// \author Tao Fang , Central China Normal University +#include +#include + #include "PWGHF/Core/HfMlResponseXic0ToXiPi.h" #include "PWGHF/Core/SelectorCuts.h" + #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" #include "PWGHF/Utils/utilsAnalysis.h" @@ -41,8 +45,6 @@ #include #include -#include -#include using namespace o2; using namespace o2::aod; @@ -142,14 +144,14 @@ struct HfCandidateSelectorToXiPi { Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsCutScore}, "ML selections per pT bin"}; Configurable nClassesMl{"nClassesMl", static_cast(hf_cuts_ml::NCutScores), "Number of classes in ML model"}; Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"feature1", "feature2"}, "Names of ML model input features"}; - + // CCDB configuration Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{"EventFiltering/PWGHF/BDTXic0ToXipiKf"}, "Paths of models on CCDB"}; Configurable> onnxFileNames{"onnxFileNames", std::vector{"ModelHandler_onnx_Xic0ToXipiKf.onnx"}, "ONNX file names for each pT bin (if not from CCDB full path)"}; Configurable timestampCCDB{"timestampCCDB", -1, "timestamp of the ONNX file for ML model used to query in CCDB"}; Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; - + o2::analysis::HfMlResponseXic0ToXiPi hfMlResponse; std::vector outputMlXic0ToXiPi = {}; o2::ccdb::CcdbApi ccdbApi; @@ -556,7 +558,7 @@ struct HfCandidateSelectorToXiPi { } else { registry.fill(HIST("hSelMassCharmBaryon"), 0); } - + // ML selections if (applyMl) { bool isSelectedMlXic0 = false; From 06997f1dc350a716af3100e758e12f2f2e9dab09 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 8 Oct 2025 20:02:08 +0800 Subject: [PATCH 17/27] Update treeCreatorToXiPi.cxx From 64b4e4f20afab1a3e8a2d8fb249e06619161c3ec Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Wed, 8 Oct 2025 20:06:32 +0800 Subject: [PATCH 18/27] Update taskXic0ToXiPi.cxx --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index e6237ca7e96..8bf945a2a0e 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -211,7 +211,7 @@ struct HfTaskXic0ToXiPi { // MC rec. for (const auto& candidate : candidates) { if (candidate.resultSelections() != true) { - return; + continue; } double etaCharmBaryon; if constexpr (UseKfParticle) { @@ -220,7 +220,7 @@ struct HfTaskXic0ToXiPi { etaCharmBaryon = candidate.etaCharmBaryon(); } if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { - return; + continue; } auto numPvContributors = candidate.template collision_as().numContrib(); From 25b9b1b53815df88873ba2a211d4556a7d73d239 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 8 Oct 2025 12:07:15 +0000 Subject: [PATCH 19/27] Please consider the following formatting changes --- PWGHF/TableProducer/candidateSelectorToXiPi.cxx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx index 7b3f09ebd35..5d382964b39 100644 --- a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx @@ -14,12 +14,8 @@ /// \author Federica Zanone , Heidelberg University /// \author Tao Fang , Central China Normal University -#include -#include - #include "PWGHF/Core/HfMlResponseXic0ToXiPi.h" #include "PWGHF/Core/SelectorCuts.h" - #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" #include "PWGHF/Utils/utilsAnalysis.h" @@ -45,6 +41,8 @@ #include #include +#include +#include using namespace o2; using namespace o2::aod; @@ -144,14 +142,14 @@ struct HfCandidateSelectorToXiPi { Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsCutScore}, "ML selections per pT bin"}; Configurable nClassesMl{"nClassesMl", static_cast(hf_cuts_ml::NCutScores), "Number of classes in ML model"}; Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"feature1", "feature2"}, "Names of ML model input features"}; - + // CCDB configuration Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{"EventFiltering/PWGHF/BDTXic0ToXipiKf"}, "Paths of models on CCDB"}; Configurable> onnxFileNames{"onnxFileNames", std::vector{"ModelHandler_onnx_Xic0ToXipiKf.onnx"}, "ONNX file names for each pT bin (if not from CCDB full path)"}; Configurable timestampCCDB{"timestampCCDB", -1, "timestamp of the ONNX file for ML model used to query in CCDB"}; Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; - + o2::analysis::HfMlResponseXic0ToXiPi hfMlResponse; std::vector outputMlXic0ToXiPi = {}; o2::ccdb::CcdbApi ccdbApi; @@ -558,7 +556,7 @@ struct HfCandidateSelectorToXiPi { } else { registry.fill(HIST("hSelMassCharmBaryon"), 0); } - + // ML selections if (applyMl) { bool isSelectedMlXic0 = false; From 4e9dd4c7ef6e5df7dd7a4533da1ce1781d09d5b9 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Sat, 11 Oct 2025 15:06:02 +0800 Subject: [PATCH 20/27] Update taskFlowCharmHadrons.cxx --- PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx b/PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx index a7c954f9720..4aa872b7e4e 100644 --- a/PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx +++ b/PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx @@ -133,7 +133,7 @@ struct HfTaskFlowCharmHadrons { using CandXicData = soa::Filtered>; using CandXicDataWMl = soa::Filtered>; using CandXic0Data = soa::Filtered>; - using CandXic0DataWMl = soa::Filtered>; + using CandXic0DataWMl = soa::Filtered>; using CandD0DataWMl = soa::Filtered>; using CandD0Data = soa::Filtered>; using CollsWithQvecs = soa::Join; From 5727dff7381d904b30fd2a7605e70e4b5f0b2c74 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Sat, 11 Oct 2025 15:09:30 +0800 Subject: [PATCH 21/27] Update taskXic0ToXiPi.cxx --- PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx index 8bf945a2a0e..5c923dc4309 100644 --- a/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx +++ b/PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx @@ -68,9 +68,9 @@ struct HfTaskXic0ToXiPi { using Xic0CandsMcKF = soa::Filtered>; using Xic0CandsMl = soa::Filtered>; - using Xic0CandsMlKF = soa::Filtered>; + using Xic0CandsMlKF = soa::Filtered>; using Xic0CandsMlMc = soa::Filtered>; - using Xic0CandsMlMcKF = soa::Filtered>; + using Xic0CandsMlMcKF = soa::Filtered>; using Xic0Gen = soa::Filtered>; @@ -164,13 +164,13 @@ struct HfTaskXic0ToXiPi { if (candidate.resultSelections() != true) { return; } - double etaCharmBaryon; + double yCharmBaryon; if constexpr (UseKfParticle) { - etaCharmBaryon = candidate.kfRapXic(); + yCharmBaryon = candidate.kfRapXic(); } else { - etaCharmBaryon = candidate.etaCharmBaryon(); + yCharmBaryon = candidate.y(o2::constants::physics::MassXiC0); } - if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { + if (yCandRecMax >= 0. && std::abs(yCharmBaryon) > yCandRecMax) { return; } @@ -186,7 +186,7 @@ struct HfTaskXic0ToXiPi { candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), ptXic, - etaCharmBaryon, + yCharmBaryon, centrality, ptPiFromXic, numPvContributors); @@ -194,7 +194,7 @@ struct HfTaskXic0ToXiPi { registry.fill(HIST("hMassVsPtVsYVsCentVsPtPion"), candidate.invMassCharmBaryon(), ptXic, - etaCharmBaryon, + yCharmBaryon, centrality, ptPiFromXic, numPvContributors); @@ -213,13 +213,13 @@ struct HfTaskXic0ToXiPi { if (candidate.resultSelections() != true) { continue; } - double etaCharmBaryon; + double yCharmBaryon; if constexpr (UseKfParticle) { - etaCharmBaryon = candidate.kfRapXic(); + yCharmBaryon = candidate.kfRapXic(); } else { - etaCharmBaryon = candidate.etaCharmBaryon(); + yCharmBaryon = candidate.y(o2::constants::physics::MassXiC0); } - if (yCandRecMax >= 0. && std::abs(etaCharmBaryon) > yCandRecMax) { + if (yCandRecMax >= 0. && std::abs(yCharmBaryon) > yCandRecMax) { continue; } @@ -230,7 +230,7 @@ struct HfTaskXic0ToXiPi { candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), ptXic, - etaCharmBaryon, + yCharmBaryon, candidate.ptBhadMotherPart(), candidate.originMcRec(), candidate.flagMcMatchRec(), @@ -239,7 +239,7 @@ struct HfTaskXic0ToXiPi { registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), ptXic, - etaCharmBaryon, + yCharmBaryon, candidate.ptBhadMotherPart(), candidate.originMcRec(), candidate.flagMcMatchRec(), From 23e866ba236144cb019936b4f90a9f9ed63eca20 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Sat, 11 Oct 2025 15:13:21 +0800 Subject: [PATCH 22/27] Update CandidateReconstructionTables.h --- PWGHF/DataModel/CandidateReconstructionTables.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 37c96d5627a..0a98b705dcb 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1633,7 +1633,9 @@ DECLARE_SOA_TABLE(HfCandToXiPi, "AOD", "HFCANDTOXIPI", hf_cand_xic0_omegac0::DcaXYToPvV0Dau0, hf_cand_xic0_omegac0::DcaXYToPvV0Dau1, hf_cand_xic0_omegac0::DcaXYToPvCascDau, hf_cand_xic0_omegac0::DcaZToPvV0Dau0, hf_cand_xic0_omegac0::DcaZToPvV0Dau1, hf_cand_xic0_omegac0::DcaZToPvCascDau, hf_cand_xic0_omegac0::DcaCascDau, hf_cand_xic0_omegac0::DcaV0Dau, hf_cand_xic0_omegac0::DcaCharmBaryonDau, - hf_cand_xic0_omegac0::DecLenCharmBaryon, hf_cand_xic0_omegac0::DecLenCascade, hf_cand_xic0_omegac0::DecLenV0, hf_cand_xic0_omegac0::ErrorDecayLengthCharmBaryon, hf_cand_xic0_omegac0::ErrorDecayLengthXYCharmBaryon); + hf_cand_xic0_omegac0::DecLenCharmBaryon, hf_cand_xic0_omegac0::DecLenCascade, hf_cand_xic0_omegac0::DecLenV0, hf_cand_xic0_omegac0::ErrorDecayLengthCharmBaryon, hf_cand_xic0_omegac0::ErrorDecayLengthXYCharmBaryon + // dynamic + hf_cand::Y); DECLARE_SOA_TABLE(HfCandToOmegaPi, "AOD", "HFCANDTOOMEGAPI", o2::soa::Index<>, From 138362e6394c6d18b6e2880374fb7d9056495344 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Sat, 11 Oct 2025 15:15:54 +0800 Subject: [PATCH 23/27] Update CandidateSelectionTables.h --- PWGHF/DataModel/CandidateSelectionTables.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/PWGHF/DataModel/CandidateSelectionTables.h b/PWGHF/DataModel/CandidateSelectionTables.h index c64a2f55c7c..1f7956aadd4 100644 --- a/PWGHF/DataModel/CandidateSelectionTables.h +++ b/PWGHF/DataModel/CandidateSelectionTables.h @@ -384,9 +384,6 @@ DECLARE_SOA_TABLE(HfSelToXiPiKf, "AOD", "HFSELTOXIPIKF", DECLARE_SOA_TABLE(HfMlToXiPi, "AOD", "HFMLSELTOXIPI", hf_sel_toxipi::MlProbToXiPi); -DECLARE_SOA_TABLE(HfMlToXiPiKf, "AOD", "HFMLSELTOXIPIKF", - hf_sel_toxipi::MlProbToXiPi); - namespace hf_sel_toomegapi { DECLARE_SOA_COLUMN(StatusPidLambda, statusPidLambda, bool); From 50228aa51e3366ab3461fc813cf2a7fee20edc9e Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Sat, 11 Oct 2025 15:16:59 +0800 Subject: [PATCH 24/27] Update candidateSelectorXic0ToXiPiKf.cxx --- PWGHF/TableProducer/candidateSelectorXic0ToXiPiKf.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateSelectorXic0ToXiPiKf.cxx b/PWGHF/TableProducer/candidateSelectorXic0ToXiPiKf.cxx index f40b2c030e5..13e131bbcfb 100644 --- a/PWGHF/TableProducer/candidateSelectorXic0ToXiPiKf.cxx +++ b/PWGHF/TableProducer/candidateSelectorXic0ToXiPiKf.cxx @@ -61,7 +61,7 @@ enum PidInfoStored { /// Struct for applying Xic0 -> Xi pi selection cuts struct HfCandidateSelectorXic0ToXiPiKf { Produces hfSelToXiPi; - Produces hfMlToXiPi; + Produces hfMlToXiPi; // kinematic selections Configurable etaTrackCharmBachMax{"etaTrackCharmBachMax", 0.8, "Max absolute value of eta for charm baryon bachelor"}; From 611ed6cf1155e1b212d35a5f736c6620977ae0a9 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Sat, 11 Oct 2025 07:17:36 +0000 Subject: [PATCH 25/27] Please consider the following formatting changes --- PWGHF/DataModel/CandidateReconstructionTables.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 0a98b705dcb..b3b2d6755eb 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1634,8 +1634,8 @@ DECLARE_SOA_TABLE(HfCandToXiPi, "AOD", "HFCANDTOXIPI", hf_cand_xic0_omegac0::DcaZToPvV0Dau0, hf_cand_xic0_omegac0::DcaZToPvV0Dau1, hf_cand_xic0_omegac0::DcaZToPvCascDau, hf_cand_xic0_omegac0::DcaCascDau, hf_cand_xic0_omegac0::DcaV0Dau, hf_cand_xic0_omegac0::DcaCharmBaryonDau, hf_cand_xic0_omegac0::DecLenCharmBaryon, hf_cand_xic0_omegac0::DecLenCascade, hf_cand_xic0_omegac0::DecLenV0, hf_cand_xic0_omegac0::ErrorDecayLengthCharmBaryon, hf_cand_xic0_omegac0::ErrorDecayLengthXYCharmBaryon - // dynamic - hf_cand::Y); + // dynamic + hf_cand::Y); DECLARE_SOA_TABLE(HfCandToOmegaPi, "AOD", "HFCANDTOOMEGAPI", o2::soa::Index<>, From 12b2049335d04c58f5e53be9ba9cc1ce1210dbb2 Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Sat, 11 Oct 2025 15:30:01 +0800 Subject: [PATCH 26/27] Update CandidateReconstructionTables.h --- PWGHF/DataModel/CandidateReconstructionTables.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index b3b2d6755eb..addd26ab716 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1633,9 +1633,9 @@ DECLARE_SOA_TABLE(HfCandToXiPi, "AOD", "HFCANDTOXIPI", hf_cand_xic0_omegac0::DcaXYToPvV0Dau0, hf_cand_xic0_omegac0::DcaXYToPvV0Dau1, hf_cand_xic0_omegac0::DcaXYToPvCascDau, hf_cand_xic0_omegac0::DcaZToPvV0Dau0, hf_cand_xic0_omegac0::DcaZToPvV0Dau1, hf_cand_xic0_omegac0::DcaZToPvCascDau, hf_cand_xic0_omegac0::DcaCascDau, hf_cand_xic0_omegac0::DcaV0Dau, hf_cand_xic0_omegac0::DcaCharmBaryonDau, - hf_cand_xic0_omegac0::DecLenCharmBaryon, hf_cand_xic0_omegac0::DecLenCascade, hf_cand_xic0_omegac0::DecLenV0, hf_cand_xic0_omegac0::ErrorDecayLengthCharmBaryon, hf_cand_xic0_omegac0::ErrorDecayLengthXYCharmBaryon - // dynamic - hf_cand::Y); + hf_cand_xic0_omegac0::DecLenCharmBaryon, hf_cand_xic0_omegac0::DecLenCascade, hf_cand_xic0_omegac0::DecLenV0, hf_cand_xic0_omegac0::ErrorDecayLengthCharmBaryon, hf_cand_xic0_omegac0::ErrorDecayLengthXYCharmBaryon, + // dynamic + hf_cand::Y); DECLARE_SOA_TABLE(HfCandToOmegaPi, "AOD", "HFCANDTOOMEGAPI", o2::soa::Index<>, From 04daca8f7b9898f6e69933471b27a5adde9d036c Mon Sep 17 00:00:00 2001 From: Tao_Fang <52570362+Tao-Fang@users.noreply.github.com> Date: Sat, 11 Oct 2025 16:08:24 +0800 Subject: [PATCH 27/27] Update candidateSelectorToXiPi.cxx --- PWGHF/TableProducer/candidateSelectorToXiPi.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx index 5d382964b39..ab13519f62e 100644 --- a/PWGHF/TableProducer/candidateSelectorToXiPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorToXiPi.cxx @@ -59,7 +59,7 @@ enum PidInfoStored { /// Struct for applying Omegac0/Xic0 selection cuts struct HfCandidateSelectorToXiPi { Produces hfSelToXiPi; - Produces hfMlToXiPi; + Produces hfMlToXiPi; // LF analysis selections Configurable radiusCascMin{"radiusCascMin", 0.6, "Min cascade radius"};