120 std::vector<std::string> out;
123 out.push_back(
elem.val());
141 return data.components.size() == pdf->
indexCat().size();
155 std::vector<double> edges;
161 Var(
int n) : nbins(
n), min(0), max(
n) {}
180bool isNumber(
const std::string &str)
188 for (
size_t i = 0; i < str.size(); ++i) {
191 if (std::isdigit(
c)) {
229 if (!
p.has_child(
"name")) {
232 if (
auto n =
p.find(
"value"))
233 v.setVal(
n->val_double());
235 if (
auto n =
p.find(
"nbins"))
236 v.setBins(
n->val_int());
237 if (
auto n =
p.find(
"relErr"))
238 v.setError(
v.getVal() *
n->val_double());
239 if (
auto n =
p.find(
"err"))
240 v.setError(
n->val_double());
241 if (
auto n =
p.find(
"const")) {
242 v.setConstant(
n->val_bool());
244 v.setConstant(
false);
256 return &((*out)[
"parameters"]);
261 if (val.
find(
"edges")) {
263 this->edges.push_back(
child.val_double());
265 this->nbins = this->edges.size();
266 this->min = this->edges[0];
267 this->max = this->edges[this->nbins - 1];
269 if (!val.
find(
"nbins")) {
272 this->nbins = val[
"nbins"].
val_int();
274 if (!val.
find(
"min")) {
279 if (!val.
find(
"max")) {
292 if (
auto node =
p.find(
"namespaces")) {
293 for (
const auto &ns : node->
children()) {
331 if (
auto seq = node.
find(
"dict")) {
332 for (
const auto &
attr :
seq->children()) {
336 if (
auto seq = node.
find(
"tags")) {
337 for (
const auto &
attr :
seq->children()) {
346 std::stringstream expression;
347 std::string classname(
ex.tclass->GetName());
348 size_t colon = classname.find_last_of(
':');
349 expression << (
colon < classname.size() ? classname.substr(
colon + 1) : classname);
352 for (
auto k :
ex.arguments) {
353 expression << (first ?
"::" +
name +
"(" :
",");
355 if (k ==
"true" || k ==
"false") {
356 expression << (k ==
"true" ?
"1" :
"0");
357 }
else if (!
p.has_child(k)) {
359 errMsg <<
"node '" <<
name <<
"' is missing key '" << k <<
"'";
361 }
else if (
p[k].is_seq()) {
371 expression <<
p[k].val();
375 return expression.str();
401template <
typename...
Keys_t>
404 return node.
find(
"misc",
"ROOT_internal", keys...);
458 if (it.first ==
"factory_tag" || it.first ==
"PROD_TERM_TYPE")
461 (*node)[
"dict"].set_map()[it.first] << it.second;
467 if (
attr ==
"SnapShot_ExtRefClone" ||
attr ==
"RooRealConstant_Factory_Object")
470 (*node)[
"tags"].set_seq().append_child() <<
attr;
490 std::map<std::string, Var> vars;
491 for (
const auto &
p : node[
"axes"].
children()) {
495 for (
auto v : vars) {
496 std::string
name(
v.first);
501 errMsg <<
"The observable \"" <<
name <<
"\" could not be found in the workspace!";
524 std::string
const &
type =
p[
"type"].val();
525 if (
type ==
"binned") {
528 }
else if (
type ==
"unbinned") {
531 getObservables(workspace,
p, vars);
534 auto &coords =
p[
"entries"];
535 if (!coords.is_seq()) {
539 if (
p.has_child(
"weights")) {
540 auto &weights =
p[
"weights"];
541 if (coords.num_children() != weights.num_children()) {
544 for (
auto const &weight : weights.children()) {
549 for (
auto const &point : coords.children()) {
550 if (!point.is_seq()) {
552 errMsg <<
"coordinate point '" << i <<
"' is not a list!";
555 if (point.num_children() != varlist.
size()) {
559 for (
auto const &
pointj : point.children()) {
574 std::stringstream
ss;
575 ss <<
"RooJSONFactoryWSTool() failed to create dataset " <<
name << std::endl;
597 const std::vector<std::unique_ptr<RooAbsData>> &datasets)
610 mc->SetWS(workspace);
616 throw std::runtime_error(
"likelihood node not found!");
618 if (!
nllNode->has_child(
"distributions")) {
619 throw std::runtime_error(
"likelihood node has no distributions attached!");
621 if (!
nllNode->has_child(
"data")) {
622 throw std::runtime_error(
"likelihood node has no data attached!");
626 for (
auto &
nameNode : (*nllNode)[
"aux_distributions"].children()) {
632 for (
auto &
nameNode : (*nllNode)[
"data"].children()) {
634 for (
const auto &
d : datasets) {
636 observables.
add(*
d->get());
656 std::map<std::string, RooAbsPdf *>
pdfMap;
675 out.add(*workspace.
arg(
child.val()));
680 mc->SetParametersOfInterest(
readArgSet(
"parameters_of_interest"));
681 mc->SetObservables(observables);
692 for (
auto &domain :
analysisNode[
"domains"].children()) {
696 for (
auto &var : (*thisDomain)[
"axes"].children()) {
705 for (
const auto &
p : pars) {
706 if (
mc->GetParametersOfInterest()->find(*
p))
714 mc->SetGlobalObservables(globs);
715 mc->SetNuisanceParameters(
nps);
718 if (
auto found =
mcAuxNode->find(
"combined_data_name")) {
739 std::vector<int> indices;
741 for (
auto &
n :
info[
"indices"].children()) {
742 indices.push_back(
n.val_int());
746 std::map<std::string, RooAbsPdf *>
pdfMap;
773 std::vector<int> indices;
774 for (
auto &
n :
info[
"indices"].children()) {
775 indices.push_back(
n.val_int());
777 if (indices.size() != labels.size()) {
782 std::map<std::string, std::unique_ptr<RooAbsData>>
dsMap;
789 std::unique_ptr<RooAbsData> &
component = *std::find_if(
790 datasets.begin(), datasets.end(), [&](
auto &
d) { return d && d->GetName() == componentName; });
800 datasets.emplace_back(std::move(
combined));
807 std::sort(
coll.
begin(),
coll.
end(), [](
auto &
l,
auto &
r) { return strcmp(l->GetName(), r->GetName()) < 0; });
832 error(
"unable to stream collection " + std::string(
coll.GetName()) +
" to " + node.
key());
875 if (str.empty() || !(std::isalpha(str[0]) || str[0] ==
'_')) {
882 if (!(std::isalnum(
c) ||
c ==
'_')) {
895 std::stringstream
ss;
896 ss <<
"RooJSONFactoryWSTool() name '" <<
name <<
"' is not valid!" << std::endl;
923 if (
const auto &node = vars->find(
objname)) {
998 var[
"value"] <<
cv->getVal();
999 var[
"const"] <<
true;
1001 var[
"value"] <<
rrv->getVal();
1002 if (
rrv->isConstant()) {
1003 var[
"const"] <<
rrv->isConstant();
1005 if (
rrv->getBins() != 100) {
1006 var[
"nbins"] <<
rrv->getBins();
1031 const std::string &formula)
1068 for (
auto const &
item :
simPdf->indexCat()) {
1074 child[
"index_cat"] <<
simPdf->indexCat().GetName();
1076 child[
"distributions"].set_seq();
1077 for (
auto const &
item :
simPdf->indexCat()) {
1078 child[
"distributions"].append_child() <<
simPdf->getPdf(
item.first.c_str())->GetName();
1090 auto &
collectionNode = (*_rootnodeOutput)[
dynamic_cast<RooAbsPdf const *
>(&func) ?
"distributions" :
"functions"];
1099 auto it = exporters.find(cl);
1100 if (it != exporters.end()) {
1101 for (
auto &exp : it->second) {
1104 if (!exp->exportObject(
this, &func,
elem)) {
1114 if (exp->autoExportDependants()) {
1127 const auto &dict = exportKeys.find(cl);
1128 if (dict == exportKeys.end()) {
1129 std::cerr <<
"unable to export class '" << cl->
GetName() <<
"' - no export keys available!\n"
1130 <<
"there are several possible reasons for this:\n"
1131 <<
" 1. " << cl->
GetName() <<
" is a custom class that you or some package you are using added.\n"
1133 <<
" is a ROOT class that nobody ever bothered to write a serialization definition for.\n"
1134 <<
" 3. something is wrong with your setup, e.g. you might have called "
1135 "RooFit::JSONIO::clearExportKeys() and/or never successfully read a file defining these "
1136 "keys with RooFit::JSONIO::loadExportKeys(filename)\n"
1137 <<
"either way, please make sure that:\n"
1138 <<
" 3: you are reading a file with export keys - call RooFit::JSONIO::printExportKeys() to "
1139 "see what is available\n"
1140 <<
" 2 & 1: you might need to write a serialization definition yourself. check "
1141 "https://root.cern/doc/master/group__roofit__dev__docs__hs3.html to "
1142 "see how to do this!\n";
1146 elem[
"type"] << dict->second.type;
1150 for (
size_t i = 0; i <
nprox; ++i) {
1156 std::string
pname(
p->name());
1157 if (
pname[0] ==
'!')
1160 auto k = dict->second.proxies.find(
pname);
1161 if (k == dict->second.proxies.end()) {
1162 std::cerr <<
"failed to find key matching proxy '" <<
pname <<
"' for type '" << dict->second.type
1163 <<
"', encountered in '" << func.
GetName() <<
"', skipping" << std::endl;
1168 if (k->second.empty())
1178 elem[k->second] <<
r->absArg()->GetName();
1186 std::cerr <<
"unable to locate server of " << func.
GetName() << std::endl;
1224 std::stringstream
ss;
1225 ss <<
"RooJSONFactoryWSTool() function node " +
name +
" is not a map!";
1230 if (!prefix.empty())
1232 if (!
p.has_child(
"type")) {
1233 std::stringstream
ss;
1234 ss <<
"RooJSONFactoryWSTool() no type given for function '" <<
name <<
"', skipping." << std::endl;
1247 auto it = importers.find(
functype);
1249 if (it != importers.end()) {
1250 for (
auto &
imp : it->second) {
1251 ok =
imp->importArg(
this,
p);
1259 std::string expression = ::generate(
expr->second,
p,
this);
1261 std::stringstream
ss;
1262 ss <<
"RooJSONFactoryWSTool() failed to create " <<
expr->second.tclass->GetName() <<
" '" <<
name
1263 <<
"', skipping. expression was\n"
1264 << expression << std::endl;
1268 std::stringstream
ss;
1269 ss <<
"RooJSONFactoryWSTool() no handling for type '" <<
functype <<
"' implemented, skipping."
1271 <<
"there are several possible reasons for this:\n"
1272 <<
" 1. " <<
functype <<
" is a custom type that is not available in RooFit.\n"
1274 <<
" is a ROOT class that nobody ever bothered to write a deserialization definition for.\n"
1275 <<
" 3. something is wrong with your setup, e.g. you might have called "
1276 "RooFit::JSONIO::clearFactoryExpressions() and/or never successfully read a file defining "
1277 "these expressions with RooFit::JSONIO::loadFactoryExpressions(filename)\n"
1278 <<
"either way, please make sure that:\n"
1279 <<
" 3: you are reading a file with factory expressions - call "
1280 "RooFit::JSONIO::printFactoryExpressions() "
1281 "to see what is available\n"
1282 <<
" 2 & 1: you might need to write a deserialization definition yourself. check "
1283 "https://root.cern/doc/master/group__roofit__dev__docs__hs3.html to see "
1292 std::stringstream err;
1293 err <<
"something went wrong importing function '" <<
name <<
"'.";
1331 std::string
name = var->GetName();
1334 if (var->getBinning().isUniform()) {
1335 obsNode[
"min"] << var->getMin();
1336 obsNode[
"max"] << var->getMax();
1337 obsNode[
"nbins"] << var->getBins();
1339 auto &edges =
obsNode[
"edges"];
1341 double val = var->getBinning().binLow(0);
1342 edges.append_child() << val;
1343 for (
int i = 0; i < var->getBinning().numBins(); ++i) {
1344 val = var->getBinning().binHigh(i);
1345 edges.append_child() << val;
1367 for (std::size_t i = 0; i <
n; ++i) {
1368 double w = contents[i];
1390 auto &labels = node[
"labels"].
set_seq();
1391 auto &indices = node[
"indices"].
set_seq();
1393 for (
auto const &
item : cat) {
1395 if (std::isalpha(
item.first[0])) {
1397 if (label !=
item.first) {
1398 oocoutW(
nullptr, IO) <<
"RooFitHS3: changed '" <<
item.first <<
"' to '" << label
1399 <<
"' to become a valid name";
1403 "' to make a valid name!");
1406 labels.append_child() << label;
1407 indices.append_child() <<
item.second;
1429 " has several category observables!");
1469 if (std::isalpha(
catName[0])) {
1473 <<
"' to become a valid name";
1477 "' to make a valid name!");
1504 " has several category observables!");
1517 output[
"type"] <<
"binned";
1530 if (
auto weightVar = variables.find(
"weightVar")) {
1531 variables.remove(*weightVar);
1540 if (
data.isWeighted() && variables.size() == 1) {
1542 auto &
x =
static_cast<RooRealVar const &
>(*variables[0]);
1543 std::vector<double> contents;
1545 for (; i <
data.numEntries(); ++i) {
1547 if (
x.getBin() != i)
1549 contents.push_back(
data.weight());
1551 if (i ==
x.getBins())
1554 output[
"type"] <<
"binned";
1559 output[
"type"] <<
"unbinned";
1564 auto &coords =
output[
"entries"].set_seq();
1567 for (
int i = 0; i <
data.numEntries(); ++i) {
1569 coords.append_child().fill_seq(variables, [](
auto x) {
return static_cast<RooRealVar *
>(
x)->getVal(); });
1570 if (
data.isWeighted()) {
1572 if (
data.weight() != 1.)
1595 if (node.has_child(
"edges")) {
1596 std::vector<double> edges;
1597 for (
auto const &
bound : node[
"edges"].children()) {
1598 edges.push_back(
bound.val_double());
1600 auto obs = std::make_unique<RooRealVar>(node[
"name"].val().c_str(), node[
"name"].val().c_str(), edges[0],
1601 edges[edges.size() - 1]);
1602 RooBinning bins(obs->getMin(), obs->getMax());
1603 for (
auto b : edges) {
1606 obs->setBinning(bins);
1609 auto obs = std::make_unique<RooRealVar>(node[
"name"].val().c_str(), node[
"name"].val().c_str(),
1610 node[
"min"].val_double(), node[
"max"].val_double());
1611 obs->setBins(node[
"nbins"].val_int());
1630std::unique_ptr<RooDataHist>
1633 if (!
n.has_child(
"contents"))
1636 JSONNode const &contents =
n[
"contents"];
1642 if (
n.has_child(
"errors")) {
1650 std::stringstream
errMsg;
1651 errMsg <<
"inconsistent bin numbers: contents=" << contents.
num_children() <<
", bins=" << bins.size();
1654 auto dh = std::make_unique<RooDataHist>(
name,
name, vars);
1663 for (
auto const &err :
errors->children()) {
1692 std::stringstream
ss;
1693 ss <<
"RooJSONFactoryWSTool() node '" <<
name <<
"' is not a map, skipping.";
1694 oocoutE(
nullptr, InputArguments) <<
ss.str() << std::endl;
1700 if (
attrNode->has_child(
"is_const_var") && (*
attrNode)[
"is_const_var"].val_int() == 1) {
1722 for (
const auto &
p :
varsNode->children()) {
1726 if (
auto seq =
n.find(
"functions")) {
1727 for (
const auto &
p :
seq->children()) {
1731 if (
auto seq =
n.find(
"distributions")) {
1732 for (
const auto &
p :
seq->children()) {
1742 if (pdf ==
nullptr) {
1743 warning(
"RooFitHS3 only supports ModelConfigs with RooSimultaneous! Skipping ModelConfig.");
1747 for (std::size_t i = 0; i < std::max(
combDataSets.size(), std::size_t(1)); ++i) {
1773 nllNode[
"distributions"].set_seq();
1777 for (
auto const &
item : pdf->indexCat()) {
1779 nllNode[
"distributions"].append_child() << pdf->getPdf(
item.first)->GetName();
1784 if (
mc.GetExternalConstraints()) {
1787 for (
const auto &
constr : *
mc.GetExternalConstraints()) {
1796 std::vector<std::string> names;
1797 names.reserve(args->size());
1799 names.push_back(arg->GetName());
1800 std::sort(names.begin(), names.end());
1804 writeList(
"parameters_of_interest",
mc.GetParametersOfInterest());
1808 if (
mc.GetNuisanceParameters()) {
1818 if (
mc.GetGlobalObservables()) {
1828 if (
mc.GetParametersOfInterest()) {
1855 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
1860 std::vector<RooAbsPdf *>
allpdfs;
1862 if (!arg->hasClients()) {
1863 if (
auto *pdf =
dynamic_cast<RooAbsPdf *
>(arg)) {
1873 std::vector<RooAbsReal *>
allfuncs;
1875 if (!arg->hasClients()) {
1876 if (
auto *func =
dynamic_cast<RooAbsReal *
>(arg)) {
1890 std::vector<RooAbsData *>
alldata;
1896 std::vector<RooJSONFactoryWSTool::CombinedData>
combData;
1899 if (!
data.components.empty())
1900 combData.push_back(
data);
1922 for (
const auto &pdf :
allpdfs) {
1923 if (pdf->dependsOn(*arg)) {
1935 if (
name !=
"default_values") {
1953 std::stringstream
ss(s);
1965 std::stringstream
ss(s);
1976 std::stringstream
ss;
1988 std::stringstream
ss;
2000 std::unique_ptr<JSONTree> tree = JSONTree::create();
2003 auto &metadata =
n[
"metadata"].set_map();
2042 std::ofstream out(
filename.c_str());
2043 if (!out.is_open()) {
2044 std::stringstream
ss;
2045 ss <<
"RooJSONFactoryWSTool() invalid output file '" <<
filename <<
"'." << std::endl;
2075 std::ofstream out(
filename.c_str());
2076 if (!out.is_open()) {
2077 std::stringstream
ss;
2078 ss <<
"RooJSONFactoryWSTool() invalid output file '" <<
filename <<
"'." << std::endl;
2091 for (
auto &
a :
seq->children()) {
2102 auto &
tags = (*node)[
"tags"];
2112 if (
auto dict =
attrNode->find(
"dict")) {
2113 if (
auto *
a = dict->find(
attrib)) {
2121 const std::string &
value)
2124 auto &dict = (*node)[
"dict"];
2142 auto metadata =
n.find(
"metadata");
2143 if (!metadata || !metadata->find(
"hs3_version")) {
2144 std::stringstream
ss;
2145 ss <<
"The HS3 version is missing in the JSON!\n"
2146 <<
"Please include the HS3 version in the metadata field, e.g.:\n"
2147 <<
" \"metadata\" :\n"
2154 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
2155 if (
auto domains =
n.find(
"domains")) {
2172 for (
const auto &var :
snsh[
"parameters"].children()) {
2198 std::vector<std::unique_ptr<RooAbsData>> datasets;
2200 for (
const auto &
p :
dataNode->children()) {
2215 for (
auto const &
d : datasets) {
2233 std::unique_ptr<JSONTree> tree = JSONTree::create(
is);
2235 if (this->
workspace()->getSnapshot(
"default_values")) {
2252 std::stringstream
ss;
2253 ss <<
"RooJSONFactoryWSTool() invalid input file '" <<
filename <<
"'." << std::endl;
2269 std::unique_ptr<JSONTree> tree = JSONTree::create(
is);
2285 std::stringstream
ss;
2286 ss <<
"RooJSONFactoryWSTool() invalid input file '" <<
filename <<
"'." << std::endl;
2299 bool isVariable =
true;
2300 if (
n.find(
"type")) {
2315 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
2316 if (
auto domains =
n.find(
"domains"))
2330 const auto &var =
snsh[
"parameters"].child(0);
2369 throw std::runtime_error(s);
std::unique_ptr< RooFit::Detail::JSONTree > varJSONString(const JSONNode &treeRoot)
double toDouble(const char *s)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t np
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t child
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t attr
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
const_iterator begin() const
const_iterator end() const
Common abstract base class for objects that represent a value and a "shape" in RooFit.
TClass * IsA() const override
void setStringAttribute(const Text_t *key, const Text_t *value)
Associate string 'value' to this object under key 'key'.
RooFit::OwningPtr< RooArgSet > getParameters(const RooAbsData *data, bool stripDisconnected=true) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
const std::set< std::string > & attributes() const
const RefCountList_t & servers() const
List of all servers of this object.
const std::map< std::string, std::string > & stringAttributes() const
Int_t numProxies() const
Return the number of registered proxies.
void setAttribute(const Text_t *name, bool value=true)
Set (default) or clear a named boolean attribute of this object.
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
A space to attach TBranches.
Abstract container object that can hold multiple RooAbsArg objects.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
Storage_t::size_type size() const
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
Abstract base class for binned and unbinned datasets.
Abstract interface for all probability density functions.
std::unique_ptr< RooArgSet > getAllConstraints(const RooArgSet &observables, RooArgSet &constrainedParams, bool stripDisconnected=true) const
This helper function finds and collects all constraints terms of all component p.d....
Abstract interface for proxy classes.
Abstract base class for objects that represent a real value and implements functionality common to al...
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooAbsArg * at(Int_t idx) const
Return object at given index, or nullptr if index is out of range.
Abstract interface for RooAbsArg proxy classes.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Implements a RooAbsBinning in terms of an array of boundary values, posing no constraints on the choi...
bool addBoundary(double boundary)
Add bin boundary at given value.
Object to represent discrete states.
Represents a constant real-valued object.
Container class to hold N-dimensional binned data.
virtual double val_double() const
virtual JSONNode & set_map()=0
virtual JSONNode & append_child()=0
virtual children_view children()
virtual size_t num_children() const =0
virtual JSONNode & set_seq()=0
virtual bool is_seq() const =0
virtual bool is_map() const =0
virtual std::string key() const =0
JSONNode const * find(std::string const &key) const
virtual int val_int() const
static std::unique_ptr< JSONTree > create()
static RooMsgService & instance()
Return reference to singleton instance.
Variable that can be changed from the outside.
void setVal(double value) override
Set value of variable to 'value'.
Facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
const RooAbsCategoryLValue & indexCat() const
< A class that holds configuration information for a model using a workspace as a store
Persistable container for RooFit projects.
TObject * obj(RooStringView name) const
Return any type of object (RooAbsArg, RooAbsData or generic object) with given name)
RooAbsPdf * pdf(RooStringView name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
bool saveSnapshot(RooStringView, const char *paramNames)
Save snapshot of values and attributes (including "Constant") of given parameters.
RooArgSet allPdfs() const
Return set with all probability density function objects.
std::list< RooAbsData * > allData() const
Return list of all dataset in the workspace.
RooLinkedList const & getSnapshots() const
std::list< TObject * > allGenericObjects() const
Return list of all generic objects in the workspace.
RooAbsReal * function(RooStringView name) const
Retrieve function (RooAbsReal) with given name. Note that all RooAbsPdfs are also RooAbsReals....
RooAbsArg * arg(RooStringView name) const
Return RooAbsArg with given name. A null pointer is returned if none is found.
const RooArgSet & components() const
RooArgSet allFunctions() const
Return set with all function objects.
RooFactoryWSTool & factory()
Return instance to factory tool.
RooRealVar * var(RooStringView name) const
Retrieve real-valued variable (RooRealVar) with given name. A null pointer is returned if not found.
bool loadSnapshot(const char *name)
Load the values and attributes of the parameters in the snapshot saved with the given name.
bool import(const RooAbsArg &arg, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={})
Import a RooAbsArg object, e.g.
TClass instances represent classes, structs and namespaces in the ROOT type system.
const char * GetName() const override
Returns name of object.
Mother of all ROOT objects.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
RooCmdArg RecycleConflictNodes(bool flag=true)
RooConstVar & RooConst(double val)
RooCmdArg Silence(bool flag=true)
RooCmdArg Index(RooCategory &icat)
RooCmdArg WeightVar(const char *name="weight", bool reinterpretAsWeight=false)
RooCmdArg Import(const char *state, TH1 &histo)
std::string makeValidVarName(std::string const &in)
ImportExpressionMap & importExpressions()
ExportKeysMap & exportKeys()