@@ -1456,6 +1456,9 @@ struct HfTrackIndexSkimCreator {
14561456 Configurable<std::vector<double >> binsPtDstarToD0Pi{" binsPtDstarToD0Pi" , std::vector<double >{hf_cuts_presel_dstar::vecBinsPt}, " pT bin limits for D*+->D0pi pT-dependent cuts" };
14571457 Configurable<LabeledArray<double >> cutsDstarToD0Pi{" cutsDstarToD0Pi" , {hf_cuts_presel_dstar::Cuts[0 ], hf_cuts_presel_dstar::NBinsPt, hf_cuts_presel_dstar::NCutVars, hf_cuts_presel_dstar::labelsPt, hf_cuts_presel_dstar::labelsCutVar}, " D*+->D0pi selections per pT bin" };
14581458
1459+ // Species-differential track min pT selection for 3-prong candidates
1460+ Configurable<LabeledArray<float >> cutsProngPtMin{" cutsProngPtMin" , {hf_cuts_presel_3prong::cutsProngMinPt3Prong, hf_cuts_presel_3prong::NSpecies3Prong, 1 , hf_cuts_presel_3prong::labelsSpecies3Prong, hf_cuts_presel_3prong::labelsMinPt}, " Min pT selection for prongs of 3-prong candidates in GeV/c" };
1461+
14591462 // proton PID selections for Lc and Xic
14601463 Configurable<bool > applyProtonPidForLcToPKPi{" applyProtonPidForLcToPKPi" , false , " Apply proton PID for Lc->pKpi" };
14611464 Configurable<bool > applyProtonPidForXicToPKPi{" applyProtonPidForXicToPKPi" , false , " Apply proton PID for Xic->pKpi" };
@@ -1848,7 +1851,7 @@ struct HfTrackIndexSkimCreator {
18481851 // / \param isIdentifiedPidTrack0 is the flag that tells if the track 0 has been tagged as a proton
18491852 // / \param isIdentifiedPidTrack2 is the flag that tells if the track 2 has been tagged as a proton
18501853 // / \param cutStatus is a 2D array with outcome of each selection (filled only in debug mode)
1851- // / \param whichHypo information of the mass hypoteses that were selected
1854+ // / \param whichHypo information of the mass hypotheses that were selected
18521855 // / \param isSelected is a bitmap with selection outcome
18531856 template <typename T2, typename T3, typename T4>
18541857 void applyPreselection3Prong (T2 const & pVecTrack0, T2 const & pVecTrack1, T2 const & pVecTrack2, const auto isIdentifiedPidTrack0, const auto isIdentifiedPidTrack2, T3& cutStatus, T4& whichHypo, auto & isSelected)
@@ -1999,8 +2002,8 @@ struct HfTrackIndexSkimCreator {
19992002 // / \param primVtx is the primary vertex
20002003 // / \param cutStatus is a 2D array with outcome of each selection (filled only in debug mode)
20012004 // / \param isSelected ia s bitmap with selection outcome
2002- template <typename T1, typename T2, typename T3, typename T4>
2003- void applySelection3Prong (const T1& pVecCand, const T2& secVtx , const T3& primVtx, T4 & cutStatus, auto & isSelected)
2005+ template <typename T1, typename T2, typename T3, typename T4, typename T5 >
2006+ void applySelection3Prong (const T1& pVecCand, const T2& prongDaugsPt , const T3& secVtx, const T4& primVtx, T5 & cutStatus, auto & isSelected)
20042007 {
20052008 if (config.debug || isSelected > 0 ) {
20062009
@@ -2038,6 +2041,18 @@ struct HfTrackIndexSkimCreator {
20382041 }
20392042 }
20402043 }
2044+
2045+ // prong daughter pT
2046+ if ((config.debug || TESTBIT (isSelected, iDecay3P))) {
2047+ const auto minPtDaug = config.cutsProngPtMin ->get (iDecay3P);
2048+ if (prongDaugsPt[0 ] < minPtDaug || prongDaugsPt[1 ] < minPtDaug || prongDaugsPt[2 ] < minPtDaug) {
2049+ CLRBIT (isSelected, iDecay3P);
2050+ if (config.debug ) {
2051+ cutStatus[iDecay3P][4 ] = false ;
2052+ }
2053+ }
2054+ }
2055+
20412056 }
20422057 }
20432058 }
@@ -2643,6 +2658,7 @@ struct HfTrackIndexSkimCreator {
26432658
26442659 auto trackParVarPos2 = getTrackParCov (trackPos2);
26452660 std::array dcaInfoPos2{trackPos2.dcaXY (), trackPos2.dcaZ ()};
2661+ std::array prongPtInfo{trackPos1.pt (), trackNeg1.pt (), trackPos2.pt ()};
26462662
26472663 // preselection of 3-prong candidates
26482664 if (isSelected3ProngCand) {
@@ -2784,7 +2800,7 @@ struct HfTrackIndexSkimCreator {
27842800 const auto pVecCandProng3Pos = RecoDecay::pVec (pvec0, pvec1, pvec2);
27852801
27862802 // 3-prong selections after secondary vertex
2787- applySelection3Prong (pVecCandProng3Pos, secondaryVertex3, pvRefitCoord3Prong2Pos1Neg, cutStatus3Prong, isSelected3ProngCand);
2803+ applySelection3Prong (pVecCandProng3Pos, prongPtInfo, secondaryVertex3, pvRefitCoord3Prong2Pos1Neg, cutStatus3Prong, isSelected3ProngCand);
27882804
27892805 std::array<std::vector<float >, kN3ProngDecaysUsedMlForHfFilters > mlScores3Prongs;
27902806 if (config.applyMlForHfFilters ) {
@@ -2917,6 +2933,7 @@ struct HfTrackIndexSkimCreator {
29172933 auto trackNeg2 = trackIndexNeg2.template track_as <TTracks>();
29182934 auto trackParVarNeg2 = getTrackParCov (trackNeg2);
29192935 std::array dcaInfoNeg2{trackNeg2.dcaXY (), trackNeg2.dcaZ ()};
2936+ std::array prongPtInfo{trackPos1.pt (), trackNeg1.pt (), trackNeg2.pt ()};
29202937
29212938 // preselection of 3-prong candidates
29222939 if (isSelected3ProngCand) {
@@ -3059,7 +3076,7 @@ struct HfTrackIndexSkimCreator {
30593076 const auto pVecCandProng3Neg = RecoDecay::pVec (pvec0, pvec1, pvec2);
30603077
30613078 // 3-prong selections after secondary vertex
3062- applySelection3Prong (pVecCandProng3Neg, secondaryVertex3, pvRefitCoord3Prong1Pos2Neg, cutStatus3Prong, isSelected3ProngCand);
3079+ applySelection3Prong (pVecCandProng3Neg, prongPtInfo, secondaryVertex3, pvRefitCoord3Prong1Pos2Neg, cutStatus3Prong, isSelected3ProngCand);
30633080
30643081 std::array<std::vector<float >, kN3ProngDecaysUsedMlForHfFilters > mlScores3Prongs{};
30653082 if (config.applyMlForHfFilters ) {
0 commit comments