@@ -127,6 +127,7 @@ enum bachelorTrackSelection {
127127 kSoftPionForBeauty ,
128128 kPionForCharmBaryon ,
129129 kKaonForCharmBaryon ,
130+ kProtonForCharmBaryon ,
130131 kSoftPionForSigmaC
131132};
132133
@@ -296,9 +297,9 @@ constexpr float cutsPtThresholdsForFemto[1][2] = {{8., 1.4}}; // proton, deutero
296297static const std::vector<std::string> labelsColumnsPtThresholdsForFemto = {" Proton" , " Deuteron" };
297298
298299// min and max pT for all tracks combined (except for V0 and cascades)
299- constexpr float cutsPt[2 ][8 ] = {{1 ., 0.1 , 0.8 , 0.5 , 0.1 , 0.2 , 0.4 , 0.5 },
300- {100000 ., 100000 ., 5 ., 100000 ., 100000 ., 100000 ., 100000 ., 100000 .}}; // beauty, D*, femto, SigmaC, Xic*+ -> SigmaC++K-, beauty to JPsi
301- static const std::vector<std::string> labelsColumnsCutsPt = {" Beauty" , " DstarPlus" , " PrForFemto" , " CharmBaryon" , " SoftPiSigmaC" , " SoftKaonXicResoToSigmaC" , " DeForFemto" , " BeautyToJPsi" };
300+ constexpr float cutsPt[2 ][9 ] = {{1 ., 0.1 , 0.8 , 0.5 , 0.1 , 0.2 , 0.4 , 0.5 , 0.3 },
301+ {100000 ., 100000 ., 5 ., 100000 ., 100000 ., 100000 ., 100000 ., 100000 ., 100000 . }}; // beauty, D*, femto, SigmaC, Xic*+ -> SigmaC++K-, beauty to JPsi, Lc*->D0p
302+ static const std::vector<std::string> labelsColumnsCutsPt = {" Beauty" , " DstarPlus" , " PrForFemto" , " CharmBaryon" , " SoftPiSigmaC" , " SoftKaonXicResoToSigmaC" , " DeForFemto" , " BeautyToJPsi" , " PrForLcReso " };
302303static const std::vector<std::string> labelsRowsCutsPt = {" Minimum" , " Maximum" };
303304
304305// PID cuts
@@ -472,6 +473,11 @@ class HfFilterHelper
472473 mPtMinCharmBaryonBachelor = minPt;
473474 mPtMaxCharmBaryonBachelor = maxPt;
474475 }
476+ void setPtLimitsLcResonanceBachelor (float minPt, float maxPt)
477+ {
478+ mPtMinLcResonanceBachelor = minPt;
479+ mPtMaxLcResonanceBachelor = maxPt;
480+ }
475481
476482 void setNsigmaProtonCutsForFemto (std::array<float , 4 > nSigmaCuts) { mNSigmaPrCutsForFemto = nSigmaCuts; }
477483 void setNsigmaDeuteronCutsForFemto (std::array<float , 4 > nSigmaCuts) { mNSigmaDeCutsForFemto = nSigmaCuts; }
@@ -565,7 +571,7 @@ class HfFilterHelper
565571 template <typename T>
566572 bool isSelectedHighPt3Prong (const T& pt);
567573 template <o2::aod::hffilters::HfTriggers whichTrigger, typename T, typename T1, typename T2>
568- int8_t isSelectedTrackForSoftPionOrBeauty (const T& track, const T1& trackPar, const T2& dca);
574+ int16_t isSelectedTrackForSoftPionOrBeauty (const T& track, const T1& trackPar, const T2& dca);
569575 template <typename T1, typename T2, typename H2>
570576 bool isSelectedTrack4Femto (const T1& track, const T2& trackPar, const int & activateQA, H2 hTPCPID, H2 hTOFPID, const int & trackSpecies);
571577 template <typename T>
@@ -594,8 +600,8 @@ class HfFilterHelper
594600 bool isSelectedPhoton (const Photon& photon, const std::array<T, 2 >& dauTracks, const int & activateQA, H2 hV0Selected, std::array<H2, 4 >& hArmPod);
595601 template <typename Casc>
596602 bool isSelectedCascade (const Casc& casc);
597- template <typename T, typename T2>
598- int8_t isSelectedBachelorForCharmBaryon (const T& track, const T2& dca);
603+ template <o2::aod::hffilters::HfTriggers whichTrigger, typename T, typename T2>
604+ int16_t isSelectedBachelorForCharmBaryon (const T& track, const T2& dca);
599605 template <bool is4beauty = false , typename T>
600606 bool isSelectedProton4CharmOrBeautyBaryons (const T& track);
601607 template <typename T, typename U>
@@ -668,12 +674,14 @@ class HfFilterHelper
668674 float mPtMinProtonForFemto {0.8 }; // minimum pt for the proton for femto
669675 float mPtMinDeuteronForFemto {0.8 }; // minimum pt for the deuteron for femto
670676 float mPtMinCharmBaryonBachelor {0.5 }; // minimum pt for the bachelor pion from Xic/Omegac decays
677+ float mPtMinLcResonanceBachelor {0.3 }; // minimum pt for the bachelor proton from Lc resonance decays
671678 float mPtMaxSoftPionForDstar {2 .}; // maximum pt for the D*+ soft pion
672679 float mPtMaxBeautyBachelor {100000 .}; // maximum pt for the b-hadron pion daughter
673680 float mPtMaxBeautyToJPsiBachelor {100000 .}; // maximum pt for the b-hadron -> JPsi X daughters (not the muons)
674681 float mPtMaxProtonForFemto {5.0 }; // maximum pt for the proton for femto
675682 float mPtMaxDeuteronForFemto {5.0 }; // maximum pt for the deuteron for femto
676683 float mPtMaxCharmBaryonBachelor {100000 .}; // maximum pt for the bachelor pion from Xic/Omegac decays
684+ float mPtMaxLcResonanceBachelor {100000 .}; // maximum pt for the bachelor proton from Lc resonance decays
677685 float mPtThresholdProtonForFemto {8 .}; // pt threshold to change strategy for proton PID for femto
678686 float mPtThresholdDeuteronForFemto {1.4 }; // pt threshold to change strategy for deuteron PID for femto
679687 float mPtMinSigmaCZero {0 .f }; // pt min SigmaC0 candidate
@@ -766,10 +774,10 @@ inline bool HfFilterHelper::isSelectedHighPt3Prong(const T& pt)
766774// / \param dca is the 2d array with dcaXY and dcaZ of the track
767775// / \return a flag that encodes the selection for soft pions BIT(kSoftPion), tracks for beauty BIT(kForBeauty), or soft pions for beauty BIT(kSoftPionForBeauty)
768776template <o2::aod::hffilters::HfTriggers whichTrigger, typename T, typename T1, typename T2>
769- inline int8_t HfFilterHelper::isSelectedTrackForSoftPionOrBeauty (const T& track, const T1& trackPar, const T2& dca)
777+ inline int16_t HfFilterHelper::isSelectedTrackForSoftPionOrBeauty (const T& track, const T1& trackPar, const T2& dca)
770778{
771779
772- int8_t retValue{BIT (kSoftPion ) | BIT (kForBeauty ) | BIT (kSoftPionForBeauty ) | BIT (kSoftPionForSigmaC )};
780+ int16_t retValue{BIT (kSoftPion ) | BIT (kForBeauty ) | BIT (kSoftPionForBeauty ) | BIT (kSoftPionForSigmaC )};
773781
774782 if (!track.isGlobalTrackWoDCA ()) {
775783 return kRejected ;
@@ -939,7 +947,7 @@ inline bool HfFilterHelper::isSelectedTrack4Femto(const T1& track, const T2& tra
939947 return false ;
940948 }
941949 } else {
942- if (NSigmaTOF > nSigmaCuts[2 ] || NSigmaTPC < -nSigmaCuts[0 ]) { // Use combined TPC and TOF above the threshold
950+ if (NSigmaTOF < - nSigmaCuts[1 ] || NSigmaTPC < -nSigmaCuts[0 ]) { // Use combined TPC and TOF above the threshold
943951 return false ;
944952 }
945953 }
@@ -1625,18 +1633,24 @@ inline bool HfFilterHelper::isSelectedCascade(const Casc& casc)
16251633// / \param track is a track
16261634// / \param dca is the 2d array with dcaXY and dcaZ of the track
16271635// / \return 0 if rejected, or a bitmap that contains the information whether it is selected as pion and/or kaon
1628- template <typename T, typename T2>
1629- inline int8_t HfFilterHelper::isSelectedBachelorForCharmBaryon (const T& track, const T2& dca)
1636+ template <o2::aod::hffilters::HfTriggers whichTrigger, typename T, typename T2>
1637+ inline int16_t HfFilterHelper::isSelectedBachelorForCharmBaryon (const T& track, const T2& dca)
16301638{
1631- int8_t retValue{BIT (kPionForCharmBaryon ) | BIT (kKaonForCharmBaryon )};
1639+ int16_t retValue{BIT (kPionForCharmBaryon ) | BIT (kKaonForCharmBaryon ) | BIT ( kProtonForCharmBaryon )};
16321640
16331641 if (!track.isGlobalTrackWoDCA ()) {
16341642 return kRejected ;
16351643 }
16361644
16371645 float pt = track.pt ();
1638- if (pt < mPtMinCharmBaryonBachelor || pt > mPtMaxCharmBaryonBachelor ) {
1639- return kRejected ;
1646+ if constexpr (whichTrigger == kCharmBarToXiBach ) {
1647+ if (pt < mPtMinCharmBaryonBachelor || pt > mPtMaxCharmBaryonBachelor ) {
1648+ return kRejected ;
1649+ }
1650+ } else if constexpr (whichTrigger == kPrCharm2P ) {
1651+ if (pt < mPtMinLcResonanceBachelor || pt > mPtMaxLcResonanceBachelor ) {
1652+ return kRejected ;
1653+ }
16401654 }
16411655
16421656 auto pTBinTrack = findBin (mPtBinsTracks , pt);
@@ -1665,14 +1679,18 @@ inline int8_t HfFilterHelper::isSelectedBachelorForCharmBaryon(const T& track, c
16651679
16661680 float nSigmaPiTpc = track.tpcNSigmaPi ();
16671681 float nSigmaKaTpc = track.tpcNSigmaKa ();
1682+ float nSigmaPrTpc = track.tpcNSigmaPr ();
16681683 float nSigmaPiTof = track.tofNSigmaPi ();
16691684 float nSigmaKaTof = track.tofNSigmaKa ();
1685+ float nSigmaPrTof = track.tofNSigmaPr ();
16701686 if (mTpcPidCalibrationOption == 1 ) {
16711687 nSigmaPiTpc = getTPCPostCalib (track, kPi );
16721688 nSigmaKaTpc = getTPCPostCalib (track, kKa );
1689+ nSigmaPrTpc = getTPCPostCalib (track, kPr );
16731690 } else if (mTpcPidCalibrationOption == 2 ) {
16741691 nSigmaPiTpc = getTPCSplineCalib (track, (track.sign () > 0 ) ? kPi : kAntiPi );
16751692 nSigmaKaTpc = getTPCSplineCalib (track, (track.sign () > 0 ) ? kKa : kAntiKa );
1693+ nSigmaPrTpc = getTPCSplineCalib (track, (track.sign () > 0 ) ? kPr : kAntiPr );
16761694 }
16771695
16781696 if ((track.hasTPC () && std::fabs (nSigmaPiTpc) > mNSigmaTpcPiCharmBaryonBachelor ) && (track.hasTOF () && std::fabs (nSigmaPiTof) > mNSigmaTofPiCharmBaryonBachelor )) {
@@ -1681,6 +1699,9 @@ inline int8_t HfFilterHelper::isSelectedBachelorForCharmBaryon(const T& track, c
16811699 if ((track.hasTPC () && std::fabs (nSigmaKaTpc) > mNSigmaTpcPiCharmBaryonBachelor ) && (track.hasTOF () && std::fabs (nSigmaKaTof) > mNSigmaTofPiCharmBaryonBachelor )) {
16821700 CLRBIT (retValue, kKaonForCharmBaryon );
16831701 }
1702+ if ((track.hasTPC () && std::fabs (nSigmaPrTpc) > mNSigmaTpcPiCharmBaryonBachelor ) && (track.hasTOF () && std::fabs (nSigmaPrTof) > mNSigmaTpcPiCharmBaryonBachelor )) {
1703+ CLRBIT (retValue, kProtonForCharmBaryon );
1704+ }
16841705
16851706 return retValue;
16861707}
0 commit comments