84std::set<std::string> extractArguments(std::string expr)
87 expr.erase(std::remove_if(expr.begin(), expr.end(), [](
unsigned char c) { return std::isspace(c); }), expr.end());
89 std::set<std::string> arguments;
90 size_t startidx = expr.size();
91 for (
size_t i = 0; i < expr.size(); ++i) {
92 if (startidx >= expr.size()) {
93 if (isalpha(expr[i])) {
98 startidx = expr.size();
102 if (!isdigit(expr[i]) && !isalpha(expr[i]) && expr[i] !=
'_') {
103 if (expr[i] ==
'(') {
104 startidx = expr.size();
107 std::string arg(expr.substr(startidx, i - startidx));
108 startidx = expr.size();
109 arguments.insert(arg);
113 if (startidx < expr.size()) {
114 arguments.insert(expr.substr(startidx));
119template <
class RooArg_t>
122 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
128 TString formula(p[
"expression"].val());
129 RooArgList dependents;
130 for (
const auto &
d : extractArguments(formula.Data())) {
133 tool->
wsImport(RooArg_t{
name.c_str(), formula, dependents});
140 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
155 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
166 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
169 RooHistFunc *hf =
static_cast<RooHistFunc *
>(tool->
request<RooAbsReal>(p[
"histogram"].
val(),
name));
177 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
181 RooAbsPdf *pdf = tool->
requestArg<RooAbsPdf>(p,
"pdf");
182 RooRealVar *obs = tool->
requestArg<RooRealVar>(p,
"observable");
186 obs->GetName() +
"' as indicated by parent RooBinSamplingPdf '" +
name +
190 if (!p.has_child(
"epsilon")) {
193 double epsilon(p[
"epsilon"].val_double());
195 tool->
wsEmplace<RooBinSamplingPdf>(
name, *obs, *pdf, epsilon);
203 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
207 bool extended =
false;
208 if (p.
has_child(
"extended") && p[
"extended"].val_bool()) {
219 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
227template <
class RooArg_t>
230 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
236 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
240 for (
const auto &coef : p[
"coefficients"].children()) {
244 if (order == 0 && coef.val() ==
"1.0") {
246 }
else if (coefs.empty() && coef.val() ==
"0.0") {
249 coefs.add(*tool->
request<RooAbsReal>(coef.val(),
name));
261 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
264 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
266 tool->
wsEmplace<RooPoisson>(
name, *
x, *mean, !p[
"integer"].val_bool());
273 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
276 RooRealVar *t = tool->
requestArg<RooRealVar>(p,
"t");
277 RooAbsReal *tau = tool->
requestArg<RooAbsReal>(p,
"tau");
280 tool->
wsEmplace<RooDecay>(
name, *t, *tau, *model, decayType);
287 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
290 RooRealVar *
x = tool->
requestArg<RooRealVar>(p,
"x");
298 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
301 RooRealVar *
x = tool->
requestArg<RooRealVar>(p,
"x");
311 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
314 RooAbsReal *func = tool->
requestArg<RooAbsReal>(p,
"integrand");
317 RooArgSet
const *normSetPtr =
nullptr;
318 if (p.has_child(
"normalization")) {
319 normSet.add(tool->
requestArgSet<RooAbsReal>(p,
"normalization"));
320 normSetPtr = &normSet;
323 bool hasDomain = p.has_child(
"domain");
325 domain = p[
"domain"].val();
328 tool->
wsEmplace<RooRealIntegral>(
name, *func, vars, normSetPtr,
static_cast<RooNumIntConfig *
>(
nullptr),
329 hasDomain ? domain.c_str() :
nullptr);
336 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
339 RooAbsReal *func = tool->
requestArg<RooAbsReal>(p,
"function");
340 RooRealVar *
x = tool->
requestArg<RooRealVar>(p,
"x");
341 Int_t order = p[
"order"].val_int();
342 double eps = p[
"eps"].val_double();
343 if (p.has_child(
"normalization")) {
346 tool->
wsEmplace<RooDerivative>(
name, *func, *
x, normSet, order, eps);
356 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
359 RooRealVar *convVar = tool->
requestArg<RooRealVar>(p,
"conv_var");
360 Int_t order = p[
"ipOrder"].val_int();
361 RooAbsPdf *pdf1 = tool->
requestArg<RooAbsPdf>(p,
"pdf1");
362 RooAbsPdf *pdf2 = tool->
requestArg<RooAbsPdf>(p,
"pdf2");
363 if (p.has_child(
"conv_func")) {
364 RooAbsReal *convFunc = tool->
requestArg<RooAbsReal>(p,
"conv_func");
365 tool->
wsEmplace<RooFFTConvPdf>(
name, *convFunc, *convVar, *pdf1, *pdf2, order);
368 tool->
wsEmplace<RooFFTConvPdf>(
name, *convVar, *pdf1, *pdf2, order);
375 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
378 RooAbsPdf *pdf = tool->
requestArg<RooAbsPdf>(p,
"pdf");
379 RooAbsReal *norm = tool->
requestArg<RooAbsReal>(p,
"norm");
380 if (p.has_child(
"range")) {
381 std::string rangeName = p[
"range"].val();
382 tool->
wsEmplace<RooExtendPdf>(
name, *pdf, *norm, rangeName.c_str());
392 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
395 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
399 const std::string muName = p[
"mu"].val();
400 const std::string sigmaName = p[
"sigma"].val();
401 const bool isTransformed =
endsWith(muName,
"_lognormal_log");
402 const std::string suffixToRemove = isTransformed ?
"_lognormal_log" :
"";
414 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
417 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
450 const std::string constParamName = p[
"c"].val();
451 const bool isInverted =
endsWith(constParamName,
"_exponential_inverted");
452 const std::string suffixToRemove = isInverted ?
"_exponential_inverted" :
"";
463 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
469 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
473 for (
const auto &coef : p[
"coefficients"].children()) {
477 if (order == 0 && coef.val() ==
"1.0") {
479 }
else if (coefs.empty() && coef.val() ==
"0.0") {
482 coefs.add(*tool->
request<RooAbsReal>(coef.val(),
name));
494 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
497 bool has_cov = p.
has_child(
"covariances");
499 if (!has_cov && !has_corr) {
509 for (
const auto &row : p[
"covariances"].children()) {
511 for (
const auto &val : row.children()) {
512 covmat(i, j) = val.val_double();
518 std::vector<double> variances;
519 for (
const auto &
v : p[
"standard_deviations"].children()) {
520 variances.push_back(
v.val_double());
522 covmat.
ResizeTo(variances.size(), variances.size());
524 for (
const auto &row : p[
"correlations"].children()) {
526 for (
const auto &val : row.children()) {
527 covmat(i, j) = val.val_double() * variances[i] * variances[j];
541 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
544 RooArgList varList = tool->
requestArgList<RooRealVar>(p,
"variables");
545 if (!p.has_child(
"axes")) {
546 std::stringstream ss;
547 ss <<
"No axes given in '" <<
name <<
"'"
548 <<
". Using default binning (uniform; nbins=100). If needed, export the Workspace to JSON with a newer "
549 <<
"Root version that supports custom ParamHistFunc binnings(>=6.38.00)." << std::endl;
559 RooArgList readBinning(
const JSONNode &topNode,
const RooArgList &varList)
const
562 std::map<std::string, std::unique_ptr<RooRealVar>> varMap;
565 for (
const JSONNode &node : topNode[
"axes"].children()) {
566 const std::string
name = node[
"name"].val();
567 std::unique_ptr<RooRealVar> obs;
569 if (node.has_child(
"edges")) {
570 std::vector<double> edges;
571 for (
const auto &bound : node[
"edges"].children()) {
572 edges.push_back(bound.val_double());
574 obs = std::make_unique<RooRealVar>(
name.c_str(),
name.c_str(), edges.front(), edges.back());
575 RooBinning bins(obs->getMin(), obs->getMax());
578 obs->setBinning(bins);
580 obs = std::make_unique<RooRealVar>(
name.c_str(),
name.c_str(), node[
"min"].val_double(),
581 node[
"max"].val_double());
582 obs->setBins(node[
"nbins"].val_int());
585 varMap[
name] = std::move(obs);
590 for (
int i = 0; i < varList.
getSize(); ++i) {
591 const auto *refVar =
dynamic_cast<RooRealVar *
>(varList.
at(i));
595 auto it = varMap.find(refVar->GetName());
596 if (it != varMap.end()) {
597 vars.
addOwned(std::move(it->second));
606 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
618 RooAbsReal *
x = tool->
requestArg<RooAbsReal>(p,
"x");
621 std::string algo = p.has_child(
"interpolation") ? p[
"interpolation"].val() :
"poly3";
625 else if (algo ==
"poly5")
629 "': allowed are 'poly3' and 'poly5'");
631 const bool logx = p.has_child(
"logx") ? p[
"logx"].val_bool() :
false;
632 const bool logy = p.has_child(
"logy") ? p[
"logy"].val_bool() :
false;
635 std::vector<double> x0;
636 std::vector<double> y0;
637 x0.reserve(p[
"x0"].num_children());
638 y0.reserve(p[
"y0"].num_children());
640 for (
const auto &
v : p[
"x0"].children())
641 x0.push_back(
v.val_double());
642 for (
const auto &
v : p[
"y0"].children())
643 y0.push_back(
v.val_double());
645 if (x0.size() != y0.size()) {
647 ", y0 has " + std::to_string(y0.size()));
654 tool->
wsEmplace<::RooSpline>(
name.c_str(), *
x, std::span<const double>(x0.data(), x0.size()),
655 std::span<const double>(y0.data(), y0.size()), order, logx, logy);
664template <
class RooArg_t>
667 std::string
const &key()
const override;
668 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
670 const RooArg_t *pdf =
static_cast<const RooArg_t *
>(func);
671 elem[
"type"] << key();
674 elem[
"extended"] << (pdf->extendMode() != RooArg_t::CanNotBeExtended);
681 std::string
const &key()
const override;
682 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
684 const RooRealSumPdf *pdf =
static_cast<const RooRealSumPdf *
>(func);
685 elem[
"type"] << key();
695 std::string
const &key()
const override;
696 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
698 const RooRealSumFunc *pdf =
static_cast<const RooRealSumFunc *
>(func);
699 elem[
"type"] << key();
708 std::string
const &key()
const override;
709 bool exportObject(RooJSONFactoryWSTool *tool,
const RooAbsArg *func, JSONNode &elem)
const override
711 const RooHistFunc *hf =
static_cast<const RooHistFunc *
>(func);
712 elem[
"type"] << key();
713 RooDataHist
const &dh = hf->
dataHist();
721 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
727 std::unique_ptr<RooDataHist> dataHist =
729 tool->
wsEmplace<RooHistFunc>(
name, *dataHist->get(), *dataHist);
736 std::string
const &key()
const override;
737 bool exportObject(RooJSONFactoryWSTool *tool,
const RooAbsArg *func, JSONNode &elem)
const override
739 const RooHistPdf *hf =
static_cast<const RooHistPdf *
>(func);
740 elem[
"type"] << key();
741 RooDataHist
const &dh = hf->
dataHist();
749 bool importArg(RooJSONFactoryWSTool *tool,
const JSONNode &p)
const override
755 std::unique_ptr<RooDataHist> dataHist =
757 tool->
wsEmplace<RooHistPdf>(
name, *dataHist->get(), *dataHist);
764 std::string
const &key()
const override;
765 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
767 const RooBinSamplingPdf *pdf =
static_cast<const RooBinSamplingPdf *
>(func);
768 elem[
"type"] << key();
771 elem[
"epsilon"] << pdf->
epsilon();
778 std::string
const &key()
const override;
779 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
781 const RooBinWidthFunction *pdf =
static_cast<const RooBinWidthFunction *
>(func);
782 elem[
"type"] << key();
789template <
class RooArg_t>
792 std::string
const &key()
const override;
793 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
795 const RooArg_t *pdf =
static_cast<const RooArg_t *
>(func);
796 elem[
"type"] << key();
797 TString expression(pdf->expression());
798 cleanExpression(expression);
805 for (
size_t idx = pdf->nParameters(); idx--;) {
806 const RooAbsArg *par = pdf->getParameter(idx);
807 expression.ReplaceAll((
"x[" + std::to_string(idx) +
"]").c_str(), par->
GetName());
808 expression.ReplaceAll((
"@" + std::to_string(idx)).c_str(), par->
GetName());
810 elem[
"expression"] << expression.Data();
815 void cleanExpression(TString &expr)
const
832void writePolynomialBody(
const Pdf *pdf,
JSONNode &elem)
834 elem[
"x"] << pdf->x().GetName();
835 auto &coefs = elem[
"coefficients"].
set_seq();
836 for (
int i = 0; i < pdf->lowestOrder(); ++i) {
837 coefs.append_child() << (i == 0 ?
"1.0" :
"0.0");
839 for (
const auto &coef : pdf->coefList()) {
840 coefs.append_child() << coef->GetName();
844template <
class RooArg_t>
847 std::string
const &key()
const override;
848 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
850 elem[
"type"] << key();
851 writePolynomialBody(
static_cast<const RooArg_t *
>(func), elem);
858 std::string
const &key()
const override;
859 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
861 elem[
"type"] << key();
862 writePolynomialBody(
static_cast<const RooLegacyExpPoly *
>(func), elem);
869 std::string
const &key()
const override;
870 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
872 auto *pdf =
static_cast<const RooPoisson *
>(func);
873 elem[
"type"] << key();
874 elem[
"x"] << pdf->getX().GetName();
875 elem[
"mean"] << pdf->getMean().GetName();
876 elem[
"integer"] << !pdf->getNoRounding();
883 std::string
const &key()
const override;
884 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
886 auto *pdf =
static_cast<const RooDecay *
>(func);
887 elem[
"type"] << key();
888 elem[
"t"] << pdf->getT().GetName();
889 elem[
"tau"] << pdf->getTau().GetName();
890 elem[
"resolutionModel"] << pdf->getModel().GetName();
891 elem[
"decayType"] << pdf->getDecayType();
899 std::string
const &key()
const override;
900 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
902 auto *pdf =
static_cast<const RooTruthModel *
>(func);
903 elem[
"type"] << key();
904 elem[
"x"] << pdf->convVar().GetName();
912 std::string
const &key()
const override;
913 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
915 auto *pdf =
static_cast<const RooGaussModel *
>(func);
916 elem[
"type"] << key();
917 elem[
"x"] << pdf->convVar().GetName();
918 elem[
"mean"] << pdf->getMean().GetName();
919 elem[
"sigma"] << pdf->getSigma().GetName();
926 std::string
const &key()
const override;
927 bool exportObject(RooJSONFactoryWSTool *tool,
const RooAbsArg *func, JSONNode &elem)
const override
929 auto *pdf =
static_cast<const RooLognormal *
>(func);
931 elem[
"type"] << key();
932 elem[
"x"] << pdf->getX().GetName();
934 auto &m0 = pdf->getMedian();
935 auto &k = pdf->getShapeK();
937 if (pdf->useStandardParametrization()) {
938 elem[
"mu"] << m0.GetName();
939 elem[
"sigma"] << k.GetName();
951 std::string
const &key()
const override;
952 bool exportObject(RooJSONFactoryWSTool *tool,
const RooAbsArg *func, JSONNode &elem)
const override
954 auto *pdf =
static_cast<const RooExponential *
>(func);
955 elem[
"type"] << key();
956 elem[
"x"] << pdf->variable().GetName();
957 auto &
c = pdf->coefficient();
958 if (pdf->negateCoefficient()) {
959 elem[
"c"] <<
c.GetName();
970 std::string
const &key()
const override;
971 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
973 auto *pdf =
static_cast<const RooMultiVarGaussian *
>(func);
974 elem[
"type"] << key();
977 elem[
"covariances"].
fill_mat(pdf->covarianceMatrix());
984 std::string
const &key()
const override;
985 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
987 auto *pdf =
static_cast<const RooTFnBinding *
>(func);
988 elem[
"type"] << key();
990 TString formula(pdf->function().GetExpFormula());
991 formula.ReplaceAll(
"x", pdf->observables()[0].GetName());
992 formula.ReplaceAll(
"y", pdf->observables()[1].GetName());
993 formula.ReplaceAll(
"z", pdf->observables()[2].GetName());
994 for (
size_t i = 0; i < pdf->parameters().
size(); ++i) {
996 formula.ReplaceAll(pname, pdf->parameters()[i].GetName());
998 elem[
"expression"] << formula.Data();
1005 std::string
const &key()
const override;
1006 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
1008 auto *pdf =
static_cast<const RooDerivative *
>(func);
1009 elem[
"type"] << key();
1010 elem[
"x"] << pdf->getX().GetName();
1011 elem[
"function"] << pdf->getFunc().GetName();
1012 if (!pdf->getNset().empty()) {
1015 elem[
"order"] << pdf->order();
1016 elem[
"eps"] << pdf->eps();
1023 std::string
const &key()
const override;
1024 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
1026 auto *integral =
static_cast<const RooRealIntegral *
>(func);
1027 elem[
"type"] << key();
1028 std::string integrand = integral->integrand().GetName();
1030 elem[
"integrand"] << integrand;
1031 if (integral->intRange()) {
1032 elem[
"domain"] << integral->intRange();
1035 if (RooArgSet
const *funcNormSet = integral->funcNormSet()) {
1044 std::string
const &key()
const override;
1045 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
1047 auto *pdf =
static_cast<const RooFFTConvPdf *
>(func);
1048 elem[
"type"] << key();
1049 if (
auto convFunc = pdf->getPdfConvVar()) {
1050 elem[
"conv_func"] << convFunc->GetName();
1052 elem[
"conv_var"] << pdf->getConvVar().GetName();
1053 elem[
"pdf1"] << pdf->getPdf1().GetName();
1054 elem[
"pdf2"] << pdf->getPdf2().GetName();
1055 elem[
"ipOrder"] << pdf->getInterpolationOrder();
1062 std::string
const &key()
const override;
1063 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
1065 auto *pdf =
static_cast<const RooExtendPdf *
>(func);
1066 elem[
"type"] << key();
1067 if (
auto rangeName = pdf->getRangeName()) {
1068 elem[
"range"] << rangeName->GetName();
1070 elem[
"pdf"] << pdf->pdf().GetName();
1071 elem[
"norm"] << pdf->getN().GetName();
1078 std::string
const &key()
const override;
1079 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, JSONNode &elem)
const override
1081 auto *pdf =
static_cast<const ParamHistFunc *
>(func);
1082 elem[
"type"] << key();
1085 writeBinningInfo(pdf, elem);
1090 void writeBinningInfo(
const ParamHistFunc *pdf, JSONNode &elem)
const
1092 auto &observablesNode = elem[
"axes"].
set_seq();
1095 std::string
name = var->GetName();
1097 JSONNode &obsNode = observablesNode.append_child().set_map();
1098 obsNode[
"name"] <<
name;
1099 auto const &binning = var->getBinning();
1100 if (binning.isUniform()) {
1101 obsNode[
"min"] << var->getMin();
1102 obsNode[
"max"] << var->getMax();
1103 obsNode[
"nbins"] << var->getBins();
1105 auto &edges = obsNode[
"edges"].
set_seq();
1107 for (
int i = 0; i < binning.numBins(); ++i) {
1108 edges.append_child() << binning.binHigh(i);
1117 std::string
const &key()
const override;
1119 bool exportObject(RooJSONFactoryWSTool *,
const RooAbsArg *func, RooFit::Detail::JSONNode &elem)
const override
1121 auto const *rs =
static_cast<RooSpline
const *
>(func);
1123 elem[
"type"] << key();
1126 elem[
"x"] << rs->x().GetName();
1130 elem[
"interpolation"] << (rs->order() == 5 ?
"poly5" :
"poly3");
1131 elem[
"logx"] << rs->logx();
1132 elem[
"logy"] << rs->logy();
1135 TSpline
const &sp = rs->spline();
1136 auto &x0 = elem[
"x0"].
set_seq();
1137 auto &y0 = elem[
"y0"].
set_seq();
1139 const int np = sp.
GetNp();
1140 for (
int i = 0; i < np; ++i) {
1141 double xk = 0.0, yk = 0.0;
1143 x0.append_child() << xk;
1144 y0.append_child() << yk;
1151#define DEFINE_EXPORTER_KEY(class_name, name) \
1152 std::string const &class_name::key() const \
1154 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, false, Range_t > static_range_cast(Range_t &&coll)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
int Int_t
Signed integer 4 bytes (int).
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.
Int_t getSize() const
Return the number of elements in the collection.
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.
RooAbsArg * at(Int_t idx) const
Return object at given index, or nullptr if index is out of range.
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)
RooDataHist & dataHist()
Return RooDataHist that is represented.
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)