Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
rf104_classfactory.C File Reference

Detailed Description

View in nbviewer Open in SWAN
Basic functionality: The class factory for functions and pdfs

NOTE: This demo uses code that is generated by the macro, therefore it cannot be compiled in one step by ACliC. To run this macro compiled with ACliC do

root>.x rf104_classfactory.C // run interpreted to generate code
root>.L MyPdfV3.cxx+ // Compile and load created class
root>.x rf104_classfactory.C+ // run compiled code
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "RooPlot.h"
#include "TROOT.h"
using namespace RooFit;
{
// W r i t e c l a s s s k e l e t o n c o d e
// --------------------------------------------------
// Write skeleton pdf class with variable x,a,b
// To use this class,
// - Edit the file MyPdfV1.cxx and implement the evaluate() method in terms of x,a and b
// - Compile and link class with '.x MyPdfV1.cxx+'
//
RooClassFactory::makePdf("MyPdfV1", "x,A,B");
// W i t h a d d e d i n i t i a l v a l u e e x p r e s s i o n
// ---------------------------------------------------------------------
// Write skeleton pdf class with variable x,a,b and given formula expression
// To use this class,
// - Compile and link class with '.x MyPdfV2.cxx+'
//
RooClassFactory::makePdf("MyPdfV2", "x,A,B", "", "A*fabs(x)+pow(x-B,2)");
// W i t h a d d e d a n a l y t i c a l i n t e g r a l e x p r e s s i o n
// ---------------------------------------------------------------------------------
// Write skeleton pdf class with variable x,a,b, given formula expression _and_
// given expression for analytical integral over x
// To use this class,
// - Compile and link class with '.x MyPdfV3.cxx+'
//
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))");
// U s e i n s t a n c e o f c r e a t e d c l a s s
// ---------------------------------------------------------
// Compile MyPdfV3 class
gROOT->ProcessLineSync(".x MyPdfV3.cxx+");
// Create instance of MyPdfV3 class
RooRealVar a("a", "a", 1);
RooRealVar b("b", "b", 2, -10, 10);
RooRealVar y("y", "y", -10, 10);
// We need to hide the type to run in a ROOT macro
w.factory("MyPdfV3::pdf(y[-10,10], a[1], b[2,-10,10])");
auto pdf = w.pdf("pdf");
// Generate toy data from pdf and plot data and pdf on frame
RooPlot *frame1 = y.frame(Title("Compiled class MyPdfV3"));
std::unique_ptr<RooDataSet> data{pdf->generate(y, 1000)};
pdf->fitTo(*data, PrintLevel(-1));
data->plotOn(frame1);
pdf->plotOn(frame1);
// -----------------------------------------------------------------
// C o m p i l e d v e r s i o n o f e x a m p l e r f 1 0 3
// =================================================================
// Declare observable x
RooRealVar x("x", "x", -20, 20);
// The RooClassFactory::makePdfInstance() function performs code writing, compiling, linking
// and object instantiation in one go and can serve as a straight replacement of RooGenericPdf
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));
// Generate a toy dataset from the interpreted pdf
std::unique_ptr<RooDataSet> data2{genpdf->generate(x, 50000)};
// Fit the interpreted pdf to the generated data
genpdf->fitTo(*data2, PrintLevel(-1));
// Make a plot of the data and the pdf overlaid
RooPlot *frame2 = x.frame(Title("Compiled version of pdf of rf103"));
data2->plotOn(frame2);
genpdf->plotOn(frame2);
// Draw all frames on a canvas
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();
}
#define b(i)
Definition RSha256.hxx:100
#define c(i)
Definition RSha256.hxx:101
#define a(i)
Definition RSha256.hxx:99
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
#define gROOT
Definition TROOT.h:406
#define gPad
Abstract interface for all probability density functions.
Definition RooAbsPdf.h:40
RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={}, const RooCmdArg &arg10={}) const override
Helper calling plotOn(RooPlot*, RooLinkedList&) const.
Definition RooAbsPdf.h:124
RooFit::OwningPtr< RooFitResult > fitTo(RooAbsData &data, CmdArgs_t const &... cmdArgs)
Fit PDF to given dataset.
Definition RooAbsPdf.h:157
RooFit::OwningPtr< RooDataSet > generate(const RooArgSet &whatVars, Int_t nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={})
See RooAbsPdf::generate(const RooArgSet&,const RooCmdArg&,const RooCmdArg&,const RooCmdArg&,...
Definition RooAbsPdf.h:57
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:24
static bool makePdf(std::string const &name, std::string const &realArgNames="", std::string const &catArgNames="", std::string const &expression="1.0", bool hasAnaInt=false, bool hasIntGen=false, std::string const &intExpression="")
Write code for a RooAbsPdf implementation with class name 'name'.
static RooAbsPdf * makePdfInstance(std::string const &className, std::string const &name, std::string const &expression, const RooArgList &vars, std::string const &intExpression="")
Write, compile and load code and instantiate object for a RooAbsPdf implementation with class name 'n...
Plot frame and a container for graphics objects within that frame.
Definition RooPlot.h:43
static RooPlot * frame(const RooAbsRealLValue &var, double xmin, double xmax, Int_t nBins)
Create a new frame for a given variable in x.
Definition RooPlot.cxx:185
TAxis * GetYaxis() const
Definition RooPlot.cxx:1224
void Draw(Option_t *options=nullptr) override
Draw this plot and all of the elements it contains.
Definition RooPlot.cxx:597
Variable that can be changed from the outside.
Definition RooRealVar.h:37
Persistable container for RooFit projects.
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title.
Definition TAttAxis.cxx:298
The Canvas class.
Definition TCanvas.h:23
RooCmdArg PrintLevel(Int_t code)
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
Definition CodegenImpl.h:64
const char * Title
Definition TXMLSetup.cxx:68
(MyPdfV3) An instance of MyPdfV3.
[#1] INFO:Fitting -- RooAbsPdf::fitTo(pdf_over_pdf_Int[y]) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- using CPU computation library compiled with -mavx2
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_pdf_over_pdf_Int[y]_pdfData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
[#1] INFO:NumericIntegration -- RooRealIntegral::init(GenPdf_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x)
[#1] INFO:NumericIntegration -- RooRealIntegral::init(GenPdf_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x)
[#1] INFO:Fitting -- RooAbsPdf::fitTo(GenPdf_over_GenPdf_Int[x]) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_GenPdf_over_GenPdf_Int[x]_GenPdfData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization
[#1] INFO:NumericIntegration -- RooRealIntegral::init(GenPdf_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x)
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
[#1] INFO:NumericIntegration -- RooRealIntegral::init(GenPdf_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x)
Date
July 2008
Author
Wouter Verkerke

Definition in file rf104_classfactory.C.