88std::set<std::string> extractArguments(std::string expr)
91 expr.erase(std::remove_if(expr.begin(), expr.end(), [](
unsigned char c) { return std::isspace(c); }), expr.end());
93 std::set<std::string> arguments;
94 size_t startidx = expr.size();
95 for (
size_t i = 0; i < expr.size(); ++i) {
96 if (startidx >= expr.size()) {
97 if (isalpha(expr[i])) {
102 startidx = expr.size();
106 if (!isdigit(expr[i]) && !isalpha(expr[i]) && expr[i] !=
'_') {
107 if (expr[i] ==
'(') {
108 startidx = expr.size();
111 std::string arg(expr.substr(startidx, i - startidx));
112 startidx = expr.size();
113 arguments.insert(arg);
117 if (startidx < expr.size()) {
118 arguments.insert(expr.substr(startidx));
123template <
class RooArg_t>
126 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
132 TString formula(p[
"expression"].val());
133 RooArgList dependents;
134 for (
const auto &
d : extractArguments(formula.Data())) {
137 tool->
wsImport(RooArg_t{
name.c_str(), formula, dependents});
151 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
161 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
171 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
181 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
196 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
207 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
210 RooHistFunc *hf =
static_cast<RooHistFunc *
>(tool->
request<RooAbsReal>(p[
"histogram"].
val(),
name));
218 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
222 RooAbsPdf *pdf = tool->
requestArg<RooAbsPdf>(p,
"pdf");
223 RooRealVar *obs = tool->
requestArg<RooRealVar>(p,
"observable");
227 obs->GetName() +
"' as indicated by parent RooBinSamplingPdf '" +
name +
231 if (!p.has_child(
"epsilon")) {
234 double epsilon(p[
"epsilon"].val_double());
236 tool->
wsEmplace<RooBinSamplingPdf>(
name, *obs, *pdf, epsilon);
244 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
248 bool extended =
false;
249 if (p.
has_child(
"extended") && p[
"extended"].val_bool()) {
260 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
268template <
class RooArg_t>
271 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
277 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
281 for (
const auto &coef : p[
"coefficients"].children()) {
285 if (order == 0 && coef.val() ==
"1.0") {
287 }
else if (coefs.empty() && coef.val() ==
"0.0") {
290 coefs.add(*tool->
request<RooAbsReal>(coef.val(),
name));
302 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
305 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
306 RooAbsReal *mean = tool->
requestArg<RooAbsReal>(p,
"mean");
307 tool->
wsEmplace<RooPoisson>(
name, *
x, *mean, !p[
"integer"].val_bool());
314 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
317 RooRealVar *t = tool->
requestArg<RooRealVar>(p,
"t");
318 RooAbsReal *tau = tool->
requestArg<RooAbsReal>(p,
"tau");
319 RooResolutionModel *model =
dynamic_cast<RooResolutionModel *
>(tool->
requestArg<RooAbsPdf>(p,
"resolutionModel"));
321 tool->
wsEmplace<RooDecay>(
name, *t, *tau, *model, decayType);
328 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
331 RooRealVar *
x = tool->
requestArg<RooRealVar>(p,
"x");
339 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
342 RooRealVar *
x = tool->
requestArg<RooRealVar>(p,
"x");
343 RooRealVar *mean = tool->
requestArg<RooRealVar>(p,
"mean");
352 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
355 RooAbsReal *func = tool->
requestArg<RooAbsReal>(p,
"integrand");
358 RooArgSet
const *normSetPtr =
nullptr;
359 if (p.has_child(
"normalization")) {
360 normSet.add(tool->
requestArgSet<RooAbsReal>(p,
"normalization"));
361 normSetPtr = &normSet;
364 bool hasDomain = p.has_child(
"domain");
366 domain = p[
"domain"].val();
369 tool->
wsEmplace<RooRealIntegral>(
name, *func, vars, normSetPtr,
static_cast<RooNumIntConfig *
>(
nullptr),
370 hasDomain ? domain.c_str() :
nullptr);
377 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
380 RooAbsReal *func = tool->
requestArg<RooAbsReal>(p,
"function");
381 RooRealVar *
x = tool->
requestArg<RooRealVar>(p,
"x");
382 Int_t order = p[
"order"].val_int();
383 double eps = p[
"eps"].val_double();
384 if (p.has_child(
"normalization")) {
387 tool->
wsEmplace<RooDerivative>(
name, *func, *
x, normSet, order, eps);
397 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
400 RooRealVar *convVar = tool->
requestArg<RooRealVar>(p,
"conv_var");
401 Int_t order = p[
"ipOrder"].val_int();
402 RooAbsPdf *pdf1 = tool->
requestArg<RooAbsPdf>(p,
"pdf1");
403 RooAbsPdf *pdf2 = tool->
requestArg<RooAbsPdf>(p,
"pdf2");
404 if (p.has_child(
"conv_func")) {
405 RooAbsReal *convFunc = tool->
requestArg<RooAbsReal>(p,
"conv_func");
406 tool->
wsEmplace<RooFFTConvPdf>(
name, *convFunc, *convVar, *pdf1, *pdf2, order);
409 tool->
wsEmplace<RooFFTConvPdf>(
name, *convVar, *pdf1, *pdf2, order);
416 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
419 RooAbsPdf *pdf = tool->
requestArg<RooAbsPdf>(p,
"pdf");
420 RooAbsReal *norm = tool->
requestArg<RooAbsReal>(p,
"norm");
421 if (p.has_child(
"range")) {
422 std::string rangeName = p[
"range"].val();
423 tool->
wsEmplace<RooExtendPdf>(
name, *pdf, *norm, rangeName.c_str());
433 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
436 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
440 const std::string muName = p[
"mu"].val();
441 const std::string sigmaName = p[
"sigma"].val();
442 const bool isTransformed =
endsWith(muName,
"_lognormal_log");
443 const std::string suffixToRemove = isTransformed ?
"_lognormal_log" :
"";
455 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
458 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
491 const std::string constParamName = p[
"c"].val();
492 const bool isInverted =
endsWith(constParamName,
"_exponential_inverted");
493 const std::string suffixToRemove = isInverted ?
"_exponential_inverted" :
"";
504 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
507 bool has_cov = p.
has_child(
"covariances");
509 if (!has_cov && !has_corr) {
519 for (
const auto &row : p[
"covariances"].children()) {
521 for (
const auto &val : row.children()) {
522 covmat(i, j) = val.val_double();
528 std::vector<double> variances;
529 for (
const auto &
v : p[
"standard_deviations"].children()) {
530 variances.push_back(
v.val_double());
532 covmat.
ResizeTo(variances.size(), variances.size());
534 for (
const auto &row : p[
"correlations"].children()) {
536 for (
const auto &val : row.children()) {
537 covmat(i, j) = val.val_double() * variances[i] * variances[j];
551 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
554 RooArgList varList = tool->
requestArgList<RooRealVar>(p,
"variables");
555 if (!p.has_child(
"axes")) {
556 std::stringstream ss;
557 ss <<
"No axes given in '" <<
name <<
"'"
558 <<
". Using default binning (uniform; nbins=100). If needed, export the Workspace to JSON with a newer "
559 <<
"Root version that supports custom ParamHistFunc binnings(>=6.38.00)." << std::endl;
569 RooArgList readBinning(
const JSONNode &topNode,
const RooArgList &varList)
const
572 std::map<std::string, std::unique_ptr<RooRealVar>> varMap;
575 for (
const JSONNode &node : topNode[
"axes"].children()) {
576 const std::string
name = node[
"name"].val();
577 std::unique_ptr<RooRealVar> obs;
579 if (node.has_child(
"edges")) {
580 std::vector<double> edges;
581 for (
const auto &bound : node[
"edges"].children()) {
582 edges.push_back(bound.val_double());
584 obs = std::make_unique<RooRealVar>(
name.c_str(),
name.c_str(), edges.front(), edges.back());
585 RooBinning bins(obs->getMin(), obs->getMax());
588 obs->setBinning(bins);
590 obs = std::make_unique<RooRealVar>(
name.c_str(),
name.c_str(), node[
"min"].val_double(),
591 node[
"max"].val_double());
592 obs->setBins(node[
"nbins"].val_int());
595 varMap[
name] = std::move(obs);
604 auto it = varMap.find(refVar->GetName());
605 if (it != varMap.end()) {
606 vars.
addOwned(std::move(it->second));
615 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
627 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
630 std::string algo = p.has_child(
"interpolation") ? p[
"interpolation"].val() :
"poly3";
634 else if (algo ==
"poly5")
638 "': allowed are 'poly3' and 'poly5'");
640 const bool logx = p.has_child(
"logx") ? p[
"logx"].val_bool() :
false;
641 const bool logy = p.has_child(
"logy") ? p[
"logy"].val_bool() :
false;
644 std::vector<double> x0;
645 std::vector<double> y0;
646 x0.reserve(p[
"x0"].num_children());
647 y0.reserve(p[
"y0"].num_children());
649 for (
const auto &
v : p[
"x0"].children())
650 x0.push_back(
v.val_double());
651 for (
const auto &
v : p[
"y0"].children())
652 y0.push_back(
v.val_double());
654 if (x0.size() != y0.size()) {
656 ", y0 has " + std::to_string(y0.size()));
663 tool->
wsEmplace<::RooSpline>(
name.c_str(), *
x, std::span<const double>(x0.data(), x0.size()),
664 std::span<const double>(y0.data(), y0.size()), order, logx, logy);
673template <
class RooArg_t>
676 std::string
const &key()
const override;
677 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
679 const RooArg_t *pdf =
static_cast<const RooArg_t *
>(func);
680 elem[
"type"] << key();
683 elem[
"extended"] << (pdf->extendMode() != RooArg_t::CanNotBeExtended);
690 std::string
const &key()
const override;
691 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
693 const RooRealSumPdf *pdf =
static_cast<const RooRealSumPdf *
>(func);
694 elem[
"type"] << key();
704 std::string
const &key()
const override;
705 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
707 const RooRealSumFunc *pdf =
static_cast<const RooRealSumFunc *
>(func);
708 elem[
"type"] << key();
715template <
class RooArg_t>
718 std::string
const &key()
const override;
719 bool exportObject(RooJSONFactoryWSTool *tool,
const RooAbsArg *func, JSONNode &elem)
const override
721 const RooArg_t *hf =
static_cast<const RooArg_t *
>(func);
722 elem[
"type"] << key();
723 RooDataHist
const &dh = hf->dataHist();
729template <
class RooArg_t>
732 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
738 std::unique_ptr<RooDataHist> dataHist =
740 tool->
wsEmplace<RooArg_t>(
name, *dataHist->get(), *dataHist);
747 std::string
const &key()
const override;
748 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
750 const RooBinSamplingPdf *pdf =
static_cast<const RooBinSamplingPdf *
>(func);
751 elem[
"type"] << key();
754 elem[
"epsilon"] << pdf->
epsilon();
761 std::string
const &key()
const override;
762 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
764 const RooBinWidthFunction *pdf =
static_cast<const RooBinWidthFunction *
>(func);
765 elem[
"type"] << key();
772template <
class RooArg_t>
775 std::string
const &key()
const override;
776 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
778 const RooArg_t *pdf =
static_cast<const RooArg_t *
>(func);
779 elem[
"type"] << key();
780 TString expression(pdf->expression());
781 cleanExpression(expression);
788 for (
size_t idx = pdf->nParameters(); idx--;) {
789 const RooAbsArg *par = pdf->getParameter(idx);
790 expression.ReplaceAll((
"x[" + std::to_string(idx) +
"]").c_str(), par->
GetName());
791 expression.ReplaceAll((
"@" + std::to_string(idx)).c_str(), par->
GetName());
793 elem[
"expression"] << expression.Data();
798 void cleanExpression(TString &expr)
const
815void writePolynomialBody(
const Pdf *pdf,
JSONNode &elem)
817 elem[
"x"] << pdf->x().GetName();
818 auto &coefs = elem[
"coefficients"].
set_seq();
819 for (
int i = 0; i < pdf->lowestOrder(); ++i) {
820 coefs.append_child() << (i == 0 ?
"1.0" :
"0.0");
822 for (
const auto &coef : pdf->coefList()) {
823 coefs.append_child() << coef->GetName();
827template <
class RooArg_t>
830 std::string
const &key()
const override;
831 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
833 elem[
"type"] << key();
834 writePolynomialBody(
static_cast<const RooArg_t *
>(func), elem);
841 std::string
const &key()
const override;
842 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
844 auto *pdf =
static_cast<const RooPoisson *
>(func);
845 elem[
"type"] << key();
846 elem[
"x"] << pdf->getX().GetName();
847 elem[
"mean"] << pdf->getMean().GetName();
848 elem[
"integer"] << !pdf->getNoRounding();
855 std::string
const &key()
const override;
856 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
858 auto *pdf =
static_cast<const RooDecay *
>(func);
859 elem[
"type"] << key();
860 elem[
"t"] << pdf->getT().GetName();
861 elem[
"tau"] << pdf->getTau().GetName();
862 elem[
"resolutionModel"] << pdf->getModel().GetName();
863 elem[
"decayType"] << pdf->getDecayType();
871 std::string
const &key()
const override;
872 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
874 auto *pdf =
static_cast<const RooTruthModel *
>(func);
875 elem[
"type"] << key();
876 elem[
"x"] << pdf->convVar().GetName();
884 std::string
const &key()
const override;
885 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
887 auto *pdf =
static_cast<const RooGaussModel *
>(func);
888 elem[
"type"] << key();
889 elem[
"x"] << pdf->convVar().GetName();
890 elem[
"mean"] << pdf->getMean().GetName();
891 elem[
"sigma"] << pdf->getSigma().GetName();
898 std::string
const &key()
const override;
899 bool exportObject(RooJSONFactoryWSTool *tool,
const RooAbsArg *func, JSONNode &elem)
const override
901 auto *pdf =
static_cast<const RooLognormal *
>(func);
903 elem[
"type"] << key();
904 elem[
"x"] << pdf->getX().GetName();
906 auto &m0 = pdf->getMedian();
907 auto &k = pdf->getShapeK();
909 if (pdf->useStandardParametrization()) {
910 elem[
"mu"] << m0.GetName();
911 elem[
"sigma"] << k.GetName();
923 std::string
const &key()
const override;
924 bool exportObject(RooJSONFactoryWSTool *tool,
const RooAbsArg *func, JSONNode &elem)
const override
926 auto *pdf =
static_cast<const RooExponential *
>(func);
927 elem[
"type"] << key();
928 elem[
"x"] << pdf->variable().GetName();
929 auto &
c = pdf->coefficient();
930 if (pdf->negateCoefficient()) {
931 elem[
"c"] <<
c.GetName();
942 std::string
const &key()
const override;
943 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
945 auto *pdf =
static_cast<const RooMultiVarGaussian *
>(func);
946 elem[
"type"] << key();
949 elem[
"covariances"].
fill_mat(pdf->covarianceMatrix());
956 std::string
const &key()
const override;
957 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
959 auto *pdf =
static_cast<const RooTFnBinding *
>(func);
960 elem[
"type"] << key();
962 TString formula(pdf->function().GetExpFormula());
963 formula.ReplaceAll(
"x", pdf->observables()[0].GetName());
964 formula.ReplaceAll(
"y", pdf->observables()[1].GetName());
965 formula.ReplaceAll(
"z", pdf->observables()[2].GetName());
966 for (
size_t i = 0; i < pdf->parameters().
size(); ++i) {
968 formula.ReplaceAll(pname, pdf->parameters()[i].GetName());
970 elem[
"expression"] << formula.Data();
977 std::string
const &key()
const override;
978 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
980 auto *pdf =
static_cast<const RooDerivative *
>(func);
981 elem[
"type"] << key();
982 elem[
"x"] << pdf->getX().GetName();
983 elem[
"function"] << pdf->getFunc().GetName();
984 if (!pdf->getNset().empty()) {
987 elem[
"order"] << pdf->order();
988 elem[
"eps"] << pdf->eps();
995 std::string
const &key()
const override;
996 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
998 auto *integral =
static_cast<const RooRealIntegral *
>(func);
999 elem[
"type"] << key();
1000 std::string integrand = integral->integrand().GetName();
1002 elem[
"integrand"] << integrand;
1003 if (integral->intRange()) {
1004 elem[
"domain"] << integral->intRange();
1007 if (RooArgSet
const *funcNormSet = integral->funcNormSet()) {
1016 std::string
const &key()
const override;
1017 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
1019 auto *pdf =
static_cast<const RooFFTConvPdf *
>(func);
1020 elem[
"type"] << key();
1021 if (
auto convFunc = pdf->getPdfConvVar()) {
1022 elem[
"conv_func"] << convFunc->GetName();
1024 elem[
"conv_var"] << pdf->getConvVar().GetName();
1025 elem[
"pdf1"] << pdf->getPdf1().GetName();
1026 elem[
"pdf2"] << pdf->getPdf2().GetName();
1027 elem[
"ipOrder"] << pdf->getInterpolationOrder();
1034 std::string
const &key()
const override;
1035 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
1037 auto *pdf =
static_cast<const RooExtendPdf *
>(func);
1038 elem[
"type"] << key();
1039 if (
auto rangeName = pdf->getRangeName()) {
1040 elem[
"range"] << rangeName->GetName();
1042 elem[
"pdf"] << pdf->pdf().GetName();
1043 elem[
"norm"] << pdf->getN().GetName();
1050 std::string
const &key()
const override;
1051 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
1053 auto *pdf =
static_cast<const ParamHistFunc *
>(func);
1054 elem[
"type"] << key();
1057 writeBinningInfo(pdf, elem);
1062 void writeBinningInfo(
const ParamHistFunc *pdf, JSONNode &elem)
const
1064 auto &observablesNode = elem[
"axes"].
set_seq();
1067 std::string
name = var->GetName();
1069 JSONNode &obsNode = observablesNode.append_child().set_map();
1070 obsNode[
"name"] <<
name;
1071 auto const &binning = var->getBinning();
1072 if (binning.isUniform()) {
1073 obsNode[
"min"] << var->getMin();
1074 obsNode[
"max"] << var->getMax();
1075 obsNode[
"nbins"] << var->getBins();
1077 auto &edges = obsNode[
"edges"].
set_seq();
1079 for (
int i = 0; i < binning.numBins(); ++i) {
1080 edges.append_child() << binning.binHigh(i);
1089 std::string
const &key()
const override;
1091 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, RooFit::Detail::JSONNode &elem)
const override
1093 auto const *rs =
static_cast<RooSpline
const *
>(func);
1095 elem[
"type"] << key();
1098 elem[
"x"] << rs->x().GetName();
1102 elem[
"interpolation"] << (rs->order() == 5 ?
"poly5" :
"poly3");
1103 elem[
"logx"] << rs->logx();
1104 elem[
"logy"] << rs->logy();
1107 TSpline
const &sp = rs->spline();
1108 auto &x0 = elem[
"x0"].
set_seq();
1109 auto &y0 = elem[
"y0"].
set_seq();
1112 for (
int i = 0; i <
np; ++i) {
1113 double xk = 0.0, yk = 0.0;
1115 x0.append_child() << xk;
1116 y0.append_child() << yk;
1125 bool importArg(RooJSONFactoryWSTool *tool,
const RooFit::Detail::JSONNode &node)
const override
1127 if (node[
"type"].val() !=
"density_function_dist")
1131 auto *func = tool->
requestArg<RooAbsReal>(node,
"function");
1133 bool selfNormalized =
false;
1135 if (
auto sn = node.find(
"selfNormalized"))
1136 selfNormalized = sn->val_bool();
1138 tool->
wsEmplace<RooWrapperPdf>(
name, *func, selfNormalized);
1145 std::string
const &key()
const override;
1147 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *arg, RooFit::Detail::JSONNode &node)
const override
1149 auto const *pdf =
dynamic_cast<RooWrapperPdf
const *
>(arg);
1153 node[
"type"] <<
"density_function_dist";
1158 if (!funcProxy || !funcProxy->absArg())
1161 node[
"function"] << funcProxy->absArg()->GetName();
1162 if (pdf->selfNormalized())
1163 node[
"selfnormalized"] <<
true;
1169#define DEFINE_EXPORTER_KEY(class_name, name) \
1170 std::string const &class_name::key() const \
1172 const static std::string keystring = name; \
#define DEFINE_EXPORTER_KEY(class_name, name)
bool endsWith(std::string_view str, std::string_view suffix)
std::string removeSuffix(std::string_view str, std::string_view suffix)
ROOT::RRangeCast< T, true, Range_t > dynamic_range_cast(Range_t &&coll)
ROOT::RRangeCast< T, false, Range_t > static_range_cast(Range_t &&coll)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
RooTemplateProxy< RooAbsReal > RooRealProxy
Compatibility typedef replacing the old RooRealProxy class.
int Int_t
Signed integer 4 bytes (int)
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
TMatrixTSym< Double_t > TMatrixDSym
const RooArgList & dataVars() const
bool dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=nullptr, bool valueOnly=false) const
Test whether we depend on (ie, are served by) any object in the specified collection.
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
const RooAbsPdf & pdf() const
const RooAbsReal & observable() const
bool divideByBinWidth() const
const RooHistFunc & histFunc() const
double const * weightArray() const
const RooArgSet * get() const override
Get bin centre of current bin.
virtual bool val_bool() const
virtual std::string val() const =0
virtual JSONNode & append_child()=0
virtual size_t num_children() const =0
virtual JSONNode & set_seq()=0
virtual bool has_child(std::string const &) const =0
void fill_mat(Matrix const &mat)
const RooArgList & coefList() const
const RooArgList & funcList() const
const RooArgList & funcList() const
ExtendMode extendMode() const override
Returns ability of PDF to provide extended likelihood terms.
const RooArgList & coefList() const
TMatrixTBase< Element > & ResizeTo(Int_t nrows, Int_t ncols, Int_t=-1) override
Set size of the matrix to nrows x ncols New dynamic elements are created, the overlapping part of the...
const char * GetName() const override
Returns name of object.
virtual void GetKnot(Int_t i, Double_t &x, Double_t &y) const =0
virtual Int_t GetNp() const
TString & ReplaceAll(const TString &s1, const TString &s2)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
static bool registerImporter(const std::string &key, bool topPriority=true)
static bool registerExporter(const TClass *key, bool topPriority=true)
#define STATIC_EXECUTE(MY_FUNC)