Skip to content

Commit d75a72f

Browse files
cburgardguitargeek
authored andcommitted
[RF][HS3] Added RooWrapperPdf and updated extendpdf to be HS3-compliant
Added I/O for RooWrapperPdf and changed extendpdf I/O to be compliant with HS3.
1 parent 111257e commit d75a72f

1 file changed

Lines changed: 53 additions & 1 deletion

File tree

roofit/hs3/src/JSONFactories_RooFitCore.cxx

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#include <RooTFnBinding.h>
4949
#include <RooTruthModel.h>
5050
#include <RooGaussModel.h>
51+
#include <RooWrapperPdf.h>
5152
#include <RooWorkspace.h>
5253
#include <RooRealIntegral.h>
5354
#include <RooSpline.h>
@@ -1187,17 +1188,65 @@ class RooSplineStreamer : public RooFit::JSONIO::Exporter {
11871188
}
11881189
};
11891190

1191+
class RooWrapperPdfImporter : public RooFit::JSONIO::Importer {
1192+
public:
1193+
bool importArg(RooJSONFactoryWSTool *tool, const RooFit::Detail::JSONNode &node) const override
1194+
{
1195+
if (node["type"].val() != "density_function_dist")
1196+
return false;
1197+
1198+
auto name = RooJSONFactoryWSTool::name(node);
1199+
auto *func = tool->requestArg<RooAbsReal>(node, "function");
1200+
1201+
bool selfNormalized = false;
1202+
1203+
if (auto sn = node.find("selfNormalized"))
1204+
selfNormalized = sn->val_bool();
1205+
1206+
tool->wsEmplace<RooWrapperPdf>(name, *func, selfNormalized);
1207+
return true;
1208+
}
1209+
};
1210+
1211+
class RooWrapperPdfStreamer : public RooFit::JSONIO::Exporter {
1212+
public:
1213+
std::string const &key() const override;
1214+
1215+
bool exportObject(RooJSONFactoryWSTool *, const RooAbsArg *arg, RooFit::Detail::JSONNode &node) const override
1216+
{
1217+
auto const *pdf = dynamic_cast<RooWrapperPdf const *>(arg);
1218+
if (!pdf)
1219+
return false;
1220+
1221+
node["type"] << "density_function_dist";
1222+
1223+
// Proxy name in RooWrapperPdf is "_func" / "func" depending on accessor/proxy export.
1224+
// Prefer a public accessor if one exists; otherwise inspect proxies as below.
1225+
auto const *funcProxy = dynamic_cast<RooRealProxy const *>(pdf->getProxy(0));
1226+
if (!funcProxy || !funcProxy->absArg())
1227+
return false;
1228+
1229+
node["function"] << funcProxy->absArg()->GetName();
1230+
if (pdf->selfNormalized())
1231+
node["selfnormalized"] << true;
1232+
1233+
return true;
1234+
}
1235+
};
1236+
11901237
#define DEFINE_EXPORTER_KEY(class_name, name) \
11911238
std::string const &class_name::key() const \
11921239
{ \
11931240
const static std::string keystring = name; \
11941241
return keystring; \
11951242
}
1243+
11961244
template <>
11971245
DEFINE_EXPORTER_KEY(RooAddPdfStreamer<RooAddPdf>, "mixture_dist");
11981246
template <>
11991247
DEFINE_EXPORTER_KEY(RooAddPdfStreamer<RooAddModel>, "mixture_model");
12001248
DEFINE_EXPORTER_KEY(RooBinSamplingPdfStreamer, "binsampling");
1249+
DEFINE_EXPORTER_KEY(RooWrapperPdfStreamer, "density_function_dist");
12011250
DEFINE_EXPORTER_KEY(RooBinWidthFunctionStreamer, "binwidth");
12021251
DEFINE_EXPORTER_KEY(RooLegacyExpPolyStreamer, "legacy_exp_poly_dist");
12031252
DEFINE_EXPORTER_KEY(RooExponentialStreamer, "exponential_dist");
@@ -1223,7 +1272,7 @@ DEFINE_EXPORTER_KEY(RooTFnBindingStreamer, "generic_function");
12231272
DEFINE_EXPORTER_KEY(RooRealIntegralStreamer, "integral");
12241273
DEFINE_EXPORTER_KEY(RooDerivativeStreamer, "derivative");
12251274
DEFINE_EXPORTER_KEY(RooFFTConvPdfStreamer, "fft_conv_pdf");
1226-
DEFINE_EXPORTER_KEY(RooExtendPdfStreamer, "extend_pdf");
1275+
DEFINE_EXPORTER_KEY(RooExtendPdfStreamer, "rate_extended_dist");
12271276
DEFINE_EXPORTER_KEY(ParamHistFuncStreamer, "step");
12281277
DEFINE_EXPORTER_KEY(RooSplineStreamer, "spline");
12291278

@@ -1234,6 +1283,8 @@ DEFINE_EXPORTER_KEY(RooSplineStreamer, "spline");
12341283
STATIC_EXECUTE([]() {
12351284
using namespace RooFit::JSONIO;
12361285

1286+
registerImporter<RooWrapperPdfImporter>("density_function_dist");
1287+
registerImporter<RooExtendPdfFactory>("rate_extended_dist");
12371288
registerImporter<RooProductFactory>("product", false);
12381289
registerImporter<RooProdPdfFactory>("product_dist", false);
12391290
registerImporter<RooAdditionFactory>("sum", false);
@@ -1264,6 +1315,7 @@ STATIC_EXECUTE([]() {
12641315
registerImporter<ParamHistFuncFactory>("step", false);
12651316
registerImporter<RooSplineFactory>("spline", false);
12661317

1318+
registerExporter<RooWrapperPdfStreamer>(RooWrapperPdf::Class());
12671319
registerExporter<RooAddPdfStreamer<RooAddPdf>>(RooAddPdf::Class(), false);
12681320
registerExporter<RooAddPdfStreamer<RooAddModel>>(RooAddModel::Class(), false);
12691321
registerExporter<RooBinSamplingPdfStreamer>(RooBinSamplingPdf::Class(), false);

0 commit comments

Comments
 (0)