Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 35 additions & 4 deletions PWGHF/Core/HfMlResponseBplusToD0Pi.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,9 @@
// Fill the map of available input features
// the key is the feature's name (std::string)
// the value is the corresponding value in EnumInputFeatures
#define FILL_MAP_BPLUS(FEATURE) \
{ \
#FEATURE, static_cast<uint8_t>(InputFeaturesBplusToD0Pi::FEATURE) \
}
#define FILL_MAP_BPLUS(FEATURE) \
{ \
#FEATURE, static_cast<uint8_t>(InputFeaturesBplusToD0Pi::FEATURE)}

// Check if the index of mCachedIndices (index associated to a FEATURE)
// matches the entry in EnumInputFeatures associated to this FEATURE
Expand Down Expand Up @@ -89,6 +88,14 @@ enum class InputFeaturesBplusToD0Pi : uint8_t {
decayLengthXYNormalised,
cpa,
cpaXY,
decayLengthDToPv,
decayLengthDToPvXY,
decayLengthDToB,
decayLengthDToBXY,
cpaDToPv,
cpaDToPvXY,
cpaDToB,
cpaDToBXY,
maxNormalisedDeltaIP,
prong0MlProbBkg,
prong0MlProbPrompt,
Expand Down Expand Up @@ -134,6 +141,14 @@ class HfMlResponseBplusToD0Pi : public HfMlResponse<TypeOutputScore>
CHECK_AND_FILL_VEC_BPLUS(decayLengthXYNormalised);
CHECK_AND_FILL_VEC_BPLUS(cpa);
CHECK_AND_FILL_VEC_BPLUS(cpaXY);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToPv);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToPvXY);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToB);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToBXY);
CHECK_AND_FILL_VEC_BPLUS(cpaDToPv);
CHECK_AND_FILL_VEC_BPLUS(cpaDToPvXY);
CHECK_AND_FILL_VEC_BPLUS(cpaDToB);
CHECK_AND_FILL_VEC_BPLUS(cpaDToBXY);
CHECK_AND_FILL_VEC_BPLUS(maxNormalisedDeltaIP);
CHECK_AND_FILL_VEC_D0_INDEX(prong0MlProbBkg, mlProbD0, mlProbD0bar, 0);
CHECK_AND_FILL_VEC_D0_INDEX(prong0MlProbPrompt, mlProbD0, mlProbD0bar, 1);
Expand All @@ -159,6 +174,14 @@ class HfMlResponseBplusToD0Pi : public HfMlResponse<TypeOutputScore>
CHECK_AND_FILL_VEC_BPLUS(decayLengthXYNormalised);
CHECK_AND_FILL_VEC_BPLUS(cpa);
CHECK_AND_FILL_VEC_BPLUS(cpaXY);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToPv);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToPvXY);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToB);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToBXY);
CHECK_AND_FILL_VEC_BPLUS(cpaDToPv);
CHECK_AND_FILL_VEC_BPLUS(cpaDToPvXY);
CHECK_AND_FILL_VEC_BPLUS(cpaDToB);
CHECK_AND_FILL_VEC_BPLUS(cpaDToBXY);
CHECK_AND_FILL_VEC_BPLUS(maxNormalisedDeltaIP);
// TPC PID variable
CHECK_AND_FILL_VEC_BPLUS_FULL(prong1, tpcNSigmaPi1, tpcNSigmaPi);
Expand Down Expand Up @@ -190,6 +213,14 @@ class HfMlResponseBplusToD0Pi : public HfMlResponse<TypeOutputScore>
FILL_MAP_BPLUS(decayLengthXYNormalised),
FILL_MAP_BPLUS(cpa),
FILL_MAP_BPLUS(cpaXY),
FILL_MAP_BPLUS(decayLengthDToPv),
FILL_MAP_BPLUS(decayLengthDToPvXY),
FILL_MAP_BPLUS(decayLengthDToB),
FILL_MAP_BPLUS(decayLengthDToBXY),
FILL_MAP_BPLUS(cpaDToPv),
FILL_MAP_BPLUS(cpaDToPvXY),
FILL_MAP_BPLUS(cpaDToB),
FILL_MAP_BPLUS(cpaDToBXY),
FILL_MAP_BPLUS(maxNormalisedDeltaIP),
FILL_MAP_BPLUS(prong0MlProbBkg),
FILL_MAP_BPLUS(prong0MlProbPrompt),
Expand Down
39 changes: 35 additions & 4 deletions PWGHF/Core/HfMlResponseBplusToD0PiReduced.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,9 @@
// Fill the map of available input features
// the key is the feature's name (std::string)
// the value is the corresponding value in EnumInputFeatures
#define FILL_MAP_BPLUS(FEATURE) \
{ \
#FEATURE, static_cast<uint8_t>(InputFeaturesBplusToD0PiReduced::FEATURE) \
}
#define FILL_MAP_BPLUS(FEATURE) \
{ \
#FEATURE, static_cast<uint8_t>(InputFeaturesBplusToD0PiReduced::FEATURE)}

// Check if the index of mCachedIndices (index associated to a FEATURE)
// matches the entry in EnumInputFeatures associated to this FEATURE
Expand Down Expand Up @@ -76,6 +75,14 @@ enum class InputFeaturesBplusToD0PiReduced : uint8_t {
decayLengthXYNormalised,
cpa,
cpaXY,
decayLengthDToPv,
decayLengthDToPvXY,
decayLengthDToB,
decayLengthDToBXY,
cpaDToPv,
cpaDToPvXY,
cpaDToB,
cpaDToBXY,
maxNormalisedDeltaIP,
prong0MlScoreBkg,
prong0MlScorePrompt,
Expand Down Expand Up @@ -119,6 +126,14 @@ class HfMlResponseBplusToD0PiReduced : public HfMlResponse<TypeOutputScore>
CHECK_AND_FILL_VEC_BPLUS(decayLengthXYNormalised);
CHECK_AND_FILL_VEC_BPLUS(cpa);
CHECK_AND_FILL_VEC_BPLUS(cpaXY);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToPv);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToPvXY);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToB);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToBXY);
CHECK_AND_FILL_VEC_BPLUS(cpaDToPv);
CHECK_AND_FILL_VEC_BPLUS(cpaDToPvXY);
CHECK_AND_FILL_VEC_BPLUS(cpaDToB);
CHECK_AND_FILL_VEC_BPLUS(cpaDToBXY);
CHECK_AND_FILL_VEC_BPLUS(maxNormalisedDeltaIP);
CHECK_AND_FILL_VEC_BPLUS(prong0MlScoreBkg);
CHECK_AND_FILL_VEC_BPLUS(prong0MlScorePrompt);
Expand All @@ -144,6 +159,14 @@ class HfMlResponseBplusToD0PiReduced : public HfMlResponse<TypeOutputScore>
CHECK_AND_FILL_VEC_BPLUS(decayLengthXYNormalised);
CHECK_AND_FILL_VEC_BPLUS(cpa);
CHECK_AND_FILL_VEC_BPLUS(cpaXY);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToPv);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToPvXY);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToB);
CHECK_AND_FILL_VEC_BPLUS(decayLengthDToBXY);
CHECK_AND_FILL_VEC_BPLUS(cpaDToPv);
CHECK_AND_FILL_VEC_BPLUS(cpaDToPvXY);
CHECK_AND_FILL_VEC_BPLUS(cpaDToB);
CHECK_AND_FILL_VEC_BPLUS(cpaDToBXY);
CHECK_AND_FILL_VEC_BPLUS(maxNormalisedDeltaIP);
// TPC PID variable
CHECK_AND_FILL_VEC_BPLUS_FULL(prong1, tpcNSigmaPi1, tpcNSigmaPi);
Expand Down Expand Up @@ -175,6 +198,14 @@ class HfMlResponseBplusToD0PiReduced : public HfMlResponse<TypeOutputScore>
FILL_MAP_BPLUS(decayLengthXYNormalised),
FILL_MAP_BPLUS(cpa),
FILL_MAP_BPLUS(cpaXY),
FILL_MAP_BPLUS(decayLengthDToPv),
FILL_MAP_BPLUS(decayLengthDToPvXY),
FILL_MAP_BPLUS(decayLengthDToB),
FILL_MAP_BPLUS(decayLengthDToBXY),
FILL_MAP_BPLUS(cpaDToPv),
FILL_MAP_BPLUS(cpaDToPvXY),
FILL_MAP_BPLUS(cpaDToB),
FILL_MAP_BPLUS(cpaDToBXY),
FILL_MAP_BPLUS(maxNormalisedDeltaIP),
FILL_MAP_BPLUS(prong0MlScoreBkg),
FILL_MAP_BPLUS(prong0MlScorePrompt),
Expand Down
3 changes: 2 additions & 1 deletion PWGHF/D2H/TableProducer/candidateCreatorBplusReduced.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,8 @@ struct HfCandidateCreatorBplusReduced {
pVecD0[0], pVecD0[1], pVecD0[2],
pVecPion[0], pVecPion[1], pVecPion[2],
dcaD0.getY(), dcaPion.getY(),
std::sqrt(dcaD0.getSigmaY2()), std::sqrt(dcaPion.getSigmaY2()));
std::sqrt(dcaD0.getSigmaY2()), std::sqrt(dcaPion.getSigmaY2()),
candD0.xSecondaryVertex(), candD0.ySecondaryVertex(), candD0.zSecondaryVertex());

