Skip to content

Commit 06e79bf

Browse files
authored
[RF][HS3] Support RooChebychev and RooPolyVar, RooIntergral naming fix
HS3 changes - Bug fix with integral names and including RooPolyVar and RooChebychev classes. * Include RooPolyVar into RooPolynomial templates * Include RooChebychev into generic pdf streamer * Integration name character replacements
1 parent 232b846 commit 06e79bf

File tree

3 files changed

+35
-7
lines changed

3 files changed

+35
-7
lines changed

roofit/hs3/src/JSONFactories_RooFitCore.cxx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <RooMultiVarGaussian.h>
3030
#include <RooPoisson.h>
3131
#include <RooPolynomial.h>
32+
#include <RooPolyVar.h>
3233
#include <RooRealSumFunc.h>
3334
#include <RooRealSumPdf.h>
3435
#include <RooRealVar.h>
@@ -195,7 +196,7 @@ class RooRealSumFuncFactory : public RooFit::JSONIO::Importer {
195196
return true;
196197
}
197198
};
198-
199+
template <class RooArg_t>
199200
class RooPolynomialFactory : public RooFit::JSONIO::Importer {
200201
public:
201202
bool importArg(RooJSONFactoryWSTool *tool, const JSONNode &p) const override
@@ -222,7 +223,7 @@ class RooPolynomialFactory : public RooFit::JSONIO::Importer {
222223
++order;
223224
}
224225

225-
tool->wsEmplace<RooPolynomial>(name, *x, coefs, lowestOrder);
226+
tool->wsEmplace<RooArg_t>(name, *x, coefs, lowestOrder);
226227
return true;
227228
}
228229
};
@@ -565,13 +566,13 @@ class RooFormulaArgStreamer : public RooFit::JSONIO::Exporter {
565566
return true;
566567
}
567568
};
568-
569+
template <class RooArg_t>
569570
class RooPolynomialStreamer : public RooFit::JSONIO::Exporter {
570571
public:
571572
std::string const &key() const override;
572573
bool exportObject(RooJSONFactoryWSTool *, const RooAbsArg *func, JSONNode &elem) const override
573574
{
574-
auto *pdf = static_cast<const RooPolynomial *>(func);
575+
auto *pdf = static_cast<const RooArg_t *>(func);
575576
elem["type"] << key();
576577
elem["x"] << pdf->x().GetName();
577578
auto &coefs = elem["coefficients"].set_seq();
@@ -709,6 +710,14 @@ class RooRealIntegralStreamer : public RooFit::JSONIO::Exporter {
709710
bool exportObject(RooJSONFactoryWSTool *, const RooAbsArg *func, JSONNode &elem) const override
710711
{
711712
auto *integral = static_cast<const RooRealIntegral *>(func);
713+
std::string name = elem["name"].val();
714+
for (char& c : name ) {
715+
if (c == '[' || c == '|' || c==',') {
716+
c = '_';
717+
}
718+
}
719+
name.erase(std::remove(name.begin(), name.end(), ']'), name.end());
720+
elem["name"] << name;
712721
elem["type"] << key();
713722
elem["integrand"] << integral->integrand().GetName();
714723
if (integral->intRange()) {
@@ -743,7 +752,10 @@ DEFINE_EXPORTER_KEY(RooHistPdfStreamer, "histogram_dist");
743752
DEFINE_EXPORTER_KEY(RooLogNormalStreamer, "lognormal_dist");
744753
DEFINE_EXPORTER_KEY(RooMultiVarGaussianStreamer, "multivariate_normal_dist");
745754
DEFINE_EXPORTER_KEY(RooPoissonStreamer, "poisson_dist");
746-
DEFINE_EXPORTER_KEY(RooPolynomialStreamer, "polynomial_dist");
755+
template <>
756+
DEFINE_EXPORTER_KEY(RooPolynomialStreamer<RooPolynomial>, "polynomial_dist");
757+
template <>
758+
DEFINE_EXPORTER_KEY(RooPolynomialStreamer<RooPolyVar>, "polynomial");
747759
DEFINE_EXPORTER_KEY(RooRealSumFuncStreamer, "weighted_sum");
748760
DEFINE_EXPORTER_KEY(RooRealSumPdfStreamer, "weighted_sum_dist");
749761
DEFINE_EXPORTER_KEY(RooTFnBindingStreamer, "generic_function");
@@ -768,7 +780,8 @@ STATIC_EXECUTE([]() {
768780
registerImporter<RooLogNormalFactory>("lognormal_dist", false);
769781
registerImporter<RooMultiVarGaussianFactory>("multivariate_normal_dist", false);
770782
registerImporter<RooPoissonFactory>("poisson_dist", false);
771-
registerImporter<RooPolynomialFactory>("polynomial_dist", false);
783+
registerImporter<RooPolynomialFactory<RooPolynomial>>("polynomial_dist", false);
784+
registerImporter<RooPolynomialFactory<RooPolyVar>>("polynomial", false);
772785
registerImporter<RooRealSumPdfFactory>("weighted_sum_dist", false);
773786
registerImporter<RooRealSumFuncFactory>("weighted_sum", false);
774787
registerImporter<RooRealIntegralFactory>("integral", false);
@@ -785,7 +798,8 @@ STATIC_EXECUTE([]() {
785798
registerExporter<RooLogNormalStreamer>(RooLognormal::Class(), false);
786799
registerExporter<RooMultiVarGaussianStreamer>(RooMultiVarGaussian::Class(), false);
787800
registerExporter<RooPoissonStreamer>(RooPoisson::Class(), false);
788-
registerExporter<RooPolynomialStreamer>(RooPolynomial::Class(), false);
801+
registerExporter<RooPolynomialStreamer<RooPolynomial>>(RooPolynomial::Class(), false);
802+
registerExporter<RooPolynomialStreamer<RooPolyVar>>(RooPolyVar::Class(), false);
789803
registerExporter<RooRealSumFuncStreamer>(RooRealSumFunc::Class(), false);
790804
registerExporter<RooRealSumPdfStreamer>(RooRealSumPdf::Class(), false);
791805
registerExporter<RooTFnBindingStreamer>(RooTFnBinding::Class(), false);

roofit/hs3/src/RooFitHS3_wsexportkeys.cxx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ auto RooFitHS3_wsexportkeys = R"({
4242
"sigma": "sigma"
4343
}
4444
},
45+
"RooChebychev": {
46+
"type": "chebychev_dist",
47+
"proxies": {
48+
"x": "x",
49+
"coefList": "coefficients"
50+
}
51+
},
4552
"RooCrystalBall": {
4653
"type": "crystalball_doublesided_dist",
4754
"proxies": {

roofit/hs3/src/RooFitHS3_wsfactoryexpressions.cxx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ auto RooFitHS3_wsfactoryexpressions = R"({
3636
"n"
3737
]
3838
},
39+
"chebychev_dist": {
40+
"class": "RooChebychev",
41+
"arguments": [
42+
"x",
43+
"coefficients"
44+
]
45+
},
3946
"gamma_dist": {
4047
"class": "RooGamma",
4148
"arguments": [

0 commit comments

Comments
 (0)