Skip to content

Commit a5f6c95

Browse files
authored
[PWGHF,Trigger] Separate proton pt threshold for LcRes and ThetaC (#10947)
1 parent dc45a50 commit a5f6c95

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

EventFiltering/PWGHF/HFFilter.cxx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ struct HfFilter { // Main struct for HF triggers
7575
// nsigma PID (except for V0 and cascades)
7676
Configurable<LabeledArray<float>> nSigmaPidCuts{"nSigmaPidCuts", {cutsNsigma[0], 4, 8, labelsRowsNsigma, labelsColumnsNsigma}, "Nsigma cuts for ITS/TPC/TOF PID (except for V0 and cascades)"};
7777
// min and max pts for tracks and bachelors (except for V0 and cascades)
78-
Configurable<LabeledArray<float>> ptCuts{"ptCuts", {cutsPt[0], 2, 9, labelsRowsCutsPt, labelsColumnsCutsPt}, "minimum and maximum pT for bachelor tracks (except for V0 and cascades)"};
78+
Configurable<LabeledArray<float>> ptCuts{"ptCuts", {cutsPt[0], 2, 10, labelsRowsCutsPt, labelsColumnsCutsPt}, "minimum and maximum pT for bachelor tracks (except for V0 and cascades)"};
7979

8080
// parameters for high-pT triggers
8181
Configurable<LabeledArray<float>> ptThresholds{"ptThresholds", {cutsHighPtThresholds[0], 1, 2, labelsEmpty, labelsColumnsHighPtThresholds}, "pT treshold for high pT charm hadron candidates for kHighPt triggers in GeV/c"};
@@ -208,6 +208,7 @@ struct HfFilter { // Main struct for HF triggers
208208
helper.setPtLimitsDeuteronForFemto(ptCuts->get(0u, 6u), ptCuts->get(1u, 6u));
209209
helper.setPtLimitsCharmBaryonBachelor(ptCuts->get(0u, 3u), ptCuts->get(1u, 3u));
210210
helper.setPtLimitsLcResonanceBachelor(ptCuts->get(0u, 8u), ptCuts->get(1u, 8u));
211+
helper.setPtLimitsThetaCBachelor(ptCuts->get(0u, 9u), ptCuts->get(1u, 9u));
211212
helper.setCutsSingleTrackBeauty(cutsTrackBeauty3Prong, cutsTrackBeauty4Prong, cutsTrackBeauty4Prong);
212213
helper.setCutsSingleTrackCharmBaryonBachelor(cutsTrackCharmBaryonBachelor);
213214
helper.setCutsBhadrons(cutsBtoHadrons.cutsBplus, cutsBtoHadrons.cutsBzeroToDstar, cutsBtoHadrons.cutsBc, cutsBtoHadrons.cutsBzero, cutsBtoHadrons.cutsBs, cutsBtoHadrons.cutsLb, cutsBtoHadrons.cutsXib);
@@ -977,11 +978,14 @@ struct HfFilter { // Main struct for HF triggers
977978
o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, trackParBachelorProton, 2.f, noMatCorr, &dcaInfoBachProton);
978979
}
979980
std::array<float, 3> pVecProton = trackProton.pVector();
980-
bool isSelProton = helper.isSelectedProtonFromLcReso(trackProton);
981-
if (isSelProton) {
981+
bool isSelPIDProton = helper.isSelectedProton4CharmOrBeautyBaryons<false>(trackProton);
982+
if (isSelPIDProton) {
982983
if (!keepEvent[kPrCharm2P]) {
983984
// we first look for a D*+
984985
for (const auto& trackBachelorId : trackIdsThisCollision) { // start loop over tracks to find bachelor pion
986+
if (!helper.isSelectedProtonFromLcResoOrThetaC<true>(trackProton)) {
987+
continue;
988+
} // stop here if proton below pT threshold for thetaC to avoid computational losses
985989
auto trackBachelor = tracks.rawIteratorAt(trackBachelorId.trackId());
986990
if (trackBachelor.globalIndex() == trackPos.globalIndex() || trackBachelor.globalIndex() == trackNeg.globalIndex() || trackBachelor.globalIndex() == trackProton.globalIndex()) {
987991
continue;
@@ -1064,6 +1068,9 @@ struct HfFilter { // Main struct for HF triggers
10641068
if (pt2Prong < cutsPtDeltaMassCharmReso->get(3u, 11u)) {
10651069
continue;
10661070
}
1071+
if (!helper.isSelectedProtonFromLcResoOrThetaC(trackProton)) {
1072+
continue;
1073+
}
10671074
float massLcStarCand{-999.}, massLcStarBarCand{-999.};
10681075
float massDiffLcStarCand{-999.}, massDiffLcStarBarCand{-999.};
10691076
bool isRightSignLcStar{false}, isRightSignLcStarBar{false};

EventFiltering/PWGHF/HFFilterHelpers.h

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,9 @@ constexpr float cutsPtThresholdsForFemto[1][2] = {{8., 1.4}}; // proton, deutero
298298
static const std::vector<std::string> labelsColumnsPtThresholdsForFemto = {"Proton", "Deuteron"};
299299

300300
// min and max pT for all tracks combined (except for V0 and cascades)
301-
constexpr float cutsPt[2][9] = {{1., 0.1, 0.8, 0.5, 0.1, 0.2, 0.4, 0.5, 0.3},
302-
{100000., 100000., 5., 100000., 100000., 100000., 100000., 100000., 100000.}}; // beauty, D*, femto, SigmaC, Xic*+ -> SigmaC++K-, beauty to JPsi, Lc*->D0p
303-
static const std::vector<std::string> labelsColumnsCutsPt = {"Beauty", "DstarPlus", "PrForFemto", "CharmBaryon", "SoftPiSigmaC", "SoftKaonXicResoToSigmaC", "DeForFemto", "BeautyToJPsi", "PrForLcReso"};
301+
constexpr float cutsPt[2][10] = {{1., 0.1, 0.8, 0.5, 0.1, 0.2, 0.4, 0.5, 0.3, 0.3},
302+
{100000., 100000., 5., 100000., 100000., 100000., 100000., 100000., 100000., 100000.}}; // beauty, D*, femto, SigmaC, Xic*+ -> SigmaC++K-, beauty to JPsi, Lc*->D0p
303+
static const std::vector<std::string> labelsColumnsCutsPt = {"Beauty", "DstarPlus", "PrForFemto", "CharmBaryon", "SoftPiSigmaC", "SoftKaonXicResoToSigmaC", "DeForFemto", "BeautyToJPsi", "PrForLcReso", "PrForThetaC"};
304304
static const std::vector<std::string> labelsRowsCutsPt = {"Minimum", "Maximum"};
305305

306306
// PID cuts
@@ -481,6 +481,11 @@ class HfFilterHelper
481481
mPtMinLcResonanceBachelor = minPt;
482482
mPtMaxLcResonanceBachelor = maxPt;
483483
}
484+
void setPtLimitsThetaCBachelor(float minPt, float maxPt)
485+
{
486+
mPtMinThetaCBachelor = minPt;
487+
mPtMaxThetaCBachelor = maxPt;
488+
}
484489

485490
void setNsigmaProtonCutsForFemto(std::array<float, 4> nSigmaCuts) { mNSigmaPrCutsForFemto = nSigmaCuts; }
486491
void setNsigmaDeuteronCutsForFemto(std::array<float, 4> nSigmaCuts) { mNSigmaDeCutsForFemto = nSigmaCuts; }
@@ -628,8 +633,8 @@ class HfFilterHelper
628633
bool isSelectedXiBach(T const& trackParCasc, T const& trackParBachelor, int8_t isSelBachelor, C const& collision, o2::vertexing::DCAFitterN<2>& dcaFitter, const int& activateQA, H2 hMassVsPtXiPi, H2 hMassVsPtXiKa);
629634
template <int Nprongs, typename T, typename C, typename H2>
630635
bool isSelectedXiBachBach(T const& trackParCasc, std::array<T, 2> const& trackParBachelor, C const& collision, o2::vertexing::DCAFitterN<Nprongs>& dcaFitter, const int& activateQA, H2 hMassVsPtXiPiPi);
631-
template <typename T>
632-
bool isSelectedProtonFromLcReso(const T& track);
636+
template <bool is4ThetaC = false, typename T>
637+
bool isSelectedProtonFromLcResoOrThetaC(const T& track);
633638
// helpers
634639
template <typename T>
635640
T computeRelativeMomentum(const std::array<T, 3>& pTrack, const std::array<T, 3>& CharmCandMomentum, const T& CharmMass);
@@ -682,13 +687,15 @@ class HfFilterHelper
682687
float mPtMinDeuteronForFemto{0.8}; // minimum pt for the deuteron for femto
683688
float mPtMinCharmBaryonBachelor{0.5}; // minimum pt for the bachelor pion from Xic/Omegac decays
684689
float mPtMinLcResonanceBachelor{0.3}; // minimum pt for the bachelor proton from Lc resonance decays
690+
float mPtMinThetaCBachelor{0.3}; // minimum pt for the bachelor proton from ThetaC decays
685691
float mPtMaxSoftPionForDstar{2.}; // maximum pt for the D*+ soft pion
686692
float mPtMaxBeautyBachelor{100000.}; // maximum pt for the b-hadron pion daughter
687693
float mPtMaxBeautyToJPsiBachelor{100000.}; // maximum pt for the b-hadron -> JPsi X daughters (not the muons)
688694
float mPtMaxProtonForFemto{5.0}; // maximum pt for the proton for femto
689695
float mPtMaxDeuteronForFemto{5.0}; // maximum pt for the deuteron for femto
690696
float mPtMaxCharmBaryonBachelor{100000.}; // maximum pt for the bachelor pion from Xic/Omegac decays
691697
float mPtMaxLcResonanceBachelor{100000.}; // maximum pt for the bachelor proton from Lc resonance decays
698+
float mPtMaxThetaCBachelor{100000.}; // maximum pt for the bachelor proton from ThetaC decays
692699
float mPtThresholdProtonForFemto{8.}; // pt threshold to change strategy for proton PID for femto
693700
float mPtThresholdDeuteronForFemto{1.4}; // pt threshold to change strategy for deuteron PID for femto
694701
float mPtMinSigmaCZero{0.f}; // pt min SigmaC0 candidate
@@ -1945,19 +1952,22 @@ inline bool HfFilterHelper::isSelectedKaon4Charm3ProngOrBeautyToJPsi(const T& tr
19451952
/// Basic selection of proton candidates forLc and ThetaC decays
19461953
/// \param track is a track
19471954
/// \return true if track passes all cuts
1948-
template <typename T>
1949-
inline bool HfFilterHelper::isSelectedProtonFromLcReso(const T& track)
1955+
template <bool is4ThetaC, typename T>
1956+
inline bool HfFilterHelper::isSelectedProtonFromLcResoOrThetaC(const T& track)
19501957
{
19511958

19521959
// pt selections
19531960
float pt = track.pt();
1954-
if (pt < mPtMinLcResonanceBachelor || pt > mPtMaxLcResonanceBachelor) {
1955-
return false;
1961+
if constexpr (is4ThetaC) {
1962+
if (pt < mPtMinThetaCBachelor || pt > mPtMaxThetaCBachelor) {
1963+
return false;
1964+
}
1965+
} else {
1966+
if (pt < mPtMinLcResonanceBachelor || pt > mPtMaxLcResonanceBachelor) {
1967+
return false;
1968+
}
19561969
}
19571970

1958-
/// PID selection
1959-
return isSelectedProton4CharmOrBeautyBaryons<false>(track);
1960-
19611971
return true;
19621972
}
19631973

0 commit comments

Comments
 (0)