31 using namespace RooFit;
33 void rf104_classfactory()
43 RooClassFactory::makePdf(
"MyPdfV1",
"x,A,B");
52 RooClassFactory::makePdf(
"MyPdfV2",
"x,A,B",
"",
"A*fabs(x)+pow(x-B,2)");
62 RooClassFactory::makePdf(
"MyPdfV3",
"x,A,B",
"",
"A*fabs(x)+pow(x-B,2)", kTRUE, kFALSE,
63 "x:(A/2)*(pow(x.max(rangeName),2)+pow(x.min(rangeName),2))+(1./"
64 "3)*(pow(x.max(rangeName)-B,3)-pow(x.min(rangeName)-B,3))");
70 gROOT->ProcessLineSync(
".x MyPdfV3.cxx+");
73 RooRealVar a(
"a",
"a", 1);
74 RooRealVar b(
"b",
"b", 2, -10, 10);
75 RooRealVar y(
"y",
"y", -10, 10);
79 w.factory(
"MyPdfV3::pdf(y[-10,10], a[1], b[2,-10,10])");
80 auto pdf = w.pdf(
"pdf");
83 RooPlot *frame1 = y.frame(Title(
"Compiled class MyPdfV3"));
84 RooDataSet *data = pdf->generate(y, 1000);
94 RooRealVar x(
"x",
"x", -20, 20);
99 RooRealVar alpha(
"alpha",
"alpha", 5, 0.1, 10);
101 RooClassFactory::makePdfInstance(
"GenPdf",
"(1+0.1*fabs(x)+sin(sqrt(fabs(x*alpha+0.1))))", RooArgSet(x, alpha));
104 RooDataSet *data2 = genpdf->generate(x, 50000);
107 genpdf->fitTo(*data2);
110 RooPlot *frame2 = x.frame(Title(
"Compiled version of pdf of rf103"));
111 data2->plotOn(frame2);
112 genpdf->plotOn(frame2);
115 TCanvas *c =
new TCanvas(
"rf104_classfactory",
"rf104_classfactory", 800, 400);
118 gPad->SetLeftMargin(0.15);
119 frame1->GetYaxis()->SetTitleOffset(1.4);
122 gPad->SetLeftMargin(0.15);
123 frame2->GetYaxis()->SetTitleOffset(1.4);