29
29
#include < RooMultiVarGaussian.h>
30
30
#include < RooPoisson.h>
31
31
#include < RooPolynomial.h>
32
+ #include < RooPolyVar.h>
32
33
#include < RooRealSumFunc.h>
33
34
#include < RooRealSumPdf.h>
34
35
#include < RooRealVar.h>
@@ -195,7 +196,7 @@ class RooRealSumFuncFactory : public RooFit::JSONIO::Importer {
195
196
return true ;
196
197
}
197
198
};
198
-
199
+ template < class RooArg_t >
199
200
class RooPolynomialFactory : public RooFit ::JSONIO::Importer {
200
201
public:
201
202
bool importArg (RooJSONFactoryWSTool *tool, const JSONNode &p) const override
@@ -222,7 +223,7 @@ class RooPolynomialFactory : public RooFit::JSONIO::Importer {
222
223
++order;
223
224
}
224
225
225
- tool->wsEmplace <RooPolynomial >(name, *x, coefs, lowestOrder);
226
+ tool->wsEmplace <RooArg_t >(name, *x, coefs, lowestOrder);
226
227
return true ;
227
228
}
228
229
};
@@ -565,13 +566,13 @@ class RooFormulaArgStreamer : public RooFit::JSONIO::Exporter {
565
566
return true ;
566
567
}
567
568
};
568
-
569
+ template < class RooArg_t >
569
570
class RooPolynomialStreamer : public RooFit ::JSONIO::Exporter {
570
571
public:
571
572
std::string const &key () const override ;
572
573
bool exportObject (RooJSONFactoryWSTool *, const RooAbsArg *func, JSONNode &elem) const override
573
574
{
574
- auto *pdf = static_cast <const RooPolynomial *>(func);
575
+ auto *pdf = static_cast <const RooArg_t *>(func);
575
576
elem[" type" ] << key ();
576
577
elem[" x" ] << pdf->x ().GetName ();
577
578
auto &coefs = elem[" coefficients" ].set_seq ();
@@ -709,6 +710,14 @@ class RooRealIntegralStreamer : public RooFit::JSONIO::Exporter {
709
710
bool exportObject (RooJSONFactoryWSTool *, const RooAbsArg *func, JSONNode &elem) const override
710
711
{
711
712
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;
712
721
elem[" type" ] << key ();
713
722
elem[" integrand" ] << integral->integrand ().GetName ();
714
723
if (integral->intRange ()) {
@@ -743,7 +752,10 @@ DEFINE_EXPORTER_KEY(RooHistPdfStreamer, "histogram_dist");
743
752
DEFINE_EXPORTER_KEY (RooLogNormalStreamer, " lognormal_dist" );
744
753
DEFINE_EXPORTER_KEY (RooMultiVarGaussianStreamer, " multivariate_normal_dist" );
745
754
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" );
747
759
DEFINE_EXPORTER_KEY (RooRealSumFuncStreamer, " weighted_sum" );
748
760
DEFINE_EXPORTER_KEY (RooRealSumPdfStreamer, " weighted_sum_dist" );
749
761
DEFINE_EXPORTER_KEY (RooTFnBindingStreamer, " generic_function" );
@@ -768,7 +780,8 @@ STATIC_EXECUTE([]() {
768
780
registerImporter<RooLogNormalFactory>(" lognormal_dist" , false );
769
781
registerImporter<RooMultiVarGaussianFactory>(" multivariate_normal_dist" , false );
770
782
registerImporter<RooPoissonFactory>(" poisson_dist" , false );
771
- registerImporter<RooPolynomialFactory>(" polynomial_dist" , false );
783
+ registerImporter<RooPolynomialFactory<RooPolynomial>>(" polynomial_dist" , false );
784
+ registerImporter<RooPolynomialFactory<RooPolyVar>>(" polynomial" , false );
772
785
registerImporter<RooRealSumPdfFactory>(" weighted_sum_dist" , false );
773
786
registerImporter<RooRealSumFuncFactory>(" weighted_sum" , false );
774
787
registerImporter<RooRealIntegralFactory>(" integral" , false );
@@ -785,7 +798,8 @@ STATIC_EXECUTE([]() {
785
798
registerExporter<RooLogNormalStreamer>(RooLognormal::Class (), false );
786
799
registerExporter<RooMultiVarGaussianStreamer>(RooMultiVarGaussian::Class (), false );
787
800
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 );
789
803
registerExporter<RooRealSumFuncStreamer>(RooRealSumFunc::Class (), false );
790
804
registerExporter<RooRealSumPdfStreamer>(RooRealSumPdf::Class (), false );
791
805
registerExporter<RooTFnBindingStreamer>(RooTFnBinding::Class (), false );
0 commit comments