Logo ROOT   6.16/01
Reference Guide
rf512_wsfactory_oper.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_roofit
3/// \notebook -nodraw
4/// 'ORGANIZATION AND SIMULTANEOUS FITS' RooFit tutorial macro #512
5///
6/// Illustration of operator expressions and expression-based
7/// basic p.d.f.s in the workspace factory syntax
8///
9/// \macro_output
10/// \macro_code
11/// \author 04/2009 - Wouter Verkerke
12
13
14#include "RooRealVar.h"
15#include "RooDataSet.h"
16#include "RooGaussian.h"
17#include "RooConstVar.h"
18#include "RooChebychev.h"
19#include "RooAddPdf.h"
20#include "RooWorkspace.h"
21#include "RooPlot.h"
22#include "TCanvas.h"
23#include "TAxis.h"
24using namespace RooFit ;
25
26
27void rf512_wsfactory_oper()
28{
29 RooWorkspace* w = new RooWorkspace("w") ;
30
31 // You can define typedefs for even shorter construction semantics
32 w->factory("$Typedef(Gaussian,Gaus)") ;
33 w->factory("$Typedef(Chebychev,Cheby)") ;
34
35
36 // O p e r a t o r p . d . f . e x a m p l e s
37 // ------------------------------------------------
38
39 // PDF addition is done with SUM (coef1*pdf1,pdf2)
40 w->factory("SUM::summodel( f[0,1]*Gaussian::gx(x[-10,10],m[0],1.0), Chebychev::ch(x,{0.1,0.2,-0.3}) )") ;
41
42
43 // Extended PDF addition is done with SUM (yield1*pdf1,yield2*pdf2)
44 w->factory("SUM::extsummodel( Nsig[0,1000]*gx, Nbkg[0,1000]*ch )") ;
45
46
47 // PDF multiplication is done with PROD ( pdf1, pdf2 )
48 w->factory("PROD::gxz( gx, Gaussian::gz(z[-10,10],0,1) )") ;
49
50
51 // Conditional p.d.f multiplication is done with PROD ( pdf1|obs, pdf2 )
52 w->factory("Gaussian::gy( y[-10,10], x, 1.0 )") ;
53 w->factory("PROD::gxycond( gy|x, gx )") ;
54
55
56 // Convolution (numeric/ fft) is done with NCONV/FCONV (obs,pdf1,pdf2)
57 w->factory("FCONV::lxg( x, Gaussian::g(x,mg[0],1), Landau::lc(x,0,1) )") ;
58
59
60 // Simultaneous p.d.f.s are constructed with SIMUL( index, state1=pdf1, state2=pdf2,...)
61 w->factory("SIMUL::smodel( c[A=0,B=1], A=Gaussian::gs(x,m,s[1]), B=Landau::ls(x,0,1) )") ;
62
63
64
65
66 // O p e r a t o r f u n c t i o n e x a m p l e s
67 // ---------------------------------------------------
68
69 // Function multiplication is done with prod (func1, func2,...)
70 w->factory("prod::uv(u[10],v[10])") ;
71
72
73 // Function addition is done with sum(func1,func2)
74 w->factory("sum::uv2(u,v)") ;
75
76
77
78 // I n t e r p r e t e d a n d c o m p i l e d e x p r e s s i o n b a s e d p . d . f . s .
79 // ---------------------------------------------------------------------------------------------------
80
81 // Create a RooGenericPdf interpreted p.d.f. You can use single quotes to pass the expression string argument
82 w->factory("EXPR::G('x*x+1',x)") ;
83
84 // Create a custom compiled p.d.f similar to the above interpreted p.d.f.
85 // The code required to make this p.d.f. is automatically embedded in the workspace
86 w->factory("CEXPR::GC('x*x+a',{x,a[1]})") ;
87
88
89 // Compiled and interpreted functions (rather than p.d.f.s) can be made with the lower case
90 // 'expr' and 'cexpr' types
91
92 // Print workspace contents
93 w->Print() ;
94
95 // Make workspace visible on command line
96 gDirectory->Add(w) ;
97}
98
99
#define gDirectory
Definition: TDirectory.h:213
The RooWorkspace is a persistable container for RooFit projects.
Definition: RooWorkspace.h:43
void Print(Option_t *opts=0) const
Print contents of the workspace.
RooFactoryWSTool & factory()
Return instance to factory tool.