124 std::vector<std::string> out;
127 out.push_back(
elem.val());
159 std::vector<double> edges;
165 Var(
int n) : nbins(
n), min(0), max(
n) {}
184bool isNumber(
const std::string &str)
187 for (
char const &
c : str) {
188 if (std::isdigit(
c) == 0 &&
c !=
'.' && !(first && (
c ==
'-' ||
c ==
'+')))
207 if (str.empty() || !(std::isalpha(str[0]) || str[0] ==
'_')) {
214 if (!(std::isalnum(
c) ||
c ==
'_')) {
239 if (!
p.has_child(
"name")) {
242 if (
auto n =
p.find(
"value"))
243 v.setVal(
n->val_double());
245 if (
auto n =
p.find(
"nbins"))
246 v.setBins(
n->val_int());
247 if (
auto n =
p.find(
"relErr"))
248 v.setError(
v.getVal() *
n->val_double());
249 if (
auto n =
p.find(
"err"))
250 v.setError(
n->val_double());
251 if (
auto n =
p.find(
"const")) {
252 v.setConstant(
n->val_bool());
254 v.setConstant(
false);
266 return &((*out)[
"parameters"]);
271 if (val.
find(
"edges")) {
273 this->edges.push_back(
child.val_double());
275 this->nbins = this->edges.size();
276 this->min = this->edges[0];
277 this->max = this->edges[this->nbins - 1];
279 if (!val.
find(
"nbins")) {
282 this->nbins = val[
"nbins"].
val_int();
284 if (!val.
find(
"min")) {
289 if (!val.
find(
"max")) {
302 if (
auto node =
p.find(
"namespaces")) {
303 for (
const auto &ns : node->
children()) {
341 if (
auto seq = node.
find(
"dict")) {
342 for (
const auto &
attr :
seq->children()) {
346 if (
auto seq = node.
find(
"tags")) {
347 for (
const auto &
attr :
seq->children()) {
356 std::stringstream expression;
357 std::string classname(
ex.tclass->GetName());
358 size_t colon = classname.find_last_of(
':');
359 expression << (
colon < classname.size() ? classname.substr(
colon + 1) : classname);
362 for (
auto k :
ex.arguments) {
363 expression << (first ?
"::" +
name +
"(" :
",");
365 if (k ==
"true" || k ==
"false") {
366 expression << (k ==
"true" ?
"1" :
"0");
367 }
else if (!
p.has_child(k)) {
369 errMsg <<
"node '" <<
name <<
"' is missing key '" << k <<
"'";
371 }
else if (
p[k].is_seq()) {
381 expression <<
p[k].val();
385 return expression.str();
411template <
typename...
Keys_t>
414 return node.
find(
"misc",
"ROOT_internal", keys...);
468 if (it.first ==
"factory_tag" || it.first ==
"PROD_TERM_TYPE")
471 (*node)[
"dict"].set_map()[it.first] << it.second;
477 if (
attr ==
"SnapShot_ExtRefClone" ||
attr ==
"RooRealConstant_Factory_Object")
480 (*node)[
"tags"].set_seq().append_child() <<
attr;
500 std::map<std::string, Var> vars;
501 for (
const auto &
p : node[
"axes"].
children()) {
505 for (
auto v : vars) {
506 std::string
name(
v.first);
511 errMsg <<
"The observable \"" <<
name <<
"\" could not be found in the workspace!";
533 std::stringstream
ss;
534 ss <<
"RooJSONFactoryWSTool() data name '" <<
name <<
"' is not valid!" << std::endl;
538 std::string
const &
type =
p[
"type"].val();
539 if (
type ==
"binned") {
542 }
else if (
type ==
"unbinned") {
545 getObservables(workspace,
p, vars);
548 auto &coords =
p[
"entries"];
549 if (!coords.is_seq()) {
553 if (
p.has_child(
"weights")) {
554 auto &weights =
p[
"weights"];
555 if (coords.num_children() != weights.num_children()) {
558 for (
auto const &weight : weights.children()) {
563 for (
auto const &point : coords.children()) {
564 if (!point.is_seq()) {
566 errMsg <<
"coordinate point '" << i <<
"' is not a list!";
569 if (point.num_children() != varlist.
size()) {
573 for (
auto const &
pointj : point.children()) {
588 std::stringstream
ss;
589 ss <<
"RooJSONFactoryWSTool() failed to create dataset " <<
name << std::endl;
611 const std::vector<std::unique_ptr<RooAbsData>> &datasets)
624 mc->SetWS(workspace);
630 throw std::runtime_error(
"likelihood node not found!");
632 if (!
nllNode->has_child(
"distributions")) {
633 throw std::runtime_error(
"likelihood node has no distributions attached!");
635 if (!
nllNode->has_child(
"data")) {
636 throw std::runtime_error(
"likelihood node has no data attached!");
640 for (
auto &
nameNode : (*nllNode)[
"aux_distributions"].children()) {
646 for (
auto &
nameNode : (*nllNode)[
"data"].children()) {
648 for (
const auto &
d : datasets) {
650 observables.
add(*
d->get());
670 std::map<std::string, RooAbsPdf *>
pdfMap;
689 out.add(*workspace.
arg(
child.val()));
694 mc->SetParametersOfInterest(
readArgSet(
"parameters_of_interest"));
695 mc->SetObservables(observables);
706 for (
auto &domain :
analysisNode[
"domains"].children()) {
710 for (
auto &var : (*thisDomain)[
"axes"].children()) {
719 for (
const auto &
p : pars) {
720 if (
mc->GetParametersOfInterest()->find(*
p))
728 mc->SetGlobalObservables(globs);
729 mc->SetNuisanceParameters(
nps);
732 if (
auto found =
mcAuxNode->find(
"combined_data_name")) {
753 std::vector<int> indices;
755 for (
auto &
n :
info[
"indices"].children()) {
756 indices.push_back(
n.val_int());
760 std::map<std::string, RooAbsPdf *>
pdfMap;
787 std::vector<int> indices;
788 for (
auto &
n :
info[
"indices"].children()) {
789 indices.push_back(
n.val_int());
791 if (indices.size() != labels.size()) {
796 std::map<std::string, std::unique_ptr<RooAbsData>>
dsMap;
803 std::unique_ptr<RooAbsData> &
component = *std::find_if(
804 datasets.begin(), datasets.end(), [&](
auto &
d) { return d && d->GetName() == componentName; });
814 datasets.emplace_back(std::move(
combined));
821 std::sort(
coll.
begin(),
coll.
end(), [](
auto &
l,
auto &
r) { return strcmp(l->GetName(), r->GetName()) < 0; });
846 error(
"unable to stream collection " + std::string(
coll.GetName()) +
" to " + node.
key());
893 if (
auto node = vars->find(
objname)) {
968 var[
"value"] <<
cv->getVal();
969 var[
"const"] <<
true;
971 var[
"value"] <<
rrv->getVal();
972 if (
rrv->isConstant()) {
973 var[
"const"] <<
rrv->isConstant();
975 if (
rrv->getBins() != 100) {
976 var[
"nbins"] <<
rrv->getBins();
1001 const std::string &formula)
1038 for (
auto const &item :
simPdf->indexCat()) {
1044 child[
"index_cat"] <<
simPdf->indexCat().GetName();
1046 child[
"distributions"].set_seq();
1047 for (
auto const &item :
simPdf->indexCat()) {
1048 child[
"distributions"].append_child() <<
simPdf->getPdf(item.first.c_str())->GetName();
1060 auto &
collectionNode = (*_rootnodeOutput)[
dynamic_cast<RooAbsPdf const *
>(&func) ?
"distributions" :
"functions"];
1069 auto it = exporters.find(cl);
1070 if (it != exporters.end()) {
1071 for (
auto &exp : it->second) {
1073 if (!exp->exportObject(
this, &func,
elem)) {
1083 if (exp->autoExportDependants()) {
1093 const auto &dict = exportKeys.find(cl);
1094 if (dict == exportKeys.end()) {
1095 std::cerr <<
"unable to export class '" << cl->
GetName() <<
"' - no export keys available!\n"
1096 <<
"there are several possible reasons for this:\n"
1097 <<
" 1. " << cl->
GetName() <<
" is a custom class that you or some package you are using added.\n"
1099 <<
" is a ROOT class that nobody ever bothered to write a serialization definition for.\n"
1100 <<
" 3. something is wrong with your setup, e.g. you might have called "
1101 "RooFit::JSONIO::clearExportKeys() and/or never successfully read a file defining these "
1102 "keys with RooFit::JSONIO::loadExportKeys(filename)\n"
1103 <<
"either way, please make sure that:\n"
1104 <<
" 3: you are reading a file with export keys - call RooFit::JSONIO::printExportKeys() to "
1105 "see what is available\n"
1106 <<
" 2 & 1: you might need to write a serialization definition yourself. check "
1107 "https://root.cern/doc/master/group__roofit__dev__docs__hs3.html to "
1108 "see how to do this!\n";
1112 elem[
"type"] << dict->second.type;
1116 for (
size_t i = 0; i <
nprox; ++i) {
1122 std::string
pname(
p->name());
1123 if (
pname[0] ==
'!')
1126 auto k = dict->second.proxies.find(
pname);
1127 if (k == dict->second.proxies.end()) {
1128 std::cerr <<
"failed to find key matching proxy '" <<
pname <<
"' for type '" << dict->second.type
1129 <<
"', encountered in '" << func.
GetName() <<
"', skipping" << std::endl;
1134 if (k->second.empty())
1144 elem[k->second] <<
r->absArg()->GetName();
1152 std::cerr <<
"unable to locate server of " << func.
GetName() << std::endl;
1183 std::stringstream
ss;
1184 ss <<
"RooJSONFactoryWSTool() function name '" <<
name <<
"' is not valid!" << std::endl;
1194 std::stringstream
ss;
1195 ss <<
"RooJSONFactoryWSTool() function node " +
name +
" is not a map!";
1200 if (!prefix.empty())
1202 if (!
p.has_child(
"type")) {
1203 std::stringstream
ss;
1204 ss <<
"RooJSONFactoryWSTool() no type given for function '" <<
name <<
"', skipping." << std::endl;
1217 auto it = importers.find(
functype);
1219 if (it != importers.end()) {
1220 for (
auto &
imp : it->second) {
1221 ok =
imp->importArg(
this,
p);
1229 std::string expression = ::generate(
expr->second,
p,
this);
1231 std::stringstream
ss;
1232 ss <<
"RooJSONFactoryWSTool() failed to create " <<
expr->second.tclass->GetName() <<
" '" <<
name
1233 <<
"', skipping. expression was\n"
1234 << expression << std::endl;
1238 std::stringstream
ss;
1239 ss <<
"RooJSONFactoryWSTool() no handling for type '" <<
functype <<
"' implemented, skipping."
1241 <<
"there are several possible reasons for this:\n"
1242 <<
" 1. " <<
functype <<
" is a custom type that is not available in RooFit.\n"
1244 <<
" is a ROOT class that nobody ever bothered to write a deserialization definition for.\n"
1245 <<
" 3. something is wrong with your setup, e.g. you might have called "
1246 "RooFit::JSONIO::clearFactoryExpressions() and/or never successfully read a file defining "
1247 "these expressions with RooFit::JSONIO::loadFactoryExpressions(filename)\n"
1248 <<
"either way, please make sure that:\n"
1249 <<
" 3: you are reading a file with factory expressions - call "
1250 "RooFit::JSONIO::printFactoryExpressions() "
1251 "to see what is available\n"
1252 <<
" 2 & 1: you might need to write a deserialization definition yourself. check "
1253 "https://root.cern/doc/master/group__roofit__dev__docs__hs3.html to see "
1262 std::stringstream err;
1263 err <<
"something went wrong importing function '" <<
name <<
"'.";
1301 obsNode[
"name"] << var->GetName();
1302 if (var->getBinning().isUniform()) {
1303 obsNode[
"min"] << var->getMin();
1304 obsNode[
"max"] << var->getMax();
1305 obsNode[
"nbins"] << var->getBins();
1307 auto &edges =
obsNode[
"edges"];
1309 double val = var->getBinning().binLow(0);
1310 edges.append_child() << val;
1311 for (
int i = 0; i < var->getBinning().numBins(); ++i) {
1312 val = var->getBinning().binHigh(i);
1313 edges.append_child() << val;
1335 for (std::size_t i = 0; i <
n; ++i) {
1336 double w = contents[i];
1358 auto &labels = node[
"labels"].
set_seq();
1359 auto &indices = node[
"indices"].
set_seq();
1361 for (
auto const &item : cat) {
1363 if (std::isalpha(item.first[0])) {
1365 if (
label != item.first) {
1366 oocoutW(
nullptr, IO) <<
"RooFitHS3: changed '" << item.first <<
"' to '" <<
label
1367 <<
"' to become a valid name";
1371 "' to make a valid name!");
1374 labels.append_child() <<
label;
1375 indices.append_child() << item.second;
1397 " has several category observables!");
1437 if (std::isalpha(
catName[0])) {
1441 <<
"' to become a valid name";
1445 "' to make a valid name!");
1472 " has several category observables!");
1485 output[
"type"] <<
"binned";
1498 if (
auto weightVar = variables.find(
"weightVar")) {
1499 variables.remove(*weightVar);
1508 if (
data.isWeighted() && variables.size() == 1) {
1510 auto &
x =
static_cast<RooRealVar const &
>(*variables[0]);
1511 std::vector<double> contents;
1513 for (; i <
data.numEntries(); ++i) {
1515 if (
x.getBin() != i)
1517 contents.push_back(
data.weight());
1519 if (i ==
x.getBins())
1522 output[
"type"] <<
"binned";
1527 output[
"type"] <<
"unbinned";
1532 auto &coords =
output[
"entries"].set_seq();
1535 for (
int i = 0; i <
data.numEntries(); ++i) {
1537 coords.append_child().fill_seq(variables, [](
auto x) {
return static_cast<RooRealVar *
>(
x)->getVal(); });
1538 if (
data.isWeighted()) {
1540 if (
data.weight() != 1.)
1563 if (node.has_child(
"edges")) {
1564 std::vector<double> edges;
1565 for (
auto const &
bound : node[
"edges"].children()) {
1566 edges.push_back(
bound.val_double());
1568 auto obs = std::make_unique<RooRealVar>(node[
"name"].val().c_str(), node[
"name"].val().c_str(), edges[0],
1569 edges[edges.size() - 1]);
1570 RooBinning bins(obs->getMin(), obs->getMax());
1571 for (
auto b : edges) {
1574 obs->setBinning(bins);
1577 auto obs = std::make_unique<RooRealVar>(node[
"name"].val().c_str(), node[
"name"].val().c_str(),
1578 node[
"min"].val_double(), node[
"max"].val_double());
1579 obs->setBins(node[
"nbins"].val_int());
1598std::unique_ptr<RooDataHist>
1601 if (!
n.has_child(
"contents"))
1604 JSONNode const &contents =
n[
"contents"];
1610 if (
n.has_child(
"errors")) {
1618 std::stringstream
errMsg;
1619 errMsg <<
"inconsistent bin numbers: contents=" << contents.
num_children() <<
", bins=" << bins.size();
1622 auto dh = std::make_unique<RooDataHist>(
name,
name, vars);
1631 for (
auto const &err :
errors->children()) {
1657 std::stringstream
ss;
1658 ss <<
"RooJSONFactoryWSTool() variable name '" <<
name <<
"' is not valid!" << std::endl;
1665 std::stringstream
ss;
1666 ss <<
"RooJSONFactoryWSTool() node '" <<
name <<
"' is not a map, skipping.";
1667 oocoutE(
nullptr, InputArguments) <<
ss.str() << std::endl;
1673 if (
attrNode->has_child(
"is_const_var") && (*
attrNode)[
"is_const_var"].val_int() == 1) {
1695 for (
const auto &
p :
varsNode->children()) {
1699 if (
auto seq =
n.find(
"functions")) {
1700 for (
const auto &
p :
seq->children()) {
1704 if (
auto seq =
n.find(
"distributions")) {
1705 for (
const auto &
p :
seq->children()) {
1715 if (pdf ==
nullptr) {
1716 warning(
"RooFitHS3 only supports ModelConfigs with RooSimultaneous! Skipping ModelConfig.");
1720 for (std::size_t i = 0; i < std::max(
combDataSets.size(), std::size_t(1)); ++i) {
1746 nllNode[
"distributions"].set_seq();
1750 for (
auto const &item : pdf->indexCat()) {
1752 nllNode[
"distributions"].append_child() << pdf->getPdf(item.first)->GetName();
1757 if (
mc.GetExternalConstraints()) {
1760 for (
const auto &
constr : *
mc.GetExternalConstraints()) {
1769 std::vector<std::string> names;
1770 names.reserve(args->size());
1772 names.push_back(arg->GetName());
1773 std::sort(names.begin(), names.end());
1777 writeList(
"parameters_of_interest",
mc.GetParametersOfInterest());
1781 if (
mc.GetNuisanceParameters()) {
1791 if (
mc.GetParametersOfInterest()) {
1818 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
1823 std::vector<RooAbsPdf *>
allpdfs;
1825 if (!arg->hasClients()) {
1826 if (
auto *pdf =
dynamic_cast<RooAbsPdf *
>(arg)) {
1841 std::vector<RooAbsData *>
alldata;
1847 std::vector<RooJSONFactoryWSTool::CombinedData>
combData;
1850 if (!
data.components.empty())
1851 combData.push_back(
data);
1873 for (
const auto &pdf :
allpdfs) {
1874 if (pdf->dependsOn(*arg)) {
1879 std::stringstream
ss;
1880 ss <<
"RooJSONFactoryWSTool() variable '" << arg->GetName() <<
"' has an invalid name!" << std::endl;
1889 if (
name !=
"default_values") {
1907 std::stringstream
ss(s);
1919 std::stringstream
ss(s);
1930 std::stringstream
ss;
1942 std::stringstream
ss;
1954 std::unique_ptr<JSONTree> tree = JSONTree::create();
1957 auto &metadata =
n[
"metadata"].set_map();
1996 std::ofstream out(
filename.c_str());
1997 if (!out.is_open()) {
1998 std::stringstream
ss;
1999 ss <<
"RooJSONFactoryWSTool() invalid output file '" <<
filename <<
"'." << std::endl;
2029 std::ofstream out(
filename.c_str());
2030 if (!out.is_open()) {
2031 std::stringstream
ss;
2032 ss <<
"RooJSONFactoryWSTool() invalid output file '" <<
filename <<
"'." << std::endl;
2045 for (
auto &
a :
seq->children()) {
2056 auto &
tags = (*node)[
"tags"];
2066 if (
auto dict =
attrNode->find(
"dict")) {
2067 if (
auto *
a = dict->find(
attrib)) {
2075 const std::string &
value)
2078 auto &dict = (*node)[
"dict"];
2096 auto metadata =
n.find(
"metadata");
2097 if (!metadata || !metadata->find(
"hs3_version")) {
2098 std::stringstream
ss;
2099 ss <<
"The HS3 version is missing in the JSON!\n"
2100 <<
"Please include the HS3 version in the metadata field, e.g.:\n"
2101 <<
" \"metadata\" :\n"
2108 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
2109 if (
auto domains =
n.find(
"domains")) {
2124 std::stringstream
ss;
2125 ss <<
"RooJSONFactoryWSTool() node name '" <<
name <<
"' is not valid!" << std::endl;
2130 for (
const auto &var :
snsh[
"parameters"].children()) {
2156 std::vector<std::unique_ptr<RooAbsData>> datasets;
2158 for (
const auto &
p :
dataNode->children()) {
2173 for (
auto const &
d : datasets) {
2191 std::unique_ptr<JSONTree> tree = JSONTree::create(
is);
2193 if (this->
workspace()->getSnapshot(
"default_values")) {
2210 std::stringstream
ss;
2211 ss <<
"RooJSONFactoryWSTool() invalid input file '" <<
filename <<
"'." << std::endl;
2227 std::unique_ptr<JSONTree> tree = JSONTree::create(
is);
2243 std::stringstream
ss;
2244 ss <<
"RooJSONFactoryWSTool() invalid input file '" <<
filename <<
"'." << std::endl;
2257 bool isVariable =
true;
2258 if (
n.find(
"type")) {
2273 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
2274 if (
auto domains =
n.find(
"domains"))
2288 const auto &var =
snsh[
"parameters"].child(0);
2327 throw std::runtime_error(s);
std::unique_ptr< RooFit::Detail::JSONTree > varJSONString(const JSONNode &treeRoot)
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.
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.
std::size_t size() const
Number of states defined.
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.
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 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
virtual double val_double() const
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
ModelConfig is a simple class that holds configuration information specifying how a model should be u...
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.
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.
const RooArgSet & components() const
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.
TClass instances represent classes, structs and namespaces in the ROOT type system.
const char * GetName() const override
Returns name of object.
TClass * IsA() const override
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()