@@ -339,7 +339,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
339339
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
342- template <DecayChannel Channel, typename Candidate>
342+ template <DecayChannel Channel, bool ReturnDaughMass, typename Candidate>
343343 float getCharmHadronMass (const Candidate& cand)
344344 {
345345 float invMass = 0 .0f ;
@@ -370,12 +370,26 @@ struct HfTaskCharmHadronsTrackFemtoDream {
370370 }
371371 // D* → D0π (PDG: 413)
372372 if constexpr (Channel == DecayChannel::DstarToD0Pi) {
373- invMass = cand.m (std::array{MassPiPlus, MassKPlus, MassPiPlus});
374- return invMass;
373+ float mDstar = 0 .f ;
374+ float mD0 = 0 .f ;
375+
376+ if (cand.charge () > 0 .f ) {
377+ mDstar = cand.m (std::array{MassPiPlus, MassKPlus, MassPiPlus});
378+ mD0 = cand.mDaughD0 (std::array{MassPiPlus, MassKPlus});
379+ } else {
380+ mDstar = cand.m (std::array{MassKPlus, MassPiPlus, MassPiPlus});
381+ mD0 = cand.mDaughD0 (std::array{MassKPlus, MassPiPlus});
382+ }
383+
384+ if constexpr (ReturnDaughMass) {
385+ return mD0 ;
386+ } else {
387+ return mDstar - mD0 ;
388+ }
375389 }
376390
377391 // Add more channels as needed
378- return invMass ;
392+ return 0 . f ;
379393 }
380394
381395 template <DecayChannel Channel, typename Candidate, typename Track>
@@ -437,7 +451,11 @@ struct HfTaskCharmHadronsTrackFemtoDream {
437451 massCharmTrk = {MassPiPlus, MassKPlus, MassPiPlus, trackMassHyp};
438452 } else if constexpr (Channel == DecayChannel::DstarToD0Pi) {
439453 // D* → D0π
440- massCharmTrk = {MassPiPlus, MassKPlus, MassPiPlus, trackMassHyp};
454+ if (cand.candidateSelFlag () == 1 ) {
455+ massCharmTrk = {MassPiPlus, MassKPlus, MassPiPlus, trackMassHyp};
456+ } else {
457+ massCharmTrk = {MassKPlus, MassPiPlus, MassPiPlus, trackMassHyp};
458+ }
441459 }
442460
443461 return static_cast <float >(RecoDecay::m (pVecCharmTrk, massCharmTrk));
@@ -500,7 +518,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
500518 if (kstar > highkstarCut) {
501519 continue ;
502520 }
503- float invMass = getCharmHadronMass<Channel>(p2);
521+ float invMass = getCharmHadronMass<Channel, false >(p2);
504522
505523 if (invMass < charmSel.charmHadMinInvMass || invMass > charmSel.charmHadMaxInvMass ) {
506524 continue ;
@@ -626,7 +644,7 @@ struct HfTaskCharmHadronsTrackFemtoDream {
626644 continue ;
627645 }
628646
629- float invMass = getCharmHadronMass<Channel>(p2);
647+ float invMass = getCharmHadronMass<Channel, false >(p2);
630648
631649 if (invMass < charmSel.charmHadMinInvMass || invMass > charmSel.charmHadMaxInvMass ) {
632650 continue ;
@@ -691,14 +709,14 @@ struct HfTaskCharmHadronsTrackFemtoDream {
691709
692710 // ---- Fill Charm-Hadron Table ----
693711 for (auto const & part : sliceCharmHad) {
694- float invMass = getCharmHadronMass<Channel>(part);
712+ float invMass = getCharmHadronMass<Channel, false >(part);
695713 registryCharmHadronQa.fill (
696714 HIST (" CharmHadronQA/hPtVsMass" ),
697715 part.pt (), invMass);
698716
699717 timeStamp = part.timeStamp ();
700718
701- if constexpr (Channel == DecayChannel::DplusToPiKPi || Channel == DecayChannel::LcToPKPi || Channel == DecayChannel::DstarToD0Pi ) {
719+ if constexpr (Channel == DecayChannel::DplusToPiKPi || Channel == DecayChannel::LcToPKPi) {
702720
703721 rowFemtoResultCharm3Prong (
704722 col.globalIndex (),
@@ -728,9 +746,25 @@ struct HfTaskCharmHadronsTrackFemtoDream {
728746 part.bdtBkg (),
729747 part.bdtPrompt (),
730748 part.bdtFD ());
749+ } else if constexpr (Channel == DecayChannel::DstarToD0Pi) {
750+ float invMassD0 = getCharmHadronMass<Channel, true >(part);
751+ rowFemtoResultCharmDstar (
752+ col.globalIndex (),
753+ timeStamp,
754+ invMass,
755+ invMassD0,
756+ part.pt (),
757+ part.eta (),
758+ part.phi (),
759+ part.prong0Id (),
760+ part.prong1Id (),
761+ part.prong2Id (),
762+ part.charge (),
763+ part.bdtBkg (),
764+ part.bdtPrompt (),
765+ part.bdtFD ());
731766 }
732767 }
733-
734768 // ---- Fill Track Table ----
735769 for (auto const & part : sliceTrk1) {
736770 allTrackHisto.fillQA <IsMc, true >(
0 commit comments