From d843a82a3ba2a4790578bffe24b4b0aa2f5f34d8 Mon Sep 17 00:00:00 2001 From: Kamil Skwarczynski Date: Mon, 16 Mar 2026 12:12:16 +0000 Subject: [PATCH] implement bin finding benchmark --- CIValidations/Benchmark/MaCh3Benchmark.cpp | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/CIValidations/Benchmark/MaCh3Benchmark.cpp b/CIValidations/Benchmark/MaCh3Benchmark.cpp index 4377992..dcf4543 100755 --- a/CIValidations/Benchmark/MaCh3Benchmark.cpp +++ b/CIValidations/Benchmark/MaCh3Benchmark.cpp @@ -38,6 +38,42 @@ void CreateChungusYaml(const std::string& filename = "ChungusSystematics.yaml", } } + +YAML::Node CreateUniformBinnins() { + // --- Uniform Binning --- + std::string yamlUniform = R"( +VarStr : ["RecoNeutrinoEnergy", "TrueQ2"] +VarBins: [ [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] ] +Uniform: true +)"; + YAML::Node ConfigUniform = STRINGtoYAML(yamlUniform); + return ConfigUniform; +} + +YAML::Node CreateNonUniformBinnins() { + // --- Non-Uniform Binning --- + std::string yamlNonUniform = R"( +VarStr : ["RecoNeutrinoEnergy", "TrueQ2"] +Bins: [ + [[0.0, 0.05],[0.0, 0.04]], [[0.0, 0.05],[0.04, 0.09]], [[0.0, 0.05],[0.09, 0.15]], [[0.0, 0.05],[0.15, 0.22]], [[0.0, 0.05],[0.22, 0.30]], + [[0.05, 0.10],[0.0, 0.05]], [[0.05, 0.10],[0.05, 0.11]], [[0.05, 0.10],[0.11, 0.18]], [[0.05, 0.10],[0.18, 0.26]], [[0.05, 0.10],[0.26, 0.35]], + [[0.10, 0.20],[0.0, 0.06]], [[0.10, 0.20],[0.06, 0.13]], [[0.10, 0.20],[0.13, 0.21]], [[0.10, 0.20],[0.21, 0.30]], [[0.10, 0.20],[0.30, 0.40]], + [[0.20, 0.30],[0.0, 0.07]], [[0.20, 0.30],[0.07, 0.15]], [[0.20, 0.30],[0.15, 0.24]], [[0.20, 0.30],[0.24, 0.34]], [[0.20, 0.30],[0.34, 0.45]], + [[0.30, 0.40],[0.0, 0.08]], [[0.30, 0.40],[0.08, 0.17]], [[0.30, 0.40],[0.17, 0.27]], [[0.30, 0.40],[0.27, 0.38]], [[0.30, 0.40],[0.38, 0.50]], + [[0.40, 0.50],[0.0, 0.09]], [[0.40, 0.50],[0.09, 0.19]], [[0.40, 0.50],[0.19, 0.30]], [[0.40, 0.50],[0.30, 0.42]], [[0.40, 0.50],[0.42, 0.55]], + [[0.50, 0.60],[0.0, 0.10]], [[0.50, 0.60],[0.10, 0.21]], [[0.50, 0.60],[0.21, 0.33]], [[0.50, 0.60],[0.33, 0.46]], [[0.50, 0.60],[0.46, 0.60]], + [[0.60, 0.70],[0.0, 0.11]], [[0.60, 0.70],[0.11, 0.23]], [[0.60, 0.70],[0.23, 0.36]], [[0.60, 0.70],[0.36, 0.50]], [[0.60, 0.70],[0.50, 0.65]], + [[0.70, 0.80],[0.0, 0.12]], [[0.70, 0.80],[0.12, 0.25]], [[0.70, 0.80],[0.25, 0.39]], [[0.70, 0.80],[0.39, 0.54]], [[0.70, 0.80],[0.54, 0.70]], + [[0.80, 0.90],[0.0, 0.13]], [[0.80, 0.90],[0.13, 0.27]], [[0.80, 0.90],[0.27, 0.42]], [[0.80, 0.90],[0.42, 0.58]], [[0.80, 0.90],[0.58, 0.75]], + [[0.90, 1.00],[0.0, 0.14]], [[0.90, 1.00],[0.14, 0.29]], [[0.90, 1.00],[0.29, 0.45]], [[0.90, 1.00],[0.45, 0.62]], [[0.90, 1.00],[0.62, 0.80]] +] +Uniform: false +)"; + YAML::Node ConfigNonUniform = STRINGtoYAML(yamlNonUniform); + return ConfigNonUniform; +} + TEST_CASE("Benchmark MaCh3") { // Initialise manger responsible for config handling auto FitManager = std::make_unique("TutorialConfigs/FitterConfig.yaml"); @@ -105,6 +141,41 @@ TEST_CASE("Benchmark MaCh3") { Chungus->AcceptStep(); }; + constexpr size_t nEvents = 100000; + + YAML::Node ConfigUniform = CreateUniformBinnins(); + auto UniformBinning = std::make_unique(); + SampleInfo SingleSample; + UniformBinning->SetupSampleBinning(ConfigUniform, SingleSample); + + auto NonUniformBinning = std::make_unique(); + YAML::Node ConfigNonUniform = CreateNonUniformBinnins(); + NonUniformBinning->SetupSampleBinning(ConfigNonUniform, SingleSample); + + // Generate random events + std::vector> Events(nEvents); + for(size_t i = 0; i < nEvents; ++i) { + double x = static_cast(rand()) / RAND_MAX; // 0..1 + double y = static_cast(rand()) / RAND_MAX; // 0..1 + Events[i] = std::make_pair(x, y); + } + + BENCHMARK("Uniform BinningHandler 100k events") { + for(const auto& ev : Events) { + std::vector KinVars = { &ev.first, &ev.second }; + std::vector NomBins = { -1, -1 }; + UniformBinning->FindGlobalBin(0, KinVars, NomBins); + } + }; + + BENCHMARK("Non-Uniform BinningHandler 100k events") { + for(const auto& ev : Events) { + std::vector KinVars = { &ev.first, &ev.second }; + std::vector NomBins = { -1, -1 }; + NonUniformBinning->FindGlobalBin(0, KinVars, NomBins); + } + }; + for (size_t i = 0; i < NDSamples.size(); ++i) { delete NDSamples[i]; }