%%cpp -d #include "RooRealVar.h" #include "RooDataSet.h" #include "RooGaussian.h" #include "TCanvas.h" #include "TAxis.h" #include "RooPlot.h" #include "RooClassFactory.h" #include "TROOT.h" using namespace RooFit; RooClassFactory::makePdf("MyPdfV1", "x,A,B"); RooClassFactory::makePdf("MyPdfV2", "x,A,B", "", "A*fabs(x)+pow(x-B,2)"); RooClassFactory::makePdf("MyPdfV3", "x,A,B", "", "A*fabs(x)+pow(x-B,2)", true, false, "x:(A/2)*(pow(x.max(rangeName),2)+pow(x.min(rangeName),2))+(1./" "3)*(pow(x.max(rangeName)-B,3)-pow(x.min(rangeName)-B,3))"); gROOT->ProcessLineSync(".x MyPdfV3.cxx+"); RooRealVar a("a", "a", 1); RooRealVar b("b", "b", 2, -10, 10); RooRealVar y("y", "y", -10, 10); RooWorkspace w("w"); w.factory("MyPdfV3::pdf(y[-10,10], a[1], b[2,-10,10])"); auto pdf = w.pdf("pdf"); RooPlot *frame1 = y.frame(Title("Compiled class MyPdfV3")); std::unique_ptr data{pdf->generate(y, 1000)}; pdf->fitTo(*data, PrintLevel(-1)); data->plotOn(frame1); pdf->plotOn(frame1); RooRealVar x("x", "x", -20, 20); RooRealVar alpha("alpha", "alpha", 5, 0.1, 10); RooAbsPdf *genpdf = RooClassFactory::makePdfInstance("GenPdf", "(1+0.1*fabs(x)+sin(sqrt(fabs(x*alpha+0.1))))", RooArgSet(x, alpha)); std::unique_ptr data2{genpdf->generate(x, 50000)}; genpdf->fitTo(*data2, PrintLevel(-1)); RooPlot *frame2 = x.frame(Title("Compiled version of pdf of rf103")); data2->plotOn(frame2); genpdf->plotOn(frame2); TCanvas *c = new TCanvas("rf104_classfactory", "rf104_classfactory", 800, 400); c->Divide(2); c->cd(1); gPad->SetLeftMargin(0.15); frame1->GetYaxis()->SetTitleOffset(1.4); frame1->Draw(); c->cd(2); gPad->SetLeftMargin(0.15); frame2->GetYaxis()->SetTitleOffset(1.4); frame2->Draw(); %jsroot on gROOT->GetListOfCanvases()->Draw()