When using RooFit, statistical models can be conveniently handled and stored as a RooWorkspace.
However, for the sake of interoperability with other statistical frameworks, and also ease of manipulation, it may be useful to store statistical models in text form.
The RooJSONFactoryWSTool is a helper class to achieve exactly this, exporting to and importing from JSON.
In order to import a workspace from a JSON file, you can do
Similarly, in order to export a workspace to a JSON file, you can do
Analogously, in C++, you can do
and
For more details, consult the tutorial rf515_hfJSON.
The RooJSONFactoryWSTool only knows about a limited set of classes for import and export. If import or export of a class you're interested in fails, you might need to add your own importer or exporter. Please consult the relevant section in the RooFit Developer Documentation to learn how to do that (Implement JSON I/O for a RooFit class with RooFit HS3).
You can always get a list of all the available importers and exporters by calling the following functions:
Alternatively, you can generate a LaTeX version of the available importers and exporters by calling
Definition at line 50 of file RooJSONFactoryWSTool.h.
Classes | |
| struct | CombinedData |
| struct | Config |
| class | DependencyMissingError |
Public Member Functions | |
| RooJSONFactoryWSTool (RooWorkspace &ws) | |
| ~RooJSONFactoryWSTool () | |
| void | exportCategory (RooAbsCategory const &cat, RooFit::Detail::JSONNode &node) |
| Export a RooAbsCategory object to a JSONNode. | |
| bool | exportJSON (std::ostream &os) |
| Export the workspace to JSON format and write to the output stream. | |
| bool | exportJSON (std::string const &fileName) |
| Export the workspace to JSON format and write to the specified file. | |
| std::string | exportJSONtoString () |
| Export the workspace to a JSON string. | |
| std::string | exportTransformed (const RooAbsReal *original, const std::string &suffix, const std::string &formula) |
| std::string | getStringAttribute (const std::string &obj, const std::string &attrib) |
| bool | hasAttribute (const std::string &obj, const std::string &attrib) |
| std::string const & | hs3VersionInput () const |
| The "hs3_version" of the document that is currently being imported, or an empty string outside of an import. | |
| void | importFunction (const RooFit::Detail::JSONNode &p, bool importAllDependants) |
| Import a function from the JSONNode into the workspace. | |
| void | importFunction (const std::string &jsonString, bool importAllDependants) |
| Import a function from a JSON string into the workspace. | |
| bool | importJSON (std::istream &os) |
| Imports a JSON file from the given input stream to the workspace. | |
| bool | importJSON (std::string const &filename) |
| Imports a JSON file from the given filename to the workspace. | |
| void | importJSONElement (const std::string &name, const std::string &jsonString) |
| bool | importJSONfromString (const std::string &s) |
| Import the workspace from a JSON string. | |
| void | importVariableElement (const RooFit::Detail::JSONNode &n) |
| void | queueExport (RooAbsArg const &arg) |
| void | queueExportTemporary (RooAbsArg *arg) |
| template<class T > | |
| T * | request (const std::string &objname, const std::string &requestAuthor) |
| template<class T > | |
| T * | requestArg (const RooFit::Detail::JSONNode &node, const std::string &key) |
| template<class T > | |
| RooArgList | requestArgList (const RooFit::Detail::JSONNode &node, const std::string &seqName) |
| template<class T > | |
| RooArgSet | requestArgSet (const RooFit::Detail::JSONNode &node, const std::string &seqName) |
| template<class T , class Coll_t > | |
| Coll_t | requestCollection (const RooFit::Detail::JSONNode &node, const std::string &seqName) |
| void | setAttribute (const std::string &obj, const std::string &attrib) |
| void | setStringAttribute (const std::string &obj, const std::string &attrib, const std::string &value) |
| RooWorkspace * | workspace () |
| template<class Obj_t , typename... Args_t> | |
| Obj_t & | wsEmplace (RooStringView name, Args_t &&...args) |
| template<class Obj_t > | |
| Obj_t & | wsImport (Obj_t const &obj) |
Static Public Member Functions | |
| static RooFit::Detail::JSONNode & | appendNamedChild (RooFit::Detail::JSONNode &node, std::string const &name) |
| static RooWorkspace | cleanWS (const RooWorkspace &ws, bool onlyModelConfig=false) |
| static Config & | config () |
| static std::unique_ptr< RooFit::Detail::JSONTree > | createNewJSONTree () |
| Create a new JSON tree with version information. | |
| static void | error (const char *s) |
| Writes an error message to the RooFit message service and throws a runtime_error. | |
| static void | error (const std::string &s) |
| static void | exportArray (std::size_t n, double const *contents, RooFit::Detail::JSONNode &output) |
| Export an array of doubles to a JSONNode. | |
| static void | exportAxis (RooFit::Detail::JSONNode &obsNode, RooRealVar const &var) |
| Export the name and binning of a RooRealVar to a JSONNode. | |
| static void | exportHisto (RooArgSet const &vars, std::size_t n, double const *contents, RooFit::Detail::JSONNode &output) |
| Export histogram data to a JSONNode. | |
| static void | fillSeq (RooFit::Detail::JSONNode &node, RooAbsCollection const &coll, size_t nMax=-1) |
| static RooFit::Detail::JSONNode const * | findNamedChild (RooFit::Detail::JSONNode const &node, std::string const &name) |
| template<typename... Keys_t> | |
| static RooFit::Detail::JSONNode & | getRooFitInternal (RooFit::Detail::JSONNode &node, Keys_t const &...keys) |
| static bool | isValidName (const std::string &str) |
| Check if a string is a valid name. | |
| static RooFit::Detail::JSONNode & | makeVariablesNode (RooFit::Detail::JSONNode &rootNode) |
| static std::string | name (const RooFit::Detail::JSONNode &n) |
| static RooArgSet | readAxes (const RooFit::Detail::JSONNode &node) |
| Read axes from the JSONNode and create a RooArgSet representing them. | |
| static std::unique_ptr< RooDataHist > | readBinnedData (const RooFit::Detail::JSONNode &n, const std::string &namecomp, RooArgSet const &vars) |
| Read binned data from the JSONNode and create a RooDataHist object. | |
| static void | rebuildModelConfigInWorkspace (RooStats::ModelConfig *mc, RooWorkspace &ws) |
| static std::string | sanitizeName (const std::string str) |
| Cleans up names to the HS3 standard. | |
| static RooWorkspace | sanitizeWS (const RooWorkspace &ws) |
| static bool | testValidName (const std::string &str, bool forcError) |
| static std::ostream & | warning (const std::string &s) |
| Writes a warning message to the RooFit message service. | |
Static Public Attributes | |
| static constexpr bool | useListsInsteadOfDicts = true |
| Named objects are always stored in lists, as the HS3 standard requires. Kept for backwards compatibility. | |
Private Member Functions | |
| void | exportAllObjects (RooFit::Detail::JSONNode &n) |
| RooJSONFactoryWSTool::CombinedData | exportCombinedData (RooAbsData const &data) |
| void | exportData (RooAbsData const &data) |
| void | exportModelConfig (RooStats::ModelConfig const &mc, const std::vector< RooJSONFactoryWSTool::CombinedData > &combined, const std::vector< RooAbsData * > &single) |
| void | exportObject (RooAbsArg const &func, std::set< std::string > &exportedObjectNames) |
| template<class T > | |
| void | exportObjects (T const &args, std::set< std::string > &exportedObjectNames) |
| void | exportSingleModelConfig (RooStats::ModelConfig const &mc, std::string const &analysisName, std::map< std::string, std::string > const *dataComponents) |
| void | exportVariable (const RooAbsArg *v, RooFit::HS3::ParameterPoint &point, bool storeConstant) |
| void | exportVariables (const RooArgSet &allElems, RooFit::HS3::ParameterPoint &point, bool storeConstant) |
| void | importAllNodes (RooFit::Detail::JSONNode &n) |
| void | importDependants (const RooFit::Detail::JSONNode &n) |
| void | importDistribution (RooFit::HS3::Distribution const &distribution) |
| void | importVariable (RooFit::HS3::ParameterValue const &p) |
| template<class T > | |
| T * | requestImpl (const std::string &objname) |
| template<> | |
| RooRealVar * | requestImpl (const std::string &objname) |
| template<> | |
| RooAbsPdf * | requestImpl (const std::string &objname) |
| template<> | |
| RooAbsReal * | requestImpl (const std::string &objname) |
| void | warnIfFreeWithoutDomain (RooRealVar const &var) |
Private Attributes | |
| std::unique_ptr< RooFit::HS3::ToolExportState > | _export |
| std::string | _hs3VersionInput |
| std::unique_ptr< RooFit::HS3::ToolImportState > | _import |
| std::vector< std::string > | _importStack |
| std::vector< RooAbsArg const * > | _serversToDelete |
| std::vector< RooAbsArg const * > | _serversToExport |
| RooWorkspace & | _workspace |
Friends | |
| void | RooFit::HS3::setExportedObject (RooJSONFactoryWSTool &tool, RooFit::HS3::HistFactoryDist dist, std::vector< RooFit::HS3::DistributionRef > channelConstraints) |
#include <RooFitHS3/RooJSONFactoryWSTool.h>
| RooJSONFactoryWSTool::RooJSONFactoryWSTool | ( | RooWorkspace & | ws | ) |
Definition at line 1199 of file RooJSONFactoryWSTool.cxx.
|
default |
|
static |
Definition at line 1223 of file RooJSONFactoryWSTool.cxx.
|
static |
Definition at line 2740 of file RooJSONFactoryWSTool.cxx.
|
static |
Definition at line 2789 of file RooJSONFactoryWSTool.cxx.
|
static |
Create a new JSON tree with version information.
Definition at line 2363 of file RooJSONFactoryWSTool.cxx.
|
static |
Writes an error message to the RooFit message service and throws a runtime_error.
| s | The error message to be logged and thrown. |
Definition at line 2701 of file RooJSONFactoryWSTool.cxx.
|
inlinestatic |
Definition at line 154 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 2211 of file RooJSONFactoryWSTool.cxx.
|
static |
Export an array of doubles to a JSONNode.
This function exports an array of doubles, represented by the provided size and contents, to a JSONNode. The array elements are added to the JSONNode as a sequence of values.
| n | The size of the array. |
| contents | A pointer to the array containing the double values. |
| output | The JSONNode to which the array will be exported. |
Definition at line 1807 of file RooJSONFactoryWSTool.cxx.
|
static |
Export the name and binning of a RooRealVar to a JSONNode.
| obsNode | The JSONNode to which the axis information will be exported. |
| var | The RooRealVar representing the axis to be exported. |
Definition at line 1764 of file RooJSONFactoryWSTool.cxx.
| void RooJSONFactoryWSTool::exportCategory | ( | RooAbsCategory const & | cat, |
| RooFit::Detail::JSONNode & | node ) |
Export a RooAbsCategory object to a JSONNode.
This function exports a RooAbsCategory object, represented by the provided categories and indices, to a JSONNode. The category labels and corresponding indices are added to the JSONNode as key-value pairs.
| cat | The RooAbsCategory object to be exported. |
| node | The JSONNode to which the category data will be exported. |
Definition at line 1831 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 1844 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 1890 of file RooJSONFactoryWSTool.cxx.
|
static |
Export histogram data to a JSONNode.
This function exports histogram data, represented by the provided variables and contents, to a JSONNode. The histogram's axes information and bin contents are added as key-value pairs to the JSONNode.
| vars | The RooArgSet representing the variables associated with the histogram. |
| n | The number of bins in the histogram. |
| contents | A pointer to the array containing the bin contents of the histogram. |
| output | The JSONNode to which the histogram data will be exported. |
Definition at line 1785 of file RooJSONFactoryWSTool.cxx.
| bool RooJSONFactoryWSTool::exportJSON | ( | std::ostream & | os | ) |
Export the workspace to JSON format and write to the output stream.
| os | The output stream to write the JSON data to. |
Definition at line 2384 of file RooJSONFactoryWSTool.cxx.
| bool RooJSONFactoryWSTool::exportJSON | ( | std::string const & | filename | ) |
Export the workspace to JSON format and write to the specified file.
| filename | The name of the JSON file to create and write the data to. |
Definition at line 2399 of file RooJSONFactoryWSTool.cxx.
| std::string RooJSONFactoryWSTool::exportJSONtoString | ( | ) |
Export the workspace to a JSON string.
Definition at line 2351 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 2081 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 1451 of file RooJSONFactoryWSTool.cxx.
|
inlineprivate |
Definition at line 234 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 2116 of file RooJSONFactoryWSTool.cxx.
| std::string RooJSONFactoryWSTool::exportTransformed | ( | const RooAbsReal * | original, |
| const std::string & | suffix, | ||
| const std::string & | formula ) |
Definition at line 1398 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 1360 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 1391 of file RooJSONFactoryWSTool.cxx.
|
static |
Definition at line 1203 of file RooJSONFactoryWSTool.cxx.
|
static |
Definition at line 1230 of file RooJSONFactoryWSTool.cxx.
|
inlinestatic |
Definition at line 196 of file RooJSONFactoryWSTool.h.
| std::string RooJSONFactoryWSTool::getStringAttribute | ( | const std::string & | obj, |
| const std::string & | attrib ) |
Definition at line 2423 of file RooJSONFactoryWSTool.cxx.
| bool RooJSONFactoryWSTool::hasAttribute | ( | const std::string & | obj, |
| const std::string & | attrib ) |
Definition at line 2407 of file RooJSONFactoryWSTool.cxx.
|
inline |
The "hs3_version" of the document that is currently being imported, or an empty string outside of an import.
Definition at line 225 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 2441 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 2070 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 1721 of file RooJSONFactoryWSTool.cxx.
| void RooJSONFactoryWSTool::importFunction | ( | const RooFit::Detail::JSONNode & | p, |
| bool | importAllDependants ) |
Import a function from the JSONNode into the workspace.
This function imports a function from the given JSONNode into the workspace. The function's information is read from the JSONNode and added to the workspace.
| p | The JSONNode representing the function to be imported. |
| importAllDependants | A boolean flag indicating whether to import all dependants (servers) of the function. |
Definition at line 1611 of file RooJSONFactoryWSTool.cxx.
| void RooJSONFactoryWSTool::importFunction | ( | const std::string & | jsonString, |
| bool | importAllDependants ) |
Import a function from a JSON string into the workspace.
This function imports a function from the provided JSON string into the workspace. The function's information is read from the JSON string and added to the workspace.
| jsonString | The JSON string containing the function information. |
| importAllDependants | A boolean flag indicating whether to import all dependants (servers) of the function. |
Definition at line 1752 of file RooJSONFactoryWSTool.cxx.
| bool RooJSONFactoryWSTool::importJSON | ( | std::istream & | is | ) |
Imports a JSON file from the given input stream to the workspace.
| is | The input stream containing the JSON data. |
Definition at line 2579 of file RooJSONFactoryWSTool.cxx.
| bool RooJSONFactoryWSTool::importJSON | ( | std::string const & | filename | ) |
Imports a JSON file from the given filename to the workspace.
| filename | The name of the JSON file to import. |
Definition at line 2593 of file RooJSONFactoryWSTool.cxx.
| void RooJSONFactoryWSTool::importJSONElement | ( | const std::string & | name, |
| const std::string & | jsonString ) |
Definition at line 2602 of file RooJSONFactoryWSTool.cxx.
| bool RooJSONFactoryWSTool::importJSONfromString | ( | const std::string & | s | ) |
Import the workspace from a JSON string.
| s | The JSON string containing the workspace data. |
Definition at line 2340 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 2032 of file RooJSONFactoryWSTool.cxx.
| void RooJSONFactoryWSTool::importVariableElement | ( | const RooFit::Detail::JSONNode & | n | ) |
Definition at line 2649 of file RooJSONFactoryWSTool.cxx.
|
static |
Check if a string is a valid name.
A valid name should start with a letter or an underscore, followed by letters, digits, or underscores. Only characters from the ASCII character set are allowed.
| str | The string to be checked. |
Definition at line 1251 of file RooJSONFactoryWSTool.cxx.
|
static |
Definition at line 1291 of file RooJSONFactoryWSTool.cxx.
|
static |
Definition at line 1286 of file RooJSONFactoryWSTool.cxx.
|
inline |
Definition at line 210 of file RooJSONFactoryWSTool.h.
|
inline |
Definition at line 211 of file RooJSONFactoryWSTool.h.
|
static |
Read axes from the JSONNode and create a RooArgSet representing them.
This function reads axes information from the given JSONNode and creates a RooArgSet with variables representing these axes.
| topNode | The JSONNode containing the axes information to be read. |
Definition at line 1988 of file RooJSONFactoryWSTool.cxx.
|
static |
Read binned data from the JSONNode and create a RooDataHist object.
This function reads binned data from the given JSONNode and creates a RooDataHist object. The binned data is associated with the specified name and variables (RooArgSet) in the workspace.
| n | The JSONNode representing the binned data to be read. |
| name | The name to be associated with the created RooDataHist object. |
| vars | The RooArgSet representing the variables associated with the binned data. |
Definition at line 2008 of file RooJSONFactoryWSTool.cxx.
|
static |
|
inline |
Definition at line 90 of file RooJSONFactoryWSTool.h.
|
inline |
Definition at line 99 of file RooJSONFactoryWSTool.h.
|
inline |
Definition at line 133 of file RooJSONFactoryWSTool.h.
|
inline |
Definition at line 127 of file RooJSONFactoryWSTool.h.
|
inline |
Definition at line 109 of file RooJSONFactoryWSTool.h.
|
private |
|
private |
Definition at line 1297 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 1313 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 1336 of file RooJSONFactoryWSTool.cxx.
|
static |
Cleans up names to the HS3 standard.
| str | The string to be sanitized. |
Definition at line 2713 of file RooJSONFactoryWSTool.cxx.
|
static |
Definition at line 2796 of file RooJSONFactoryWSTool.cxx.
| void RooJSONFactoryWSTool::setAttribute | ( | const std::string & | obj, |
| const std::string & | attrib ) |
Definition at line 2418 of file RooJSONFactoryWSTool.cxx.
| void RooJSONFactoryWSTool::setStringAttribute | ( | const std::string & | obj, |
| const std::string & | attrib, | ||
| const std::string & | value ) |
Definition at line 2434 of file RooJSONFactoryWSTool.cxx.
Definition at line 1270 of file RooJSONFactoryWSTool.cxx.
|
private |
Definition at line 2060 of file RooJSONFactoryWSTool.cxx.
|
static |
Writes a warning message to the RooFit message service.
| str | The warning message to be logged. |
Definition at line 2690 of file RooJSONFactoryWSTool.cxx.
|
inline |
Definition at line 138 of file RooJSONFactoryWSTool.h.
|
inline |
Definition at line 148 of file RooJSONFactoryWSTool.h.
|
inline |
Definition at line 141 of file RooJSONFactoryWSTool.h.
|
friend |
|
private |
Definition at line 277 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 272 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 276 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 282 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 279 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 278 of file RooJSONFactoryWSTool.h.
|
private |
Definition at line 273 of file RooJSONFactoryWSTool.h.
|
staticconstexpr |
Named objects are always stored in lists, as the HS3 standard requires. Kept for backwards compatibility.
Definition at line 53 of file RooJSONFactoryWSTool.h.