rowCandidateProngs(candD0.globalIndex(), trackPion.globalIndex());

Expand Down
36 changes: 33 additions & 3 deletions PWGHF/D2H/TableProducer/candidateSelectorBplusToD0PiReduced.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@
#include "PWGHF/Core/SelectorCuts.h"
#include "PWGHF/D2H/DataModel/ReducedDataModel.h"
#include "PWGHF/DataModel/CandidateSelectionTables.h"
#include "PWGHF/Utils/utilsAnalysis.h"
#include "PWGHF/Utils/utilsPid.h"

#include "Common/Core/TrackSelectorPID.h"

#include <CCDB/CcdbApi.h>
#include <CommonConstants/PhysicsConstants.h>
#include <Framework/ASoA.h>
#include <Framework/AnalysisHelpers.h>
#include <Framework/AnalysisTask.h>
Expand Down Expand Up @@ -91,6 +93,7 @@ struct HfCandidateSelectorBplusToD0PiReduced {
Configurable<std::vector<std::string>> onnxFileNames{"onnxFileNames", std::vector<std::string>{"ModelHandler_onnx_BPLUSToD0Pi.onnx"}, "ONNX file names for each pT bin (if not from CCDB full path)"};
Configurable<int64_t> timestampCCDB{"timestampCCDB", -1, "timestamp of the ONNX file for ML model used to query in CCDB"};
Configurable<bool> loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"};
Configurable<bool> useD0TriggerMassCut{"useD0TriggerMassCut", false, "Flag to enable parametrize pT differential mass cut for triggered data"};
// variable that will store the value of selectionFlagD (defined in dataCreatorD0PiReduced.cxx)
int mySelectionFlagD0 = -1;
int mySelectionFlagD0bar = -1;
Expand All @@ -101,6 +104,7 @@ struct HfCandidateSelectorBplusToD0PiReduced {
o2::ccdb::CcdbApi ccdbApi;

TrackSelectorPi selectorPion;
HfTrigger2ProngCuts hfTriggerCuts;

using TracksPion = soa::Join<HfRedTracks, HfRedTracksPid>;

Expand Down Expand Up @@ -154,6 +158,19 @@ struct HfCandidateSelectorBplusToD0PiReduced {
}
}

/// Utility function to apply the pT-differential mass cut for triggered data
/// on the D0 daughter of the B+ candidate
/// \param candidate is the B+ candidate
/// \param trackPi is the bachelor pion of the B+ candidate
/// \return true if the D0 daughter passes the mass selection
template <typename T1>
bool isDmesInMassRange(const T1& candidate, TracksPion::iterator const& trackPi)
{
const auto candD0 = candidate.template prong0_as<HfRed2Prongs>();
const auto invMassD0 = (trackPi.signed1Pt() < 0) ? candD0.invMassHypo0() : candD0.invMassHypo1();
return isCandidateInMassRange(invMassD0, o2::constants::physics::MassD0, candidate.ptProng0(), hfTriggerCuts);
}

/// Main function to perform B+ candidate creation
/// \param withDmesMl is the flag to use the table with ML scores for the D- daughter (only possible if present in the derived data)
/// \param hfCandsBp B+ candidates
Expand Down Expand Up @@ -189,6 +206,18 @@ struct HfCandidateSelectorBplusToD0PiReduced {
continue;
}

auto trackPi = hfCandBp.template prong1_as<TracksPion>();

// pT-differential mass cut on the D0 daughter for triggered data
if (useD0TriggerMassCut && !isDmesInMassRange(hfCandBp, trackPi)) {
hfSelBplusToD0PiCandidate(statusBplus);
if (applyBplusMl) {
hfMlBplusToD0PiCandidate(outputMlNotPreselected);
}
// LOGF(info, "B+ candidate selection failed at D0-meson mass selection");
continue;
}

if constexpr (WithDmesMl) { // we include it in the topological selections
if (!HfHelper::selectionDmesMlScoresForBReduced(hfCandBp, cutsDmesMl, binsPtDmesMl)) {
hfSelBplusToD0PiCandidate(statusBplus);
Expand All @@ -206,7 +235,6 @@ struct HfCandidateSelectorBplusToD0PiReduced {
}

// track-level PID selection
auto trackPi = hfCandBp.template prong1_as<TracksPion>();
if (pionPidMethod == PidMethod::TpcOrTof || pionPidMethod == PidMethod::TpcAndTof) {
int pidTrackPi{TrackSelectorPID::Status::NotApplicable};
if (pionPidMethod == PidMethod::TpcOrTof) {
Expand Down Expand Up @@ -250,7 +278,8 @@ struct HfCandidateSelectorBplusToD0PiReduced {

void processSelection(HfRedCandBplus const& hfCandsBp,
TracksPion const& pionTracks,
HfCandBpConfigs const& configs)
HfCandBpConfigs const& configs,
HfRed2Prongs const& /*candsD*/)
{
runSelection<false>(hfCandsBp, pionTracks, configs);
} // processSelection
Expand All @@ -259,7 +288,8 @@ struct HfCandidateSelectorBplusToD0PiReduced {

void processSelectionWithDmesMl(soa::Join<HfRedCandBplus, HfRedBplusD0Mls> const& hfCandsBp,
TracksPion const& pionTracks,
HfCandBpConfigs const& configs)
HfCandBpConfigs const& configs,
HfRed2Prongs const& /*candsD*/)
{
runSelection<true>(hfCandsBp, pionTracks, configs);
} // processSelectionWithDmesMl
Expand Down
Loading
Loading