 ROOT   Reference Guide rf105_funcbinding.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_roofit
3 /// \notebook -js
4 /// Basic functionality: binding ROOT math functions as RooFit functions and pdfs
5 ///
6 /// \macro_image
7 /// \macro_output
8 /// \macro_code
9 ///
10 /// \date July 2008
11 /// \author Wouter Verkerke
12
13 #include "RooRealVar.h"
14 #include "RooDataSet.h"
15 #include "RooGaussian.h"
16 #include "TCanvas.h"
17 #include "TAxis.h"
18 #include "RooPlot.h"
19 #include "TMath.h"
20 #include "TF1.h"
21 #include "Math/DistFunc.h"
22 #include "RooTFnBinding.h"
23
24 using namespace RooFit;
25
26 void rf105_funcbinding()
27 {
28
29  // B i n d T M a t h : : E r f C f u n c t i o n
30  // ---------------------------------------------------
31
32  // Bind one-dimensional TMath::Erf function as RooAbsReal function
33  RooRealVar x("x", "x", -3, 3);
34  RooAbsReal *errorFunc = bindFunction("erf", TMath::Erf, x);
35
36  // Print erf definition
37  errorFunc->Print();
38
39  // Plot erf on frame
40  RooPlot *frame1 = x.frame(Title("TMath::Erf bound as RooFit function"));
41  errorFunc->plotOn(frame1);
42
43  // B i n d R O O T : : M a t h : : b e t a _ p d f C f u n c t i o n
44  // -----------------------------------------------------------------------
45
46  // Bind pdf ROOT::Math::Beta with three variables as RooAbsPdf function
47  RooRealVar x2("x2", "x2", 0, 0.999);
48  RooRealVar a("a", "a", 5, 0, 10);
49  RooRealVar b("b", "b", 2, 0, 10);
51
52  // Perf beta definition
53  beta->Print();
54
55  // Generate some events and fit
56  RooDataSet *data = beta->generate(x2, 10000);
57  beta->fitTo(*data);
58
59  // Plot data and pdf on frame
60  RooPlot *frame2 = x2.frame(Title("ROOT::Math::Beta bound as RooFit pdf"));
61  data->plotOn(frame2);
62  beta->plotOn(frame2);
63
64  // B i n d R O O T T F 1 a s R o o F i t f u n c t i o n
65  // ---------------------------------------------------------------
66
67  // Create a ROOT TF1 function
68  TF1 *fa1 = new TF1("fa1", "sin(x)/x", 0, 10);
69
70  // Create an observable
71  RooRealVar x3("x3", "x3", 0.01, 20);
72
73  // Create binding of TF1 object to above observable
74  RooAbsReal *rfa1 = bindFunction(fa1, x3);
75
76  // Print rfa1 definition
77  rfa1->Print();
78
79  // Make plot frame in observable, plot TF1 binding function
80  RooPlot *frame3 = x3.frame(Title("TF1 bound as RooFit function"));
81  rfa1->plotOn(frame3);
82
83  TCanvas *c = new TCanvas("rf105_funcbinding", "rf105_funcbinding", 1200, 400);
84  c->Divide(3);
85  c->cd(1);
87  frame1->GetYaxis()->SetTitleOffset(1.6);
88  frame1->Draw();
89  c->cd(2);
91  frame2->GetYaxis()->SetTitleOffset(1.6);
92  frame2->Draw();
93  c->cd(3);
95  frame3->GetYaxis()->SetTitleOffset(1.6);
96  frame3->Draw();
97 }
c
#define c(i)
Definition: RSha256.hxx:101
RooPlot::Draw
virtual void Draw(Option_t *options=0)
Draw this plot and all of the elements it contains.
Definition: RooPlot.cxx:691
ROOT::Math::beta_pdf
double beta_pdf(double x, double a, double b)
Probability density function of the beta distribution.
Definition: PdfFuncMathCore.h:82
RooAbsArg::Print
virtual void Print(Option_t *options=0) const
Print the object to the defaultPrintStream().
Definition: RooAbsArg.h:320
RooGaussian.h
x
Double_t x[n]
Definition: legend1.C:17
TMath::Erf
Double_t Erf(Double_t x)
Computation of the error function erf(x).
Definition: TMath.cxx:184
RooAbsReal
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:61
TCanvas.h
ROOT::Math::beta
double beta(double x, double y)
Calculates the beta function.
Definition: SpecFuncMathCore.cxx:111
RooDataSet.h
b
#define b(i)
Definition: RSha256.hxx:100
DistFunc.h
RooFit::bindFunction
RooAbsReal * bindFunction(const char *name, CFUNCD1D func, RooAbsReal &x)
Definition: RooCFunction1Binding.cxx:59
x3
static const double x3
Definition: RooGaussKronrodIntegrator1D.cxx:392
RooTFnBinding.h
RooFit
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
Definition: RooCFunction1Binding.h:29
RooAbsData::plotOn
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Definition: RooAbsData.cxx:547
a
auto * a
Definition: textangle.C:12
RooPlot.h
RooPlot::GetYaxis
TAxis * GetYaxis() const
Definition: RooPlot.cxx:1258
RooPlot
A RooPlot is a plot frame and a container for graphics objects within that frame.
Definition: RooPlot.h:44
RooRealVar.h
RooAbsReal::plotOn
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg(), const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg(), const RooCmdArg &arg9=RooCmdArg(), const RooCmdArg &arg10=RooCmdArg()) const
Plot (project) PDF on specified frame.
Definition: RooAbsReal.cxx:1730
TF1.h
TCanvas
The Canvas class.
Definition: TCanvas.h:23
TAxis.h
x2
static const double x2
Definition: RooGaussKronrodIntegrator1D.cxx:364
RooDataSet
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:33
RooAbsPdf
Definition: RooAbsPdf.h:43
TAttAxis::SetTitleOffset
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title.
Definition: TAttAxis.cxx:293
TF1
1-Dim function class
Definition: TF1.h:213
RooRealVar
RooRealVar represents a variable that can be changed from the outside.
Definition: RooRealVar.h:37
RooFit::bindPdf
RooAbsPdf * bindPdf(const char *name, CFUNCD1D func, RooAbsReal &x)
Definition: RooCFunction1Binding.cxx:67
RooFit::Title
RooCmdArg Title(const char *name)
Definition: RooGlobalFunc.cxx:176
TMath.h