Skip to content

Commit 0107b3a

Browse files
INFNuserINFNuser
authored andcommitted
Inclusion of AE inference
1 parent 929d4b9 commit 0107b3a

3 files changed

Lines changed: 103 additions & 19 deletions

File tree

PWGHF/D2H/Tasks/taskXic.cxx

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ struct HfTaskXic {
8181
ConfigurableAxis thnConfigAxisBdtScoreBkg{"thnConfigAxisBdtScoreBkg", {100, 0., 1.}, ""};
8282
ConfigurableAxis thnConfigAxisBdtScoreSignal{"thnConfigAxisBdtScoreSignal", {100, 0., 1.}, ""};
8383
ConfigurableAxis thnConfigAxisYMC{"thnConfigAxisYMC", {100, -2., 2.}, ""};
84+
ConfigurableAxis thnConfigAxisMseXic{"thnConfigAxisMseXic", {502, -0.0002, 1}, ""}; // MSE axis
85+
ConfigurableAxis thnConfigAxisAeOutputXic{"thnConfigAxisAeOutputXic", {20, 0.8, 1},""}; // an AE output axis
8486
//
8587

8688
float etaMaxAcceptance = 0.8;
@@ -248,9 +250,12 @@ struct HfTaskXic {
248250
const AxisSpec thnAxisBdtScoreXicNonPrompt{thnConfigAxisBdtScoreSignal, "BDT non-prompt score (Xic)"};
249251
const AxisSpec thnAxisMcOrigin{3, -0.5, 2.5, "MC origin"};
250252
const AxisSpec thnAxisMCAllProngAccepted{2, -0.5, 1.5, "All MC prongs accepted"};
253+
const AxisSpec thnAxisMseXic{thnConfigAxisMseXic, "MSE (Xic)"};
254+
const AxisSpec thnAxisAeOutputXic{thnConfigAxisAeOutputXic, "AE Output (Xic)"};
251255

252256
if (doprocessDataWithMl || doprocessMcWithMl) { // with ML
253257
registry.add("hnXicVarsWithBdt", "THn for Xic candidates with BDT scores", HistType::kTHnSparseF, {thnAxisMass, thnAxisPt, thnAxisBdtScoreXicBkg, thnAxisBdtScoreXicPrompt, thnAxisBdtScoreXicNonPrompt, thnAxisMcOrigin});
258+
registry.add("hnXicVarsWithMse", "THn for Xic candidates with MSE using AD", HistType::kTHnSparseF, {thnAxisMass, thnAxisPt, thnAxisDecLength, thnAxisCPA, thnAxisAeOutputXic, thnAxisMcOrigin, thnAxisMseXic});
254259
} else {
255260
registry.add("hnXicVars", "THn for Xic candidates", HistType::kTHnSparseF, {thnAxisMass, thnAxisPt, thnAxisChi2PCA, thnAxisDecLength, thnAxisDecLengthXY, thnAxisCPA, thnAxisMcOrigin});
256261
}
@@ -366,7 +371,7 @@ struct HfTaskXic {
366371
// THnSparse
367372
if (enableTHn) {
368373
double massXic(-1);
369-
double outputBkg(-1), outputPrompt(-1), outputFD(-1);
374+
double outputBkg(-1), outputPrompt(-1), outputFD(-1), outputMSE(-1), outputAE(-1);
370375
const int ternaryCl = 3;
371376
if (candidate.isSelXicToPKPi() >= selectionFlagXic) {
372377
massXic = hfHelper.invMassXicToPKPi(candidate);
@@ -375,9 +380,14 @@ struct HfTaskXic {
375380
outputBkg = candidate.mlProbXicToPKPi()[0]; /// bkg score
376381
outputPrompt = candidate.mlProbXicToPKPi()[1]; /// prompt score
377382
outputFD = candidate.mlProbXicToPKPi()[2]; /// non-prompt score
378-
}
379-
/// Fill the ML outputScores and variables of candidate Xic
380-
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXic, ptCandidate, outputBkg, outputPrompt, outputFD, false);
383+
/// Fill the ML outputScores and variables of candidate Xic
384+
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXic, ptCandidate, outputBkg, outputPrompt, outputFD, false);
385+
} else {
386+
outputAE = candidate.aeOutputXicToPKPi()[0]; /// AE output of feature 0
387+
outputMSE = candidate.mseXicToPKPi()[0]; /// MSE
388+
LOG(debug)<<"Global mse in taskXic for PKPi Data "<<outputMSE;
389+
registry.get<THnSparse>(HIST("hnXicVarsWithMse"))->Fill(massXic, ptCandidate, candidate.decayLength(), candidate.cpa(), outputAE, 0, 0.0, 0.0, false, outputMSE);
390+
}
381391
} else {
382392
registry.get<THnSparse>(HIST("hnXicVars"))->Fill(massXic, ptCandidate, candidate.chi2PCA(), candidate.decayLength(), candidate.decayLengthXY(), candidate.cpa(), false);
383393
}
@@ -389,9 +399,14 @@ struct HfTaskXic {
389399
outputBkg = candidate.mlProbXicToPiKP()[0]; /// bkg score
390400
outputPrompt = candidate.mlProbXicToPiKP()[1]; /// prompt score
391401
outputFD = candidate.mlProbXicToPiKP()[2]; /// non-prompt score
392-
}
393-
/// Fill the ML outputScores and variables of candidate
394-
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXic, ptCandidate, outputBkg, outputPrompt, outputFD, false);
402+
/// Fill the ML outputScores and variables of candidate
403+
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXic, ptCandidate, outputBkg, outputPrompt, outputFD, false);
404+
} else {
405+
outputAE = candidate.aeOutputXicToPiKP()[0]; /// AE output of feature 0
406+
outputMSE = candidate.mseXicToPiKP()[0]; /// MSE
407+
LOG(debug)<<"Global mse in taskXic for PiKP Data "<<outputMSE;
408+
registry.get<THnSparse>(HIST("hnXicVarsWithMse"))->Fill(massXic, ptCandidate, candidate.decayLength(), candidate.cpa(), outputAE, false, outputMSE);
409+
}
395410
} else {
396411
registry.get<THnSparse>(HIST("hnXicVars"))->Fill(massXic, ptCandidate, candidate.chi2PCA(), candidate.decayLength(), candidate.decayLengthXY(), candidate.cpa(), false);
397412
}
@@ -409,7 +424,7 @@ struct HfTaskXic {
409424
PROCESS_SWITCH(HfTaskXic, processDataStd, "Process Data with the standard method", true);
410425

411426
void processDataWithMl(aod::Collision const& collision,
412-
soa::Filtered<soa::Join<aod::HfCand3ProngWPidPiKaPr, aod::HfSelXicToPKPi, aod::HfMlXicToPKPi>> const& candidatesMl, aod::TracksWDca const& tracks)
427+
soa::Filtered<soa::Join<aod::HfCand3ProngWPidPiKaPr, aod::HfSelXicToPKPi, aod::HfMlXicToPKPi, aod::HfMseXicToPKPi, aod::HfAeOutXicToPKPi>> const& candidatesMl, aod::TracksWDca const& tracks)
413428
{
414429
analysisData<true>(collision, candidatesMl, tracks);
415430
}
@@ -503,17 +518,21 @@ struct HfTaskXic {
503518
}
504519

