From 9dcf56894ce587e38ba07c159d9cef67a38873c1 Mon Sep 17 00:00:00 2001 From: Kamil Skwarczynski Date: Mon, 26 Jan 2026 14:23:07 +0000 Subject: [PATCH 1/2] Non uniform binning validations --- CIValidations/BinningValidations.cpp | 130 +++++++++++++++++++++++---- 1 file changed, 115 insertions(+), 15 deletions(-) diff --git a/CIValidations/BinningValidations.cpp b/CIValidations/BinningValidations.cpp index 1e167b0..d7b2d7d 100755 --- a/CIValidations/BinningValidations.cpp +++ b/CIValidations/BinningValidations.cpp @@ -2,6 +2,84 @@ #include "Utils/Comparison.h" #include "Samples/BinningHandler.h" +void BinningHandlerValidationsNonUniform(std::ostream& outFile) { + auto Binning = std::make_unique(); + std::string yamlBinning = R"( +VarStr : ["RecoNeutrinoEnergy", "TrueQ2"] +Bins: [[[0.0, 0.1], [0.0, 0.1]], [[0.0, 0.1], [0.1, 0.2]], [[0.0, 0.1], [0.2, 0.3]], + [[0.0, 0.1], [0.3, 0.4]], [[0.0, 0.1], [0.4, 0.5]], [[0.0, 0.1], [0.5, 0.6]], + [[0.0, 0.1], [0.6, 0.7]], [[0.0, 0.1], [0.7, 0.8]], [[0.0, 0.1], [0.8, 0.9]], + [[0.0, 0.1], [0.9, 1.0]] ] +Uniform: false +)"; + YAML::Node Config = STRINGtoYAML(yamlBinning); + SampleInfo SingleSample; + Binning->SetupSampleBinning(Config, SingleSample); + + + std::string yamlBinning3D = R"( +VarStr : ["RecoNeutrinoEnergy", "TrueQ2", "CosTheta"] +Bins: [ + [[0.0, 0.5], [0.0, 0.5], [0.0, 0.5]], # bin 0 + [[0.0, 0.5], [0.5, 1.0], [0.0, 0.5]], # bin 1 + [[0.5, 1.0], [0.0, 0.5], [0.0, 0.5]], # bin 2 + [[0.5, 1.0], [0.5, 1.0], [0.0, 0.5]], # bin 3 + [[0.0, 0.5], [0.0, 0.5], [0.5, 1.0]], # bin 4 + [[0.0, 0.5], [0.5, 1.0], [0.5, 1.0]], # bin 5 + [[0.5, 1.0], [0.0, 0.5], [0.5, 1.0]], # bin 6 + [[0.5, 1.0], [0.5, 1.0], [0.5, 1.0]] # bin 7 +] +Uniform: false +)"; + YAML::Node Config3D = STRINGtoYAML(yamlBinning3D); + Binning->SetupSampleBinning(Config3D, SingleSample); + + std::vector Samples = {0,1}; + std::vector XVars = {-0.05, 0.0, 0.05, 0.1, 0.15}; + std::vector YVars = {-0.1, 0.0, 0.05, 0.1, 0.15, 0.95, 1.0, 1.05}; + std::vector NomXBins = {-1}; + std::vector NomYBins = {-1}; + // Loop over all combinations + for (int sample : Samples) { + for (double xvar : XVars) { + for (double yvar : YVars) { + for (int nomXBin : NomXBins) { + for (int nomYBin : NomYBins) { + std::vector KinVar; + std::vector NomBin; + + if(sample == 0) { + KinVar = {&xvar, &yvar}; + NomBin = {nomXBin, nomYBin}; + } else if (sample == 1) { + + KinVar = {&xvar, &yvar, &xvar}; + NomBin = {nomXBin, nomYBin, nomXBin}; + } + + const int GlobalBin = Binning->FindGlobalBin(sample, KinVar, NomBin); + outFile << "Sample " << sample + << ", XVar: " << xvar + << ", YVar: " << yvar + << ", NomXBin: " << nomXBin + << ", NomYBin: " << nomYBin + << ", GlobalBin: " << GlobalBin; + + if (GlobalBin == M3::UnderOverFlowBin) { + outFile << " (Under/Overflow)"; + } else { + outFile << ", Name: " << Binning->GetBinName(GlobalBin); + } + + outFile << '\n'; + } + } + } + } + } +} + + void BinningHandlerValidations(std::ostream& outFile) { auto Binning = std::make_unique(); @@ -82,22 +160,11 @@ Uniform: true } } -int main(int argc, char *argv[]) -{ - SetMaCh3LoggerFormat(); - - if (argc != 1) { - MACH3LOG_CRITICAL("You specified arguments, but none are needed. (Program name: {})", argv[0]); - throw MaCh3Exception(__FILE__ , __LINE__ ); - } - std::string TutorialPath = std::getenv("MaCh3Tutorial_ROOT"); - - // Open a file in write mode - std::ofstream outFile("NewBinningOut.txt"); +void UniformValidations(std::ostream& outFile) { auto Binning = std::make_unique(); std::vector> Edges = { {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}, - {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1} }; + {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1} }; Binning->InitUniform(Edges); std::vector> testPairs = { {-1.0, -1}, @@ -145,9 +212,42 @@ int main(int argc, char *argv[]) } } -////////////// Additional Validations ////////////// - BinningHandlerValidations(outFile); +} +void NonUniformValidations(std::ostream& outFile) { + auto Binning = std::make_unique(); + std::vector>> Bins = { + {{0.0, 0.1}, {0.0, 0.1}}, + {{0.0, 0.1}, {0.1, 0.2}}, + {{0.0, 0.1}, {0.2, 0.3}}, + {{0.0, 0.1}, {0.3, 0.4}}, + {{0.0, 0.1}, {0.4, 0.5}}, + {{0.0, 0.1}, {0.5, 0.6}}, + {{0.0, 0.1}, {0.6, 0.7}}, + {{0.0, 0.1}, {0.7, 0.8}}, + {{0.0, 0.1}, {0.8, 0.9}}, + {{0.0, 0.1}, {0.9, 1.0}}, + }; + Binning->InitNonUniform(Bins); +} + +int main(int argc, char *argv[]) +{ + SetMaCh3LoggerFormat(); + + if (argc != 1) { + MACH3LOG_CRITICAL("You specified arguments, but none are needed. (Program name: {})", argv[0]); + throw MaCh3Exception(__FILE__ , __LINE__ ); + } + std::string TutorialPath = std::getenv("MaCh3Tutorial_ROOT"); + + // Open a file in write mode + std::ofstream outFile("NewBinningOut.txt"); +//////////////////////////// + UniformValidations(outFile); + NonUniformValidations(outFile); + BinningHandlerValidations(outFile); + BinningHandlerValidationsNonUniform(outFile); ////////////// The End ////////////// outFile.close(); bool TheSame = CompareTwoFiles(TutorialPath + + "/CIValidations/TestOutputs/BinningOut.txt", "NewBinningOut.txt"); From 72762a54cf2e3ba54620dbacfb8ea3d34046e461 Mon Sep 17 00:00:00 2001 From: Kamil Skwarczynski Date: Mon, 26 Jan 2026 14:28:58 +0000 Subject: [PATCH 2/2] forgot about stored output... --- CIValidations/TestOutputs/BinningOut.txt | 80 ++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/CIValidations/TestOutputs/BinningOut.txt b/CIValidations/TestOutputs/BinningOut.txt index fae58d5..069955e 100644 --- a/CIValidations/TestOutputs/BinningOut.txt +++ b/CIValidations/TestOutputs/BinningOut.txt @@ -1002,3 +1002,83 @@ Sample 1, bin: 6, name: Dim0 (0.6, 0.7) Sample 1, bin: 7, name: Dim0 (0.7, 0.8) Sample 1, bin: 8, name: Dim0 (0.8, 0.9) Sample 1, bin: 9, name: Dim0 (0.9, 1) +Sample 0, XVar: -0.05, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: -0.05, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: -0.05, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: -0.05, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: -0.05, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: -0.05, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: -0.05, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: -0.05, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.05, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.05, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.05, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: 0, Name: Dim0 (0, 0.1), Dim1 (0, 0.1) +Sample 0, XVar: 0.05, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.05, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: 1, Name: Dim0 (0, 0.1), Dim1 (0.1, 0.2) +Sample 0, XVar: 0.05, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: 9, Name: Dim0 (0, 0.1), Dim1 (0.9, 1) +Sample 0, XVar: 0.05, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.05, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.1, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.1, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.1, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.1, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.1, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.1, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.1, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.1, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.15, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.15, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.15, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.15, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.15, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.15, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.15, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 0, XVar: 0.15, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: -0.05, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: -0.05, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: -0.05, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: -0.05, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: -0.05, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: -0.05, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: -0.05, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: -0.05, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.05, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.05, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.05, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.05, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.05, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.05, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: 11, Name: Dim0 (0, 0.5), Dim1 (0.5, 1), Dim2 (0, 0.5) +Sample 1, XVar: 0.05, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.05, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.1, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.1, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.1, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.1, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.1, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.1, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: 11, Name: Dim0 (0, 0.5), Dim1 (0.5, 1), Dim2 (0, 0.5) +Sample 1, XVar: 0.1, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.1, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.15, YVar: -0.1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.15, YVar: 0, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.15, YVar: 0.05, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.15, YVar: 0.1, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.15, YVar: 0.15, NomXBin: -1, NomYBin: -1, GlobalBin: 10, Name: Dim0 (0, 0.5), Dim1 (0, 0.5), Dim2 (0, 0.5) +Sample 1, XVar: 0.15, YVar: 0.95, NomXBin: -1, NomYBin: -1, GlobalBin: 11, Name: Dim0 (0, 0.5), Dim1 (0.5, 1), Dim2 (0, 0.5) +Sample 1, XVar: 0.15, YVar: 1, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow) +Sample 1, XVar: 0.15, YVar: 1.05, NomXBin: -1, NomYBin: -1, GlobalBin: -1 (Under/Overflow)