From 4e08c65ba094484f081755820cc0e32dd2471cba Mon Sep 17 00:00:00 2001 From: apalasciano Date: Mon, 24 Mar 2025 20:52:13 +0100 Subject: [PATCH 1/2] [PWGHF,Trigger] Fix selection and revert changes --- EventFiltering/PWGHF/HFFilter.cxx | 8 ++--- EventFiltering/PWGHF/HFFilterHelpers.h | 48 ++++++++++++++++---------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/EventFiltering/PWGHF/HFFilter.cxx b/EventFiltering/PWGHF/HFFilter.cxx index b1666812d52..40b2ea4ebf2 100644 --- a/EventFiltering/PWGHF/HFFilter.cxx +++ b/EventFiltering/PWGHF/HFFilter.cxx @@ -953,8 +953,8 @@ struct HfFilter { // Main struct for HF triggers o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, trackParBachelorProton, 2.f, noMatCorr, &dcaInfoBachProton); } std::array pVecProton = trackProton.pVector(); - auto isSelProton = helper.isSelectedBachelorForCharmBaryon(trackProton, dcaInfoBachProton); - if (TESTBIT(isSelProton, kProtonForCharmBaryon)) { + bool isSelProton = helper.isSelectedProtonFromLcReso(trackProton); + if (isSelProton) { if (!keepEvent[kPrCharm2P]) { // we first look for a D*+ for (const auto& trackBachelorId : trackIdsThisCollision) { // start loop over tracks to find bachelor pion @@ -1726,7 +1726,7 @@ struct HfFilter { // Main struct for HF triggers o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, trackParBachelor, 2.f, noMatCorr, &dcaInfoBach); } - auto isSelBachelor = helper.isSelectedBachelorForCharmBaryon(track, dcaInfoBach); + auto isSelBachelor = helper.isSelectedBachelorForCharmBaryon(track, dcaInfoBach); if (isSelBachelor == kRejected) { continue; } @@ -1770,7 +1770,7 @@ struct HfFilter { // Main struct for HF triggers o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, trackParBachelorSecond, 2.f, noMatCorr, &dcaInfoBachSecond); } - auto isSelBachelorSecond = helper.isSelectedBachelorForCharmBaryon(trackSecond, dcaInfoBachSecond); + auto isSelBachelorSecond = helper.isSelectedBachelorForCharmBaryon(trackSecond, dcaInfoBachSecond); if (!TESTBIT(isSelBachelorSecond, kPionForCharmBaryon)) { continue; } diff --git a/EventFiltering/PWGHF/HFFilterHelpers.h b/EventFiltering/PWGHF/HFFilterHelpers.h index affa81f2815..8541a710203 100644 --- a/EventFiltering/PWGHF/HFFilterHelpers.h +++ b/EventFiltering/PWGHF/HFFilterHelpers.h @@ -600,7 +600,7 @@ class HfFilterHelper bool isSelectedPhoton(const Photon& photon, const std::array& dauTracks, const int& activateQA, H2 hV0Selected, std::array& hArmPod); template bool isSelectedCascade(const Casc& casc); - template + template int16_t isSelectedBachelorForCharmBaryon(const T& track, const T2& dca); template bool isSelectedProton4CharmOrBeautyBaryons(const T& track); @@ -622,7 +622,8 @@ class HfFilterHelper 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); template bool isSelectedXiBachBach(T const& trackParCasc, std::array const& trackParBachelor, C const& collision, o2::vertexing::DCAFitterN& dcaFitter, const int& activateQA, H2 hMassVsPtXiPiPi); - + template + bool isSelectedProtonFromLcReso(const T& track); // helpers template T computeRelativeMomentum(const std::array& pTrack, const std::array& CharmCandMomentum, const T& CharmMass); @@ -1633,24 +1634,18 @@ inline bool HfFilterHelper::isSelectedCascade(const Casc& casc) /// \param track is a track /// \param dca is the 2d array with dcaXY and dcaZ of the track /// \return 0 if rejected, or a bitmap that contains the information whether it is selected as pion and/or kaon -template +template inline int16_t HfFilterHelper::isSelectedBachelorForCharmBaryon(const T& track, const T2& dca) { - int16_t retValue{BIT(kPionForCharmBaryon) | BIT(kKaonForCharmBaryon) | BIT(kProtonForCharmBaryon)}; + int16_t retValue{BIT(kPionForCharmBaryon) | BIT(kKaonForCharmBaryon)}; if (!track.isGlobalTrackWoDCA()) { return kRejected; } float pt = track.pt(); - if constexpr (whichTrigger == kCharmBarToXiBach) { - if (pt < mPtMinCharmBaryonBachelor || pt > mPtMaxCharmBaryonBachelor) { - return kRejected; - } - } else if constexpr (whichTrigger == kPrCharm2P) { - if (pt < mPtMinLcResonanceBachelor || pt > mPtMaxLcResonanceBachelor) { - return kRejected; - } + if (pt < mPtMinCharmBaryonBachelor || pt > mPtMaxCharmBaryonBachelor) { + return kRejected; } auto pTBinTrack = findBin(mPtBinsTracks, pt); @@ -1679,18 +1674,14 @@ inline int16_t HfFilterHelper::isSelectedBachelorForCharmBaryon(const T& track, float nSigmaPiTpc = track.tpcNSigmaPi(); float nSigmaKaTpc = track.tpcNSigmaKa(); - float nSigmaPrTpc = track.tpcNSigmaPr(); float nSigmaPiTof = track.tofNSigmaPi(); float nSigmaKaTof = track.tofNSigmaKa(); - float nSigmaPrTof = track.tofNSigmaPr(); if (mTpcPidCalibrationOption == 1) { nSigmaPiTpc = getTPCPostCalib(track, kPi); nSigmaKaTpc = getTPCPostCalib(track, kKa); - nSigmaPrTpc = getTPCPostCalib(track, kPr); } else if (mTpcPidCalibrationOption == 2) { nSigmaPiTpc = getTPCSplineCalib(track, (track.sign() > 0) ? kPi : kAntiPi); nSigmaKaTpc = getTPCSplineCalib(track, (track.sign() > 0) ? kKa : kAntiKa); - nSigmaPrTpc = getTPCSplineCalib(track, (track.sign() > 0) ? kPr : kAntiPr); } if ((track.hasTPC() && std::fabs(nSigmaPiTpc) > mNSigmaTpcPiCharmBaryonBachelor) && (track.hasTOF() && std::fabs(nSigmaPiTof) > mNSigmaTofPiCharmBaryonBachelor)) { @@ -1699,9 +1690,6 @@ inline int16_t HfFilterHelper::isSelectedBachelorForCharmBaryon(const T& track, if ((track.hasTPC() && std::fabs(nSigmaKaTpc) > mNSigmaTpcPiCharmBaryonBachelor) && (track.hasTOF() && std::fabs(nSigmaKaTof) > mNSigmaTofPiCharmBaryonBachelor)) { CLRBIT(retValue, kKaonForCharmBaryon); } - if ((track.hasTPC() && std::fabs(nSigmaPrTpc) > mNSigmaTpcPiCharmBaryonBachelor) && (track.hasTOF() && std::fabs(nSigmaPrTof) > mNSigmaTpcPiCharmBaryonBachelor)) { - CLRBIT(retValue, kProtonForCharmBaryon); - } return retValue; } @@ -1947,6 +1935,28 @@ inline bool HfFilterHelper::isSelectedKaon4Charm3ProngOrBeautyToJPsi(const T& tr return true; } +/// Basic selection of proton candidates forLc and ThetaC decays +/// \param isProtonTrack true if we are using a p track, false otherwise +/// \param track is a track +/// \return true if track passes all cuts +template +inline bool HfFilterHelper::isSelectedProtonFromLcReso(const T& track) +{ + + // pt selections + float pt = track.pt(); + if (pt < mPtMinLcResonanceBachelor || pt > mPtMaxLcResonanceBachelor) { + return false; + } + + if constexpr (isProtonTrack) { + /// if it is a proton, check the PID as well + return isSelectedProton4CharmOrBeautyBaryons(track); + } + + return true; +} + /// Method to perform selections for B+ candidates after vertex reconstruction /// \param pVecTrack0 is the array for the candidate D daughter momentum after reconstruction of secondary vertex /// \param pVecTrack1 is the array for the candidate bachelor pion momentum after reconstruction of secondary vertex From 70d0cba56be6b5f4ecd9b7c4b3eb9eef38af4007 Mon Sep 17 00:00:00 2001 From: apalasciano Date: Tue, 25 Mar 2025 11:13:53 +0100 Subject: [PATCH 2/2] small fix --- EventFiltering/PWGHF/HFFilterHelpers.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/EventFiltering/PWGHF/HFFilterHelpers.h b/EventFiltering/PWGHF/HFFilterHelpers.h index 8541a710203..f72ec03431e 100644 --- a/EventFiltering/PWGHF/HFFilterHelpers.h +++ b/EventFiltering/PWGHF/HFFilterHelpers.h @@ -1936,7 +1936,6 @@ inline bool HfFilterHelper::isSelectedKaon4Charm3ProngOrBeautyToJPsi(const T& tr } /// Basic selection of proton candidates forLc and ThetaC decays -/// \param isProtonTrack true if we are using a p track, false otherwise /// \param track is a track /// \return true if track passes all cuts template @@ -1949,10 +1948,8 @@ inline bool HfFilterHelper::isSelectedProtonFromLcReso(const T& track) return false; } - if constexpr (isProtonTrack) { - /// if it is a proton, check the PID as well - return isSelectedProton4CharmOrBeautyBaryons(track); - } + /// PID selection + return isSelectedProton4CharmOrBeautyBaryons(track); return true; }