@@ -499,37 +499,6 @@ class RooExponentialFactory : public RooFit::JSONIO::Importer {
499499 }
500500};
501501
502- class RooLegacyExpPolyFactory : public RooFit ::JSONIO ::Importer {
503- public:
504- bool importArg (RooJSONFactoryWSTool *tool, const JSONNode &p) const override
505- {
506- std::string name (RooJSONFactoryWSTool::name (p));
507- if (!p.has_child (" coefficients" )) {
508- RooJSONFactoryWSTool::error (" no coefficients given in '" + name + " '" );
509- }
510- RooAbsReal *x = tool->requestArg <RooAbsReal>(p, " x" );
511- RooArgList coefs;
512- int order = 0 ;
513- int lowestOrder = 0 ;
514- for (const auto &coef : p[" coefficients" ].children ()) {
515- // As long as the coefficients match the default coefficients in
516- // RooFit, we don't have to instantiate RooFit objects but can
517- // increase the lowestOrder flag.
518- if (order == 0 && coef.val () == " 1.0" ) {
519- ++lowestOrder;
520- } else if (coefs.empty () && coef.val () == " 0.0" ) {
521- ++lowestOrder;
522- } else {
523- coefs.add (*tool->request <RooAbsReal>(coef.val (), name));
524- }
525- ++order;
526- }
527-
528- tool->wsEmplace <RooLegacyExpPoly>(name, *x, coefs, lowestOrder);
529- return true ;
530- }
531- };
532-
533502class RooMultiVarGaussianFactory : public RooFit ::JSONIO ::Importer {
534503public:
535504 bool importArg (RooJSONFactoryWSTool *tool, const JSONNode &p) const override
@@ -744,48 +713,22 @@ class RooRealSumFuncStreamer : public RooFit::JSONIO::Exporter {
744713 }
745714};
746715
747- class RooHistFuncStreamer : public RooFit ::JSONIO ::Exporter {
748- public:
749- std::string const &key () const override ;
750- bool exportObject (RooJSONFactoryWSTool *tool, const RooAbsArg *func, JSONNode &elem) const override
751- {
752- const RooHistFunc *hf = static_cast <const RooHistFunc *>(func);
753- elem[" type" ] << key ();
754- RooDataHist const &dh = hf->dataHist ();
755- tool->exportHisto (*dh.get (), dh.numEntries (), dh.weightArray (), elem[" data" ].set_map ());
756- return true ;
757- }
758- };
759-
760- class RooHistFuncFactory : public RooFit ::JSONIO ::Importer {
761- public:
762- bool importArg (RooJSONFactoryWSTool *tool, const JSONNode &p) const override
763- {
764- std::string name (RooJSONFactoryWSTool::name (p));
765- if (!p.has_child (" data" )) {
766- RooJSONFactoryWSTool::error (" function '" + name + " ' is of histogram type, but does not define a 'data' key" );
767- }
768- std::unique_ptr<RooDataHist> dataHist =
769- RooJSONFactoryWSTool::readBinnedData (p[" data" ], name, RooJSONFactoryWSTool::readAxes (p[" data" ]));
770- tool->wsEmplace <RooHistFunc>(name, *dataHist->get (), *dataHist);
771- return true ;
772- }
773- };
774-
775- class RooHistPdfStreamer : public RooFit ::JSONIO ::Exporter {
716+ template <class RooArg_t >
717+ class RooHistStreamer : public RooFit ::JSONIO ::Exporter {
776718public:
777719 std::string const &key () const override ;
778720 bool exportObject (RooJSONFactoryWSTool *tool, const RooAbsArg *func, JSONNode &elem) const override
779721 {
780- const RooHistPdf *hf = static_cast <const RooHistPdf *>(func);
722+ const RooArg_t *hf = static_cast <const RooArg_t *>(func);
781723 elem[" type" ] << key ();
782724 RooDataHist const &dh = hf->dataHist ();
783725 tool->exportHisto (*dh.get (), dh.numEntries (), dh.weightArray (), elem[" data" ].set_map ());
784726 return true ;
785727 }
786728};
787729
788- class RooHistPdfFactory : public RooFit ::JSONIO ::Importer {
730+ template <class RooArg_t >
731+ class RooHistFactory : public RooFit ::JSONIO ::Importer {
789732public:
790733 bool importArg (RooJSONFactoryWSTool *tool, const JSONNode &p) const override
791734 {
@@ -795,7 +738,7 @@ class RooHistPdfFactory : public RooFit::JSONIO::Importer {
795738 }
796739 std::unique_ptr<RooDataHist> dataHist =
797740 RooJSONFactoryWSTool::readBinnedData (p[" data" ], name, RooJSONFactoryWSTool::readAxes (p[" data" ]));
798- tool->wsEmplace <RooHistPdf >(name, *dataHist->get (), *dataHist);
741+ tool->wsEmplace <RooArg_t >(name, *dataHist->get (), *dataHist);
799742 return true ;
800743 }
801744};
@@ -894,17 +837,6 @@ class RooPolynomialStreamer : public RooFit::JSONIO::Exporter {
894837 }
895838};
896839
897- class RooLegacyExpPolyStreamer : public RooFit ::JSONIO ::Exporter {
898- public:
899- std::string const &key () const override ;
900- bool exportObject (RooJSONFactoryWSTool *, const RooAbsArg *func, JSONNode &elem) const override
901- {
902- elem[" type" ] << key ();
903- writePolynomialBody (static_cast <const RooLegacyExpPoly *>(func), elem);
904- return true ;
905- }
906- };
907-
908840class RooPoissonStreamer : public RooFit ::JSONIO ::Exporter {
909841public:
910842 std::string const &key () const override ;
@@ -1249,14 +1181,17 @@ DEFINE_EXPORTER_KEY(RooAddPdfStreamer<RooAddModel>, "mixture_model");
12491181DEFINE_EXPORTER_KEY (RooBinSamplingPdfStreamer, " binsampling" );
12501182DEFINE_EXPORTER_KEY (RooWrapperPdfStreamer, " density_function_dist" );
12511183DEFINE_EXPORTER_KEY (RooBinWidthFunctionStreamer, " binwidth" );
1252- DEFINE_EXPORTER_KEY (RooLegacyExpPolyStreamer, " legacy_exp_poly_dist" );
1184+ template <>
1185+ DEFINE_EXPORTER_KEY (RooPolynomialStreamer<RooLegacyExpPoly>, " legacy_exp_poly_dist" );
12531186DEFINE_EXPORTER_KEY (RooExponentialStreamer, " exponential_dist" );
12541187template <>
12551188DEFINE_EXPORTER_KEY (RooFormulaArgStreamer<RooFormulaVar>, " generic_function" );
12561189template <>
12571190DEFINE_EXPORTER_KEY (RooFormulaArgStreamer<RooGenericPdf>, " generic_dist" );
1258- DEFINE_EXPORTER_KEY (RooHistFuncStreamer, " histogram" );
1259- DEFINE_EXPORTER_KEY (RooHistPdfStreamer, " histogram_dist" );
1191+ template <>
1192+ DEFINE_EXPORTER_KEY (RooHistStreamer<RooHistFunc>, " histogram" );
1193+ template <>
1194+ DEFINE_EXPORTER_KEY (RooHistStreamer<RooHistPdf>, " histogram_dist" );
12601195DEFINE_EXPORTER_KEY (RooLogNormalStreamer, " lognormal_dist" );
12611196DEFINE_EXPORTER_KEY (RooMultiVarGaussianStreamer, " multivariate_normal_dist" );
12621197DEFINE_EXPORTER_KEY (RooPoissonStreamer, " poisson_dist" );
@@ -1293,12 +1228,12 @@ STATIC_EXECUTE([]() {
12931228 registerImporter<RooAddModelFactory>(" mixture_model" , false );
12941229 registerImporter<RooBinSamplingPdfFactory>(" binsampling_dist" , false );
12951230 registerImporter<RooBinWidthFunctionFactory>(" binwidth" , false );
1296- registerImporter<RooLegacyExpPolyFactory >(" legacy_exp_poly_dist" , false );
1231+ registerImporter<RooPolynomialFactory<RooLegacyExpPoly> >(" legacy_exp_poly_dist" , false );
12971232 registerImporter<RooExponentialFactory>(" exponential_dist" , false );
12981233 registerImporter<RooFormulaArgFactory<RooFormulaVar>>(" generic_function" , false );
12991234 registerImporter<RooFormulaArgFactory<RooGenericPdf>>(" generic_dist" , false );
1300- registerImporter<RooHistFuncFactory >(" histogram" , false );
1301- registerImporter<RooHistPdfFactory >(" histogram_dist" , false );
1235+ registerImporter<RooHistFactory<RooHistFunc> >(" histogram" , false );
1236+ registerImporter<RooHistFactory<RooHistPdf> >(" histogram_dist" , false );
13021237 registerImporter<RooLogNormalFactory>(" lognormal_dist" , false );
13031238 registerImporter<RooMultiVarGaussianFactory>(" multivariate_normal_dist" , false );
13041239 registerImporter<RooPoissonFactory>(" poisson_dist" , false );
@@ -1321,12 +1256,12 @@ STATIC_EXECUTE([]() {
13211256 registerExporter<RooAddPdfStreamer<RooAddModel>>(RooAddModel::Class (), false );
13221257 registerExporter<RooBinSamplingPdfStreamer>(RooBinSamplingPdf::Class (), false );
13231258 registerExporter<RooBinWidthFunctionStreamer>(RooBinWidthFunction::Class (), false );
1324- registerExporter<RooLegacyExpPolyStreamer >(RooLegacyExpPoly::Class (), false );
1259+ registerExporter<RooPolynomialStreamer<RooLegacyExpPoly> >(RooLegacyExpPoly::Class (), false );
13251260 registerExporter<RooExponentialStreamer>(RooExponential::Class (), false );
13261261 registerExporter<RooFormulaArgStreamer<RooFormulaVar>>(RooFormulaVar::Class (), false );
13271262 registerExporter<RooFormulaArgStreamer<RooGenericPdf>>(RooGenericPdf::Class (), false );
1328- registerExporter<RooHistFuncStreamer >(RooHistFunc::Class (), false );
1329- registerExporter<RooHistPdfStreamer >(RooHistPdf::Class (), false );
1263+ registerExporter<RooHistStreamer<RooHistFunc> >(RooHistFunc::Class (), false );
1264+ registerExporter<RooHistStreamer<RooHistPdf> >(RooHistPdf::Class (), false );
13301265 registerExporter<RooLogNormalStreamer>(RooLognormal::Class (), false );
13311266 registerExporter<RooMultiVarGaussianStreamer>(RooMultiVarGaussian::Class (), false );
13321267 registerExporter<RooPoissonStreamer>(RooPoisson::Class (), false );
0 commit comments