-
Notifications
You must be signed in to change notification settings - Fork 34
/
fitdata.C
55 lines (44 loc) · 1.6 KB
/
fitdata.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef __CINT__
#include "RooGlobalFunc.h"
#endif
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "RooChebychev.h"
#include "RooAddPdf.h"
#include "RooExtendPdf.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "RooPlot.h"
using namespace RooFit ;
void fitdata(const char* input, const char* output)
{
// Open input file with workspace (generated by rf14_wspacewrite)
TFile *f = new TFile(input) ;
// Retrieve workspace from file
RooWorkspace* w = (RooWorkspace*) f->Get("w") ;
// Retrieve x,model and data from workspace
RooRealVar* x = w->var("x") ;
RooAbsPdf* model = w->pdf("model") ;
RooAbsData* data = w->data("modelData") ;
// Fit model to data, extended ML term automatically included
model->fitTo(*data) ;
// Plot data and PDF overlaid
RooPlot* xframe = x->frame(Title("Fit example")) ;
data->plotOn(xframe) ;
model->plotOn(xframe,Normalization(1.0,RooAbsReal::RelativeExpected)) ;
// Overlay the background component of model with a dashed line
model->plotOn(xframe,Components("bkg"),LineStyle(kDashed),Normalization(1.0,RooAbsReal::RelativeExpected)) ;
// Overlay the background components of model with a dotted line
//model->plotOn(xframe,Components(RooArgSet("bkg")),LineStyle(kDotted),Normalization(1.0,RooAbsReal::RelativeExpected)) ;
// Print structure of composite p.d.f.
//model.Print("t") ;
// Draw the frame on the canvas
TCanvas res("rf202_composite","rf202_composite",600,600) ;
gPad->SetLeftMargin(0.15) ;
xframe->GetYaxis()->SetTitleOffset(1.4) ;
xframe->Draw();
res.Update();
res.SaveAs(output);
res.Close();
}