diff --git a/roofit/hs3/inc/RooFitHS3/RooJSONFactoryWSTool.h b/roofit/hs3/inc/RooFitHS3/RooJSONFactoryWSTool.h index 4f13181d1d250..cad0f33f70c8b 100644 --- a/roofit/hs3/inc/RooFitHS3/RooJSONFactoryWSTool.h +++ b/roofit/hs3/inc/RooFitHS3/RooJSONFactoryWSTool.h @@ -39,9 +39,15 @@ class ModelConfig; class RooJSONFactoryWSTool { public: static constexpr bool useListsInsteadOfDicts = true; - static bool allowExportInvalidNames; - static bool allowSanitizeNames; - static bool importNoDomainParametersAsRooConstVars; + + struct Config { + bool allowExportInvalidNames = true; + bool allowSanitizeNames = true; + bool importNoDomainParametersAsRooConstVars = true; + }; + + static Config &config(); + static RooWorkspace sanitizeWS(const RooWorkspace &ws); static RooWorkspace cleanWS(const RooWorkspace &ws, bool onlyModelConfig = false); diff --git a/roofit/hs3/src/RooJSONFactoryWSTool.cxx b/roofit/hs3/src/RooJSONFactoryWSTool.cxx index 0d93c738aae54..da9a51d2a1a4a 100644 --- a/roofit/hs3/src/RooJSONFactoryWSTool.cxx +++ b/roofit/hs3/src/RooJSONFactoryWSTool.cxx @@ -981,16 +981,13 @@ bool RooJSONFactoryWSTool::isValidName(const std::string &str) return true; } -bool RooJSONFactoryWSTool::allowExportInvalidNames(true); -bool RooJSONFactoryWSTool::allowSanitizeNames(true); -bool RooJSONFactoryWSTool::importNoDomainParametersAsRooConstVars(true); bool RooJSONFactoryWSTool::testValidName(const std::string &name, bool forceError) { if (!RooJSONFactoryWSTool::isValidName(name)) { std::stringstream ss; ss << "RooJSONFactoryWSTool() name '" << name << "' is not valid!" << std::endl - << "Sanitize names by setting RooJSONFactoryWSTool::allowSanitizeNames = True." << std::endl; - if (RooJSONFactoryWSTool::allowExportInvalidNames && !forceError) { + << "Sanitize names by setting RooJSONFactoryWSTool::config().allowSanitizeNames = true." << std::endl; + if (RooJSONFactoryWSTool::config().allowExportInvalidNames && !forceError) { RooJSONFactoryWSTool::warning(ss.str()); return false; } else { @@ -1801,7 +1798,7 @@ void RooJSONFactoryWSTool::importVariable(const JSONNode &p) oocoutE(nullptr, InputArguments) << ss.str() << std::endl; return; } - if (importNoDomainParametersAsRooConstVars && !_domains->hasVariable(name.c_str())) { + if (config().importNoDomainParametersAsRooConstVars && !_domains->hasVariable(name.c_str())) { if (!p.has_child("value")) { RooJSONFactoryWSTool::error("cannot instantiate RooConstVar '" + name + "' without \"value\"!"); } @@ -2518,7 +2515,7 @@ void RooJSONFactoryWSTool::error(const char *s) std::string RooJSONFactoryWSTool::sanitizeName(const std::string str) { std::string result; - if (RooJSONFactoryWSTool::allowSanitizeNames) { + if (RooJSONFactoryWSTool::config().allowSanitizeNames) { for (char c : str) { switch (c) { case '[': @@ -2591,6 +2588,12 @@ RooWorkspace RooJSONFactoryWSTool::cleanWS(const RooWorkspace &ws, bool onlyMode return tmpWS; } +RooJSONFactoryWSTool::Config &RooJSONFactoryWSTool::config() +{ + static Config conf; + return conf; +} + // Sanitize all names in the workspace to be HS3 compliant RooWorkspace RooJSONFactoryWSTool::sanitizeWS(const RooWorkspace &ws) { diff --git a/roofit/hs3/test/testRooFitHS3.cxx b/roofit/hs3/test/testRooFitHS3.cxx index 3fcf10dc044de..5026e0699e9c0 100644 --- a/roofit/hs3/test/testRooFitHS3.cxx +++ b/roofit/hs3/test/testRooFitHS3.cxx @@ -169,12 +169,15 @@ std::string defaultDomainAxesNode(std::string const &json) class ScopedNoDomainConstVarImportFlag { public: explicit ScopedNoDomainConstVarImportFlag(bool value) - : _oldValue{RooJSONFactoryWSTool::importNoDomainParametersAsRooConstVars} + : _oldValue{RooJSONFactoryWSTool::config().importNoDomainParametersAsRooConstVars} { - RooJSONFactoryWSTool::importNoDomainParametersAsRooConstVars = value; + RooJSONFactoryWSTool::config().importNoDomainParametersAsRooConstVars = value; } - ~ScopedNoDomainConstVarImportFlag() { RooJSONFactoryWSTool::importNoDomainParametersAsRooConstVars = _oldValue; } + ~ScopedNoDomainConstVarImportFlag() + { + RooJSONFactoryWSTool::config().importNoDomainParametersAsRooConstVars = _oldValue; + } private: bool _oldValue;