From 4db0ac36a1e6540d62d44779e82d0d692a3a5bca Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 2 Jul 2025 15:42:23 +0200 Subject: [PATCH 1/6] Get rid of hard-coded mass cuts in HFFilter --- EventFiltering/PWGHF/HFFilter.cxx | 19 ++++++++++++++++++- EventFiltering/PWGHF/HFFilterHelpers.h | 22 +++++++++++++++++++--- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/EventFiltering/PWGHF/HFFilter.cxx b/EventFiltering/PWGHF/HFFilter.cxx index 7a538f53f27..0ac34fa62eb 100644 --- a/EventFiltering/PWGHF/HFFilter.cxx +++ b/EventFiltering/PWGHF/HFFilter.cxx @@ -54,6 +54,7 @@ #include #include #include +#include "Framework/RunningWorkflowInfo.h" #include #include @@ -217,7 +218,7 @@ struct HfFilter { // Main struct for HF triggers // helper object HfFilterHelper helper; - void init(InitContext&) + void init(InitContext& initContext) { helper.setHighPtTriggerThresholds(ptThresholds->get(0u, 0u), ptThresholds->get(0u, 1u)); helper.setPtTriggerThresholdsForFemto(ptThresholdsForFemto->get(0u, 0u), ptThresholdsForFemto->get(0u, 1u)); @@ -262,6 +263,22 @@ struct HfFilter { // Main struct for HF triggers helper.setVtxConfiguration(dfBtoDstar, true); } + // fetch config of track-index-skim-creator to apply the same cut on DeltaMassKK for Ds + std::vector> ptBinsDsSkimCreator{}; + LabeledArray cutsDsSkimCreator{}; + for (const DeviceSpec& device : workflows.devices) { + if (device.name.compare("hf-track-index-skim-creator") == 0) { + for (const auto& option : device.options) { + if (option.name.compare("binsPtDsToKKPi") == 0) { + auto ptBinsDsSkimCreator = option.defaultValue.get>(); + } else if (option.name.compare("cutsDsToKKPi") == 0) { + auto cutsDsSkimCreator = option.defaultValue.get>(); + } + } + } + } + helper.setPreselDsToKKPi(ptBinsDsSkimCreator, cutsDsSkimCreator); + hProcessedEvents = registry.add("fProcessedEvents", "HF - event filtered;;counts", HistType::kTH1D, {{kNtriggersHF + 2, -0.5, +kNtriggersHF + 1.5}}); for (auto iBin = 0; iBin < kNtriggersHF + 2; ++iBin) { if (iBin < 2) diff --git a/EventFiltering/PWGHF/HFFilterHelpers.h b/EventFiltering/PWGHF/HFFilterHelpers.h index af70e4c05fa..b24bcda7526 100644 --- a/EventFiltering/PWGHF/HFFilterHelpers.h +++ b/EventFiltering/PWGHF/HFFilterHelpers.h @@ -278,7 +278,7 @@ constexpr float massB0 = o2::constants::physics::MassB0; constexpr float massBs = o2::constants::physics::MassBS; constexpr float massLb = o2::constants::physics::MassLambdaB0; constexpr float massXib = o2::constants::physics::MassXiB0; -constexpr float massBc = 6.2744700f; // TODO add Bc mass to o2::constants::physics +constexpr float massBc = o2::constants::physics::MassBCPlus; constexpr float massSigmaCPlusPlus = o2::constants::physics::MassSigmaCPlusPlus; constexpr float massSigmaC0 = o2::constants::physics::MassSigmaC0; constexpr float massK0Star892 = o2::constants::physics::MassK0Star892; @@ -601,6 +601,12 @@ class HfFilterHelper void setNumSigmaForDeltaMassCharmHadCut(float nSigma) { mNumSigmaDeltaMassCharmHad = nSigma; } + void setPreselDsToKKPi(std::vector ptBins, o2::framework::LabeledArray preselections) + { + mPtBinsPreselDsToKKPi = ptBins; + mPreselDsToKKPi = preselections; + } + // helper functions for selections template bool isSelectedHighPt2Prong(const T& pt); @@ -790,6 +796,9 @@ class HfFilterHelper int mTpcPidCalibrationOption{0}; // Option for TPC PID calibration (0 -> AO2D, 1 -> postcalibrations, 2 -> alternative bethe bloch parametrisation) std::array mHistMapPiPrKaDe{}; // Map for TPC PID postcalibrations for pions, kaon, protons and deuterons std::array, 8> mBetheBlochPiKaPrDe{}; // Bethe-Bloch parametrisations for pions, antipions, kaons, antikaons, protons, antiprotons, deuterons, antideuterons in TPC + // Ds cuts from track-index-skim-creator + std::vector mPtBinsPreselDsToKKPi{}; // pT bins for pre-selections for Ds from track-index-skim-creator + o2::framework::LabeledArray mPreselDsToKKPi{}; // pre-selections for Ds from track-index-skim-creator }; /// Selection of high-pt 2-prong candidates @@ -1071,13 +1080,20 @@ inline int8_t HfFilterHelper::isDsPreselected(const P& pTrackSameChargeFirst, co } // check delta-mass for phi resonance + auto ptDs = RecoDecay::pt(std::array{pTrackSameChargeFirst, pTrackSameChargeSecond, pTrackOppositeCharge}); + auto ptBinDs = findBin(mPreselDsToKKPi, ptDs); + if (ptBinDs == -1) { + return retValue; + } + auto invMassKKFirst = RecoDecay::m(std::array{pTrackSameChargeFirst, pTrackOppositeCharge}, std::array{massKa, massKa}); auto invMassKKSecond = RecoDecay::m(std::array{pTrackSameChargeSecond, pTrackOppositeCharge}, std::array{massKa, massKa}); - if (std::fabs(invMassKKFirst - massPhi) < 0.02) { + float cutValueMassKK = mPtBinsPreselDsToKKPi.get(ptBinDs, 4u); + if (std::fabs(invMassKKFirst - massPhi) < cutValueMassKK) { retValue |= BIT(0); } - if (std::fabs(invMassKKSecond - massPhi) < 0.02) { + if (std::fabs(invMassKKSecond - massPhi) < cutValueMassKK) { retValue |= BIT(1); } From 359346851484c692b2e2cff06bbacd79ca8ec384 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 2 Jul 2025 16:36:06 +0200 Subject: [PATCH 2/6] Small fixes --- EventFiltering/PWGHF/HFFilter.cxx | 3 ++- EventFiltering/PWGHF/HFFilterHelpers.h | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/EventFiltering/PWGHF/HFFilter.cxx b/EventFiltering/PWGHF/HFFilter.cxx index 0ac34fa62eb..3b07866e7e2 100644 --- a/EventFiltering/PWGHF/HFFilter.cxx +++ b/EventFiltering/PWGHF/HFFilter.cxx @@ -264,8 +264,9 @@ struct HfFilter { // Main struct for HF triggers } // fetch config of track-index-skim-creator to apply the same cut on DeltaMassKK for Ds - std::vector> ptBinsDsSkimCreator{}; + std::vector ptBinsDsSkimCreator{}; LabeledArray cutsDsSkimCreator{}; + const auto& workflows = initContext.services().get(); for (const DeviceSpec& device : workflows.devices) { if (device.name.compare("hf-track-index-skim-creator") == 0) { for (const auto& option : device.options) { diff --git a/EventFiltering/PWGHF/HFFilterHelpers.h b/EventFiltering/PWGHF/HFFilterHelpers.h index b24bcda7526..f303003ddab 100644 --- a/EventFiltering/PWGHF/HFFilterHelpers.h +++ b/EventFiltering/PWGHF/HFFilterHelpers.h @@ -1080,8 +1080,8 @@ inline int8_t HfFilterHelper::isDsPreselected(const P& pTrackSameChargeFirst, co } // check delta-mass for phi resonance - auto ptDs = RecoDecay::pt(std::array{pTrackSameChargeFirst, pTrackSameChargeSecond, pTrackOppositeCharge}); - auto ptBinDs = findBin(mPreselDsToKKPi, ptDs); + auto ptDs = RecoDecay::pt(pTrackSameChargeFirst, pTrackSameChargeSecond, pTrackOppositeCharge); + auto ptBinDs = findBin(mPtBinsPreselDsToKKPi, ptDs); if (ptBinDs == -1) { return retValue; } @@ -1089,7 +1089,7 @@ inline int8_t HfFilterHelper::isDsPreselected(const P& pTrackSameChargeFirst, co auto invMassKKFirst = RecoDecay::m(std::array{pTrackSameChargeFirst, pTrackOppositeCharge}, std::array{massKa, massKa}); auto invMassKKSecond = RecoDecay::m(std::array{pTrackSameChargeSecond, pTrackOppositeCharge}, std::array{massKa, massKa}); - float cutValueMassKK = mPtBinsPreselDsToKKPi.get(ptBinDs, 4u); + float cutValueMassKK = mPreselDsToKKPi.get(ptBinDs, 4u); if (std::fabs(invMassKKFirst - massPhi) < cutValueMassKK) { retValue |= BIT(0); } From 455d69ed06c103755cbbe737152546124c6f66e6 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 2 Jul 2025 14:41:39 +0000 Subject: [PATCH 3/6] Please consider the following formatting changes --- EventFiltering/PWGHF/HFFilter.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EventFiltering/PWGHF/HFFilter.cxx b/EventFiltering/PWGHF/HFFilter.cxx index 3b07866e7e2..30e55aec79a 100644 --- a/EventFiltering/PWGHF/HFFilter.cxx +++ b/EventFiltering/PWGHF/HFFilter.cxx @@ -37,6 +37,7 @@ #include "Common/DataModel/PIDResponseTPC.h" #include "Common/DataModel/TrackSelectionTables.h" +#include "Framework/RunningWorkflowInfo.h" #include #include #include @@ -54,7 +55,6 @@ #include #include #include -#include "Framework/RunningWorkflowInfo.h" #include #include From 89d8c54074cd469e712e0fb09cc0b450ddd06200 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 2 Jul 2025 18:06:22 +0200 Subject: [PATCH 4/6] Fix for unknown vector size --- EventFiltering/PWGHF/HFFilter.cxx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/EventFiltering/PWGHF/HFFilter.cxx b/EventFiltering/PWGHF/HFFilter.cxx index 30e55aec79a..88edd8f1622 100644 --- a/EventFiltering/PWGHF/HFFilter.cxx +++ b/EventFiltering/PWGHF/HFFilter.cxx @@ -271,9 +271,16 @@ struct HfFilter { // Main struct for HF triggers if (device.name.compare("hf-track-index-skim-creator") == 0) { for (const auto& option : device.options) { if (option.name.compare("binsPtDsToKKPi") == 0) { - auto ptBinsDsSkimCreator = option.defaultValue.get>(); + auto ptBins = option.defaultValue.get(); + double lastEl{-1.e6}; + int iPt{0}; + while (ptBins[iPt] > lastEl) { + ptBinsDsSkimCreator.push_back(ptBins[iPt]); + iPt++; + lastEl = ptBins[iPt]; + } } else if (option.name.compare("cutsDsToKKPi") == 0) { - auto cutsDsSkimCreator = option.defaultValue.get>(); + cutsDsSkimCreator = option.defaultValue.get>(); } } } From a5be96f3509411be97543f6a3ebdae08fcf24cba Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 2 Jul 2025 16:07:25 +0000 Subject: [PATCH 5/6] Please consider the following formatting changes --- EventFiltering/PWGHF/HFFilter.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EventFiltering/PWGHF/HFFilter.cxx b/EventFiltering/PWGHF/HFFilter.cxx index 88edd8f1622..aca48aa2ab3 100644 --- a/EventFiltering/PWGHF/HFFilter.cxx +++ b/EventFiltering/PWGHF/HFFilter.cxx @@ -274,7 +274,7 @@ struct HfFilter { // Main struct for HF triggers auto ptBins = option.defaultValue.get(); double lastEl{-1.e6}; int iPt{0}; - while (ptBins[iPt] > lastEl) { + while (ptBins[iPt] > lastEl) { ptBinsDsSkimCreator.push_back(ptBins[iPt]); iPt++; lastEl = ptBins[iPt]; From f3c6b1d215e9a3afe66f60632f6342a83bf1c7e4 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 2 Jul 2025 18:51:56 +0200 Subject: [PATCH 6/6] Fix typo --- EventFiltering/PWGHF/HFFilter.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EventFiltering/PWGHF/HFFilter.cxx b/EventFiltering/PWGHF/HFFilter.cxx index aca48aa2ab3..c13436c2db4 100644 --- a/EventFiltering/PWGHF/HFFilter.cxx +++ b/EventFiltering/PWGHF/HFFilter.cxx @@ -276,8 +276,8 @@ struct HfFilter { // Main struct for HF triggers int iPt{0}; while (ptBins[iPt] > lastEl) { ptBinsDsSkimCreator.push_back(ptBins[iPt]); - iPt++; lastEl = ptBins[iPt]; + iPt++; } } else if (option.name.compare("cutsDsToKKPi") == 0) { cutsDsSkimCreator = option.defaultValue.get>();