@@ -193,7 +193,7 @@ struct HfTaskFlowCharmHadrons {
193193 ConfigurableAxis thnConfigAxisResoFT0cTPCtot{" thnConfigAxisResoFT0cTPCtot" , {160 , -8 , 8 }, " " };
194194 ConfigurableAxis thnConfigAxisResoFV0aTPCtot{" thnConfigAxisResoFV0aTPCtot" , {160 , -8 , 8 }, " " };
195195 ConfigurableAxis thnConfigAxisCandidateEta{" thnConfigAxisCandidateEta" , {100 , -5 , 5 }, " " };
196- ConfigurableAxis thnConfigAxisSign{" thnConfigAxisSign" , {2 , -2 .0 , 2 .0 }, " " };
196+ ConfigurableAxis thnConfigAxisSign{" thnConfigAxisSign" , {6 , -3 .0 , 3 .0 }, " " };
197197
198198 HistogramRegistry registry{" registry" , {}};
199199
@@ -525,13 +525,13 @@ struct HfTaskFlowCharmHadrons {
525525 float yQVec = qVecs[1 ];
526526 float const amplQVec = qVecs[2 ];
527527 float const evtPl = epHelper.GetEventPlane (xQVec, yQVec, harmonic);
528-
529528 for (const auto & candidate : candidates) {
530529 float massCand = 0 .;
531530 float sign = 0 .;
532531 std::vector<float > outputMl = {-999 ., -999 .};
533-
532+ auto trackprong0 = candidate. template prong0_as <Trk>();
534533 if constexpr (std::is_same_v<T1, CandDsData> || std::is_same_v<T1, CandDsDataWMl>) {
534+ sign = trackprong0.sign ();
535535 switch (Channel) {
536536 case DecayChannel::DsToKKPi:
537537 massCand = HfHelper::invMassDsToKKPi (candidate);
@@ -554,6 +554,7 @@ struct HfTaskFlowCharmHadrons {
554554 }
555555 } else if constexpr (std::is_same_v<T1, CandDplusData> || std::is_same_v<T1, CandDplusDataWMl>) {
556556 massCand = HfHelper::invMassDplusToPiKPi (candidate);
557+ sign = trackprong0.sign ();
557558 if constexpr (std::is_same_v<T1, CandDplusDataWMl>) {
558559 for (unsigned int iclass = 0 ; iclass < classMl->size (); iclass++) {
559560 outputMl[iclass] = candidate.mlProbDplusToPiKPi ()[classMl->at (iclass)];
@@ -562,6 +563,7 @@ struct HfTaskFlowCharmHadrons {
562563 } else if constexpr (std::is_same_v<T1, CandD0Data> || std::is_same_v<T1, CandD0DataWMl>) {
563564 switch (Channel) {
564565 case DecayChannel::D0ToPiK:
566+ sign = candidate.isSelD0bar () ? 3 : 1 ; // 3: reflected D0bar, 1: pure D0 excluding reflected D0bar
565567 massCand = HfHelper::invMassD0ToPiK (candidate);
566568 if constexpr (std::is_same_v<T1, CandD0DataWMl>) {
567569 for (unsigned int iclass = 0 ; iclass < classMl->size (); iclass++) {
@@ -571,6 +573,7 @@ struct HfTaskFlowCharmHadrons {
571573 break ;
572574 case DecayChannel::D0ToKPi:
573575 massCand = HfHelper::invMassD0barToKPi (candidate);
576+ sign = candidate.isSelD0 () ? 3 : 2 ; // 3: reflected D0, 2: pure D0bar excluding reflected D0
574577 if constexpr (std::is_same_v<T1, CandD0DataWMl>) {
575578 for (unsigned int iclass = 0 ; iclass < classMl->size (); iclass++) {
576579 outputMl[iclass] = candidate.mlProbD0bar ()[classMl->at (iclass)];
@@ -581,6 +584,7 @@ struct HfTaskFlowCharmHadrons {
581584 break ;
582585 }
583586 } else if constexpr (std::is_same_v<T1, CandLcData> || std::is_same_v<T1, CandLcDataWMl>) {
587+ sign = trackprong0.sign ();
584588 switch (Channel) {
585589 case DecayChannel::LcToPKPi:
586590 massCand = HfHelper::invMassLcToPKPi (candidate);
@@ -602,6 +606,7 @@ struct HfTaskFlowCharmHadrons {
602606 break ;
603607 }
604608 } else if constexpr (std::is_same_v<T1, CandXicData> || std::is_same_v<T1, CandXicDataWMl>) {
609+ sign = trackprong0.sign ();
605610 switch (Channel) {
606611 case DecayChannel::XicToPKPi:
607612 massCand = HfHelper::invMassXicToPKPi (candidate);
@@ -624,6 +629,7 @@ struct HfTaskFlowCharmHadrons {
624629 }
625630 } else if constexpr (std::is_same_v<T1, CandXic0Data> || std::is_same_v<T1, CandXic0DataWMl>) {
626631 massCand = candidate.invMassCharmBaryon ();
632+ sign = static_cast <float >(candidate.signDecay ());
627633 if constexpr (std::is_same_v<T1, CandXic0DataWMl>) {
628634 for (unsigned int iclass = 0 ; iclass < classMl->size (); iclass++) {
629635 outputMl[iclass] = candidate.mlProbToXiPi ()[classMl->at (iclass)];
0 commit comments