From 67c18790071590f9a29fda75ca802b1431ec9e2d Mon Sep 17 00:00:00 2001 From: Daiki Sekihata Date: Sat, 30 May 2026 15:11:26 +0200 Subject: [PATCH] [PWGEM/Dilepton] reduce data size for SCT --- PWGEM/Dilepton/DataModel/dileptonTables.h | 11 +++-- PWGEM/Dilepton/Tasks/taggingHFE.cxx | 27 ++++++----- PWGEM/Dilepton/Utils/ElectronModule.h | 57 ++++++++++++----------- 3 files changed, 51 insertions(+), 44 deletions(-) diff --git a/PWGEM/Dilepton/DataModel/dileptonTables.h b/PWGEM/Dilepton/DataModel/dileptonTables.h index 27d06147986..0b57232eea5 100644 --- a/PWGEM/Dilepton/DataModel/dileptonTables.h +++ b/PWGEM/Dilepton/DataModel/dileptonTables.h @@ -691,15 +691,16 @@ DECLARE_SOA_COLUMN(PrefilterBit, pfb, uint8_t); //! DECLARE_SOA_COLUMN(PrefilterBitDerived, pfbderived, uint16_t); //! DECLARE_SOA_COLUMN(ProbElBDT, probElBDT, float); //! -DECLARE_SOA_COLUMN(BDTScorePromptUINT8, bdtScorePromptUINT8, std::vector); //! scaling factor is 255. +// As sum of probability is 1, keeping 3 out of 4 is enough. +// DECLARE_SOA_COLUMN(BDTScorePromptUINT8, bdtScorePromptUINT8, std::vector); //! scaling factor is 255. DECLARE_SOA_COLUMN(BDTScorePromptHcUINT8, bdtScorePromptHcUINT8, std::vector); //! scaling factor is 255. DECLARE_SOA_COLUMN(BDTScoreNonpromptHcUINT8, bdtScoreNonpromptHcUINT8, std::vector); //! scaling factor is 255. DECLARE_SOA_COLUMN(BDTScoreHbUINT8, bdtScoreHbUINT8, std::vector); //! scaling factor is 255. DECLARE_SOA_COLUMN(HadronType, hadronType, std::vector); //! 0:track, 1:K0S, 2:Lambda, 3:AntiLambda, 4:XiMinus, 5:XiPlus, 6:OmegaMinus, 7:OmegaPlus -DECLARE_SOA_DYNAMIC_COLUMN(ProbaSCT, probaSCT, [](gsl::span p0, gsl::span p1, gsl::span p2, gsl::span p3, gsl::span type, const int index) -> std::array { +DECLARE_SOA_DYNAMIC_COLUMN(ProbaSCT, probaSCT, [](gsl::span p1, gsl::span p2, gsl::span p3, gsl::span type, const int index) -> std::array { return std::array{ - std::nextafter(p0[index] / 255.f, std::numeric_limits::infinity()), + 1.f - (std::nextafter(p1[index] / 255.f, std::numeric_limits::infinity()) + std::nextafter(p2[index] / 255.f, std::numeric_limits::infinity()) + std::nextafter(p3[index] / 255.f, std::numeric_limits::infinity())), std::nextafter(p1[index] / 255.f, std::numeric_limits::infinity()), std::nextafter(p2[index] / 255.f, std::numeric_limits::infinity()), std::nextafter(p3[index] / 255.f, std::numeric_limits::infinity()), @@ -1024,9 +1025,9 @@ DECLARE_SOA_TABLE(EMPrimaryElectronsPrefilterBitDerived, "AOD", "PRMELPFBDERIVED using EMPrimaryElectronPrefilterBitDerived = EMPrimaryElectronsPrefilterBitDerived::iterator; DECLARE_SOA_TABLE(EMPrimaryElectronsBDTSCT, "AOD", "ELBDTSCT", // To be joined with EMPrimaryElectrons table at analysis level. - emprimaryelectron::BDTScorePromptUINT8, emprimaryelectron::BDTScorePromptHcUINT8, emprimaryelectron::BDTScoreNonpromptHcUINT8, emprimaryelectron::BDTScoreHbUINT8, emprimaryelectron::HadronType, + /*emprimaryelectron::BDTScorePromptUINT8,*/ emprimaryelectron::BDTScorePromptHcUINT8, emprimaryelectron::BDTScoreNonpromptHcUINT8, emprimaryelectron::BDTScoreHbUINT8, emprimaryelectron::HadronType, emprimaryelectron::NSV, - emprimaryelectron::ProbaSCT); + emprimaryelectron::ProbaSCT); // iterators using EMPrimaryElectronBDTSCT = EMPrimaryElectronsBDTSCT::iterator; diff --git a/PWGEM/Dilepton/Tasks/taggingHFE.cxx b/PWGEM/Dilepton/Tasks/taggingHFE.cxx index 2b1d89a4436..86dd85cd25c 100644 --- a/PWGEM/Dilepton/Tasks/taggingHFE.cxx +++ b/PWGEM/Dilepton/Tasks/taggingHFE.cxx @@ -274,6 +274,7 @@ struct taggingHFE { Configurable cfg_min_cospa{"cfg_min_cospa", -1e+10, "min cospa"}; Configurable cfg_max_lxyz{"cfg_max_lxyz", 1e+10, "min rxy for v0hadron"}; Configurable cfg_max_chi2PCA{"cfg_max_chi2PCA", 1.0, "max chi2 at PCA"}; + o2::framework::Configurable cfg_max_massLH{"cfg_max_massLH", 1e+10, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. } lKPairCut; struct : ConfigurableGroup { @@ -281,6 +282,7 @@ struct taggingHFE { Configurable cfg_min_cospa{"cfg_min_cospa", -1e+10, "min cospa"}; Configurable cfg_max_lxyz{"cfg_max_lxyz", 1e+10, "min rxy for v0hadron"}; Configurable cfg_max_chi2PCA{"cfg_max_chi2PCA", 1.0, "max chi2 at PCA"}; + o2::framework::Configurable cfg_max_massLH{"cfg_max_massLH", 1e+10, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. } lV0PairCut; struct : ConfigurableGroup { @@ -288,6 +290,7 @@ struct taggingHFE { Configurable cfg_min_cospa{"cfg_min_cospa", -1e+10, "min cospa"}; Configurable cfg_max_lxyz{"cfg_max_lxyz", 1e+10, "min rxy for v0hadron"}; Configurable cfg_max_chi2PCA{"cfg_max_chi2PCA", 1.0, "max chi2 at PCA"}; + o2::framework::Configurable cfg_max_massLH{"cfg_max_massLH", 1e+10, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. } lCPairCut; o2::aod::rctsel::RCTFlagsChecker rctChecker; @@ -1727,7 +1730,7 @@ struct taggingHFE { continue; } - if (eKpair.cospa < lKPairCut.cfg_min_cospa || lKPairCut.cfg_max_lxyz < eKpair.lxyz || lKPairCut.cfg_max_chi2PCA < eKpair.chi2PCA) { + if (eKpair.cospa < lKPairCut.cfg_min_cospa || lKPairCut.cfg_max_lxyz < eKpair.lxyz || lKPairCut.cfg_max_chi2PCA < eKpair.chi2PCA || lKPairCut.cfg_max_massLH < eKpair.mass) { continue; } @@ -1788,7 +1791,7 @@ struct taggingHFE { if (!eKpair.isOK) { continue; } - if (eKpair.cospa < lKPairCut.cfg_min_cospa || lKPairCut.cfg_max_lxyz < eKpair.lxyz || lKPairCut.cfg_max_chi2PCA < eKpair.chi2PCA) { + if (eKpair.cospa < lKPairCut.cfg_min_cospa || lKPairCut.cfg_max_lxyz < eKpair.lxyz || lKPairCut.cfg_max_chi2PCA < eKpair.chi2PCA || lKPairCut.cfg_max_massLH < eKpair.mass) { continue; } @@ -1858,7 +1861,7 @@ struct taggingHFE { if (!eV0pair.isOK) { continue; } - if (eV0pair.cospa < lV0PairCut.cfg_min_cospa || lV0PairCut.cfg_max_lxyz < eV0pair.lxyz || lV0PairCut.cfg_max_chi2PCA < eV0pair.chi2PCA) { + if (eV0pair.cospa < lV0PairCut.cfg_min_cospa || lV0PairCut.cfg_max_lxyz < eV0pair.lxyz || lV0PairCut.cfg_max_chi2PCA < eV0pair.chi2PCA || lV0PairCut.cfg_max_massLH < eV0pair.mass) { continue; } @@ -1937,7 +1940,7 @@ struct taggingHFE { if (!eV0pair.isOK) { continue; } - if (eV0pair.cospa < lV0PairCut.cfg_min_cospa || lV0PairCut.cfg_max_lxyz < eV0pair.lxyz || lV0PairCut.cfg_max_chi2PCA < eV0pair.chi2PCA) { + if (eV0pair.cospa < lV0PairCut.cfg_min_cospa || lV0PairCut.cfg_max_lxyz < eV0pair.lxyz || lV0PairCut.cfg_max_chi2PCA < eV0pair.chi2PCA || lV0PairCut.cfg_max_massLH < eV0pair.mass) { continue; } @@ -1999,7 +2002,7 @@ struct taggingHFE { if (!eCpair.isOK) { continue; } - if (eCpair.cospa < lCPairCut.cfg_min_cospa || lCPairCut.cfg_max_lxyz < eCpair.lxyz || lCPairCut.cfg_max_chi2PCA < eCpair.chi2PCA) { + if (eCpair.cospa < lCPairCut.cfg_min_cospa || lCPairCut.cfg_max_lxyz < eCpair.lxyz || lCPairCut.cfg_max_chi2PCA < eCpair.chi2PCA || lCPairCut.cfg_max_massLH < eCpair.mass) { continue; } @@ -2067,7 +2070,7 @@ struct taggingHFE { if (!eCpair.isOK) { continue; } - if (eCpair.cospa < lCPairCut.cfg_min_cospa || lCPairCut.cfg_max_lxyz < eCpair.lxyz || lCPairCut.cfg_max_chi2PCA < eCpair.chi2PCA) { + if (eCpair.cospa < lCPairCut.cfg_min_cospa || lCPairCut.cfg_max_lxyz < eCpair.lxyz || lCPairCut.cfg_max_chi2PCA < eCpair.chi2PCA || lCPairCut.cfg_max_massLH < eCpair.mass) { continue; } @@ -2163,7 +2166,7 @@ struct taggingHFE { continue; } - if (eKpair.cospa < lKPairCut.cfg_min_cospa || lKPairCut.cfg_max_lxyz < eKpair.lxyz || lKPairCut.cfg_max_chi2PCA < eKpair.chi2PCA) { + if (eKpair.cospa < lKPairCut.cfg_min_cospa || lKPairCut.cfg_max_lxyz < eKpair.lxyz || lKPairCut.cfg_max_chi2PCA < eKpair.chi2PCA || lKPairCut.cfg_max_massLH < eKpair.mass) { continue; } @@ -2225,7 +2228,7 @@ struct taggingHFE { if (!eKpair.isOK) { continue; } - if (eKpair.cospa < lKPairCut.cfg_min_cospa || lKPairCut.cfg_max_lxyz < eKpair.lxyz || lKPairCut.cfg_max_chi2PCA < eKpair.chi2PCA) { + if (eKpair.cospa < lKPairCut.cfg_min_cospa || lKPairCut.cfg_max_lxyz < eKpair.lxyz || lKPairCut.cfg_max_chi2PCA < eKpair.chi2PCA || lKPairCut.cfg_max_massLH < eKpair.mass) { continue; } @@ -2295,7 +2298,7 @@ struct taggingHFE { if (!eV0pair.isOK) { continue; } - if (eV0pair.cospa < lV0PairCut.cfg_min_cospa || lV0PairCut.cfg_max_lxyz < eV0pair.lxyz || lV0PairCut.cfg_max_chi2PCA < eV0pair.chi2PCA) { + if (eV0pair.cospa < lV0PairCut.cfg_min_cospa || lV0PairCut.cfg_max_lxyz < eV0pair.lxyz || lV0PairCut.cfg_max_chi2PCA < eV0pair.chi2PCA || lV0PairCut.cfg_max_massLH < eV0pair.mass) { continue; } @@ -2373,7 +2376,7 @@ struct taggingHFE { if (!eV0pair.isOK) { continue; } - if (eV0pair.cospa < lV0PairCut.cfg_min_cospa || lV0PairCut.cfg_max_lxyz < eV0pair.lxyz || lV0PairCut.cfg_max_chi2PCA < eV0pair.chi2PCA) { + if (eV0pair.cospa < lV0PairCut.cfg_min_cospa || lV0PairCut.cfg_max_lxyz < eV0pair.lxyz || lV0PairCut.cfg_max_chi2PCA < eV0pair.chi2PCA || lV0PairCut.cfg_max_massLH < eV0pair.mass) { continue; } @@ -2435,7 +2438,7 @@ struct taggingHFE { if (!eCpair.isOK) { continue; } - if (eCpair.cospa < lCPairCut.cfg_min_cospa || lCPairCut.cfg_max_lxyz < eCpair.lxyz || lCPairCut.cfg_max_chi2PCA < eCpair.chi2PCA) { + if (eCpair.cospa < lCPairCut.cfg_min_cospa || lCPairCut.cfg_max_lxyz < eCpair.lxyz || lCPairCut.cfg_max_chi2PCA < eCpair.chi2PCA || lCPairCut.cfg_max_massLH < eCpair.mass) { continue; } @@ -2503,7 +2506,7 @@ struct taggingHFE { if (!eCpair.isOK) { continue; } - if (eCpair.cospa < lCPairCut.cfg_min_cospa || lCPairCut.cfg_max_lxyz < eCpair.lxyz || lCPairCut.cfg_max_chi2PCA < eCpair.chi2PCA) { + if (eCpair.cospa < lCPairCut.cfg_min_cospa || lCPairCut.cfg_max_lxyz < eCpair.lxyz || lCPairCut.cfg_max_chi2PCA < eCpair.chi2PCA || lCPairCut.cfg_max_massLH < eCpair.mass) { continue; } diff --git a/PWGEM/Dilepton/Utils/ElectronModule.h b/PWGEM/Dilepton/Utils/ElectronModule.h index 6b4bbfb1a3f..4360d107555 100644 --- a/PWGEM/Dilepton/Utils/ElectronModule.h +++ b/PWGEM/Dilepton/Utils/ElectronModule.h @@ -271,14 +271,15 @@ struct cfgDFeT : o2::framework::ConfigurableGroup { std::string prefix = "cfgDFeT"; o2::framework::Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; o2::framework::Configurable useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; - o2::framework::Configurable maxDCA2legs{"maxDCA2legs", 1.0, "max distance between 2 legs in cm"}; + o2::framework::Configurable maxChi2PCA{"maxChi2PCA", 1.0, "max chi2 at PCA"}; + o2::framework::Configurable maxMassLH{"maxMassLH", 5.5, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. // configuration for PID ML o2::framework::Configurable useML{"useML", false, "Flag to use PID ML"}; o2::framework::Configurable> onnxFileNames{"onnxFileNames", std::vector{"filename"}, "ONNX file names for each bin (if not from CCDB full path)"}; o2::framework::Configurable> onnxPathsCCDB{"onnxPathsCCDB", std::vector{"path"}, "Paths of models on CCDB"}; o2::framework::Configurable> binsMl{"binsMl", std::vector{0.1, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; // o2::framework::Configurable> cutsMl{"cutsMl", std::vector{0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9}, "ML cuts per bin"}; - o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "tpcNSigmaKa", "signedMassLH", "dcaLH", "cpa", "cpaXY", "decayLength3DinSigma", "decayLengthXYinSigma"}, "Names of ML model input features"}; + o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "tpcNSigmaKa", "signedMassLH", "logChi2PCA", "cpa", "cpaXY", "decayLength3DinSigma"}, "Names of ML model input features"}; o2::framework::Configurable nameBinningFeature{"nameBinningFeature", "ptL", "Names of ML model binning feature"}; o2::framework::Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; o2::framework::Configurable enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"}; @@ -288,14 +289,15 @@ struct cfgDFeV0 : o2::framework::ConfigurableGroup { std::string prefix = "cfgDFeV0"; o2::framework::Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; o2::framework::Configurable useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; - o2::framework::Configurable maxDCA2legs{"maxDCA2legs", 1.0, "max distance between 2 legs in cm"}; + o2::framework::Configurable maxChi2PCA{"maxChi2PCA", 1.0, "max chi2 at PCA"}; + o2::framework::Configurable maxMassLH{"maxMassLH", 5.5, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. // configuration for PID ML o2::framework::Configurable useML{"useML", false, "Flag to use PID ML"}; o2::framework::Configurable> onnxFileNames{"onnxFileNames", std::vector{"filename"}, "ONNX file names for each bin (if not from CCDB full path)"}; o2::framework::Configurable> onnxPathsCCDB{"onnxPathsCCDB", std::vector{"path"}, "Paths of models on CCDB"}; o2::framework::Configurable> binsMl{"binsMl", std::vector{0.1, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; // o2::framework::Configurable> cutsMl{"cutsMl", std::vector{0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9}, "ML cuts per bin"}; - o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "dcaLH", "cpa", "cpaXY", "decayLength3DinSigma", "decayLengthXYinSigma"}, "Names of ML model input features"}; + o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "logChi2PCA", "cpa", "cpaXY", "decayLength3DinSigma"}, "Names of ML model input features"}; o2::framework::Configurable nameBinningFeature{"nameBinningFeature", "ptL", "Names of ML model binning feature"}; o2::framework::Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; o2::framework::Configurable enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"}; @@ -305,14 +307,15 @@ struct cfgDFeC : o2::framework::ConfigurableGroup { std::string prefix = "cfgDFeC"; o2::framework::Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; o2::framework::Configurable useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; - o2::framework::Configurable maxDCA2legs{"maxDCA2legs", 1.0, "max distance between 2 legs in cm"}; + o2::framework::Configurable maxChi2PCA{"maxChi2PCA", 1.0, "max chi2 at PCA"}; + o2::framework::Configurable maxMassLH{"maxMassLH", 5.5, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. // configuration for PID ML o2::framework::Configurable useML{"useML", false, "Flag to use PID ML"}; o2::framework::Configurable> onnxFileNames{"onnxFileNames", std::vector{"filename"}, "ONNX file names for each bin (if not from CCDB full path)"}; o2::framework::Configurable> onnxPathsCCDB{"onnxPathsCCDB", std::vector{"path"}, "Paths of models on CCDB"}; o2::framework::Configurable> binsMl{"binsMl", std::vector{0.1, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; // o2::framework::Configurable> cutsMl{"cutsMl", std::vector{0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9}, "ML cuts per bin"}; - o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "dcaLH", "cpa", "cpaXY", "decayLength3DinSigma", "decayLengthXYinSigma"}, "Names of ML model input features"}; + o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "logChi2PCA", "cpa", "cpaXY", "decayLength3DinSigma"}, "Names of ML model input features"}; o2::framework::Configurable nameBinningFeature{"nameBinningFeature", "ptL", "Names of ML model binning feature"}; o2::framework::Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; o2::framework::Configurable enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"}; @@ -1632,13 +1635,13 @@ class ElectronModule products.electronPFTable(pfb); // perform SCT from here - std::vector bdtScorePrompt; + std::vector bdtScoreBkg; std::vector bdtScorePromptHc; std::vector bdtScoreNonpromptHc; std::vector bdtScoreHb; std::vector hadronType; - bdtScorePrompt.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); + bdtScoreBkg.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); bdtScorePromptHc.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); bdtScoreNonpromptHc.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); bdtScoreHb.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); @@ -1663,7 +1666,7 @@ class ElectronModule registry.fill(HIST("SCT/eT/hCosPA"), eTpair.cospa); registry.fill(HIST("SCT/eT/hDCA2legs"), eTpair.dca2legs); registry.fill(HIST("SCT/eT/hMass"), eTpair.mass); - if (eTpair.isOK && fConfigDFeT.useML) { + if (eTpair.isOK && fConfigDFeT.useML && eTpair.chi2PCA < fConfigDFeT.maxChi2PCA && eTpair.mass < fConfigDFeT.maxMassLH) { o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eTpair, hadronParCov, mDcaInfoCov); candidate.ptL = trackParCov.getPt(); @@ -1682,7 +1685,7 @@ class ElectronModule } auto vecProb = mlResponseSCTeT.getModelOutput(inputFeatures, pbin); - bdtScorePrompt.emplace_back(static_cast(vecProb[0] * 255.f)); + bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); @@ -1716,7 +1719,7 @@ class ElectronModule registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); - if (eV0pair.isOK && fConfigDFeV0.useML) { + if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); candidate.ptL = trackParCov.getPt(); @@ -1733,7 +1736,7 @@ class ElectronModule } auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); - bdtScorePrompt.emplace_back(static_cast(vecProb[0] * 255.f)); + bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); @@ -1768,7 +1771,7 @@ class ElectronModule registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); - if (eV0pair.isOK && fConfigDFeV0.useML) { + if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); candidate.ptL = trackParCov.getPt(); @@ -1785,7 +1788,7 @@ class ElectronModule } auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); - bdtScorePrompt.emplace_back(static_cast(vecProb[0] * 255.f)); + bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); @@ -1820,7 +1823,7 @@ class ElectronModule registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); - if (eCpair.isOK && fConfigDFeC.useML) { + if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); candidate.ptL = trackParCov.getPt(); @@ -1837,7 +1840,7 @@ class ElectronModule } auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); - bdtScorePrompt.emplace_back(static_cast(vecProb[0] * 255.f)); + bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); bdtScoreHb.emplace_back(static_cast(0)); @@ -1872,7 +1875,7 @@ class ElectronModule registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); - if (eCpair.isOK && fConfigDFeC.useML) { + if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); candidate.ptL = trackParCov.getPt(); @@ -1889,7 +1892,7 @@ class ElectronModule } auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); - bdtScorePrompt.emplace_back(static_cast(vecProb[0] * 255.f)); + bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); bdtScoreHb.emplace_back(static_cast(0)); @@ -1924,7 +1927,7 @@ class ElectronModule registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); - if (eV0pair.isOK && fConfigDFeV0.useML) { + if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); candidate.ptL = trackParCov.getPt(); @@ -1941,7 +1944,7 @@ class ElectronModule } auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); - bdtScorePrompt.emplace_back(static_cast(vecProb[0] * 255.f)); + bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); @@ -1976,7 +1979,7 @@ class ElectronModule registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); - if (eCpair.isOK && fConfigDFeC.useML) { + if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); candidate.ptL = trackParCov.getPt(); @@ -1993,7 +1996,7 @@ class ElectronModule } auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); - bdtScorePrompt.emplace_back(static_cast(vecProb[0] * 255.f)); + bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); bdtScoreHb.emplace_back(static_cast(0)); @@ -2028,7 +2031,7 @@ class ElectronModule registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); - if (eCpair.isOK && fConfigDFeC.useML) { + if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); candidate.ptL = trackParCov.getPt(); @@ -2045,7 +2048,7 @@ class ElectronModule } auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); - bdtScorePrompt.emplace_back(static_cast(vecProb[0] * 255.f)); + bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); bdtScoreHb.emplace_back(static_cast(0)); @@ -2054,14 +2057,14 @@ class ElectronModule } // end of Omega- loop } - products.sctTable(bdtScorePrompt, bdtScorePromptHc, bdtScoreNonpromptHc, bdtScoreHb, hadronType); + products.sctTable(/*bdtScoreBkg,*/ bdtScorePromptHc, bdtScoreNonpromptHc, bdtScoreHb, hadronType); - bdtScorePrompt.clear(); + bdtScoreBkg.clear(); bdtScorePromptHc.clear(); bdtScoreNonpromptHc.clear(); bdtScoreHb.clear(); hadronType.clear(); - bdtScorePrompt.shrink_to_fit(); + bdtScoreBkg.shrink_to_fit(); bdtScorePromptHc.shrink_to_fit(); bdtScoreNonpromptHc.shrink_to_fit(); bdtScoreHb.shrink_to_fit();