10bool startsWith(std::string_view str, std::string_view prefix)
12 return str.size() >= prefix.size() && 0 == str.compare(0, prefix.size(), prefix);
15bool endsWith(std::string_view str, std::string_view suffix)
17 return str.size() >= suffix.size() && 0 == str.compare(str.size() - suffix.size(), suffix.size(), suffix);
20std::string
removeSuffix(std::string_view str, std::string_view suffix)
24 out = out.substr(0, out.length() - suffix.length());
30 std::string varName = treeRoot.
find(
"name")->
val();
34 bool isConstant =
false;
37 if (
auto n = treeRoot.
find(
"value")) {
38 val =
n->val_double();
42 auto maxNode = treeRoot.
find(
"max");
43 auto minNode = treeRoot.
find(
"min");
44 if (maxNode && minNode) {
45 maxVal = maxNode->val_double();
46 minVal = minNode->val_double();
50 val = (maxVal + minVal) / 2;
53 if (!isConstant && !isRange) {
54 throw std::invalid_argument(
"Invalid Syntax: Please provide either 'value' or 'min' and 'max' or both");
58 JSONNode &
n = jsonDict->rootnode().set_map();
59 JSONNode &_domains =
n[
"domains"].set_seq().append_child().set_map();
60 JSONNode &_parameterPoints =
n[
"parameter_points"].set_seq().append_child().set_map();
62 _domains[
"name"] <<
"default_domain";
63 _domains[
"type"] <<
"product_domain";
65 _axes[
"name"] << varName;
67 _parameterPoints[
"name"] <<
"default_values";
69 _parameters[
"name"] << varName;
70 _parameters[
"value"] << val;
73 _axes[
"max"] << maxVal;
74 _axes[
"min"] << minVal;
77 if (isConstant && !isRange) {
78 _parameters[
"const"] <<
true;
82 _var[
"tags"] <<
"Constant";
93 node[
"nbins"] << binning.
numBins();
97 auto &edges = node[
"edges"].
set_seq();
99 for (
int i = 0; i < binning.
numBins(); ++i) {
100 edges.append_child() << binning.
binHigh(i);
std::unique_ptr< RooFit::Detail::JSONTree > varJSONString(const JSONNode &treeRoot)
bool startsWith(std::string_view str, std::string_view prefix)
bool endsWith(std::string_view str, std::string_view suffix)
std::string removeSuffix(std::string_view str, std::string_view suffix)
void writeAxisBinning(JSONNode &node, const RooAbsBinning &binning)
Abstract base class for RooRealVar binning definitions.
Int_t numBins() const
Return number of bins.
virtual double binLow(Int_t bin) const =0
virtual bool isUniform() const
virtual double highBound() const =0
virtual double lowBound() const =0
virtual double binHigh(Int_t bin) const =0
virtual std::string val() const =0
virtual JSONNode & set_map()=0
virtual JSONNode & append_child()=0
virtual JSONNode & set_seq()=0
JSONNode const * find(std::string const &key) const
static std::unique_ptr< JSONTree > create()