Skip to content

Commit 2c3bc27

Browse files
[PWGCF,PWGHF] Fix an issue introduced in the previous PR in the FemtoDream derived data model (#14327)
1 parent 4ce2c77 commit 2c3bc27

File tree

2 files changed

+58
-25
lines changed

2 files changed

+58
-25
lines changed

PWGCF/DataModel/FemtoDerived.h

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,6 @@ enum ParticleType {
113113
kCascadeV0Child,
114114
kCascadeBachelor, //! Bachelor track of a cascade
115115
kCharmHadron3Prong, //! Charm 3prong Candidates
116-
kCharmHadron2Prong, //! Charm 2prong Candidates
117-
kCharmHadronDstar, //! Charm Dstar Candidates
118116
kReso, //! Resonances (phi)
119117
kResoChild, // Child track of a Resonance
120118
kResoPosdaughTPC_NegdaughTPC, // cases for Phi-daughters for TPC or TOF combinations
@@ -133,7 +131,9 @@ enum ParticleType {
133131
kOmegaV0,
134132
kOmegaV0Child,
135133
kOmegaBachelor,
136-
kNParticleTypes //! Number of particle types
134+
kCharmHadron2Prong, //! Charm 2prong Candidates
135+
kCharmHadronDstar, //! Charm Dstar Candidates
136+
kNParticleTypes //! Number of particle types
137137
};
138138

139139
enum MomentumType {
@@ -142,9 +142,9 @@ enum MomentumType {
142142
kPtpc //! momentum at the inner wall of the TPC (useful for PID plots)
143143
};
144144

145-
static constexpr std::string_view ParticleTypeName[kNParticleTypes] = {"Track", "V0", "V0Child", "Cascade", "CascadeV0", "CascadeV0Child", "CascadeBachelor", "CharmHadron", "Reso", "ResoChild", "ResoPosdaughTPC_NegdaughTPC", "ResoPosdaughTPC_NegdaughTOF", "ResoPosdaughTOF_NegdaughTPC", "ResoPosdaughTOF_NegdaughTOF", "ResoKStarPosdaughTPC_NegdaughTPC", "ResoKStarPosdaughTPC_NegdaughTOF", "ResoKStarPosdaughTOF_NegdaughTPC", "ResoKStarPosdaughTOF_NegdaughTOF", "V0K0Short", "V0K0ShortChild", "ResoKStarChild", "ResoKStar", "Omega", "OmegaV0", "OmegaV0Child", "OmegaBachelor"}; //! Naming of the different particle types
145+
static constexpr std::string_view ParticleTypeName[kNParticleTypes] = {"Track", "V0", "V0Child", "Cascade", "CascadeV0", "CascadeV0Child", "CascadeBachelor", "CharmHadron3Prong", "Reso", "ResoChild", "ResoPosdaughTPC_NegdaughTPC", "ResoPosdaughTPC_NegdaughTOF", "ResoPosdaughTOF_NegdaughTPC", "ResoPosdaughTOF_NegdaughTOF", "ResoKStarPosdaughTPC_NegdaughTPC", "ResoKStarPosdaughTPC_NegdaughTOF", "ResoKStarPosdaughTOF_NegdaughTPC", "ResoKStarPosdaughTOF_NegdaughTOF", "V0K0Short", "V0K0ShortChild", "ResoKStarChild", "ResoKStar", "Omega", "OmegaV0", "OmegaV0Child", "OmegaBachelor", "CharmHadron2Prong", "CharmHadronDstar"}; //! Naming of the different particle types
146146

147-
static constexpr std::string_view TempFitVarName[kNParticleTypes] = {"/hDCAxy", "/hCPA", "/hDCAxy", "/hCPA", "/hCPA", "/hDCAxy", "/hDCAxy", "/hCPA", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hCPA", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hCPA", "/hCPA", "/hDCAxy", "/hDCAxy"};
147+
static constexpr std::string_view TempFitVarName[kNParticleTypes] = {"/hDCAxy", "/hCPA", "/hDCAxy", "/hCPA", "/hCPA", "/hDCAxy", "/hDCAxy", "/hCPA", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hCPA", "/hDCAxy", "/hDCAxy", "/hDCAxy", "/hCPA", "/hCPA", "/hDCAxy", "/hDCAxy", "/hCPA", "/hCPA"};
148148

149149
using cutContainerType = uint32_t; //! Definition of the data type for the bit-wise container for the different selection criteria
150150

@@ -273,6 +273,7 @@ DECLARE_SOA_COLUMN(Kstar, kstar, float); //! Relative mo
273273
DECLARE_SOA_COLUMN(KT, kT, float); //! kT distribution of particle pairs
274274
DECLARE_SOA_COLUMN(MT, mT, float); //! Transverse mass distribution
275275
DECLARE_SOA_COLUMN(CharmM, charmM, float); //! Charm hadron mass
276+
DECLARE_SOA_COLUMN(CharmDaughM, charmDaughM, float); //! Charm hadron daughter mass
276277
DECLARE_SOA_COLUMN(CharmTrkM, charmtrkM, float); //! Charm hadron track mass
277278
DECLARE_SOA_COLUMN(CharmPt, charmPt, float); //! Transverse momentum of charm hadron for result task
278279
DECLARE_SOA_COLUMN(CharmEta, charmEta, float); //! Eta of charm hadron for result task
@@ -356,7 +357,14 @@ DECLARE_SOA_DYNAMIC_COLUMN(M, m, //!
356357
RecoDecayPtEtaPhi::pVector(pt1, eta1, phi1),
357358
RecoDecayPtEtaPhi::pVector(pt2, eta2, phi2)},
358359
m); }); //! Charm hadron mass
359-
DECLARE_SOA_DYNAMIC_COLUMN(P, p, //!
360+
361+
DECLARE_SOA_DYNAMIC_COLUMN(MDaughD0, mDaughD0, //!
362+
[](float pt0, float phi0, float eta0, float pt1, float phi1, float eta1, const std::array<double, 2>& m) -> float { return RecoDecay::m(std::array{
363+
RecoDecayPtEtaPhi::pVector(pt0, eta0, phi0),
364+
RecoDecayPtEtaPhi::pVector(pt1, eta1, phi1)},
365+
m); }); //! Charm hadron mass
366+
367+
DECLARE_SOA_DYNAMIC_COLUMN(P, p, //!
360368
[](float pt0, float phi0, float eta0, float pt1, float phi1, float eta1, float pt2, float phi2, float eta2) -> float { return RecoDecay::p(RecoDecay::pVec(
361369
RecoDecayPtEtaPhi::pVector(pt0, eta0, phi0),
362370
RecoDecayPtEtaPhi::pVector(pt1, eta1, phi1),
@@ -458,6 +466,7 @@ DECLARE_SOA_TABLE(FDHfCandDstar, "AOD", "FDHFCANDDSTAR", //! Table to store the
458466
fdhf::BDTPrompt,
459467
fdhf::BDTFD,
460468
fdhf_dstar::M<fdhf::Prong0Pt, fdhf::Prong0Phi, fdhf::Prong0Eta, fdhf::Prong1Pt, fdhf::Prong1Phi, fdhf::Prong1Eta, fdhf::Prong2Pt, fdhf::Prong2Phi, fdhf::Prong2Eta>,
469+
fdhf_dstar::MDaughD0<fdhf::Prong0Pt, fdhf::Prong0Phi, fdhf::Prong0Eta, fdhf::Prong1Pt, fdhf::Prong1Phi, fdhf::Prong1Eta>,
461470
fdhf_dstar::P<fdhf::Prong0Pt, fdhf::Prong0Phi, fdhf::Prong0Eta, fdhf::Prong1Pt, fdhf::Prong1Phi, fdhf::Prong1Eta, fdhf::Prong2Pt, fdhf::Prong2Phi, fdhf::Prong2Eta>,
462471
fdhf_dstar::Y<fdhf::Prong0Pt, fdhf::Prong0Phi, fdhf::Prong0Eta, fdhf::Prong1Pt, fdhf::Prong1Phi, fdhf::Prong1Eta, fdhf::Prong2Pt, fdhf::Prong2Phi, fdhf::Prong2Eta>,
463472
fdhf_dstar::Eta<fdhf::Prong0Pt, fdhf::Prong0Phi, fdhf::Prong0Eta, fdhf::Prong1Pt, fdhf::Prong1Phi, fdhf::Prong1Eta, fdhf::Prong2Pt, fdhf::Prong2Phi, fdhf::Prong2Eta>,
@@ -516,6 +525,7 @@ DECLARE_SOA_TABLE(FDHfCharmDstar, "AOD", "FDHFCHARMDSTAR", //! table to store re
516525
fdhf::GIndexCol,
517526
fdhf::TimeStamp,
518527
fdhf::CharmM,
528+
fdhf::CharmDaughM,
519529
fdhf::CharmPt,
520530
fdhf::CharmEta,
521531
fdhf::CharmPhi,

PWGHF/HFC/Tasks/taskCharmHadronsTrackFemtoDream.cxx

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
340340
/// Compute the charm hadron candidates mass with the daughter masses
341341
/// assumes the candidate is either a D+ or Λc+ or D0 or Dstar
342342
template <DecayChannel Channel, typename Candidate>
343-
float getCharmHadronMass(const Candidate& cand)
343+
float getCharmHadronMass(const Candidate& cand, bool ReturnDaughMass = false)
344344
{
345345
float invMass = 0.0f;
346346
if constexpr (Channel == DecayChannel::LcToPKPi) {
@@ -350,32 +350,35 @@ struct HfTaskCharmHadronsTrackFemtoDream {
350350
}
351351
invMass = cand.m(std::array{MassPiPlus, MassKPlus, MassProton});
352352
return invMass;
353-
}
354-
// D+ → π K π (PDG: 411)
355-
if constexpr (Channel == DecayChannel::DplusToPiKPi) {
353+
} else if constexpr (Channel == DecayChannel::DplusToPiKPi) { // D+ → π K π (PDG: 411)
356354
invMass = cand.m(std::array{MassPiPlus, MassKPlus, MassPiPlus});
357355
return invMass;
358-
}
359-
// D0 → π K (PDG: 421)
360-
if constexpr (Channel == DecayChannel::D0ToPiK) {
356+
} else if constexpr (Channel == DecayChannel::D0ToPiK) { // D0 → π K (PDG: 421)
361357
if (cand.candidateSelFlag() == 1) {
362-
363358
invMass = cand.m(std::array{MassPiPlus, MassKPlus});
364359
return invMass;
365360
} else {
366-
367361
invMass = cand.m(std::array{MassKPlus, MassPiPlus});
368362
return invMass;
369363
}
364+
} else if constexpr (Channel == DecayChannel::DstarToD0Pi) { // D* → D0π (PDG: 413)
365+
float mDstar = 0.f;
366+
float mD0 = 0.f;
367+
if (cand.charge() > 0.f) {
368+
mDstar = cand.m(std::array{MassPiPlus, MassKPlus, MassPiPlus});
369+
mD0 = cand.mDaughD0(std::array{MassPiPlus, MassKPlus});
370+
} else {
371+
mDstar = cand.m(std::array{MassKPlus, MassPiPlus, MassPiPlus});
372+
mD0 = cand.mDaughD0(std::array{MassKPlus, MassPiPlus});
373+
}
374+
if (ReturnDaughMass) {
375+
return mD0;
376+
} else {
377+
return mDstar - mD0;
378+
}
370379
}
371-
// D* → D0π (PDG: 413)
372-
if constexpr (Channel == DecayChannel::DstarToD0Pi) {
373-
invMass = cand.m(std::array{MassPiPlus, MassKPlus, MassPiPlus});
374-
return invMass;
375-
}
376-
377380
// Add more channels as needed
378-
return invMass;
381+
return 0.f;
379382
}
380383

381384
template <DecayChannel Channel, typename Candidate, typename Track>
@@ -437,7 +440,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
437440
massCharmTrk = {MassPiPlus, MassKPlus, MassPiPlus, trackMassHyp};
438441
} else if constexpr (Channel == DecayChannel::DstarToD0Pi) {
439442
// D* → D0π
440-
massCharmTrk = {MassPiPlus, MassKPlus, MassPiPlus, trackMassHyp};
443+
if (cand.candidateSelFlag() == 1) {
444+
massCharmTrk = {MassPiPlus, MassKPlus, MassPiPlus, trackMassHyp};
445+
} else {
446+
massCharmTrk = {MassKPlus, MassPiPlus, MassPiPlus, trackMassHyp};
447+
}
441448
}
442449

443450
return static_cast<float>(RecoDecay::m(pVecCharmTrk, massCharmTrk));
@@ -698,7 +705,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
698705

699706
timeStamp = part.timeStamp();
700707

701-
if constexpr (Channel == DecayChannel::DplusToPiKPi || Channel == DecayChannel::LcToPKPi || Channel == DecayChannel::DstarToD0Pi) {
708+
if constexpr (Channel == DecayChannel::DplusToPiKPi || Channel == DecayChannel::LcToPKPi) {
702709

703710
rowFemtoResultCharm3Prong(
704711
col.globalIndex(),
@@ -728,9 +735,25 @@ struct HfTaskCharmHadronsTrackFemtoDream {
728735
part.bdtBkg(),
729736
part.bdtPrompt(),
730737
part.bdtFD());
738+
} else if constexpr (Channel == DecayChannel::DstarToD0Pi) {
739+
float invMassD0 = getCharmHadronMass<Channel>(part, true);
740+
rowFemtoResultCharmDstar(
741+
col.globalIndex(),
742+
timeStamp,
743+
invMass,
744+
invMassD0,
745+
part.pt(),
746+
part.eta(),
747+
part.phi(),
748+
part.prong0Id(),
749+
part.prong1Id(),
750+
part.prong2Id(),
751+
part.charge(),
752+
part.bdtBkg(),
753+
part.bdtPrompt(),
754+
part.bdtFD());
731755
}
732756
}
733-
734757
// ---- Fill Track Table ----
735758
for (auto const& part : sliceTrk1) {
736759
allTrackHisto.fillQA<IsMc, true>(

0 commit comments

Comments
 (0)