From d6331ceefc53a6ea9b48957e9b50e8b315fad2b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Fri, 25 Sep 2026 10:30:07 +0200 Subject: [PATCH 1/6] Refactor ML configuration with new cut parameters --- .../producerCharmHadronsCharmFemtoDream.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx index a0d8e189ae2..5a618b74c44 100644 --- a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx +++ b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx @@ -17,6 +17,7 @@ #include "PWGHF/Core/CentralityEstimation.h" #include "PWGHF/Core/HfMlResponseD0ToKPi.h" #include "PWGHF/Core/HfMlResponseDstarToD0Pi.h" +#include "PWGHF/Core/SelectorCuts.h" #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" #include "PWGHF/Utils/utilsBfieldCCDB.h" @@ -68,12 +69,11 @@ struct HfProducerCharmHadronsCharmFemtoDream { // Each species needs its own model, feature order and pT-dependent cuts. struct HfMlConfig : ConfigurableGroup { std::string prefix; - static inline const std::array defaultCuts{1., 0., 0.}; Configurable mlApplicationMode{"mlApplicationMode", FillMlFromSelector, "0: no ML, 1: selector scores, 2: new BDT after selector"}; - Configurable> binsPtMl{"binsPtMl", std::vector{0., 36.}, "pT bin limits for new BDT"}; - Configurable> cutsMl{"cutsMl", {defaultCuts.data(), 1, 3}, "New BDT cuts per pT bin: background, prompt, nonprompt"}; - Configurable> cutDirMl{"cutDirMl", std::vector{0, 1, 1}, "Reject scores above (0), below (1), or do not cut (2)"}; - Configurable nClassesMl{"nClassesMl", 3, "Three output classes: background, prompt, nonprompt"}; + Configurable> binsPtMl{"binsPtMl", std::vector{hf_cuts_ml::vecBinsPt}, "pT bin limits for new BDT"}; + Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsDmesCutScore}, "New BDT cuts per pT bin: background, prompt, nonprompt"}; + Configurable> cutDirMl{"cutDirMl", std::vector{hf_cuts_ml::vecCutDir}, "Reject scores above (0), below (1), or do not cut (2)"}; + Configurable nClassesMl{"nClassesMl", static_cast(hf_cuts_ml::NCutScores), "Three output classes: background, prompt, nonprompt"}; Configurable> namesInputFeatures{"namesInputFeatures", std::vector{}, "Ordered input feature names for new BDT"}; Configurable> onnxFileNames{"onnxFileNames", std::vector{}, "Model files, one per pT bin"}; Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{}, "CCDB model paths, one per pT bin"}; From c700e627f56f02ee4eceea0f010335e6d307e001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Fri, 25 Sep 2026 14:24:56 +0200 Subject: [PATCH 2/6] Add analysis namespace to producerCharmHadrons file --- PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx index 5a618b74c44..4144b911708 100644 --- a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx +++ b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx @@ -55,6 +55,7 @@ using namespace o2; using namespace o2::framework; +using namespace o2::analysis; using namespace o2::framework::expressions; struct HfProducerCharmHadronsCharmFemtoDream { From 5f7f8bba1336ed306519d4a2a1501c02cea7a38b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Fri, 25 Sep 2026 15:52:09 +0200 Subject: [PATCH 3/6] Fix nClassesMl initialization from static_cast to direct --- PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx index 4144b911708..7abacebcc47 100644 --- a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx +++ b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx @@ -74,7 +74,7 @@ struct HfProducerCharmHadronsCharmFemtoDream { Configurable> binsPtMl{"binsPtMl", std::vector{hf_cuts_ml::vecBinsPt}, "pT bin limits for new BDT"}; Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsDmesCutScore}, "New BDT cuts per pT bin: background, prompt, nonprompt"}; Configurable> cutDirMl{"cutDirMl", std::vector{hf_cuts_ml::vecCutDir}, "Reject scores above (0), below (1), or do not cut (2)"}; - Configurable nClassesMl{"nClassesMl", static_cast(hf_cuts_ml::NCutScores), "Three output classes: background, prompt, nonprompt"}; + Configurable nClassesMl{"nClassesMl", hf_cuts_ml::NCutScores, "Three output classes: background, prompt, nonprompt"}; Configurable> namesInputFeatures{"namesInputFeatures", std::vector{}, "Ordered input feature names for new BDT"}; Configurable> onnxFileNames{"onnxFileNames", std::vector{}, "Model files, one per pT bin"}; Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{}, "CCDB model paths, one per pT bin"}; From 0067feb1b17d91a870ef4369338be99aa49f1b3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Fri, 25 Sep 2026 18:10:06 +0200 Subject: [PATCH 4/6] Refactor Configurable initialization for bins and cut directions --- .../HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx index 7abacebcc47..607f1aefabb 100644 --- a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx +++ b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx @@ -71,9 +71,9 @@ struct HfProducerCharmHadronsCharmFemtoDream { struct HfMlConfig : ConfigurableGroup { std::string prefix; Configurable mlApplicationMode{"mlApplicationMode", FillMlFromSelector, "0: no ML, 1: selector scores, 2: new BDT after selector"}; - Configurable> binsPtMl{"binsPtMl", std::vector{hf_cuts_ml::vecBinsPt}, "pT bin limits for new BDT"}; + Configurable> binsPtMl{"binsPtMl", hf_cuts_ml::vecBinsPt, "pT bin limits for new BDT"}; Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsDmesCutScore}, "New BDT cuts per pT bin: background, prompt, nonprompt"}; - Configurable> cutDirMl{"cutDirMl", std::vector{hf_cuts_ml::vecCutDir}, "Reject scores above (0), below (1), or do not cut (2)"}; + Configurable> cutDirMl{"cutDirMl", hf_cuts_ml::vecCutDir, "Reject scores above (0), below (1), or do not cut (2)"}; Configurable nClassesMl{"nClassesMl", hf_cuts_ml::NCutScores, "Three output classes: background, prompt, nonprompt"}; Configurable> namesInputFeatures{"namesInputFeatures", std::vector{}, "Ordered input feature names for new BDT"}; Configurable> onnxFileNames{"onnxFileNames", std::vector{}, "Model files, one per pT bin"}; From 003a0ea6b12047be36a6332aa6e8b956de4080be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Fri, 25 Sep 2026 22:19:11 +0200 Subject: [PATCH 5/6] Refactor binsPtMl and cutDirMl to use vectors --- .../TableProducer/producerCharmHadronsCharmFemtoDream.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx index 607f1aefabb..4144b911708 100644 --- a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx +++ b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx @@ -71,10 +71,10 @@ struct HfProducerCharmHadronsCharmFemtoDream { struct HfMlConfig : ConfigurableGroup { std::string prefix; Configurable mlApplicationMode{"mlApplicationMode", FillMlFromSelector, "0: no ML, 1: selector scores, 2: new BDT after selector"}; - Configurable> binsPtMl{"binsPtMl", hf_cuts_ml::vecBinsPt, "pT bin limits for new BDT"}; + Configurable> binsPtMl{"binsPtMl", std::vector{hf_cuts_ml::vecBinsPt}, "pT bin limits for new BDT"}; Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsDmesCutScore}, "New BDT cuts per pT bin: background, prompt, nonprompt"}; - Configurable> cutDirMl{"cutDirMl", hf_cuts_ml::vecCutDir, "Reject scores above (0), below (1), or do not cut (2)"}; - Configurable nClassesMl{"nClassesMl", hf_cuts_ml::NCutScores, "Three output classes: background, prompt, nonprompt"}; + Configurable> cutDirMl{"cutDirMl", std::vector{hf_cuts_ml::vecCutDir}, "Reject scores above (0), below (1), or do not cut (2)"}; + Configurable nClassesMl{"nClassesMl", static_cast(hf_cuts_ml::NCutScores), "Three output classes: background, prompt, nonprompt"}; Configurable> namesInputFeatures{"namesInputFeatures", std::vector{}, "Ordered input feature names for new BDT"}; Configurable> onnxFileNames{"onnxFileNames", std::vector{}, "Model files, one per pT bin"}; Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{}, "CCDB model paths, one per pT bin"}; From 116a9dba9f64db3daa8be630dd9b2871220842fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BiaoZhang=20=28=E5=BC=A0=E5=BD=AA=29?= <52267892+zhangbiao-phy@users.noreply.github.com> Date: Fri, 25 Sep 2026 22:21:28 +0200 Subject: [PATCH 6/6] Change nClassesMl initialization to use int constructor --- PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx index 4144b911708..6ac7c687352 100644 --- a/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx +++ b/PWGHF/HFC/TableProducer/producerCharmHadronsCharmFemtoDream.cxx @@ -74,7 +74,7 @@ struct HfProducerCharmHadronsCharmFemtoDream { Configurable> binsPtMl{"binsPtMl", std::vector{hf_cuts_ml::vecBinsPt}, "pT bin limits for new BDT"}; Configurable> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsDmesCutScore}, "New BDT cuts per pT bin: background, prompt, nonprompt"}; Configurable> cutDirMl{"cutDirMl", std::vector{hf_cuts_ml::vecCutDir}, "Reject scores above (0), below (1), or do not cut (2)"}; - Configurable nClassesMl{"nClassesMl", static_cast(hf_cuts_ml::NCutScores), "Three output classes: background, prompt, nonprompt"}; + Configurable nClassesMl{"nClassesMl", int{hf_cuts_ml::NCutScores}, "Three output classes: background, prompt, nonprompt"}; Configurable> namesInputFeatures{"namesInputFeatures", std::vector{}, "Ordered input feature names for new BDT"}; Configurable> onnxFileNames{"onnxFileNames", std::vector{}, "Model files, one per pT bin"}; Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{}, "CCDB model paths, one per pT bin"};