Logo ROOT  
Reference Guide
rf511_wsfactory_basic.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_roofit
3/// \notebook -nodraw
4///
5/// Organization and simultaneous fits: basic use of the 'object factory' associated with
6/// a workspace to rapidly build p.d.f.s functions and their parameter components
7///
8/// \macro_output
9/// \macro_code
10///
11/// \date 04/2009
12/// \author Wouter Verkerke
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
27{
28 RooWorkspace *w = new RooWorkspace("w");
29
30 // C r e a t i n g a n d a d d i n g b a s i c p . d . f . s
31 // ----------------------------------------------------------------
32
33 // Remake example p.d.f. of tutorial rs502_wspacewrite.C:
34 //
35 // Basic p.d.f. construction: ClassName::ObjectName(constructor arguments)
36 // Variable construction : VarName[x,xlo,xhi], VarName[xlo,xhi], VarName[x]
37 // P.d.f. addition : SUM::ObjectName(coef1*pdf1,...coefM*pdfM,pdfN)
38 //
39
40 if (!compact) {
41
42 // Use object factory to build p.d.f. of tutorial rs502_wspacewrite
43 w->factory("Gaussian::sig1(x[-10,10],mean[5,0,10],0.5)");
44 w->factory("Gaussian::sig2(x,mean,1)");
45 w->factory("Chebychev::bkg(x,{a0[0.5,0.,1],a1[0.2,0.,1.]})");
46 w->factory("SUM::sig(sig1frac[0.8,0.,1.]*sig1,sig2)");
47 w->factory("SUM::model(bkgfrac[0.5,0.,1.]*bkg,sig)");
48
49 } else {
50
51 // Use object factory to build p.d.f. of tutorial rs502_wspacewrite but
52 // - Contracted to a single line recursive expression,
53 // - Omitting explicit names for components that are not referred to explicitly later
54
55 w->factory("SUM::model(bkgfrac[0.5,0.,1.]*Chebychev::bkg(x[-10,10],{a0[0.5,0.,1],a1[0.2,0.,1.]}),"
56 "SUM(sig1frac[0.8,0.,1.]*Gaussian(x,mean[5,0,10],0.5), Gaussian(x,mean,1)))");
57 }
58
59 // A d v a n c e d p . d . f . c o n s t r u c t o r a r g u m e n t s
60 // ----------------------------------------------------------------
61 //
62 // P.d.f. constructor arguments may by any type of RooAbsArg, but also
63 //
64 // Double_t --> converted to RooConst(...)
65 // {a,b,c} --> converted to RooArgSet() or RooArgList() depending on required ctor arg
66 // dataset name --> converted to RooAbsData reference for any dataset residing in the workspace
67 // enum --> Any enum label that belongs to an enum defined in the (base) class
68
69 // Make a dummy dataset p.d.f. 'model' and import it in the workspace
70 RooDataSet *data = w->pdf("model")->generate(*w->var("x"), 1000);
71 w->import(*data, Rename("data"));
72
73 // Construct a KEYS p.d.f. passing a dataset name and an enum type defining the
74 // mirroring strategy
75 w->factory("KeysPdf::k(x,data,NoMirror,0.2)");
76
77 // Print workspace contents
78 w->Print();
79}
const Bool_t kFALSE
Definition: RtypesCore.h:90
RooDataSet * generate(const RooArgSet &whatVars, Int_t nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none())
See RooAbsPdf::generate(const RooArgSet&,const RooCmdArg&,const RooCmdArg&,const RooCmdArg&,...
Definition: RooAbsPdf.h:55
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:33
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.
RooRealVar * var(const char *name) const
Retrieve real-valued variable (RooRealVar) with given name. A null pointer is returned if not found.
Bool_t import(const RooAbsArg &arg, 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())
Import a RooAbsArg object, e.g.
RooFactoryWSTool & factory()
Return instance to factory tool.
RooAbsPdf * pdf(const char *name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
RooCmdArg Rename(const char *suffix)
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...