Skip to content

Commit 38de5d1

Browse files
fgrosaalibuild
andauthored
[PWGHF,Trigger] Get rid of hard-coded mass cuts in HFFilter (#11877)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 932fc2f commit 38de5d1

File tree

2 files changed

+45
-4
lines changed

2 files changed

+45
-4
lines changed

EventFiltering/PWGHF/HFFilter.cxx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "Common/DataModel/PIDResponseTPC.h"
3838
#include "Common/DataModel/TrackSelectionTables.h"
3939

40+
#include "Framework/RunningWorkflowInfo.h"
4041
#include <CCDB/BasicCCDBManager.h>
4142
#include <CCDB/CcdbApi.h>
4243
#include <CommonConstants/PhysicsConstants.h>
@@ -217,7 +218,7 @@ struct HfFilter { // Main struct for HF triggers
217218
// helper object
218219
HfFilterHelper helper;
219220

220-
void init(InitContext&)
221+
void init(InitContext& initContext)
221222
{
222223
helper.setHighPtTriggerThresholds(ptThresholds->get(0u, 0u), ptThresholds->get(0u, 1u));
223224
helper.setPtTriggerThresholdsForFemto(ptThresholdsForFemto->get(0u, 0u), ptThresholdsForFemto->get(0u, 1u));
@@ -262,6 +263,30 @@ struct HfFilter { // Main struct for HF triggers
262263
helper.setVtxConfiguration(dfBtoDstar, true);
263264
}
264265

266+
// fetch config of track-index-skim-creator to apply the same cut on DeltaMassKK for Ds
267+
std::vector<double> ptBinsDsSkimCreator{};
268+
LabeledArray<double> cutsDsSkimCreator{};
269+
const auto& workflows = initContext.services().get<RunningWorkflowInfo const>();
270+
for (const DeviceSpec& device : workflows.devices) {
271+
if (device.name.compare("hf-track-index-skim-creator") == 0) {
272+
for (const auto& option : device.options) {
273+
if (option.name.compare("binsPtDsToKKPi") == 0) {
274+
auto ptBins = option.defaultValue.get<double*>();
275+
double lastEl{-1.e6};
276+
int iPt{0};
277+
while (ptBins[iPt] > lastEl) {
278+
ptBinsDsSkimCreator.push_back(ptBins[iPt]);
279+
lastEl = ptBins[iPt];
280+
iPt++;
281+
}
282+
} else if (option.name.compare("cutsDsToKKPi") == 0) {
283+
cutsDsSkimCreator = option.defaultValue.get<LabeledArray<double>>();
284+
}
285+
}
286+
}
287+
}
288+
helper.setPreselDsToKKPi(ptBinsDsSkimCreator, cutsDsSkimCreator);
289+
265290
hProcessedEvents = registry.add<TH1>("fProcessedEvents", "HF - event filtered;;counts", HistType::kTH1D, {{kNtriggersHF + 2, -0.5, +kNtriggersHF + 1.5}});
266291
for (auto iBin = 0; iBin < kNtriggersHF + 2; ++iBin) {
267292
if (iBin < 2)

EventFiltering/PWGHF/HFFilterHelpers.h

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ constexpr float massB0 = o2::constants::physics::MassB0;
278278
constexpr float massBs = o2::constants::physics::MassBS;
279279
constexpr float massLb = o2::constants::physics::MassLambdaB0;
280280
constexpr float massXib = o2::constants::physics::MassXiB0;
281-
constexpr float massBc = 6.2744700f; // TODO add Bc mass to o2::constants::physics
281+
constexpr float massBc = o2::constants::physics::MassBCPlus;
282282
constexpr float massSigmaCPlusPlus = o2::constants::physics::MassSigmaCPlusPlus;
283283
constexpr float massSigmaC0 = o2::constants::physics::MassSigmaC0;
284284
constexpr float massK0Star892 = o2::constants::physics::MassK0Star892;
@@ -601,6 +601,12 @@ class HfFilterHelper
601601

602602
void setNumSigmaForDeltaMassCharmHadCut(float nSigma) { mNumSigmaDeltaMassCharmHad = nSigma; }
603603

604+
void setPreselDsToKKPi(std::vector<double> ptBins, o2::framework::LabeledArray<double> preselections)
605+
{
606+
mPtBinsPreselDsToKKPi = ptBins;
607+
mPreselDsToKKPi = preselections;
608+
}
609+
604610
// helper functions for selections
605611
template <typename T>
606612
bool isSelectedHighPt2Prong(const T& pt);
@@ -790,6 +796,9 @@ class HfFilterHelper
790796
int mTpcPidCalibrationOption{0}; // Option for TPC PID calibration (0 -> AO2D, 1 -> postcalibrations, 2 -> alternative bethe bloch parametrisation)
791797
std::array<TH3F*, 8> mHistMapPiPrKaDe{}; // Map for TPC PID postcalibrations for pions, kaon, protons and deuterons
792798
std::array<std::vector<double>, 8> mBetheBlochPiKaPrDe{}; // Bethe-Bloch parametrisations for pions, antipions, kaons, antikaons, protons, antiprotons, deuterons, antideuterons in TPC
799+
// Ds cuts from track-index-skim-creator
800+
std::vector<double> mPtBinsPreselDsToKKPi{}; // pT bins for pre-selections for Ds from track-index-skim-creator
801+
o2::framework::LabeledArray<double> mPreselDsToKKPi{}; // pre-selections for Ds from track-index-skim-creator
793802
};
794803

795804
/// Selection of high-pt 2-prong candidates
@@ -1071,13 +1080,20 @@ inline int8_t HfFilterHelper::isDsPreselected(const P& pTrackSameChargeFirst, co
10711080
}
10721081

10731082
// check delta-mass for phi resonance
1083+
auto ptDs = RecoDecay::pt(pTrackSameChargeFirst, pTrackSameChargeSecond, pTrackOppositeCharge);
1084+
auto ptBinDs = findBin(mPtBinsPreselDsToKKPi, ptDs);
1085+
if (ptBinDs == -1) {
1086+
return retValue;
1087+
}
1088+
10741089
auto invMassKKFirst = RecoDecay::m(std::array{pTrackSameChargeFirst, pTrackOppositeCharge}, std::array{massKa, massKa});
10751090
auto invMassKKSecond = RecoDecay::m(std::array{pTrackSameChargeSecond, pTrackOppositeCharge}, std::array{massKa, massKa});
10761091

1077-
if (std::fabs(invMassKKFirst - massPhi) < 0.02) {
1092+
float cutValueMassKK = mPreselDsToKKPi.get(ptBinDs, 4u);
1093+
if (std::fabs(invMassKKFirst - massPhi) < cutValueMassKK) {
10781094
retValue |= BIT(0);
10791095
}
1080-
if (std::fabs(invMassKKSecond - massPhi) < 0.02) {
1096+
if (std::fabs(invMassKKSecond - massPhi) < cutValueMassKK) {
10811097
retValue |= BIT(1);
10821098
}
10831099

0 commit comments

Comments
 (0)