From a7d8d58d303a4e53c825879071d818e4b3795fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Thu, 4 Sep 2025 15:39:39 +0200 Subject: [PATCH 1/4] Update taskCharmHadronsFemtoDream.cxx --- .../HFC/Tasks/taskCharmHadronsFemtoDream.cxx | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx b/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx index 5632f7eefe8..f191c3ef271 100644 --- a/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx +++ b/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx @@ -24,6 +24,8 @@ #include "PWGCF/FemtoDream/Core/femtoDreamParticleHisto.h" #include "PWGCF/FemtoDream/Core/femtoDreamUtils.h" +#include "Common/Core/RecoDecay.h" + #include #include #include @@ -298,6 +300,50 @@ struct HfTaskCharmHadronsFemtoDream { return invMass; } + template + float getCharmHadronTrackMass(const Candidate& cand, + const Track& trk, + double trackMassHyp = o2::constants::physics::MassProton) + { + + auto pVecProng0 = RecoDecayPtEtaPhi::pVector(cand.prong0Pt(), cand.prong0Eta(), cand.prong0Phi()); + auto pVecProng1 = RecoDecayPtEtaPhi::pVector(cand.prong1Pt(), cand.prong1Eta(), cand.prong1Phi()); + auto pVecProng2 = RecoDecayPtEtaPhi::pVector(cand.prong2Pt(), cand.prong2Eta(), cand.prong2Phi()); + auto pVecTrack = RecoDecayPtEtaPhi::pVector(trk.pt(), trk.eta(), trk.phi()); + const auto moms4 = std::array{pVecProng0, pVecProng1, pVecProng2, pVecTrack}; + + std::array mass4{}; + + if (charmHadPDGCode == o2::constants::physics::Pdg::kLambdaCPlus) { + // Λc⁺ → p K π + if (cand.candidateSelFlag() == 1) { + mass4 = { + o2::constants::physics::MassProton, + o2::constants::physics::MassKPlus, + o2::constants::physics::MassPiPlus, + trackMassHyp}; + } else { + // prong0=π, prong1=K, prong2=p + mass4 = { + o2::constants::physics::MassPiPlus, + o2::constants::physics::MassKPlus, + o2::constants::physics::MassProton, + trackMassHyp}; + } + } else if (charmHadPDGCode == o2::constants::physics::Pdg::kDPlus) { + // D⁺ → π K π + mass4 = { + o2::constants::physics::MassPiPlus, + o2::constants::physics::MassKPlus, + o2::constants::physics::MassPiPlus, + trackMassHyp}; + } else { + return -1.f; + } + + return static_cast(RecoDecay::m(moms4, mass4)); + } + /// This function processes the same event and takes care of all the histogramming template void doSameEvent(PartitionType& sliceTrk1, CandType& sliceCharmHad, TableTracks const& parts, Collision const& col) @@ -325,6 +371,7 @@ struct HfTaskCharmHadronsFemtoDream { } float invMass = getCharmHadronMass(p2); + float deltaInvMassPair = getCharmHadronTrackMass(p2, p1, pdgCodeTrack1) - invMass; if (invMass < charmHadMinInvMass || invMass > charmHadMaxInvMass) { continue; @@ -372,6 +419,7 @@ struct HfTaskCharmHadronsFemtoDream { col.multV0M(), p2.charge(), pairSign, + deltaInvMassPair, processType, charmHadMc, originType); @@ -419,6 +467,7 @@ struct HfTaskCharmHadronsFemtoDream { } float invMass = getCharmHadronMass(p2); + float deltaInvMassPair = getCharmHadronTrackMass(p2, p1, pdgCodeTrack1) - invMass; if (invMass < charmHadMinInvMass || invMass > charmHadMaxInvMass) { continue; @@ -462,6 +511,7 @@ struct HfTaskCharmHadronsFemtoDream { collision1.multV0M(), p2.charge(), pairSign, + deltaInvMassPair, processType, charmHadMc, originType); From eb8eefc9d84b1a3669489ece7efffe80304f52e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Thu, 4 Sep 2025 15:42:19 +0200 Subject: [PATCH 2/4] Update FemtoDerived.h --- PWGCF/DataModel/FemtoDerived.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PWGCF/DataModel/FemtoDerived.h b/PWGCF/DataModel/FemtoDerived.h index 3be2baadc37..6bcd3432daf 100644 --- a/PWGCF/DataModel/FemtoDerived.h +++ b/PWGCF/DataModel/FemtoDerived.h @@ -243,6 +243,7 @@ DECLARE_SOA_COLUMN(Kstar, kstar, float); //! Relative DECLARE_SOA_COLUMN(KT, kT, float); //! kT distribution of particle pairs DECLARE_SOA_COLUMN(MT, mT, float); //! Transverse mass distribution DECLARE_SOA_COLUMN(CharmM, charmM, float); //! Charm hadron mass +DECLARE_SOA_COLUMN(CharmTrkM, charmtrkM, float); //! Charm hadron track mass DECLARE_SOA_COLUMN(CharmPt, charmPt, float); //! Transverse momentum of charm hadron for result task DECLARE_SOA_COLUMN(CharmEta, charmEta, float); //! Eta of charm hadron for result task DECLARE_SOA_COLUMN(CharmPhi, charmPhi, float); //! Phi of charm hadron for result task @@ -327,6 +328,7 @@ DECLARE_SOA_TABLE(FDHfPairs, "AOD", "FDHFPAIRS", //! table to store results for fdhf::MultPercentile, fdhf::Charge, fdhf::PairSign, + fdhf::CharmTrkM, fdhf::ProcessType, fdhf::FlagMc, fdhf::OriginMcRec); From 70b30e7a97ad509345b27c5be5eebc194e16ba90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Thu, 4 Sep 2025 17:18:28 +0200 Subject: [PATCH 3/4] Update taskCharmHadronsFemtoDream.cxx --- PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx b/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx index f191c3ef271..112b2e4dfb2 100644 --- a/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx +++ b/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx @@ -340,7 +340,6 @@ struct HfTaskCharmHadronsFemtoDream { } else { return -1.f; } - return static_cast(RecoDecay::m(moms4, mass4)); } @@ -369,9 +368,7 @@ struct HfTaskCharmHadronsFemtoDream { if (kstar > highkstarCut) { continue; } - float invMass = getCharmHadronMass(p2); - float deltaInvMassPair = getCharmHadronTrackMass(p2, p1, pdgCodeTrack1) - invMass; if (invMass < charmHadMinInvMass || invMass > charmHadMaxInvMass) { continue; @@ -381,6 +378,8 @@ struct HfTaskCharmHadronsFemtoDream { continue; } + float deltaInvMassPair = getCharmHadronTrackMass(p2, p1, o2::constants::physics::MassProton) - invMass; + // proton track charge float chargeTrack = 0.; if ((p1.cut() & CutBitChargePositive) == CutBitChargePositive) { @@ -467,7 +466,6 @@ struct HfTaskCharmHadronsFemtoDream { } float invMass = getCharmHadronMass(p2); - float deltaInvMassPair = getCharmHadronTrackMass(p2, p1, pdgCodeTrack1) - invMass; if (invMass < charmHadMinInvMass || invMass > charmHadMaxInvMass) { continue; @@ -476,6 +474,9 @@ struct HfTaskCharmHadronsFemtoDream { if (p2.pt() < charmHadMinPt || p2.pt() > charmHadMaxPt) { continue; } + + float deltaInvMassPair = getCharmHadronTrackMass(p2, p1, o2::constants::physics::MassProton) - invMass; + // proton track charge float chargeTrack = 0.; if ((p1.cut() & CutBitChargePositive) == CutBitChargePositive) { From cda6cb64096e93ef70031f22ddf82ec739669fd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Thu, 4 Sep 2025 17:25:24 +0200 Subject: [PATCH 4/4] Update taskCharmHadronsFemtoDream.cxx --- PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx b/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx index 112b2e4dfb2..96af0f52f5a 100644 --- a/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx +++ b/PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx @@ -310,21 +310,21 @@ struct HfTaskCharmHadronsFemtoDream { auto pVecProng1 = RecoDecayPtEtaPhi::pVector(cand.prong1Pt(), cand.prong1Eta(), cand.prong1Phi()); auto pVecProng2 = RecoDecayPtEtaPhi::pVector(cand.prong2Pt(), cand.prong2Eta(), cand.prong2Phi()); auto pVecTrack = RecoDecayPtEtaPhi::pVector(trk.pt(), trk.eta(), trk.phi()); - const auto moms4 = std::array{pVecProng0, pVecProng1, pVecProng2, pVecTrack}; + const auto pVecCharmTrk = std::array{pVecProng0, pVecProng1, pVecProng2, pVecTrack}; - std::array mass4{}; + std::array massCharmTrk{}; if (charmHadPDGCode == o2::constants::physics::Pdg::kLambdaCPlus) { // Λc⁺ → p K π if (cand.candidateSelFlag() == 1) { - mass4 = { + massCharmTrk = { o2::constants::physics::MassProton, o2::constants::physics::MassKPlus, o2::constants::physics::MassPiPlus, trackMassHyp}; } else { // prong0=π, prong1=K, prong2=p - mass4 = { + massCharmTrk = { o2::constants::physics::MassPiPlus, o2::constants::physics::MassKPlus, o2::constants::physics::MassProton, @@ -332,7 +332,7 @@ struct HfTaskCharmHadronsFemtoDream { } } else if (charmHadPDGCode == o2::constants::physics::Pdg::kDPlus) { // D⁺ → π K π - mass4 = { + massCharmTrk = { o2::constants::physics::MassPiPlus, o2::constants::physics::MassKPlus, o2::constants::physics::MassPiPlus, @@ -340,7 +340,7 @@ struct HfTaskCharmHadronsFemtoDream { } else { return -1.f; } - return static_cast(RecoDecay::m(moms4, mass4)); + return static_cast(RecoDecay::m(pVecCharmTrk, massCharmTrk)); } /// This function processes the same event and takes care of all the histogramming