Skip to content

Commit eb98f56

Browse files
authored
[ALICE3] Add bdt score histograms to otf multi-charm (#12298)
1 parent 90209e8 commit eb98f56

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

ALICE3/Tasks/alice3-multicharm.cxx

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,16 @@ struct alice3multicharm {
8484
std::string prefix = "bdt"; // JSON group name
8585
Configurable<std::string> ccdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
8686
Configurable<std::string> localPath{"localPath", "MCharm_BDTModel.onnx", "(std::string) Path to the local .onnx file."};
87-
Configurable<std::string> pathCCDB{"btdPathCCDB", "Users/j/jekarlss/MLModels2", "Path on CCDB"};
88-
Configurable<int64_t> timestampCCDB{"timestampCCDB", -1, "timestamp of the ONNX file for ML model used to query in CCDB. Exceptions: > 0 for the specific timestamp, 0 gets the run dependent timestamp"};
87+
Configurable<std::string> pathCCDB{"btdPathCCDB", "Users/j/jekarlss/MLModels", "Path on CCDB"};
88+
Configurable<int64_t> timestampCCDB{"timestampCCDB", 1695750420200, "timestamp of the ONNX file for ML model used to query in CCDB. Please use 1695750420200"};
8989
Configurable<bool> loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"};
9090
Configurable<bool> enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"};
9191
Configurable<bool> enableML{"enableML", false, "Enables bdt model"};
9292
Configurable<std::vector<float>> requiredScores{"requiredScores", {0.5, 0.75, 0.85, 0.9, 0.95, 0.99}, "Vector of different scores to try"};
9393
} bdt;
9494

9595
ConfigurableAxis axisEta{"axisEta", {80, -4.0f, +4.0f}, "#eta"};
96-
ConfigurableAxis axisXicMass{"axisXicMass", {200, 2.368f, 2.568f}, "XiC Inv Mass (GeV/c^{2})"};
96+
ConfigurableAxis axisXicMass{"axisXicMass", {200, 2.368f, 2.568f}, "Xic Inv Mass (GeV/c^{2})"};
9797
ConfigurableAxis axisXiccMass{"axisXiccMass", {200, 3.521f, 3.721f}, "Xicc Inv Mass (GeV/c^{2})"};
9898
ConfigurableAxis axisDCA{"axisDCA", {400, 0, 400}, "DCA (#mum)"};
9999
ConfigurableAxis axisRadiusLarge{"axisRadiusLarge", {1000, 0, 20}, "Decay radius (cm)"};
@@ -102,6 +102,7 @@ struct alice3multicharm {
102102
ConfigurableAxis axisNSigma{"axisNSigma", {21, -10, 10}, "nsigma"};
103103
ConfigurableAxis axisDecayLength{"axisDecayLength", {2000, 0, 2000}, "Decay lenght (#mum)"};
104104
ConfigurableAxis axisDcaDaughters{"axisDcaDaughters", {200, 0, 100}, "DCA (mum)"};
105+
ConfigurableAxis axisBDTScore{"axisBDTScore", {100, 0, 1}, "BDT Score"};
105106
ConfigurableAxis axisPt{"axisPt", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "pt axis for QA histograms"};
106107

107108
Configurable<float> xiMinDCAxy{"xiMinDCAxy", -1, "[0] in |DCAxy| > [0]+[1]/pT"};
@@ -133,21 +134,6 @@ struct alice3multicharm {
133134

134135
void init(InitContext&)
135136
{
136-
ccdb->setURL(bdt.ccdbUrl.value);
137-
if (bdt.loadModelsFromCCDB) {
138-
ccdbApi.init(bdt.ccdbUrl);
139-
LOG(info) << "Fetching model for timestamp: " << bdt.timestampCCDB.value;
140-
bool retrieveSuccessMCharm = ccdbApi.retrieveBlob(bdt.pathCCDB.value, ".", metadata, bdt.timestampCCDB.value, false, bdt.localPath.value);
141-
142-
if (retrieveSuccessMCharm) {
143-
bdtMCharm.initModel(bdt.localPath.value, bdt.enableOptimizations.value);
144-
} else {
145-
LOG(fatal) << "Error encountered while fetching/loading the MCharm model from CCDB! Maybe the model doesn't exist yet for this runnumber/timestamp?";
146-
}
147-
} else {
148-
bdtMCharm.initModel(bdt.localPath.value, bdt.enableOptimizations.value);
149-
}
150-
151137
histos.add("SelectionQA/hDCAXicDaughters", "hDCAXicDaughters; DCA between Xic daughters (#mum)", kTH1D, {axisDcaDaughters});
152138
histos.add("SelectionQA/hDCAXiccDaughters", "hDCAXiccDaughters; DCA between Xicc daughters (#mum)", kTH1D, {axisDcaDaughters});
153139
histos.add("SelectionQA/hDCAxyXi", "hDCAxyXi; Xi DCAxy to PV (#mum)", kTH1D, {axisDCA});
@@ -249,6 +235,24 @@ struct alice3multicharm {
249235
histos.add("h3dXicc", "h3dXicc; Xicc pT (GeV/#it(c)); Xicc #eta; Xicc mass (GeV/#it(c)^{2})", kTH3D, {axisPt, axisEta, axisXiccMass});
250236

251237
if (bdt.enableML) {
238+
ccdb->setURL(bdt.ccdbUrl.value);
239+
if (bdt.loadModelsFromCCDB) {
240+
ccdbApi.init(bdt.ccdbUrl);
241+
LOG(info) << "Fetching model for timestamp: " << bdt.timestampCCDB.value;
242+
bool retrieveSuccessMCharm = ccdbApi.retrieveBlob(bdt.pathCCDB.value, ".", metadata, bdt.timestampCCDB.value, false, bdt.localPath.value);
243+
244+
if (retrieveSuccessMCharm) {
245+
bdtMCharm.initModel(bdt.localPath.value, bdt.enableOptimizations.value);
246+
} else {
247+
LOG(fatal) << "Error encountered while fetching/loading the MCharm model from CCDB! Maybe the model doesn't exist yet for this runnumber/timestamp?";
248+
}
249+
} else {
250+
bdtMCharm.initModel(bdt.localPath.value, bdt.enableOptimizations.value);
251+
}
252+
253+
histos.add("hBDTScore", "hBDTScore", kTH1D, {axisBDTScore});
254+
histos.add("hBDTScoreVsXiccMass", "hBDTScoreVsXiccMass", kTH2D, {axisXiccMass, axisBDTScore});
255+
histos.add("hBDTScoreVsXiccPt", "hBDTScoreVsXiccPt", kTH2D, {axisXiccMass, axisPt});
252256
for (const auto& score : bdt.requiredScores.value) {
253257
histPath = std::format("MLQA/RequiredBDTScore_{}/", static_cast<int>(score * 100));
254258
histPointers.insert({histPath + "hDCAXicDaughters", histos.add((histPath + "hDCAXicDaughters").c_str(), "hDCAXicDaughters", {kTH1D, {{axisDcaDaughters}}})});
@@ -292,7 +296,6 @@ struct alice3multicharm {
292296
void genericProcessXicc(TMCharmCands xiccCands)
293297
{
294298
for (const auto& xiccCand : xiccCands) {
295-
296299
if (bdt.enableML) {
297300
std::vector<float> inputFeatures{
298301
xiccCand.xicDauDCA(),
@@ -318,6 +321,10 @@ struct alice3multicharm {
318321
float* probabilityMCharm = bdtMCharm.evalModel(inputFeatures);
319322
float bdtScore = probabilityMCharm[1];
320323

324+
histos.fill(HIST("hBDTScore"), bdtScore);
325+
histos.fill(HIST("hBDTScoreVsXiccMass"), xiccCand.xiccMass(), bdtScore);
326+
histos.fill(HIST("hBDTScoreVsXiccPt"), xiccCand.xiccPt(), bdtScore);
327+
321328
for (const auto& requiredScore : bdt.requiredScores.value) {
322329
if (bdtScore > requiredScore) {
323330
histPath = std::format("MLQA/RequiredBDTScore_{}/", static_cast<int>(requiredScore * 100));

0 commit comments

Comments
 (0)