From e11a767cdeb35f1b532cc88b560f83887d8158fe Mon Sep 17 00:00:00 2001 From: Phmonski Date: Mon, 27 Apr 2026 12:23:16 +0200 Subject: [PATCH] [HS3] Fixed snapshot filter, unbinned data edges, zero yield bins --- roofit/hs3/src/JSONFactories_HistFactory.cxx | 4 ++++ roofit/hs3/src/JSONFactories_RooFitCore.cxx | 2 +- roofit/hs3/src/RooJSONFactoryWSTool.cxx | 25 +++++++++----------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/roofit/hs3/src/JSONFactories_HistFactory.cxx b/roofit/hs3/src/JSONFactories_HistFactory.cxx index 8d8c925e2d905..1530f0adb7b7e 100644 --- a/roofit/hs3/src/JSONFactories_HistFactory.cxx +++ b/roofit/hs3/src/JSONFactories_HistFactory.cxx @@ -502,6 +502,10 @@ class HistFactoryImporter : public RooFit::JSONIO::Importer { std::vector errs(sumW.size()); for (size_t i = 0; i < sumW.size(); ++i) { + if (sumW[i] == 0.) { + errs[i] = 0.; + continue; + } errs[i] = std::sqrt(sumW2[i]) / sumW[i]; // avoid negative sigma. This NP will be set constant anyway later errs[i] = std::max(errs[i], 0.); diff --git a/roofit/hs3/src/JSONFactories_RooFitCore.cxx b/roofit/hs3/src/JSONFactories_RooFitCore.cxx index 88586a419f541..81282974d36b7 100644 --- a/roofit/hs3/src/JSONFactories_RooFitCore.cxx +++ b/roofit/hs3/src/JSONFactories_RooFitCore.cxx @@ -1256,7 +1256,7 @@ STATIC_EXECUTE([]() { registerExporter(RooFFTConvPdf::Class(), false); registerExporter(RooExtendPdf::Class(), false); registerExporter(ParamHistFunc::Class(), false); - registerExporter(RooSpline::Class(), false); + registerExporter(RooSpline::Class(), false); }); } // namespace diff --git a/roofit/hs3/src/RooJSONFactoryWSTool.cxx b/roofit/hs3/src/RooJSONFactoryWSTool.cxx index 72d91125d2425..7d2f618859f46 100644 --- a/roofit/hs3/src/RooJSONFactoryWSTool.cxx +++ b/roofit/hs3/src/RooJSONFactoryWSTool.cxx @@ -986,6 +986,9 @@ void RooJSONFactoryWSTool::exportVariable(const RooAbsArg *v, JSONNode &node, bo var["value"] << rrv->getVal(); if (rrv->isConstant() && storeConstant) { var["const"] << rrv->isConstant(); + } else { + var["min"] << rrv->getMin(); + var["max"] << rrv->getMax(); } if (rrv->getBins() != 100 && storeBins) { var["nbins"] << rrv->getBins(); @@ -1507,10 +1510,6 @@ void RooJSONFactoryWSTool::exportData(RooAbsData const &data) return; JSONNode &output = appendNamedChild((*_rootnodeOutput)["data"], data.GetName()); - /*std::ofstream file("/home/scello/Data/ZvvH126_5.txt", std::ios::app); - if (!file.is_open()) { - std::cerr << "Error: Could not open file for writing.\n"; - }*/ // This works around a problem in RooStats/HistFactory that was only fixed // in ROOT 6.30: until then, the weight variable of the observed dataset, @@ -1947,18 +1946,16 @@ void RooJSONFactoryWSTool::exportAllObjects(JSONNode &n) // the ones that the pdfs encoded implicitly (like in the case of // HistFactory). for (RooAbsArg *arg : *snsh) { - if (exportedObjectNames.find(arg->GetName()) != exportedObjectNames.end()) { - bool do_export = false; - for (const auto &pdf : allpdfs) { - if (pdf->dependsOn(*arg)) { - do_export = true; - } - } - if (do_export) { - RooJSONFactoryWSTool::testValidName(arg->GetName(), true); - snapshotSorted.add(*arg); + bool do_export = false; + for (const auto &pdf : allpdfs) { + if (pdf->dependsOn(*arg)) { + do_export = true; } } + if (do_export) { + RooJSONFactoryWSTool::testValidName(arg->GetName(), true); + snapshotSorted.add(*arg); + } } snapshotSorted.sort(); std::string name(snsh->GetName());