505520
if (enableTHn) {
506-
double outputBkg(-1), outputPrompt(-1), outputFD(-1);
521+
double outputBkg(-1), outputPrompt(-1), outputFD(-1), outputMSE(-1), outputAE(-1);
507522
const int ternaryCl = 3;
508523
if ((candidate.isSelXicToPKPi() >= selectionFlagXic) && pdgCodeProng0 == kProton) {
509524
if constexpr (useMl) {
510525
if (candidate.mlProbXicToPKPi().size() == ternaryCl) {
511526
outputBkg = candidate.mlProbXicToPKPi()[0]; /// bkg score
512527
outputPrompt = candidate.mlProbXicToPKPi()[1]; /// prompt score
513528
outputFD = candidate.mlProbXicToPKPi()[2]; /// non-prompt score
514-
}
515-
/// Fill the ML outputScores and variables of candidate (todo: add multiplicity)
516-
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXicToPKPi, ptCandidate, outputBkg, outputPrompt, outputFD, origin);
529+
/// Fill the ML outputScores and variables of candidate (todo: add multiplicity)
530+
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXicToPKPi, ptCandidate, outputBkg, outputPrompt, outputFD, origin);
531+
} else {
532+
outputAE = candidate.aeOutputXicToPKPi()[0]; /// AE output of feature 0
533+
outputMSE = candidate.mseXicToPKPi()[0]; /// MSE
534+
registry.get<THnSparse>(HIST("hnXicVarsWithMse"))->Fill(massXicToPKPi, ptCandidate, candidate.decayLength(), candidate.cpa(), outputAE, origin, outputMSE);
535+
}
517536
} else {
518537
registry.get<THnSparse>(HIST("hnXicVars"))->Fill(massXicToPKPi, ptCandidate, candidate.chi2PCA(), candidate.decayLength(), candidate.decayLengthXY(), candidate.cpa(), origin);
519538
}
@@ -524,10 +543,14 @@ struct HfTaskXic {
524543
outputBkg = candidate.mlProbXicToPiKP()[0]; /// bkg score
525544
outputPrompt = candidate.mlProbXicToPiKP()[1]; /// prompt score
526545
outputFD = candidate.mlProbXicToPiKP()[2]; /// non-prompt score
527-
}
528-
/// Fill the ML outputScores and variables of candidate (todo: add multiplicity)
529-
// add here the pT_Mother, y_Mother, level (reco, Gen, Gen + Acc)
530-
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXicToPiKP, ptCandidate, outputBkg, outputPrompt, outputFD, origin);
546+
/// Fill the ML outputScores and variables of candidate (todo: add multiplicity)
547+
// add here the pT_Mother, y_Mother, level (reco, Gen, Gen + Acc)
548+
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXicToPiKP, ptCandidate, outputBkg, outputPrompt, outputFD, origin);
549+
} else {
550+
outputAE = candidate.aeOutputXicToPiKP()[0]; /// AE output of feature 0
551+
outputMSE = candidate.mseXicToPiKP()[0]; /// MSE
552+
registry.get<THnSparse>(HIST("hnXicVarsWithMse"))->Fill(massXicToPiKP, ptCandidate, candidate.decayLength(), candidate.cpa(), outputAE, origin, outputMSE);
553+
}
531554
} else {
532555
registry.get<THnSparse>(HIST("hnXicVars"))->Fill(massXicToPiKP, ptCandidate, candidate.chi2PCA(), candidate.decayLength(), candidate.decayLengthXY(), candidate.cpa(), origin);
533556
}
@@ -603,7 +626,7 @@ struct HfTaskXic {
603626
}
604627
PROCESS_SWITCH(HfTaskXic, processMcStd, "Process MC with the standard method", false);
605628

