Logo ROOT  
Reference Guide
rf602_chi2fit.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_roofit
3 /// \notebook -nodraw
4 ///
5 /// Likelihood and minimization: setting up a chi^2 fit to a binned dataset
6 ///
7 /// \macro_output
8 /// \macro_code
9 ///
10 /// \date 07/2008
11 /// \author Wouter Verkerke
12 
13 #include "RooRealVar.h"
14 #include "RooDataSet.h"
15 #include "RooGaussian.h"
16 #include "RooConstVar.h"
17 #include "RooChebychev.h"
18 #include "RooAddPdf.h"
19 #include "RooChi2Var.h"
20 #include "TCanvas.h"
21 #include "TAxis.h"
22 #include "RooPlot.h"
23 using namespace RooFit;
24 
25 void rf602_chi2fit()
26 {
27 
28  // S e t u p m o d e l
29  // ---------------------
30 
31  // Declare observable x
32  RooRealVar x("x", "x", 0, 10);
33 
34  // Create two Gaussian PDFs g1(x,mean1,sigma) anf g2(x,mean2,sigma) and their parameters
35  RooRealVar mean("mean", "mean of gaussians", 5);
36  RooRealVar sigma1("sigma1", "width of gaussians", 0.5);
37  RooRealVar sigma2("sigma2", "width of gaussians", 1);
38 
39  RooGaussian sig1("sig1", "Signal component 1", x, mean, sigma1);
40  RooGaussian sig2("sig2", "Signal component 2", x, mean, sigma2);
41 
42  // Build Chebychev polynomial p.d.f.
43  RooRealVar a0("a0", "a0", 0.5, 0., 1.);
44  RooRealVar a1("a1", "a1", 0.2, 0., 1.);
45  RooChebychev bkg("bkg", "Background", x, RooArgSet(a0, a1));
46 
47  // Sum the signal components into a composite signal p.d.f.
48  RooRealVar sig1frac("sig1frac", "fraction of component 1 in signal", 0.8, 0., 1.);
49  RooAddPdf sig("sig", "Signal", RooArgList(sig1, sig2), sig1frac);
50 
51  // Sum the composite signal and background
52  RooRealVar bkgfrac("bkgfrac", "fraction of background", 0.5, 0., 1.);
53  RooAddPdf model("model", "g1+g2+a", RooArgList(bkg, sig), bkgfrac);
54 
55  // C r e a t e b i n n e d d a t a s e t
56  // -----------------------------------------
57 
58  RooDataSet *d = model.generate(x, 10000);
59  RooDataHist *dh = d->binnedClone();
60 
61  // Construct a chi^2 of the data and the model.
62  // When a p.d.f. is used in a chi^2 fit, the probability density scaled
63  // by the number of events in the dataset to obtain the fit function
64  // If model is an extended p.d.f, the expected number events is used
65  // instead of the observed number of events.
66  model.chi2FitTo(*dh);
67 
68  // NB: It is also possible to fit a RooAbsReal function to a RooDataHist
69  // using chi2FitTo().
70 
71  // Note that entries with zero bins are _not_ allowed
72  // for a proper chi^2 calculation and will give error
73  // messages
74  RooDataSet *dsmall = (RooDataSet *)d->reduce(EventRange(1, 100));
75  RooDataHist *dhsmall = dsmall->binnedClone();
76  RooChi2Var chi2_lowstat("chi2_lowstat", "chi2", model, *dhsmall);
77  cout << chi2_lowstat.getVal() << endl;
78 }
RooChebychev.h
RooAddPdf
Definition: RooAddPdf.h:32
RooFit::EventRange
RooCmdArg EventRange(Int_t nStart, Int_t nStop)
Definition: RooGlobalFunc.cxx:180
RooChebychev
Definition: RooChebychev.h:25
RooArgList
Definition: RooArgList.h:21
RooGaussian.h
RooChi2Var
Definition: RooChi2Var.h:25
x
Double_t x[n]
Definition: legend1.C:17
RooGaussian
Definition: RooGaussian.h:25
RooAddPdf.h
TCanvas.h
RooDataSet.h
RooChi2Var.h
RooDataHist
Definition: RooDataHist.h:39
RooFit
Definition: RooCFunction1Binding.h:29
RooPlot.h
RooRealVar.h
RooConstVar.h
TAxis.h
RooDataSet::binnedClone
RooDataHist * binnedClone(const char *newName=0, const char *newTitle=0) const
Return binned clone of this dataset.
Definition: RooDataSet.cxx:972
d
#define d(i)
Definition: RSha256.hxx:120
RooDataSet
Definition: RooDataSet.h:33
make_cnn_model.model
model
Definition: make_cnn_model.py:6
RooRealVar
Definition: RooRealVar.h:35
RooArgSet
Definition: RooArgSet.h:28