Logo ROOT   6.16/01
Reference Guide
rf509_wsinteractive.C File Reference

Detailed Description

View in nbviewer Open in SWAN 'ORGANIZATION AND SIMULTANEOUS FITS' RooFit tutorial macro #509

Easy CINT interactive access to workspace contents through a 'C++' namespace in CINT that maps the workspace contents in a typesafe way


*** NB: This macro exploits a feature native to CINT and cannot be compiled ***


␛[1mRooFit v3.60 -- Developed by Wouter Verkerke and David Kirkby␛[0m
Copyright (C) 2000-2013 NIKHEF, University of California & Stanford University
All rights reserved, please read http://roofit.sourceforge.net/license.txt
[#1] INFO:ObjectHandling -- RooWorkspace::exportToCint(w) INFO: references to all objects in this workspace will be created in CINT in 'namespace w'
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooAddPdf::model
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooChebychev::bkg
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::x
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::a0
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::a1
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::bkgfrac
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooAddPdf::sig
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooGaussian::sig1
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::mean
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sigma1
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sig1frac
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooGaussian::sig2
[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sigma2
RooWorkspace(w) w contents
variables
---------
(a0,a1,bkgfrac,mean,sig1frac,sigma1,sigma2,x)
p.d.f.s
-------
RooChebychev::bkg[ x=x coefList=(a0,a1) ] = 0.8
RooAddPdf::model[ bkgfrac * bkg + [%] * sig ] = 0.9
RooAddPdf::sig[ sig1frac * sig1 + [%] * sig2 ] = 1
RooGaussian::sig1[ x=x mean=mean sigma=sigma1 ] = 1
RooGaussian::sig2[ x=x mean=mean sigma=sigma2 ] = 1
[#1] INFO:Minization -- createNLL: caching constraint set under name CONSTR_OF_PDF_model_FOR_OBS_x with 0 entries
[#1] INFO:Minization -- RooMinimizer::optimizeConst: activating const optimization
[#1] INFO:Minization -- The following expressions will be evaluated in cache-and-track mode: (bkg,sig1,sig2)
**********
** 1 **SET PRINT 1
**********
**********
** 2 **SET NOGRAD
**********
PARAMETER DEFINITIONS:
NO. NAME VALUE STEP SIZE LIMITS
1 a0 5.00000e-01 1.00000e-01 0.00000e+00 1.00000e+00
2 a1 2.00000e-01 1.00000e-01 0.00000e+00 1.00000e+00
3 bkgfrac 5.00000e-01 1.00000e-01 0.00000e+00 1.00000e+00
4 mean 5.00000e+00 1.00000e+00 0.00000e+00 1.00000e+01
5 sig1frac 8.00000e-01 1.00000e-01 0.00000e+00 1.00000e+00
**********
** 3 **SET ERR 0.5
**********
**********
** 4 **SET PRINT 1
**********
**********
** 5 **SET STR 1
**********
NOW USING STRATEGY 1: TRY TO BALANCE SPEED AGAINST RELIABILITY
**********
** 6 **MIGRAD 2500 1
**********
FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.
START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03
FCN=1962.68 FROM MIGRAD STATUS=INITIATE 14 CALLS 15 TOTAL
EDM= unknown STRATEGY= 1 NO ERROR MATRIX
EXT PARAMETER CURRENT GUESS STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 a0 5.00000e-01 1.00000e-01 2.01358e-01 5.55984e+00
2 a1 2.00000e-01 1.00000e-01 2.57889e-01 -1.57464e+00
3 bkgfrac 5.00000e-01 1.00000e-01 2.01358e-01 1.16417e+00
4 mean 5.00000e+00 1.00000e+00 2.01358e-01 -6.91026e+01
5 sig1frac 8.00000e-01 1.00000e-01 2.57889e-01 -2.02114e+00
ERR DEF= 0.5
MIGRAD MINIMIZATION HAS CONVERGED.
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=1962.14 FROM MIGRAD STATUS=CONVERGED 92 CALLS 93 TOTAL
EDM=0.000129539 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 a0 4.38576e-01 7.35996e-02 4.50487e-03 3.73392e-02
2 a1 2.02416e-01 1.18128e-01 5.73699e-03 4.39091e-02
3 bkgfrac 5.03388e-01 3.60691e-02 1.24369e-03 4.03363e-02
4 mean 5.01610e+00 3.15061e-02 1.91674e-04 7.40455e-01
5 sig1frac 8.35115e-01 1.17067e-01 5.93647e-03 2.37022e-02
ERR DEF= 0.5
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5
5.457e-03 1.116e-03 -2.768e-04 -2.327e-04 -9.105e-04
1.116e-03 1.438e-02 -3.249e-03 5.690e-05 -9.716e-03
-2.768e-04 -3.249e-03 1.303e-03 -5.364e-05 3.285e-03
-2.327e-04 5.690e-05 -5.364e-05 9.926e-04 -1.964e-04
-9.105e-04 -9.716e-03 3.285e-03 -1.964e-04 1.419e-02
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3 4 5
1 0.16490 1.000 0.126 -0.104 -0.100 -0.103
2 0.77006 0.126 1.000 -0.751 0.015 -0.680
3 0.82650 -0.104 -0.751 1.000 -0.047 0.764
4 0.12324 -0.100 0.015 -0.047 1.000 -0.052
5 0.78139 -0.103 -0.680 0.764 -0.052 1.000
**********
** 7 **SET ERR 0.5
**********
**********
** 8 **SET PRINT 1
**********
**********
** 9 **HESSE 2500
**********
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=1962.14 FROM HESSE STATUS=OK 31 CALLS 124 TOTAL
EDM=0.000129401 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER INTERNAL INTERNAL
NO. NAME VALUE ERROR STEP SIZE VALUE
1 a0 4.38576e-01 7.35914e-02 9.00974e-04 -1.23159e-01
2 a1 2.02416e-01 1.17686e-01 1.14740e-03 -6.37473e-01
3 bkgfrac 5.03388e-01 3.59545e-02 2.48738e-04 6.77613e-03
4 mean 5.01610e+00 3.15052e-02 3.83348e-05 3.22075e-03
5 sig1frac 8.35115e-01 1.16789e-01 1.18729e-03 7.34520e-01
ERR DEF= 0.5
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5
5.456e-03 1.105e-03 -2.735e-04 -2.327e-04 -9.006e-04
1.105e-03 1.427e-02 -3.217e-03 5.664e-05 -9.623e-03
-2.735e-04 -3.217e-03 1.295e-03 -5.354e-05 3.261e-03
-2.327e-04 5.664e-05 -5.354e-05 9.926e-04 -1.946e-04
-9.006e-04 -9.623e-03 3.261e-03 -1.946e-04 1.412e-02
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3 4 5
1 0.16425 1.000 0.125 -0.103 -0.100 -0.103
2 0.76801 0.125 1.000 -0.748 0.015 -0.678
3 0.82527 -0.103 -0.748 1.000 -0.047 0.763
4 0.12301 -0.100 0.015 -0.047 1.000 -0.052
5 0.78016 -0.103 -0.678 0.763 -0.052 1.000
[#1] INFO:Minization -- RooMinimizer::optimizeConst: deactivating const optimization
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) directly selected PDF components: (bkg)
[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) indirectly selected PDF components: ()
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "RooConstVar.h"
#include "RooChebychev.h"
#include "RooAddPdf.h"
#include "RooWorkspace.h"
#include "RooPlot.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "TFile.h"
#include "TH1.h"
using namespace RooFit ;
void fillWorkspace(RooWorkspace& w) ;
{
// C r e a t e a n d f i l l w o r k s p a c e
// ------------------------------------------------
// Create a workspace named 'w'
// With CINT w could exports its contents to
// a same-name C++ namespace in CINT 'namespace w'.
// but this does not work anymore in CLING.
// so this tutorial is an example on how to
// change the code
RooWorkspace* w1 = new RooWorkspace("w",kTRUE) ;
// Fill workspace with p.d.f. and data in a separate function
fillWorkspace(*w1) ;
// Print workspace contents
w1->Print() ;
// this does not work anymore with CLING
// use normal workspace functionality
// U s e w o r k s p a c e c o n t e n t s
// ----------------------------------------------
// Old syntax to use the name space prefix operator to access the workspace contents
//
//RooDataSet* d = w::model.generate(w::x,1000) ;
//RooFitResult* r = w::model.fitTo(*d) ;
// use normal workspace methods
RooAbsPdf * model = w1->pdf("model");
RooRealVar * x = w1->var("x");
RooDataSet* d = model->generate(*x,1000) ;
RooFitResult* r = model->fitTo(*d) ;
// old syntax to access the variable x
// RooPlot* frame = w::x.frame() ;
RooPlot* frame = x->frame() ;
d->plotOn(frame) ;
// OLD syntax to omit x::
// NB: The 'w::' prefix can be omitted if namespace w is imported in local namespace
// in the usual C++ way
//
// using namespace w;
// model.plotOn(frame) ;
// model.plotOn(frame,Components(bkg),LineStyle(kDashed)) ;
// new correct syntax
RooAbsPdf *bkg = w1->pdf("bkg");
model->plotOn(frame);
model->plotOn(frame,Components(*bkg),LineStyle(kDashed)) ;
// Draw the frame on the canvas
new TCanvas("rf509_wsinteractive","rf509_wsinteractive",600,600) ;
gPad->SetLeftMargin(0.15) ; frame->GetYaxis()->SetTitleOffset(1.4) ; frame->Draw() ;
}
void fillWorkspace(RooWorkspace& w)
{
// C r e a t e p d f a n d f i l l w o r k s p a c e
// --------------------------------------------------------
// Declare observable x
RooRealVar x("x","x",0,10) ;
// Create two Gaussian PDFs g1(x,mean1,sigma) anf g2(x,mean2,sigma) and their parameters
RooRealVar mean("mean","mean of gaussians",5,0,10) ;
RooRealVar sigma1("sigma1","width of gaussians",0.5) ;
RooRealVar sigma2("sigma2","width of gaussians",1) ;
RooGaussian sig1("sig1","Signal component 1",x,mean,sigma1) ;
RooGaussian sig2("sig2","Signal component 2",x,mean,sigma2) ;
// Build Chebychev polynomial p.d.f.
RooRealVar a0("a0","a0",0.5,0.,1.) ;
RooRealVar a1("a1","a1",0.2,0.,1.) ;
RooChebychev bkg("bkg","Background",x,RooArgSet(a0,a1)) ;
// Sum the signal components into a composite signal p.d.f.
RooRealVar sig1frac("sig1frac","fraction of component 1 in signal",0.8,0.,1.) ;
RooAddPdf sig("sig","Signal",RooArgList(sig1,sig2),sig1frac) ;
// Sum the composite signal and background
RooRealVar bkgfrac("bkgfrac","fraction of background",0.5,0.,1.) ;
RooAddPdf model("model","g1+g2+a",RooArgList(bkg,sig),bkgfrac) ;
}
ROOT::R::TRInterface & r
Definition: Object.C:4
#define d(i)
Definition: RSha256.hxx:102
const Bool_t kTRUE
Definition: RtypesCore.h:87
@ kDashed
Definition: TAttLine.h:48
#define gPad
Definition: TVirtualPad.h:286
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
Definition: RooAbsPdf.h:41
RooAddPdf is an efficient implementation of a sum of PDFs of the form.
Definition: RooAddPdf.h:29
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:28
Chebychev polynomial p.d.f.
Definition: RooChebychev.h:25
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:31
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
Definition: RooFitResult.h:40
Plain Gaussian p.d.f.
Definition: RooGaussian.h:25
A RooPlot is a plot frame and a container for graphics objects within that frame.
Definition: RooPlot.h:41
TAxis * GetYaxis() const
Definition: RooPlot.cxx:1123
virtual void Draw(Option_t *options=0)
Draw this plot and all of the elements it contains.
Definition: RooPlot.cxx:558
RooRealVar represents a fundamental (non-derived) real valued object.
Definition: RooRealVar.h:36
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.
RooAbsPdf * pdf(const char *name) const
Retrieve p.d.f (RooAbsPdf) with given name. A null pointer is returned if not found.
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title Offset is a correction factor with respect to the "s...
Definition: TAttAxis.cxx:294
The Canvas class.
Definition: TCanvas.h:31
Double_t x[n]
Definition: legend1.C:17
RooCmdArg Components(const RooArgSet &compSet)
RooCmdArg LineStyle(Style_t style)
Author
04/2009 - Wouter Verkerke

Definition in file rf509_wsinteractive.C.