606-
void processMcWithMl(soa::Filtered<soa::Join<aod::HfCand3ProngWPidPiKaPr, aod::HfSelXicToPKPi, aod::HfMlXicToPKPi, aod::HfCand3ProngMcRec>> const& selectedCandidatesMlMc,
629+
void processMcWithMl(soa::Filtered<soa::Join<aod::HfCand3ProngWPidPiKaPr, aod::HfSelXicToPKPi, aod::HfMlXicToPKPi, aod::HfMseXicToPKPi, aod::HfAeOutXicToPKPi, aod::HfCand3ProngMcRec>> const& selectedCandidatesMlMc,
607630
soa::Join<aod::McParticles, aod::HfCand3ProngMcGen> const& mcParticles,
608631
aod::TracksWMc const& tracksWithMc)
609632
{

PWGHF/DataModel/CandidateSelectionTables.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,10 @@ DECLARE_SOA_COLUMN(IsSelXicToPKPi, isSelXicToPKPi, int); //!
314314
DECLARE_SOA_COLUMN(IsSelXicToPiKP, isSelXicToPiKP, int); //!
315315
DECLARE_SOA_COLUMN(MlProbXicToPKPi, mlProbXicToPKPi, std::vector<float>); //!
316316
DECLARE_SOA_COLUMN(MlProbXicToPiKP, mlProbXicToPiKP, std::vector<float>); //!
317+
DECLARE_SOA_COLUMN(MseXicToPKPi, mseXicToPKPi, std::vector<float>); //! new column for MSE
318+
DECLARE_SOA_COLUMN(MseXicToPiKP, mseXicToPiKP, std::vector<float>); //! new column for MSE
319+
DECLARE_SOA_COLUMN(AeOutputXicToPKPi, aeOutputXicToPKPi, std::vector<float>); //! new column for AE output
320+
DECLARE_SOA_COLUMN(AeOutputXicToPiKP, aeOutputXicToPiKP, std::vector<float>); //! new column for AE output
317321
// XicPlus to Xi Pi Pi
318322
DECLARE_SOA_COLUMN(IsSelXicToXiPiPi, isSelXicToXiPiPi, int); //!
319323
DECLARE_SOA_COLUMN(MlProbXicToXiPiPi, mlProbXicToXiPiPi, std::vector<float>); //!
@@ -331,6 +335,10 @@ DECLARE_SOA_TABLE(HfSelXicToPKPi, "AOD", "HFSELXIC", //!
331335
hf_sel_candidate_xic::IsSelXicToPKPi, hf_sel_candidate_xic::IsSelXicToPiKP);
332336
DECLARE_SOA_TABLE(HfMlXicToPKPi, "AOD", "HFMLXIC", //!
333337
hf_sel_candidate_xic::MlProbXicToPKPi, hf_sel_candidate_xic::MlProbXicToPiKP);
338+
DECLARE_SOA_TABLE(HfMseXicToPKPi, "AOD", "HFMSEXIC", //! new table for MSE
339+
hf_sel_candidate_xic::MseXicToPKPi, hf_sel_candidate_xic::MseXicToPiKP);
340+
DECLARE_SOA_TABLE(HfAeOutXicToPKPi, "AOD", "HFAEXIC", //! new table for AE output
341+
hf_sel_candidate_xic::AeOutputXicToPKPi, hf_sel_candidate_xic::AeOutputXicToPiKP);
334342
// XicPlus to Xi Pi Pi
335343
DECLARE_SOA_TABLE(HfSelXicToXiPiPi, "AOD", "HFSELXICTOXI2PI", //!
336344
hf_sel_candidate_xic::IsSelXicToXiPiPi);

PWGHF/TableProducer/candidateSelectorXicToPKPi.cxx

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "PWGHF/Core/HfHelper.h"
2121
#include "PWGHF/Core/HfMlResponseXicToPKPi.h"
2222
#include "PWGHF/Core/SelectorCuts.h"
23+
#include "PWGHF/Core/HfAeToMseXicToPKPi.h"
2324
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
2425
#include "PWGHF/DataModel/CandidateSelectionTables.h"
2526

@@ -53,6 +54,8 @@ using namespace o2::framework;
5354
struct HfCandidateSelectorXicToPKPi {
5455
Produces<aod::HfSelXicToPKPi> hfSelXicToPKPiCandidate;
5556
Produces<aod::HfMlXicToPKPi> hfMlXicToPKPiCandidate;
57+
Produces<aod::HfMseXicToPKPi> hfMseXicToPKPiCandidate;
58+
Produces<aod::HfAeOutXicToPKPi> hfAeXicToPKPiCandidate;
5659

5760
Configurable<double> ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"};
5861
Configurable<double> ptCandMax{"ptCandMax", 36., "Upper bound of candidate pT"};
@@ -80,6 +83,12 @@ struct HfCandidateSelectorXicToPKPi {
8083
Configurable<LabeledArray<double>> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsCutScore}, "ML selections per pT bin"};
8184
Configurable<int> nClassesMl{"nClassesMl", static_cast<int>(hf_cuts_ml::NCutScores), "Number of classes in ML model"};
8285
Configurable<std::vector<std::string>> namesInputFeatures{"namesInputFeatures", std::vector<std::string>{"feature1", "feature2"}, "Names of ML model input features"};
86+
/// New boolean flag to enable MSE calculation
87+
Configurable<bool> applyMSE{"applyMSE", false, "Flag to calculate MSE for autoencoders"};
88+
Configurable<bool> applyMinMax{"applyMinMax", false, "Flag to MinMax feature preprocessing"};
89+
/// Parameter vectors for feature preprocessing - external scaling
90+
Configurable<std::vector<float>> ScaleMin{"ScaleMin", {0.,0.,0.}, "vector of scaling parameter min"};
91+
Configurable<std::vector<float>> ScaleMax{"ScaleMax", {1.,1.,1.}, "vector of scaling parameter max"};
8392
// CCDB configuration
8493
Configurable<std::string> ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
8594
Configurable<std::vector<std::string>> modelPathsCCDB{"modelPathsCCDB", std::vector<std::string>{"EventFiltering/PWGHF/BDTXic"}, "Paths of models on CCDB"};
@@ -92,6 +101,13 @@ struct HfCandidateSelectorXicToPKPi {
92101
o2::analysis::HfMlResponseXicToPKPi<float> hfMlResponse;
93102
std::vector<float> outputMlXicToPKPi = {};
94103
std::vector<float> outputMlXicToPiKP = {};
104+
o2::analysis::HfAeToMseXicToPKPi<float> hfAeResponse; // new class for AE
105+
std::vector<float> outputMseXicToPKPi = {};
106+
std::vector<float> outputMseXicToPiKP = {};
107+
std::vector<float> outputAeXicToPKPi = {};
108+
std::vector<float> outputAeXicToPiKP = {};
109+
int scaleType = 0; // 0 indicates no scaling application
110+
95111
o2::ccdb::CcdbApi ccdbApi;
96112
TrackSelectorPi selectorPion;
97113
TrackSelectorKa selectorKaon;
@@ -138,6 +154,11 @@ struct HfCandidateSelectorXicToPKPi {
138154
}
139155
hfMlResponse.cacheInputFeaturesIndices(namesInputFeatures);
140156
hfMlResponse.init();
157+
/// AE feature preprocessing - MinMax scaling initialization
158+
if(applyMinMax == 1) {
159+
LOG(info)<<"MinMax scaling will be applied";
160+
scaleType = 1;
161+
} else LOG(info)<<"No external preprocessing transformation will be applied";
141162
}
142163
}
143164

@@ -247,13 +268,19 @@ struct HfCandidateSelectorXicToPKPi {
247268

248269
outputMlXicToPKPi.clear();
249270
outputMlXicToPiKP.clear();
250-
271+
outputMseXicToPKPi.clear();
272+
outputMseXicToPiKP.clear();
273+
outputAeXicToPKPi.clear();
274+
outputAeXicToPiKP.clear();
275+
251276
auto ptCand = candidate.pt();
252277

253278
if (!TESTBIT(candidate.hfflag(), aod::hf_cand_3prong::DecayType::XicToPKPi)) {
254279
hfSelXicToPKPiCandidate(statusXicToPKPi, statusXicToPiKP);
255280
if (applyMl) {
256281
hfMlXicToPKPiCandidate(outputMlXicToPKPi, outputMlXicToPiKP);
282+
hfMseXicToPKPiCandidate(outputMseXicToPKPi, outputMseXicToPiKP); // MSE
283+
hfAeXicToPKPiCandidate(outputAeXicToPKPi, outputAeXicToPiKP); // autoencoder outputs
257284
}
258285
if (activateQA) {
259286
registry.fill(HIST("hSelections"), 1, ptCand);
@@ -277,11 +304,13 @@ struct HfCandidateSelectorXicToPKPi {
277304
hfSelXicToPKPiCandidate(statusXicToPKPi, statusXicToPiKP);
278305
if (applyMl) {
279306
hfMlXicToPKPiCandidate(outputMlXicToPKPi, outputMlXicToPiKP);
307+
hfMseXicToPKPiCandidate(outputMseXicToPKPi, outputMseXicToPiKP); // MSE
308+
hfAeXicToPKPiCandidate(outputAeXicToPKPi, outputAeXicToPiKP); // autoencoder outputs
280309
}
281310
continue;
282311
}
283312

284-
// conjugate-dependent topplogical selection for Xic
313+
// conjugate-dependent topological selection for Xic
285314

286315
bool topolXicToPKPi = selectionTopolConjugate(candidate, trackPos1, trackNeg, trackPos2);
287316
bool topolXicToPiKP = selectionTopolConjugate(candidate, trackPos2, trackNeg, trackPos1);
@@ -290,6 +319,8 @@ struct HfCandidateSelectorXicToPKPi {
290319
hfSelXicToPKPiCandidate(statusXicToPKPi, statusXicToPiKP);
291320
if (applyMl) {
292321
hfMlXicToPKPiCandidate(outputMlXicToPKPi, outputMlXicToPiKP);
322+
hfMseXicToPKPiCandidate(outputMseXicToPKPi, outputMseXicToPiKP); // MSE
323+
hfAeXicToPKPiCandidate(outputAeXicToPKPi, outputAeXicToPiKP); // autoencoder outputs
293324
}
294325
continue;
295326
}
@@ -357,6 +388,8 @@ struct HfCandidateSelectorXicToPKPi {
357388
hfSelXicToPKPiCandidate(statusXicToPKPi, statusXicToPiKP);
358389
if (applyMl) {
359390
hfMlXicToPKPiCandidate(outputMlXicToPKPi, outputMlXicToPiKP);
391+
hfMseXicToPKPiCandidate(outputMseXicToPKPi, outputMseXicToPiKP); // MSE
392+
hfAeXicToPKPiCandidate(outputAeXicToPKPi, outputAeXicToPiKP); // autoencoder outputs
360393
}
361394
continue;
362395
}
@@ -379,13 +412,33 @@ struct HfCandidateSelectorXicToPKPi {
379412
if (topolXicToPKPi && pidXicToPKPi) {
380413
std::vector<float> inputFeaturesXicToPKPi = hfMlResponse.getInputFeatures(candidate, true);
381414
isSelectedMlXicToPKPi = hfMlResponse.isSelectedMl(inputFeaturesXicToPKPi, ptCand, outputMlXicToPKPi);
415+
if(applyMSE){
416+
/// fill outputAeXicToPKPi with rescaled AE output since ML output is automatically scaled
417+
hfAeResponse.unsetScaling(applyMSE, scaleType, outputMlXicToPKPi, ScaleMin, ScaleMax);
418+
outputAeXicToPKPi = hfAeResponse.getPostprocessedOutput();
419+
/// fill outputMSEXicToPKPi vector with MSE
420+
hfAeResponse.setScaling(applyMSE, scaleType, inputFeaturesXicToPKPi, ScaleMin, ScaleMax);
421+
float MsePKPi = hfAeResponse.getMse(inputFeaturesXicToPKPi, outputMlXicToPKPi); /// args are not-scaled input, automatically scaled ML output
422+
outputMseXicToPKPi.push_back(MsePKPi);
423+
}
382424
}
383425
if (topolXicToPiKP && pidXicToPiKP) {
384426
std::vector<float> inputFeaturesXicToPiKP = hfMlResponse.getInputFeatures(candidate, false);
385427
isSelectedMlXicToPiKP = hfMlResponse.isSelectedMl(inputFeaturesXicToPiKP, ptCand, outputMlXicToPiKP);
428+
if(applyMSE){
429+
/// fill outputAeXicToPiKP with rescaled AE output since ML output is automatically scaled
430+
hfAeResponse.unsetScaling(applyMSE, scaleType, outputMlXicToPiKP, ScaleMin, ScaleMax);
431+
outputAeXicToPiKP = hfAeResponse.getPostprocessedOutput();
432+
/// fill outputMSEXicToPiKP vector with MSE
433+
hfAeResponse.setScaling(applyMSE, scaleType, inputFeaturesXicToPiKP, ScaleMin, ScaleMax);
434+
float MsePiKP = hfAeResponse.getMse(inputFeaturesXicToPiKP, outputMlXicToPiKP); /// args are not-scaled input, automatically scaled ML output
435+
outputMseXicToPiKP.push_back(MsePiKP);
436+
}
386437
}
387438

388439
hfMlXicToPKPiCandidate(outputMlXicToPKPi, outputMlXicToPiKP);
440+
hfMseXicToPKPiCandidate(outputMseXicToPKPi, outputMseXicToPiKP);
441+
hfAeXicToPKPiCandidate(outputAeXicToPKPi, outputAeXicToPiKP);
389442

390443
if (!isSelectedMlXicToPKPi && !isSelectedMlXicToPiKP) {
391444
hfSelXicToPKPiCandidate(statusXicToPKPi, statusXicToPiKP);

0 commit comments

Comments
 (0)