From 9206688fef9d435368716019549fbc2f994f6830 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Tue, 14 Jul 2026 16:55:06 +0200 Subject: [PATCH 1/4] Add mini tree for 2-prong masses in Ds task --- PWGHF/Core/HfHelper.h | 24 +++++++++++++++++++++++ PWGHF/D2H/Tasks/taskDs.cxx | 39 +++++++++++++++++++++++++++++++++++--- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/PWGHF/Core/HfHelper.h b/PWGHF/Core/HfHelper.h index e91bfa85ca8..c128598522d 100644 --- a/PWGHF/Core/HfHelper.h +++ b/PWGHF/Core/HfHelper.h @@ -271,6 +271,30 @@ struct HfHelper { return RecoDecay::m(std::array{candidate.pVectorProng1(), candidate.pVectorProng2()}, std::array{o2::constants::physics::MassKPlus, o2::constants::physics::MassKPlus}); } + template + static auto massKFirstPiPairDsToKKPi(const T& candidate) + { + return RecoDecay::m(std::array{candidate.pVectorProng0(), candidate.pVectorProng2()}, std::array{o2::constants::physics::MassKPlus, o2::constants::physics::MassPiPlus}); + } + + template + static auto massKFirstPiPairDsToPiKK(const T& candidate) + { + return RecoDecay::m(std::array{candidate.pVectorProng0(), candidate.pVectorProng2()}, std::array{o2::constants::physics::MassPiPlus, o2::constants::physics::MassKPlus}); + } + + template + static auto massKSecondPiPairDsToKKPi(const T& candidate) + { + return RecoDecay::m(std::array{candidate.pVectorProng1(), candidate.pVectorProng2()}, std::array{o2::constants::physics::MassKPlus, o2::constants::physics::MassPiPlus}); + } + + template + static auto massKSecondPiPairDsToPiKK(const T& candidate) + { + return RecoDecay::m(std::array{candidate.pVectorProng0(), candidate.pVectorProng1()}, std::array{o2::constants::physics::MassPiPlus, o2::constants::physics::MassKPlus}); + } + template static auto deltaMassPhiDsToKKPi(const T& candidate) { diff --git a/PWGHF/D2H/Tasks/taskDs.cxx b/PWGHF/D2H/Tasks/taskDs.cxx index 0f163718eda..ad97d25ba22 100644 --- a/PWGHF/D2H/Tasks/taskDs.cxx +++ b/PWGHF/D2H/Tasks/taskDs.cxx @@ -98,7 +98,10 @@ namespace o2::aod namespace hf_cand_ds_mini { DECLARE_SOA_COLUMN(Pt, pt, float); //! Transverse momentum of D-meson candidate (GeV/c) -DECLARE_SOA_COLUMN(M, m, float); //! Invariant mass of D-meson candidates (GeV/c) +DECLARE_SOA_COLUMN(M, m, float); //! Invariant mass of D-meson candidates (GeV/c2) +DECLARE_SOA_COLUMN(MassKaKa, massKaKa, float); //! Invariant mass of kaon pairs (GeV/c2) +DECLARE_SOA_COLUMN(MassKaFirstPi, massKaFirstPi, float); //! Invariant mass of kaon(first) pion (GeV/c2) +DECLARE_SOA_COLUMN(MassKaSecondPi, massKaSecondPi, float); //! Invariant mass of kaon(second) pion (GeV/c2) DECLARE_SOA_COLUMN(Centrality, centrality, float); //! Centrality of collision DECLARE_SOA_COLUMN(ImpactParameter, impactParameter, float); //! Impact parameter of D-meson candidate DECLARE_SOA_COLUMN(ImpactParameterMc, impactParameterMc, float); //! Generated impact parameter of D-meson candidate @@ -114,6 +117,11 @@ DECLARE_SOA_TABLE(HfCandDsMinis, "AOD", "HFDSMINI", //! Table with few Ds proper hf_cand_ds_mini::Pt, hf_cand_ds_mini::Centrality); +DECLARE_SOA_TABLE(HfCandDsMassMinis, "AOD", "HFDSMASSMINI", //! Table with Ds 2-prong masses + hf_cand_ds_mini::MassKaKa, + hf_cand_ds_mini::MassKaFirstPi, + hf_cand_ds_mini::MassKaSecondPi); + DECLARE_SOA_TABLE(HfCandDsDlMinis, "AOD", "HFDSDLMINI", //! Table with decay length Ds properties hf_cand_ds_mini::DecayLength, hf_cand_ds_mini::DecayLengthXY, @@ -142,6 +150,7 @@ concept HasDsMlInfo = requires(T candidate) { /// Ds± analysis task struct HfTaskDs { Produces hfCandDsMinis; + Produces hfCandDsMassMinis; Produces hfCandDsDlMinis; Produces hfCandDsD0Minis; Produces hfCandDsMcMinis; @@ -592,10 +601,22 @@ struct HfTaskDs { template void fillMiniTrees(const Cand& candidate, FinalState finalState) { - auto mass = finalState == FinalState::KKPi ? HfHelper::invMassDsToKKPi(candidate) : HfHelper::invMassDsToPiKK(candidate); + float mass{-1.f}, massKaKa{-1.f}, massKaFirstPi{-1.f}, massKaSecondPi{-1.f}; + if (finalState == FinalState::KKPi) { + mass = HfHelper::invMassDsToKKPi(candidate); + massKaKa = HfHelper::massKKPairDsToKKPi(candidate); + massKaFirstPi = massKFirstPiPairDsToKKPi(candidate); + massKaSecondPi = massKSecondPiPairDsToKKPi(candidate); + } else { + mass = HfHelper::invMassDsToPiKK(candidate); + massKaKa = HfHelper::massKKPairDsToPiKK(candidate); + massKaFirstPi = massKFirstPiPairDsToPiKK(candidate); + massKaSecondPi = massKSecondPiPairDsToPiKK(candidate); + } auto pt = candidate.pt(); hfCandDsMinis(mass, pt, evaluateCentralityCand(candidate)); + hfCandDsMassMinis(mass, massKaKa, massKaFirstPi, massKaSecondPi); if (miniTrees.extendWithDecayLength) { hfCandDsDlMinis(candidate.decayLength(), candidate.decayLengthXY(), candidate.decayLengthNormalised(), candidate.decayLengthXYNormalised()); } @@ -607,10 +628,22 @@ struct HfTaskDs { template void fillMiniTreesMc(const Cand& candidate, DataType dataType, FinalState finalState, const CandDsMcGen& mcParticles, int indexMother) { - auto mass = finalState == FinalState::KKPi ? HfHelper::invMassDsToKKPi(candidate) : HfHelper::invMassDsToPiKK(candidate); + float mass{-1.f}, massKaKa{-1.f}, massKaFirstPi{-1.f}, massKaSecondPi{-1.f}; + if (finalState == FinalState::KKPi) { + mass = HfHelper::invMassDsToKKPi(candidate); + massKaKa = HfHelper::massKKPairDsToKKPi(candidate); + massKaFirstPi = massKFirstPiPairDsToKKPi(candidate); + massKaSecondPi = massKSecondPiPairDsToKKPi(candidate); + } else { + mass = HfHelper::invMassDsToPiKK(candidate); + massKaKa = HfHelper::massKKPairDsToPiKK(candidate); + massKaFirstPi = massKFirstPiPairDsToPiKK(candidate); + massKaSecondPi = massKSecondPiPairDsToPiKK(candidate); + } auto pt = candidate.pt(); hfCandDsMinis(mass, pt, evaluateCentralityCand(candidate)); + hfCandDsMassMinis(mass, massKaKa, massKaFirstPi, massKaSecondPi); if (miniTrees.extendWithDecayLength) { hfCandDsDlMinis(candidate.decayLength(), candidate.decayLengthXY(), candidate.decayLengthNormalised(), candidate.decayLengthXYNormalised()); } From c1a766d3701f763a9e4a6d1f701d190dbf1c5c2f Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Tue, 14 Jul 2026 17:11:35 +0200 Subject: [PATCH 2/4] Add missing namespace --- PWGHF/D2H/Tasks/taskDs.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskDs.cxx b/PWGHF/D2H/Tasks/taskDs.cxx index ad97d25ba22..e258839ba5f 100644 --- a/PWGHF/D2H/Tasks/taskDs.cxx +++ b/PWGHF/D2H/Tasks/taskDs.cxx @@ -632,13 +632,13 @@ struct HfTaskDs { if (finalState == FinalState::KKPi) { mass = HfHelper::invMassDsToKKPi(candidate); massKaKa = HfHelper::massKKPairDsToKKPi(candidate); - massKaFirstPi = massKFirstPiPairDsToKKPi(candidate); - massKaSecondPi = massKSecondPiPairDsToKKPi(candidate); + massKaFirstPi = HfHelper::massKFirstPiPairDsToKKPi(candidate); + massKaSecondPi = HfHelper::massKSecondPiPairDsToKKPi(candidate); } else { mass = HfHelper::invMassDsToPiKK(candidate); massKaKa = HfHelper::massKKPairDsToPiKK(candidate); - massKaFirstPi = massKFirstPiPairDsToPiKK(candidate); - massKaSecondPi = massKSecondPiPairDsToPiKK(candidate); + massKaFirstPi = HfHelper::massKFirstPiPairDsToPiKK(candidate); + massKaSecondPi = HfHelper::massKSecondPiPairDsToPiKK(candidate); } auto pt = candidate.pt(); From 8547d422399d5a20d32bac627f4cfb5520a60b50 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Tue, 14 Jul 2026 17:12:34 +0200 Subject: [PATCH 3/4] Remove variable from table filling --- PWGHF/D2H/Tasks/taskDs.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskDs.cxx b/PWGHF/D2H/Tasks/taskDs.cxx index e258839ba5f..3eeeeae8490 100644 --- a/PWGHF/D2H/Tasks/taskDs.cxx +++ b/PWGHF/D2H/Tasks/taskDs.cxx @@ -616,7 +616,7 @@ struct HfTaskDs { auto pt = candidate.pt(); hfCandDsMinis(mass, pt, evaluateCentralityCand(candidate)); - hfCandDsMassMinis(mass, massKaKa, massKaFirstPi, massKaSecondPi); + hfCandDsMassMinis(massKaKa, massKaFirstPi, massKaSecondPi); if (miniTrees.extendWithDecayLength) { hfCandDsDlMinis(candidate.decayLength(), candidate.decayLengthXY(), candidate.decayLengthNormalised(), candidate.decayLengthXYNormalised()); } @@ -643,7 +643,7 @@ struct HfTaskDs { auto pt = candidate.pt(); hfCandDsMinis(mass, pt, evaluateCentralityCand(candidate)); - hfCandDsMassMinis(mass, massKaKa, massKaFirstPi, massKaSecondPi); + hfCandDsMassMinis(massKaKa, massKaFirstPi, massKaSecondPi); if (miniTrees.extendWithDecayLength) { hfCandDsDlMinis(candidate.decayLength(), candidate.decayLengthXY(), candidate.decayLengthNormalised(), candidate.decayLengthXYNormalised()); } From 7f4430cc92e28b99ea696da1a255b0e5d2bc6dbc Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Tue, 14 Jul 2026 17:22:21 +0200 Subject: [PATCH 4/4] Add missing namespace --- PWGHF/D2H/Tasks/taskDs.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGHF/D2H/Tasks/taskDs.cxx b/PWGHF/D2H/Tasks/taskDs.cxx index 3eeeeae8490..d8d1362a5d3 100644 --- a/PWGHF/D2H/Tasks/taskDs.cxx +++ b/PWGHF/D2H/Tasks/taskDs.cxx @@ -605,13 +605,13 @@ struct HfTaskDs { if (finalState == FinalState::KKPi) { mass = HfHelper::invMassDsToKKPi(candidate); massKaKa = HfHelper::massKKPairDsToKKPi(candidate); - massKaFirstPi = massKFirstPiPairDsToKKPi(candidate); - massKaSecondPi = massKSecondPiPairDsToKKPi(candidate); + massKaFirstPi = HfHelper::massKFirstPiPairDsToKKPi(candidate); + massKaSecondPi = HfHelper::massKSecondPiPairDsToKKPi(candidate); } else { mass = HfHelper::invMassDsToPiKK(candidate); massKaKa = HfHelper::massKKPairDsToPiKK(candidate); - massKaFirstPi = massKFirstPiPairDsToPiKK(candidate); - massKaSecondPi = massKSecondPiPairDsToPiKK(candidate); + massKaFirstPi = HfHelper::massKFirstPiPairDsToPiKK(candidate); + massKaSecondPi = HfHelper::massKSecondPiPairDsToPiKK(candidate); } auto pt = candidate.pt();