80bool isReservedExpressionIdentifier(
const std::string &arg)
82 return arg ==
"PI" || arg ==
"EULER" || arg ==
"TMath";
99std::set<std::string> extractArguments(std::string expr)
102 expr.erase(std::remove_if(expr.begin(), expr.end(), [](
unsigned char c) { return std::isspace(c); }), expr.end());
104 std::set<std::string> arguments;
105 size_t startidx = expr.size();
106 for (
size_t i = 0; i < expr.size(); ++i) {
107 if (startidx >= expr.size()) {
108 if (isalpha(expr[i])) {
113 startidx = expr.size();
117 if (!isdigit(expr[i]) && !isalpha(expr[i]) && expr[i] !=
'_') {
118 if (expr[i] ==
'(') {
119 startidx = expr.size();
122 std::string arg(expr.substr(startidx, i - startidx));
123 startidx = expr.size();
124 if (!isReservedExpressionIdentifier(arg)) {
125 arguments.insert(arg);
130 if (startidx < expr.size()) {
131 std::string arg(expr.substr(startidx));
132 if (!isReservedExpressionIdentifier(arg)) {
133 arguments.insert(arg);
139void replaceIdentifier(
TString &expr, std::string_view identifier, std::string_view replacement)
141 std::string in(expr.
Data());
143 out.reserve(in.size());
145 for (std::size_t pos = 0; pos < in.size();) {
146 const bool matches = in.compare(pos, identifier.size(), identifier) == 0;
147 const bool beforeIdentifier =
148 pos > 0 && (std::isalnum(
static_cast<unsigned char>(in[pos - 1])) || in[pos - 1] ==
'_');
149 const std::size_t end = pos + identifier.size();
150 const bool afterIdentifier =
151 end < in.size() && (std::isalnum(
static_cast<unsigned char>(in[end])) || in[end] ==
'_');
152 if (matches && !beforeIdentifier && !afterIdentifier) {
153 out.append(replacement);
156 out.push_back(in[pos]);
164void translateImportedExpression(
TString &expr)
166 replaceIdentifier(expr,
"PI",
"TMath::Pi()");
167 replaceIdentifier(expr,
"EULER",
"TMath::E()");
170int readPositiveInteger(
const JSONNode &node,
const std::string &context)
177 value >
static_cast<double>(std::numeric_limits<int>::max())) {
180 return static_cast<int>(
value);
183std::unique_ptr<RooAbsBinning>
184readFormulaAxisBinning(
const JSONNode &axis,
const std::string &axisName,
const std::string &formulaName)
186 const std::string context =
"axis '" + axisName +
"' of generic formula '" + formulaName +
"'";
187 const bool hasEdges = axis.
has_child(
"edges");
188 const bool hasMin = axis.
has_child(
"min");
189 const bool hasMax = axis.
has_child(
"max");
190 const bool hasNBins = axis.
has_child(
"nbins");
192 if (hasEdges && (hasMin || hasMax || hasNBins)) {
197 const JSONNode &edgesNode = axis[
"edges"];
198 if (!edgesNode.
is_seq()) {
202 std::vector<double> edges;
204 for (
const JSONNode &edgeNode : edgesNode.children()) {
205 if (!edgeNode.is_number()) {
208 const double edge = edgeNode.val_double();
209 if (!std::isfinite(edge)) {
212 if (!edges.empty() && edge <= edges.back()) {
215 edges.push_back(edge);
217 if (edges.size() < 2) {
220 return std::make_unique<RooBinning>(
static_cast<int>(edges.size() - 1), edges.data());
223 if (!hasMin || !hasMax || !hasNBins) {
227 if (!axis[
"min"].is_number() || !axis[
"max"].is_number()) {
232 if (!std::isfinite(min) || !std::isfinite(max) || max <= min) {
235 return std::make_unique<RooUniformBinning>(min, max, readPositiveInteger(axis[
"nbins"], context));
238template <
class RooArg_t>
239void importFormulaBinnings(RooArg_t &arg,
const JSONNode &node)
245 const JSONNode &axes = node[
"axes"];
248 "' must be a sequence");
251 std::set<std::string> axisNames;
252 for (
const JSONNode &axis : axes.children()) {
255 "' must be a map with a \"name\"");
257 const std::string axisName = axis[
"name"].
val();
258 if (!axisNames.insert(axisName).second) {
262 auto *observable =
dynamic_cast<RooAbsRealLValue *
>(arg.getParameter(axisName.c_str()));
265 "axis '" + axisName +
"' is not a real-valued formula variable of generic formula '" + arg.GetName() +
"'");
268 std::unique_ptr<RooAbsBinning> binning = readFormulaAxisBinning(axis, axisName, arg.GetName());
269 arg.setBinning(*observable, *binning,
false);
273template <
class RooArg_t>
277 if (!
p.has_child(
"expression")) {
280 TString formula(
p[
"expression"].val());
281 translateImportedExpression(formula);
283 for (
const auto &
d : extractArguments(formula.Data())) {
286 RooArg_t arg{
name.c_str(), formula, dependents};
287 importFormulaBinnings(arg,
p);
340template <
bool Div
ideByBinW
idth>
361 obs->GetName() +
"' as indicated by parent RooBinSamplingPdf '" +
name +
365 if (!
p.has_child(
"epsilon")) {
368 double epsilon(
p[
"epsilon"].val_double());
375template <
class RooArg_t>
381 if constexpr (std::is_same_v<RooArg_t, RooRealSumPdf>) {
382 const bool extended =
p.has_child(
"extended") &&
p[
"extended"].val_bool();
390template <
class RooArg_t>
394 if (!
p.has_child(
"coefficients")) {
401 for (
const auto &coef :
p[
"coefficients"].children()) {
405 if (order == 0 && (coef.val() ==
"1.0" || coef.val() ==
"1")) {
407 }
else if (coefs.empty() && (coef.val() ==
"0.0" || coef.val() ==
"0")) {
467 if (
p.has_child(
"normalization")) {
469 normSetPtr = &normSet;
472 bool hasDomain =
p.has_child(
"domain");
474 domain =
p[
"domain"].val();
478 hasDomain ? domain.c_str() :
nullptr);
487 Int_t order =
p[
"order"].val_int();
488 double eps =
p[
"eps"].val_double();
489 if (
p.has_child(
"normalization")) {
503 Int_t order =
p[
"ipOrder"].val_int();
506 if (
p.has_child(
"conv_func")) {
520 if (
p.has_child(
"range")) {
521 std::string rangeName =
p[
"range"].val();
536 const std::string muName =
p[
"mu"].val();
537 const std::string sigmaName =
p[
"sigma"].val();
538 const bool isTransformed =
endsWith(muName,
"_lognormal_log");
539 const std::string suffixToRemove = isTransformed ?
"_lognormal_log" :
"";
584 const std::string constParamName =
p[
"c"].val();
585 const bool isInverted =
endsWith(constParamName,
"_exponential_inverted");
586 const std::string suffixToRemove = isInverted ?
"_exponential_inverted" :
"";
597 bool has_cov =
p.has_child(
"covariances");
598 bool has_corr =
p.has_child(
"correlations") &&
p.has_child(
"standard_deviations");
599 if (!has_cov && !has_corr) {
606 int n =
p[
"covariances"].num_children();
609 for (
const auto &row :
p[
"covariances"].children()) {
611 for (
const auto &val : row.children()) {
612 covmat(i, j) = val.val_double();
618 std::vector<double> variances;
619 variances <<
p[
"standard_deviations"];
620 covmat.
ResizeTo(variances.size(), variances.size());
622 for (
const auto &row :
p[
"correlations"].children()) {
624 for (
const auto &val : row.children()) {
625 covmat(i, j) = val.val_double() * variances[i] * variances[j];
651 if (!
p.has_child(
"parameters")) {
656 if (!
p.has_child(
"axes")) {
657 std::stringstream ss;
658 ss <<
"No axes given in '" <<
name <<
"'"
659 <<
". Using default binning (uniform; nbins=100). If needed, export the Workspace to JSON with a newer "
660 <<
"Root version that supports custom ParamHistFunc binnings(>=6.38.00)." << std::endl;
674 if (!
p.has_child(
"x")) {
677 if (!
p.has_child(
"x0") || !
p.has_child(
"y0")) {
684 std::string algo =
p.has_child(
"interpolation") ?
p[
"interpolation"].val() :
"poly3";
688 else if (algo ==
"poly5")
692 "': allowed are 'poly3' and 'poly5'");
694 const bool logx =
p.has_child(
"logx") ?
p[
"logx"].val_bool() :
false;
695 const bool logy =
p.has_child(
"logy") ?
p[
"logy"].val_bool() :
false;
698 std::vector<double> x0;
699 std::vector<double> y0;
703 if (x0.size() != y0.size()) {
705 ", y0 has " + std::to_string(y0.size()));
713 std::span<const double>(y0.data(), y0.size()), order, logx, logy);
721template <
class RooArg_t>
724 const RooArg_t *pdf =
static_cast<const RooArg_t *
>(func);
728 elem[
"extended"] << (pdf->extendMode() != RooArg_t::CanNotBeExtended);
732template <
class RooArg_t>
735 auto const *pdf =
static_cast<const RooArg_t *
>(func);
739 if constexpr (std::is_same_v<RooArg_t, RooRealSumPdf>) {
745template <
class RooArg_t>
748 const RooArg_t *hf =
static_cast<const RooArg_t *
>(func);
755template <
class RooArg_t>
759 if (!
p.has_child(
"data")) {
762 std::unique_ptr<RooDataHist> dataHist =
764 tool->
wsEmplace<RooArg_t>(
name, *dataHist->get(), *dataHist);
774 elem[
"epsilon"] << pdf->
epsilon();
781 elem[
"type"] << (pdf->
divideByBinWidth() ?
"inverse_binvolume" :
"binvolume");
786void cleanExpression(
TString &expr)
792 replaceIdentifier(expr,
"TMath::Exp",
"exp");
793 replaceIdentifier(expr,
"TMath::Min",
"min");
794 replaceIdentifier(expr,
"TMath::Max",
"max");
795 replaceIdentifier(expr,
"TMath::Log",
"log");
796 replaceIdentifier(expr,
"TMath::Log10",
"log10");
797 replaceIdentifier(expr,
"TMath::Cos",
"cos");
798 replaceIdentifier(expr,
"TMath::CosH",
"cosh");
799 replaceIdentifier(expr,
"TMath::Sin",
"sin");
800 replaceIdentifier(expr,
"TMath::SinH",
"sinh");
801 replaceIdentifier(expr,
"TMath::Sqrt",
"sqrt");
802 replaceIdentifier(expr,
"TMath::Power",
"pow");
803 replaceIdentifier(expr,
"TMath::Erf",
"erf");
804 replaceIdentifier(expr,
"TMath::Erfc",
"erfc");
805 replaceIdentifier(expr,
"TMath::Floor",
"floor");
806 replaceIdentifier(expr,
"TMath::Ceil",
"ceil");
807 replaceIdentifier(expr,
"TMath::Abs",
"abs");
808 replaceIdentifier(expr,
"TMath::Tan",
"tan");
809 replaceIdentifier(expr,
"TMath::TanH",
"tanh");
810 replaceIdentifier(expr,
"TMath::ASin",
"asin");
811 replaceIdentifier(expr,
"TMath::ACos",
"acos");
812 replaceIdentifier(expr,
"TMath::ATan",
"atan");
813 replaceIdentifier(expr,
"TMath::ATan2",
"atan2");
814 replaceIdentifier(expr,
"TMath::Pi()",
"PI");
815 replaceIdentifier(expr,
"TMath::E()",
"EULER");
818template <
class RooArg_t>
821 const RooArg_t *pdf =
static_cast<const RooArg_t *
>(func);
823 TString expression(pdf->expression());
824 cleanExpression(expression);
831 for (
size_t idx = pdf->nParameters(); idx--;) {
832 const RooAbsArg *par = pdf->getParameter(idx);
833 expression.ReplaceAll((
"x[" + std::to_string(idx) +
"]").c_str(), par->
GetName());
834 expression.ReplaceAll((
"@" + std::to_string(idx)).c_str(), par->
GetName());
836 elem[
"expression"] << expression.Data();
838 for (
const RooAbsArg *dependent : pdf->dependents()) {
848 auto &axes = elem[
"axes"];
849 if (!axes.is_seq()) {
852 auto &axis = axes.append_child().set_map();
853 axis[
"name"] << observable->GetName();
862template <
class RooArg_t>
865 auto const *pdf =
static_cast<const RooArg_t *
>(func);
867 elem[
"x"] << pdf->x().GetName();
868 auto &coefs = elem[
"coefficients"].
set_seq();
869 for (
int i = 0; i < pdf->lowestOrder(); ++i) {
872 for (
const auto &coef : pdf->coefList()) {
880 auto *pdf =
static_cast<const RooPoisson *
>(func);
882 elem[
"x"] << pdf->getX().GetName();
883 elem[
"mean"] << pdf->getMean().GetName();
884 elem[
"integer"] << !pdf->getNoRounding();
894 auto *pdf =
static_cast<const RooDecay *
>(func);
896 elem[
"t"] << pdf->getT().GetName();
897 elem[
"tau"] << pdf->getTau().GetName();
898 elem[
"resolutionModel"] << pdf->getModel().GetName();
899 elem[
"decayType"] << pdf->getDecayType();
912 elem[
"x"] << pdf->convVar().GetName();
921 elem[
"x"] << pdf->convVar().GetName();
922 elem[
"mean"] << pdf->getMean().GetName();
923 elem[
"sigma"] << pdf->getSigma().GetName();
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();
952 elem[
"x"] << pdf->variable().GetName();
953 auto &
c = pdf->coefficient();
954 if (pdf->negateCoefficient()) {
955 elem[
"c"] <<
c.GetName();
969 elem[
"covariances"].
fill_mat(pdf->covarianceMatrix());
978 TString formula(pdf->function().GetExpFormula());
979 formula.ReplaceAll(
"x", pdf->observables()[0].GetName());
980 formula.ReplaceAll(
"y", pdf->observables()[1].GetName());
981 formula.ReplaceAll(
"z", pdf->observables()[2].GetName());
982 for (
size_t i = 0; i < pdf->parameters().
size(); ++i) {
984 formula.ReplaceAll(pname, pdf->parameters()[i].GetName());
986 elem[
"expression"] << formula.Data();
994 elem[
"x"] << pdf->getX().GetName();
995 elem[
"function"] << pdf->getFunc().GetName();
996 if (!pdf->getNset().empty()) {
999 elem[
"order"] << pdf->order();
1000 elem[
"eps"] << pdf->eps();
1007 elem[
"type"] << key;
1008 std::string integrand = integral->integrand().GetName();
1009 elem[
"integrand"] << integrand;
1010 if (integral->intRange()) {
1011 elem[
"domain"] << integral->intRange();
1014 if (
RooArgSet const *funcNormSet = integral->funcNormSet()) {
1023 elem[
"type"] << key;
1024 if (
auto convFunc = pdf->getPdfConvVar()) {
1025 elem[
"conv_func"] << convFunc->GetName();
1027 elem[
"conv_var"] << pdf->getConvVar().GetName();
1028 elem[
"pdf1"] << pdf->getPdf1().GetName();
1029 elem[
"pdf2"] << pdf->getPdf2().GetName();
1030 elem[
"ipOrder"] << pdf->getInterpolationOrder();
1037 elem[
"type"] << key;
1038 if (
auto rangeName = pdf->getRangeName()) {
1039 elem[
"range"] << rangeName->GetName();
1041 elem[
"pdf"] << pdf->pdf().GetName();
1042 elem[
"norm"] << pdf->getN().GetName();
1049 elem[
"type"] << key;
1052 auto &observablesNode = elem[
"axes"].
set_seq();
1062 auto const *rs =
static_cast<RooSpline const *
>(func);
1064 elem[
"type"] << key;
1067 elem[
"x"] << rs->x().GetName();
1071 elem[
"interpolation"] << (rs->order() == 5 ?
"poly5" :
"poly3");
1072 elem[
"logx"] << rs->logx();
1073 elem[
"logy"] << rs->logy();
1076 TSpline const &sp = rs->spline();
1077 auto &x0 = elem[
"x0"].
set_seq();
1078 auto &y0 = elem[
"y0"].
set_seq();
1081 for (
int i = 0; i <
np; ++i) {
1082 double xk = 0.0, yk = 0.0;
1084 x0.append_child() << xk;
1085 y0.append_child() << yk;
1093 if (node[
"type"].val() !=
"density_function_dist")
1099 bool selfNormalized =
false;
1101 auto sn = node.find(
"self_normalized");
1104 sn = node.find(
"selfnormalized");
1106 selfNormalized = sn->val_bool();
1118 node[
"type"] << key;
1122 auto const *funcProxy =
dynamic_cast<RooRealProxy const *
>(pdf->getProxy(0));
1123 if (!funcProxy || !funcProxy->absArg())
1126 node[
"function"] << funcProxy->absArg()->GetName();
1127 if (pdf->selfNormalized())
1128 node[
"self_normalized"] <<
true;
1149 FuncExporter(std::string key,
bool autoExportDependants)
1150 : _key{std::move(key)}, _autoExportDependants{autoExportDependants}
1153 std::string
const &key()
const override {
return _key; }
1154 bool autoExportDependants()
const override {
return _autoExportDependants; }
1157 return Func(tool, func, elem, _key);
1161 const std::string _key;
1162 const bool _autoExportDependants;
1172void registerExporter(
TClass const *cl, std::string key,
bool topPriority =
true,
bool autoExportDependants =
true)
1179 registerImporter<importWrapperPdf>(
"density_function_dist");
1180 registerImporter<importExtendPdf>(
"rate_extended_dist");
1181 registerImporter<importProduct>(
"product",
false);
1182 registerImporter<importProdPdf>(
"product_dist",
false);
1183 registerImporter<importAddition>(
"sum",
false);
1184 registerImporter<importAddPdf>(
"mixture_dist",
false);
1185 registerImporter<importAddModel>(
"mixture_resolution_model",
false);
1186 registerImporter<importBinSamplingPdf>(
"binsampling_dist",
false);
1187 registerImporter<importBinWidthFunction<false>>(
"binvolume",
false);
1188 registerImporter<importBinWidthFunction<true>>(
"inverse_binvolume",
false);
1189 registerImporter<importPolynomial<RooLegacyExpPoly>>(
"legacy_exp_poly_dist",
false);
1190 registerImporter<importExponential>(
"exponential_dist",
false);
1191 registerImporter<importFormulaArg<RooFormulaVar>>(
"generic",
false);
1192 registerImporter<importFormulaArg<RooFormulaVar>>(
"generic_function",
false);
1193 registerImporter<importFormulaArg<RooGenericPdf>>(
"generic_dist",
false);
1194 registerImporter<importHist<RooHistFunc>>(
"histogram",
false);
1195 registerImporter<importHist<RooHistFunc>>(
"step",
false);
1196 registerImporter<importHist<RooHistPdf>>(
"histogram_dist",
false);
1197 registerImporter<importLogNormal>(
"lognormal_dist",
false);
1198 registerImporter<importMultiVarGaussian>(
"multivariate_normal_dist",
false);
1199 registerImporter<importPoisson>(
"poisson_dist",
false);
1200 registerImporter<importDecay>(
"decay_dist",
false);
1201 registerImporter<importTruthModel>(
"delta_resolution_model",
false);
1202 registerImporter<importGaussModel>(
"gauss_resolution_model",
false);
1203 registerImporter<importPolynomial<RooPolynomial>>(
"polynomial_dist",
false);
1204 registerImporter<importPolynomial<RooPolyVar>>(
"polynomial",
false);
1205 registerImporter<importRealSum<RooRealSumPdf>>(
"weighted_sum_dist",
false);
1206 registerImporter<importRealSum<RooRealSumFunc>>(
"weighted_sum",
false);
1207 registerImporter<importRealIntegral>(
"integral",
false);
1208 registerImporter<importDerivative>(
"derivative",
false);
1209 registerImporter<importFFTConvPdf>(
"fft_convolution_dist",
false);
1210 registerImporter<importExtendPdf>(
"extend_pdf",
false);
1211 registerImporter<importParamHistFunc>(
"step",
false);
1212 registerImporter<importSpline>(
"spline",
false);
1215 registerExporter<exportAddPdf<RooAddPdf>>(
RooAddPdf::Class(),
"mixture_dist",
false);
1216 registerExporter<exportAddPdf<RooAddModel>>(
RooAddModel::Class(),
"mixture_resolution_model",
false);
1219 registerExporter<exportPolynomial<RooLegacyExpPoly>>(
RooLegacyExpPoly::Class(),
"legacy_exp_poly_dist",
false);
1222 registerExporter<exportFormulaArg<RooGenericPdf>>(
RooGenericPdf::Class(),
"generic_dist",
false);
1224 registerExporter<exportHist<RooHistPdf>>(
RooHistPdf::Class(),
"histogram_dist",
false);
1228 registerExporter<exportDecay>(
RooDecay::Class(),
"decay_dist",
false,
false);
1231 registerExporter<exportPolynomial<RooPolynomial>>(
RooPolynomial::Class(),
"polynomial_dist",
false);
1232 registerExporter<exportPolynomial<RooPolyVar>>(
RooPolyVar::Class(),
"polynomial",
false);
1234 registerExporter<exportRealSum<RooRealSumPdf>>(
RooRealSumPdf::Class(),
"weighted_sum_dist",
false);
bool endsWith(std::string_view str, std::string_view suffix)
std::string removeSuffix(std::string_view str, std::string_view suffix)
void writeAxisBinning(JSONNode &node, const RooAbsBinning &binning)
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
winID h TVirtualViewer3D TVirtualGLPainter p
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 value
A class which maps the current values of a RooRealVar (or a set of RooRealVars) to one of a number of...
Common abstract base class for objects that represent a value and a "shape" in RooFit.
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.
Abstract base class for RooRealVar binning definitions.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
virtual RooAbsArg * addClone(const RooAbsArg &var, bool silent=false)
Add a clone of the specified argument to list.
RooAbsArg * find(const char *name) const
Find object with given name in list.
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
Abstract interface for all probability density functions.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
Abstract base class for objects that represent a real value and implements functionality common to al...
RooAddModel is an efficient implementation of a sum of PDFs of the form.
Efficient implementation of a sum of PDFs of the form.
Calculates the sum of a set of RooAbsReal terms, or when constructed with two sets,...
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
The RooBinSamplingPdf is supposed to be used as an adapter between a continuous PDF and a binned dist...
const RooAbsPdf & pdf() const
const RooAbsReal & observable() const
Returns the bin width (or volume) given a RooHistFunc.
bool divideByBinWidth() const
const RooHistFunc & histFunc() const
Container class to hold N-dimensional binned data.
double const * weightArray() const
const RooArgSet * get() const override
Get bin centre of current bin.
Single or double sided decay function that can be analytically convolved with any RooResolutionModel ...
Represents the first, second, or third order derivative of any RooAbsReal as calculated (numerically)...
RooExtendPdf is a wrapper around an existing PDF that adds a parameteric extended likelihood term to ...
PDF for the numerical (FFT) convolution of two PDFs.
virtual std::string val() const =0
virtual double val_double() const
virtual JSONNode & set_map()=0
virtual JSONNode & append_child()=0
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 bool has_child(std::string const &) const =0
void fill_mat(Matrix const &mat)
virtual bool is_number() const
Class RooGaussModel implements a RooResolutionModel that models a Gaussian distribution.
A real-valued function sampled from a multidimensional histogram.
Multivariate Gaussian p.d.f.
Holds the configuration parameters of the various numeric integrators used by RooRealIntegral.
Efficient implementation of a product of PDFs of the form.
Represents the product of a given set of RooAbsReal objects.
Performs hybrid numerical/analytical integrals of RooAbsReal objects.
Implements a PDF constructed from a sum of functions:
Variable that can be changed from the outside.
RooResolutionModel is the base class for PDFs that represent a resolution model that can be convolute...
A RooFit class for creating spline functions.
Use TF1, TF2, TF3 functions as RooFit objects.
Implements a RooResolution model that corresponds to a delta function.
The RooWrapperPdf is a class that can be used to convert a function into a PDF.
TClass instances represent classes, structs and namespaces in the ROOT type system.
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.
Base class for spline implementation containing the Draw/Paint methods.
virtual void GetKnot(Int_t i, Double_t &x, Double_t &y) const =0
virtual Int_t GetNp() const
const char * Data() const
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)
bool registerImporter(const std::string &key, std::unique_ptr< const Importer > f, bool topPriority=true)
static bool registerExporter(const TClass *key, bool topPriority=true)
bool registerExporter(const TClass *key, std::unique_ptr< const Exporter > f, bool topPriority=true)
#define STATIC_EXECUTE(MY_FUNC)