121 std::vector<std::string> out;
124 out.push_back(
elem.val());
142 return data.components.size() == pdf->
indexCat().size();
156 std::vector<double> edges;
162 Var(
int n) : nbins(
n), min(0), max(
n) {}
175bool isNumber(
const std::string &str)
183 for (
size_t i = 0; i < str.size(); ++i) {
186 if (std::isdigit(
c)) {
224 if (!
p.has_child(
"name")) {
227 if (
auto n =
p.find(
"value"))
228 v.setVal(
n->val_double());
230 if (
auto n =
p.find(
"nbins"))
231 v.setBins(
n->val_int());
232 if (
auto n =
p.find(
"relErr"))
233 v.setError(
v.getVal() *
n->val_double());
234 if (
auto n =
p.find(
"err"))
235 v.setError(
n->val_double());
236 if (
auto n =
p.find(
"const")) {
237 v.setConstant(
n->val_bool());
239 v.setConstant(
false);
251 return &((*out)[
"parameters"]);
259 if (
auto node =
p.find(
"namespaces")) {
260 for (
const auto &ns : node->
children()) {
298 if (
auto seq = node.
find(
"dict")) {
299 for (
const auto &
attr :
seq->children()) {
303 if (
auto seq = node.
find(
"tags")) {
304 for (
const auto &
attr :
seq->children()) {
313 out.
add(*args,
true);
346 if (observables.
empty()) {
358 std::vector<RooAbsData *>
const &
data,
JSONNode &rootnode)
375 if (!var || !var->hasError()) {
410 "RooFitHS3: skipping parameter_stepwidths entry for unknown or non-real variable '" +
name +
"'.");
414 var->setError(
stepWidthNode.find(
"step_width")->val_double());
421 std::stringstream expression;
422 std::string classname(
ex.tclass->GetName());
423 size_t colon = classname.find_last_of(
':');
424 expression << (
colon < classname.size() ? classname.substr(
colon + 1) : classname);
427 for (
auto k :
ex.arguments) {
428 expression << (first ?
"::" +
name +
"(" :
",");
430 if (k ==
"true" || k ==
"false") {
431 expression << (k ==
"true" ?
"1" :
"0");
432 }
else if (!
p.has_child(k)) {
434 errMsg <<
"node '" <<
name <<
"' is missing key '" << k <<
"'";
436 }
else if (
p[k].is_seq()) {
446 expression <<
p[k].val();
450 return expression.str();
476template <
typename...
Keys_t>
479 return node.
find(
"misc",
"ROOT_internal", keys...);
533 if (it.first ==
"factory_tag" || it.first ==
"PROD_TERM_TYPE")
536 (*node)[
"dict"].set_map()[it.first] << it.second;
542 if (
attr ==
"SnapShot_ExtRefClone" ||
attr ==
"RooRealConstant_Factory_Object")
545 (*node)[
"tags"].set_seq().append_child() <<
attr;
565 for (
const auto &
p : node[
"axes"].
children()) {
571 errMsg <<
"The observable \"" <<
name <<
"\" could not be found in the workspace!";
594 std::string
const &
type =
p[
"type"].val();
595 if (
type ==
"binned") {
598 }
else if (
type ==
"unbinned") {
601 getObservables(workspace,
p, varlist);
604 auto &coords =
p[
"entries"];
605 if (!coords.is_seq()) {
609 if (
p.has_child(
"weights")) {
610 auto &weights =
p[
"weights"];
611 if (coords.num_children() != weights.num_children()) {
614 for (
auto const &weight : weights.children()) {
619 for (
auto const &point : coords.children()) {
620 if (!point.is_seq()) {
622 errMsg <<
"coordinate point '" << i <<
"' is not a list!";
625 if (point.num_children() != varlist.
size()) {
629 for (
auto const &
pointj : point.children()) {
644 std::stringstream
ss;
645 ss <<
"RooJSONFactoryWSTool() failed to create dataset " <<
name << std::endl;
667 const std::vector<std::unique_ptr<RooAbsData>> &datasets)
680 mc->SetWS(workspace);
684 throw std::runtime_error(
"likelihood node not found!");
686 if (!
nllNode->has_child(
"distributions")) {
687 throw std::runtime_error(
"likelihood node has no distributions attached!");
689 if (!
nllNode->has_child(
"data")) {
690 throw std::runtime_error(
"likelihood node has no data attached!");
694 for (
auto &
nameNode : (*nllNode)[
"aux_distributions"].children()) {
700 for (
auto &
nameNode : (*nllNode)[
"data"].children()) {
702 for (
const auto &
d : datasets) {
705 observables.
add(*
d->get(),
true);
708 if (
nameNode.val() !=
"0" && !found)
709 throw std::runtime_error(
"dataset '" +
nameNode.val() +
"' cannot be found!");
727 std::map<std::string, RooAbsPdf *>
pdfMap;
751 mc->SetParametersOfInterest(
readArgSet(
"parameters_of_interest"));
752 mc->SetObservables(observables);
763 for (
auto &domain :
analysisNode[
"domains"].children()) {
767 for (
auto &var : (*thisDomain)[
"axes"].children()) {
776 for (
const auto &
p : pars) {
777 if (
mc->GetParametersOfInterest()->find(*
p))
786 mc->SetGlobalObservables(globs);
787 mc->SetNuisanceParameters(
nps);
790 if (
auto found =
mcAuxNode->find(
"combined_data_name")) {
815 std::vector<int> indices;
817 for (
auto &
n :
info[
"indices"].children()) {
818 indices.push_back(
n.val_int());
822 std::map<std::string, RooAbsPdf *>
pdfMap;
849 std::vector<int> indices;
850 for (
auto &
n :
info[
"indices"].children()) {
851 indices.push_back(
n.val_int());
853 if (indices.size() != labels.size()) {
858 std::map<std::string, std::unique_ptr<RooAbsData>>
dsMap;
865 std::unique_ptr<RooAbsData> &
component = *std::find_if(
866 datasets.begin(), datasets.end(), [&](
auto &
d) { return d && d->GetName() == componentName; });
876 datasets.emplace_back(std::move(
combined));
883 std::sort(
coll.
begin(),
coll.
end(), [](
auto &
l,
auto &
r) { return strcmp(l->GetName(), r->GetName()) < 0; });
908 error(
"unable to stream collection " + std::string(
coll.GetName()) +
" to " + node.
key());
951 if (str.empty() || !(std::isalpha(str[0]) || str[0] ==
'_')) {
958 if (!(std::isalnum(
c) ||
c ==
'_')) {
972 std::stringstream
ss;
973 ss <<
"RooJSONFactoryWSTool() name '" <<
name <<
"' is not valid!" << std::endl
974 <<
"Sanitize names by setting RooJSONFactoryWSTool::allowSanitizeNames = True." << std::endl;
1001 if (
const auto &node = vars->find(
objname)) {
1069 var[
"value"] <<
cv->getVal();
1070 var[
"const"] <<
true;
1072 var[
"value"] <<
rrv->getVal();
1074 var[
"const"] <<
rrv->isConstant();
1076 var[
"min"] <<
rrv->getMin();
1077 var[
"max"] <<
rrv->getMax();
1080 var[
"nbins"] <<
rrv->getBins();
1106 const std::string &formula)
1144 for (
auto const &
item :
simPdf->indexCat()) {
1150 child[
"index_cat"] <<
simPdf->indexCat().GetName();
1152 child[
"distributions"].set_seq();
1153 for (
auto const &
item :
simPdf->indexCat()) {
1154 child[
"distributions"].append_child() <<
simPdf->getPdf(
item.first.c_str())->GetName();
1166 auto &
collectionNode = (*_rootnodeOutput)[
dynamic_cast<RooAbsPdf const *
>(&func) ?
"distributions" :
"functions"];
1175 auto it = exporters.find(cl);
1176 if (it != exporters.end()) {
1177 for (
auto &exp : it->second) {
1180 if (!exp->exportObject(
this, &func,
elem)) {
1190 if (exp->autoExportDependants()) {
1203 const auto &dict = exportKeys.find(cl);
1204 if (dict == exportKeys.end()) {
1205 std::cerr <<
"unable to export class '" << cl->
GetName() <<
"' - no export keys available!\n"
1206 <<
"there are several possible reasons for this:\n"
1207 <<
" 1. " << cl->
GetName() <<
" is a custom class that you or some package you are using added.\n"
1209 <<
" is a ROOT class that nobody ever bothered to write a serialization definition for.\n"
1210 <<
" 3. something is wrong with your setup, e.g. you might have called "
1211 "RooFit::JSONIO::clearExportKeys() and/or never successfully read a file defining these "
1212 "keys with RooFit::JSONIO::loadExportKeys(filename)\n"
1213 <<
"either way, please make sure that:\n"
1214 <<
" 3: you are reading a file with export keys - call RooFit::JSONIO::printExportKeys() to "
1215 "see what is available\n"
1216 <<
" 2 & 1: you might need to write a serialization definition yourself. check "
1217 "https://root.cern/doc/master/group__roofit__dev__docs__hs3.html to "
1218 "see how to do this!\n";
1222 elem[
"type"] << dict->second.type;
1226 for (
size_t i = 0; i <
nprox; ++i) {
1232 std::string
pname(
p->name());
1233 if (
pname[0] ==
'!')
1236 auto k = dict->second.proxies.find(
pname);
1237 if (k == dict->second.proxies.end()) {
1238 std::cerr <<
"failed to find key matching proxy '" <<
pname <<
"' for type '" << dict->second.type
1239 <<
"', encountered in '" << func.
GetName() <<
"', skipping" << std::endl;
1244 if (k->second.empty())
1254 elem[k->second] <<
r->absArg()->GetName();
1262 std::cerr <<
"unable to locate server of " << func.
GetName() << std::endl;
1300 std::stringstream
ss;
1301 ss <<
"RooJSONFactoryWSTool() function node " +
name +
" is not a map!";
1306 if (!prefix.empty())
1308 if (!
p.has_child(
"type")) {
1309 std::stringstream
ss;
1310 ss <<
"RooJSONFactoryWSTool() no type given for function '" <<
name <<
"', skipping." << std::endl;
1323 auto it = importers.find(
functype);
1325 if (it != importers.end()) {
1326 for (
auto &
imp : it->second) {
1328 ok =
imp->importArg(
this,
p);
1329 }
catch (
const std::exception &
e) {
1330 std::stringstream
ss;
1331 const auto *ptr =
imp.get();
1332 ss <<
"RooJSONFactoryWSTool() failed. The importer " <<
typeid(*ptr).name()
1333 <<
" emitted and error: " <<
e.what() << std::endl;
1343 std::string expression = ::generate(
expr->second,
p,
this);
1345 std::stringstream
ss;
1346 ss <<
"RooJSONFactoryWSTool() failed to create " <<
expr->second.tclass->GetName() <<
" '" <<
name
1347 <<
"', skipping. expression was\n"
1348 << expression << std::endl;
1352 std::stringstream
ss;
1353 ss <<
"RooJSONFactoryWSTool() no handling for type '" <<
functype <<
"' implemented, skipping."
1355 <<
"there are several possible reasons for this:\n"
1356 <<
" 1. " <<
functype <<
" is a custom type that is not available in RooFit.\n"
1358 <<
" is a ROOT class that nobody ever bothered to write a deserialization definition for.\n"
1359 <<
" 3. something is wrong with your setup, e.g. you might have called "
1360 "RooFit::JSONIO::clearFactoryExpressions() and/or never successfully read a file defining "
1361 "these expressions with RooFit::JSONIO::loadFactoryExpressions(filename)\n"
1362 <<
"either way, please make sure that:\n"
1363 <<
" 3: you are reading a file with factory expressions - call "
1364 "RooFit::JSONIO::printFactoryExpressions() "
1365 "to see what is available\n"
1366 <<
" 2 & 1: you might need to write a deserialization definition yourself. check "
1367 "https://root.cern/doc/master/group__roofit__dev__docs__hs3.html to see "
1376 std::stringstream err;
1377 err <<
"something went wrong importing function '" <<
name <<
"'.";
1414 std::string
name = var->GetName();
1418 if (var->getBinning().isUniform()) {
1419 obsNode[
"min"] << var->getMin();
1420 obsNode[
"max"] << var->getMax();
1421 obsNode[
"nbins"] << var->getBins();
1423 auto &edges =
obsNode[
"edges"];
1425 double val = var->getBinning().binLow(0);
1426 edges.append_child() << val;
1427 for (
int i = 0; i < var->getBinning().numBins(); ++i) {
1428 val = var->getBinning().binHigh(i);
1429 edges.append_child() << val;
1451 for (std::size_t i = 0; i <
n; ++i) {
1452 double w = contents[i];
1478 if (!std::isalpha(
in[0])) {
1483 oocoutW(
nullptr, IO) <<
"RooFitHS3: changed '" <<
in <<
"' to '" << out <<
"' to become a valid name";
1492 auto &labels = node[
"labels"].
set_seq();
1493 auto &indices = node[
"indices"].
set_seq();
1495 for (
auto const &
item : cat) {
1497 indices.append_child() <<
item.second;
1519 " has several category observables!");
1584 " has several category observables!");
1602 if (
auto weightVar = variables.find(
"weightVar")) {
1603 variables.remove(*weightVar);
1608 output[
"type"] <<
"binned";
1621 if (
data.isWeighted() && variables.size() == 1) {
1623 auto &
x =
static_cast<RooRealVar const &
>(*variables[0]);
1624 std::vector<double> contents;
1626 for (; i <
data.numEntries(); ++i) {
1628 if (
x.getBin() != i)
1630 contents.push_back(
data.weight());
1632 if (i ==
x.getBins())
1635 output[
"type"] <<
"binned";
1644 output[
"type"] <<
"unbinned";
1646 auto &coords =
output[
"entries"].set_seq();
1649 for (
int i = 0; i <
data.numEntries(); ++i) {
1651 coords.append_child().fill_seq(variables, [](
auto x) {
return static_cast<RooRealVar *
>(
x)->getVal(); });
1653 if (
data.isWeighted()) {
1655 if (
data.weight() != 1.)
1678 if (node.has_child(
"edges")) {
1679 std::vector<double> edges;
1680 for (
auto const &
bound : node[
"edges"].children()) {
1681 edges.push_back(
bound.val_double());
1683 auto obs = std::make_unique<RooRealVar>(node[
"name"].val().c_str(), node[
"name"].val().c_str(), edges[0],
1684 edges[edges.size() - 1]);
1685 RooBinning bins(obs->getMin(), obs->getMax());
1686 for (
auto b : edges) {
1689 obs->setBinning(bins);
1692 auto obs = std::make_unique<RooRealVar>(node[
"name"].val().c_str(), node[
"name"].val().c_str(),
1693 node[
"min"].val_double(), node[
"max"].val_double());
1694 obs->setBins(node[
"nbins"].val_int());
1713std::unique_ptr<RooDataHist>
1716 if (!
n.has_child(
"contents"))
1719 JSONNode const &contents =
n[
"contents"];
1725 if (
n.has_child(
"errors")) {
1733 std::stringstream
errMsg;
1734 errMsg <<
"inconsistent bin numbers: contents=" << contents.
num_children() <<
", bins=" << bins.size();
1737 auto dh = std::make_unique<RooDataHist>(
name,
name, vars);
1746 for (
auto const &err :
errors->children()) {
1775 std::stringstream
ss;
1776 ss <<
"RooJSONFactoryWSTool() node '" <<
name <<
"' is not a map, skipping.";
1777 oocoutE(
nullptr, InputArguments) <<
ss.str() << std::endl;
1783 if (
attrNode->has_child(
"is_const_var") && (*
attrNode)[
"is_const_var"].val_int() == 1) {
1805 for (
const auto &
p :
varsNode->children()) {
1809 if (
auto seq =
n.find(
"functions")) {
1810 for (
const auto &
p :
seq->children()) {
1814 if (
auto seq =
n.find(
"distributions")) {
1815 for (
const auto &
p :
seq->children()) {
1825 auto pdf =
mc.GetPdf();
1828 for (std::size_t i = 0; i < std::max(
combDataSets.size(), std::size_t(1)); ++i) {
1844 std::map<std::string, std::string>
mapping;
1860 auto pdf =
mc.GetPdf();
1869 nllNode[
"distributions"].set_seq();
1875 for (
auto const &
item :
simPdf->indexCat()) {
1877 nllNode[
"distributions"].append_child() <<
simPdf->getPdf(
item.first)->GetName();
1882 nllNode[
"distributions"].append_child() << it.first;
1883 nllNode[
"data"].append_child() << it.second;
1887 nllNode[
"distributions"].append_child() << pdf->GetName();
1888 nllNode[
"data"].append_child() << 0;
1891 if (
mc.GetExternalConstraints()) {
1894 for (
const auto &
constr : *
mc.GetExternalConstraints()) {
1900 if (!args || !args->size())
1903 std::vector<std::string> names;
1904 names.reserve(args->size());
1906 names.push_back(arg->GetName());
1907 std::sort(names.begin(), names.end());
1911 writeList(
"parameters_of_interest",
mc.GetParametersOfInterest());
1916 if (!args || args->empty())
1948 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
1953 std::vector<RooAbsPdf *>
allpdfs;
1955 if (!arg->hasClients()) {
1956 if (
auto *pdf =
dynamic_cast<RooAbsPdf *
>(arg)) {
1966 std::vector<RooAbsReal *>
allfuncs;
1968 if (!arg->hasClients()) {
1969 if (
auto *func =
dynamic_cast<RooAbsReal *
>(arg)) {
1983 std::vector<RooAbsData *>
alldata;
1990 std::vector<RooJSONFactoryWSTool::CombinedData>
combData;
1993 if (!
data.components.empty())
1994 combData.push_back(
data);
2019 for (
const auto &pdf :
allpdfs) {
2020 if (pdf->dependsOn(*arg)) {
2031 if (
name !=
"default_values") {
2050 std::stringstream
ss(s);
2062 std::stringstream
ss(s);
2073 std::stringstream
ss;
2085 std::stringstream
ss;
2097 std::unique_ptr<JSONTree> tree = JSONTree::create();
2100 auto &metadata =
n[
"metadata"].set_map();
2139 std::ofstream out(
filename.c_str());
2168 std::ofstream out(
filename.c_str());
2180 for (
auto &
a :
seq->children()) {
2191 auto &
tags = (*node)[
"tags"];
2201 if (
auto dict =
attrNode->find(
"dict")) {
2202 if (
auto *
a = dict->find(
attrib)) {
2210 const std::string &
value)
2213 auto &dict = (*node)[
"dict"];
2231 auto metadata =
n.find(
"metadata");
2232 if (!metadata || !metadata->find(
"hs3_version")) {
2233 std::stringstream
ss;
2234 ss <<
"The HS3 version is missing in the JSON!\n"
2235 <<
"Please include the HS3 version in the metadata field, e.g.:\n"
2236 <<
" \"metadata\" :\n"
2243 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
2244 if (
auto domains =
n.find(
"domains")) {
2261 if (
auto seq =
n.find(
"functions")) {
2262 if (
seq->is_seq()) {
2264 for (
const auto &
p :
seq->children()) {
2269 if (
auto seq =
n.find(
"distributions")) {
2270 if (
seq->is_seq()) {
2272 for (
const auto &
p :
seq->children()) {
2286 for (
const auto &var :
snsh[
"parameters"].children()) {
2312 std::vector<std::unique_ptr<RooAbsData>> datasets;
2314 for (
const auto &
p :
dataNode->children()) {
2329 for (
auto const &
d : datasets) {
2332 for (
auto const &obs : *
d->get()) {
2355 std::unique_ptr<JSONTree> tree = JSONTree::create(is);
2356 JSONNode const &rootnode = tree->rootnode();
2358 if (this->
workspace()->getSnapshot(
"default_values")) {
2389 std::unique_ptr<JSONTree> tree = JSONTree::create(is);
2390 JSONNode const &rootnode = tree->rootnode();
2417 bool isVariable =
true;
2418 if (
n.find(
"type")) {
2433 _domains = std::make_unique<RooFit::JSONIO::Detail::Domains>();
2434 if (
auto domains =
n.find(
"domains"))
2448 const auto &var =
snsh[
"parameters"].child(0);
2487 throw std::runtime_error(s);
2500 for (
char c : str) {
2505 case '(':
result +=
'_';
break;
2510 case '.':
result +=
"_dot_";
break;
2511 case '@':
result +=
"at";
break;
2512 case '-':
result +=
"minus";
break;
2513 case '/':
result +=
"_div_";
break;
2537 for (
auto *pdf : ws.
allPdfs()) {
2538 if (!pdf->hasClients()) {
2544 if (!func->hasClients()) {
2580 for (
auto *obj : list) {
2596 for (
auto *obj : *
data->get()) {
2600 for (
auto *
data :
tmpWS.allEmbeddedData()) {
2603 for (
auto *obj : *
data->get()) {
2611 std::cerr <<
"Warning: found snapshot that is not a RooArgSet, skipping\n";
2621 for (
auto *arg : *
snsh) {
2629 for (
auto *obj :
tmpWS.allGenericObjects()) {
2634 std::cerr <<
"Warning: object " << obj->GetName() <<
" is not TNamed, cannot rename.\n";
2645 for (
auto *obs :
mc->GetObservables()->get()) {
2650 for (
auto *poi :
mc->GetParametersOfInterest()->get()) {
2655 for (
auto *
nuis :
mc->GetNuisanceParameters()->get()) {
2660 for (
auto *
glob :
mc->GetGlobalObservables()->get()) {
2667 std::string
wsName = std::string{ws.
GetName()} +
"_sanitized";
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 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 result
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...
RooFit::OwningPtr< RooArgSet > getObservables(const RooArgSet &set, bool valueOnly=true) const
Given a set of possible observables, return the observables that this PDF depends on.
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.
bool equals(const RooAbsCollection &otherColl) const
Check if this and other collection have identically-named contents.
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 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
static std::unique_ptr< JSONTree > create()
void readVariable(const RooRealVar &)
void writeJSON(RooFit::Detail::JSONNode &) const
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)
const RooArgSet * getSnapshot(const char *name) const
Return the RooArgSet containing a snapshot of variables contained in the workspace.
RooAbsPdf * pdf(RooStringView name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
RooArgSet allResolutionModels() const
Return set with all resolution model objects.
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.
The TNamed class is the base class for all named ROOT classes.
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()