From 0908236b3a2b3226d790c8b29000eaa9ad1d30b1 Mon Sep 17 00:00:00 2001 From: Lukaszz99 Date: Wed, 26 Jan 2022 21:20:17 +0100 Subject: [PATCH 1/6] add separate models for different momentum --- Tools/PIDML/qaPidML.cxx | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/Tools/PIDML/qaPidML.cxx b/Tools/PIDML/qaPidML.cxx index 919182e5161..b4be78f00db 100644 --- a/Tools/PIDML/qaPidML.cxx +++ b/Tools/PIDML/qaPidML.cxx @@ -321,9 +321,15 @@ struct pidml { template void pidML(const T& track, const int pdgCodeMC) { - float pidLogits[3] = {model211.applyModel(track), model2212.applyModel(track), model321.applyModel(track)}; + float pidLogits[3]; + if (track.p() <= 0.5) { + pidLogits[3] = {model211TPC.applyModel(track), model2212TPC.applyModel(track), model321TPC.applyModel(track)}; + } else { + pidLogits[3] = {model211All.applyModel(track), model2212All.applyModel(track), model321All.applyModel(track)}; + } int pid = getParticlePdg(pidLogits); - if (pid == particlesPdgCode[i]) { + // condition for sign: we want to work only with pi, p and K, without antiparticles + if ((pid == particlesPdgCode[i]) & (track.sign() == 1)) { if (pdgCodeMC == particlesPdgCode[i]) { fillPidHistos(track, pdgCodeMC, true); } else { @@ -332,19 +338,28 @@ struct pidml { } } - PidONNXModel model211; - PidONNXModel model2212; - PidONNXModel model321; + // one model for one particle; Model with all TPC and TOF signal + PidONNXModel model211All; + PidONNXModel model2212All; + PidONNXModel model321All; + // Model with only TPC model + PidONNXModel model211TPC; + PidONNXModel model2212TPC; + PidONNXModel model321TPC; - Configurable cfgUseTOF{"useTOF", true, "Use ML model with TOF signal"}; + // Configurable cfgUseTOF{"useTOF", true, "Use ML model with TOF signal"}; Configurable cfgModelDir{"model-dir", "http://alice-ccdb.cern.ch/Users/m/mkabus/pidml/onnx_models", "base path to the directory with ONNX models"}; Configurable cfgScalingParamsFile{"scaling-params", "http://alice-ccdb.cern.ch/Users/m/mkabus/pidml/onnx_models/train_208_mc_with_beta_and_sigmas_scaling_params.json", "base path to the ccdb JSON file with scaling parameters from training"}; void init(InitContext const&) { - model211 = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 211, cfgUseTOF.value); - model2212 = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 2212, cfgUseTOF.value); - model321 = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 321, cfgUseTOF.value); + model211All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 211, True); + model2212All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 2212, True); + model321All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 321, True); + + model211TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 211, False); + model2212TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 2212, False); + model321TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 321, False); } Filter trackFilter = aod::track::isGlobalTrack == static_cast(true); From c5c542c899dbd2ae73db2948e79400e611f605d3 Mon Sep 17 00:00:00 2001 From: Lukaszz99 Date: Wed, 26 Jan 2022 21:41:05 +0100 Subject: [PATCH 2/6] Add array with momentum threshold values --- Tools/PIDML/qaPidML.cxx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Tools/PIDML/qaPidML.cxx b/Tools/PIDML/qaPidML.cxx index b4be78f00db..49c620c70ac 100644 --- a/Tools/PIDML/qaPidML.cxx +++ b/Tools/PIDML/qaPidML.cxx @@ -47,6 +47,10 @@ struct pidml { // available particles: 211, 2212, 321 static constexpr int particlesPdgCode[numParticles] = {211, 2212, 321}; + // values of track momentum when to switch from only TPC signal to combined TPC and TOF signal + // i-th momentum corresponds to the i-th particle + static constexpr float pSwitchValue[numParticles] = {0.5, 0.8, 0.5}; + HistogramRegistry histReg{ "allHistograms", {{"MC/211", "MC #pi^{+};p_{T} (GeV/c);Counts", {HistType::kTH1F, {{binsNb, 0, maxP}}}}, @@ -322,14 +326,14 @@ struct pidml { void pidML(const T& track, const int pdgCodeMC) { float pidLogits[3]; - if (track.p() <= 0.5) { + if (track.p() <= pSwitchValue[i]) { pidLogits[3] = {model211TPC.applyModel(track), model2212TPC.applyModel(track), model321TPC.applyModel(track)}; } else { pidLogits[3] = {model211All.applyModel(track), model2212All.applyModel(track), model321All.applyModel(track)}; } int pid = getParticlePdg(pidLogits); // condition for sign: we want to work only with pi, p and K, without antiparticles - if ((pid == particlesPdgCode[i]) & (track.sign() == 1)) { + if (pid == particlesPdgCode[i] && track.sign() == 1) { if (pdgCodeMC == particlesPdgCode[i]) { fillPidHistos(track, pdgCodeMC, true); } else { @@ -342,12 +346,11 @@ struct pidml { PidONNXModel model211All; PidONNXModel model2212All; PidONNXModel model321All; - // Model with only TPC model + // Model with only TPC signal model PidONNXModel model211TPC; PidONNXModel model2212TPC; PidONNXModel model321TPC; - // Configurable cfgUseTOF{"useTOF", true, "Use ML model with TOF signal"}; Configurable cfgModelDir{"model-dir", "http://alice-ccdb.cern.ch/Users/m/mkabus/pidml/onnx_models", "base path to the directory with ONNX models"}; Configurable cfgScalingParamsFile{"scaling-params", "http://alice-ccdb.cern.ch/Users/m/mkabus/pidml/onnx_models/train_208_mc_with_beta_and_sigmas_scaling_params.json", "base path to the ccdb JSON file with scaling parameters from training"}; From 8f9e033c15f8df10cc910adee909be7b9982fca0 Mon Sep 17 00:00:00 2001 From: Lukaszz99 Date: Wed, 26 Jan 2022 22:01:32 +0100 Subject: [PATCH 3/6] True -> true --- Tools/PIDML/qaPidML.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Tools/PIDML/qaPidML.cxx b/Tools/PIDML/qaPidML.cxx index 49c620c70ac..6697c10b280 100644 --- a/Tools/PIDML/qaPidML.cxx +++ b/Tools/PIDML/qaPidML.cxx @@ -356,13 +356,13 @@ struct pidml { void init(InitContext const&) { - model211All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 211, True); - model2212All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 2212, True); - model321All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 321, True); + model211All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 211, true); + model2212All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 2212, true); + model321All = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 321, true); - model211TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 211, False); - model2212TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 2212, False); - model321TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 321, False); + model211TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 211, false); + model2212TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 2212, false); + model321TPC = PidONNXModel(cfgModelDir.value, cfgScalingParamsFile.value, 321, false); } Filter trackFilter = aod::track::isGlobalTrack == static_cast(true); From d63804c6202367add10a74d74405f55548cb0270 Mon Sep 17 00:00:00 2001 From: Lukaszz99 Date: Wed, 26 Jan 2022 22:46:06 +0100 Subject: [PATCH 4/6] Fix error with list initialization --- Tools/PIDML/qaPidML.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/PIDML/qaPidML.cxx b/Tools/PIDML/qaPidML.cxx index 6697c10b280..8bd77253884 100644 --- a/Tools/PIDML/qaPidML.cxx +++ b/Tools/PIDML/qaPidML.cxx @@ -327,9 +327,9 @@ struct pidml { { float pidLogits[3]; if (track.p() <= pSwitchValue[i]) { - pidLogits[3] = {model211TPC.applyModel(track), model2212TPC.applyModel(track), model321TPC.applyModel(track)}; + pidLogits = {model211TPC.applyModel(track), model2212TPC.applyModel(track), model321TPC.applyModel(track)}; } else { - pidLogits[3] = {model211All.applyModel(track), model2212All.applyModel(track), model321All.applyModel(track)}; + pidLogits = {model211All.applyModel(track), model2212All.applyModel(track), model321All.applyModel(track)}; } int pid = getParticlePdg(pidLogits); // condition for sign: we want to work only with pi, p and K, without antiparticles From 08ffec70557f8784c7ded75bbd39cd6de38312db Mon Sep 17 00:00:00 2001 From: Lukaszz99 Date: Wed, 26 Jan 2022 22:51:24 +0100 Subject: [PATCH 5/6] chang <= to = --- Tools/PIDML/qaPidML.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/PIDML/qaPidML.cxx b/Tools/PIDML/qaPidML.cxx index 8bd77253884..ac20de655f5 100644 --- a/Tools/PIDML/qaPidML.cxx +++ b/Tools/PIDML/qaPidML.cxx @@ -326,7 +326,7 @@ struct pidml { void pidML(const T& track, const int pdgCodeMC) { float pidLogits[3]; - if (track.p() <= pSwitchValue[i]) { + if (track.p() < pSwitchValue[i]) { pidLogits = {model211TPC.applyModel(track), model2212TPC.applyModel(track), model321TPC.applyModel(track)}; } else { pidLogits = {model211All.applyModel(track), model2212All.applyModel(track), model321All.applyModel(track)}; From 28038740269f4427e32ea86cb2e000366e77f187 Mon Sep 17 00:00:00 2001 From: Lukaszz99 Date: Thu, 27 Jan 2022 07:23:45 +0100 Subject: [PATCH 6/6] change initialization method --- Tools/PIDML/qaPidML.cxx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Tools/PIDML/qaPidML.cxx b/Tools/PIDML/qaPidML.cxx index ac20de655f5..1457b6a3954 100644 --- a/Tools/PIDML/qaPidML.cxx +++ b/Tools/PIDML/qaPidML.cxx @@ -327,9 +327,13 @@ struct pidml { { float pidLogits[3]; if (track.p() < pSwitchValue[i]) { - pidLogits = {model211TPC.applyModel(track), model2212TPC.applyModel(track), model321TPC.applyModel(track)}; + pidLogits[0] = model211TPC.applyModel(track); + pidLogits[1] = model2212TPC.applyModel(track); + pidLogits[2] = model321TPC.applyModel(track); } else { - pidLogits = {model211All.applyModel(track), model2212All.applyModel(track), model321All.applyModel(track)}; + pidLogits[0] = model211All.applyModel(track); + pidLogits[1] = model2212All.applyModel(track); + pidLogits[2] = model321All.applyModel(track); } int pid = getParticlePdg(pidLogits); // condition for sign: we want to work only with pi, p and K, without antiparticles