Loading [MathJax]/extensions/tex2jax.js
Logo ROOT   6.08/07
Reference Guide
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FittingDemo.C File Reference

Detailed Description

View in nbviewer Open in SWAN Example for fitting signal/background.

This example can be executed with:

root > .x FittingDemo.C (using the CINT interpreter)
root > .x FittingDemo.C+ (using the native complier via ACLIC)
pict1_FittingDemo.C.png
Processing /mnt/build/workspace/root-makedoc-v608/rootspi/rdoc/src/v6-08-00-patches/tutorials/fit/FittingDemo.C...
FCN=58.9284 FROM MIGRAD STATUS=CONVERGED 618 CALLS 619 TOTAL
EDM=1.54329e-09 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 1.2 per cent
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 -8.64715e-01 8.87889e-01 3.02210e-05 -3.15277e-06
2 p1 4.58434e+01 2.64076e+00 6.35729e-04 1.78463e-05
3 p2 -1.33214e+01 9.77307e-01 -1.31737e-04 3.73302e-05
4 p3 1.38074e+01 2.20785e+00 -1.29864e-03 -9.22424e-06
5 p4 1.72308e-01 3.72077e-02 -5.22394e-06 -1.45631e-03
6 p5 9.87281e-01 1.13098e-02 2.92804e-06 -3.44378e-04
**********
** 10 **SET NOGRAD
**********
PARAMETER DEFINITIONS:
NO. NAME VALUE STEP SIZE LIMITS
1 p0 -8.64715e-01 8.87889e-01 no limits
2 p1 4.58434e+01 2.64076e+00 no limits
3 p2 -1.33214e+01 9.77307e-01 no limits
4 p3 1.38074e+01 2.20785e+00 no limits
5 p4 2.00000e-01 3.72077e-02 no limits
6 p5 1.00000e+00 1.13098e-02 no limits
**********
** 11 **SET ERR 1
**********
**********
** 12 **SET PRINT 2
**********
**********
** 13 **SET STR 1
**********
NOW USING STRATEGY 1: TRY TO BALANCE SPEED AGAINST RELIABILITY
**********
** 14 **MIGRAD 1780 0.01
**********
FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.
START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-05
FCN=60.858 FROM MIGRAD STATUS=INITIATE 22 CALLS 23 TOTAL
EDM= unknown STRATEGY= 1 NO ERROR MATRIX
EXT PARAMETER CURRENT GUESS STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 -8.64715e-01 8.87889e-01 8.87889e-01 4.29214e-01
2 p1 4.58434e+01 2.64076e+00 2.64076e+00 4.53155e-01
3 p2 -1.33214e+01 9.77307e-01 9.77307e-01 8.11696e-01
4 p3 1.38074e+01 2.20785e+00 2.20785e+00 -6.67494e-01
5 p4 2.00000e-01 3.72077e-02 3.72077e-02 5.35278e+01
6 p5 1.00000e+00 1.13098e-02 1.13098e-02 1.53279e+02
NO ERROR MATRIX
FCN=59.0986 FROM MIGRAD STATUS=PROGRESS 39 CALLS 40 TOTAL
EDM=0.770568 STRATEGY= 1 NO ERROR MATRIX
EXT PARAMETER CURRENT GUESS STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 -9.13550e-01 8.87889e-01 -4.88344e-02 -1.02740e-01
2 p1 4.58158e+01 2.64076e+00 -2.75905e-02 -4.11668e-01
3 p2 -1.33297e+01 9.77307e-01 -8.26649e-03 -1.43164e+00
4 p3 1.43059e+01 2.20785e+00 4.98560e-01 3.34033e-01
5 p4 1.76669e-01 3.72077e-02 -2.33314e-02 -5.66279e+00
6 p5 9.90624e-01 1.13098e-02 -9.37641e-03 5.09250e+01
MIGRAD MINIMIZATION HAS CONVERGED.
MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.
START COVARIANCE MATRIX CALCULATION.
EIGENVALUES OF SECOND-DERIVATIVE MATRIX:
1.2685e-02 2.6097e-01 6.2144e-01 1.0079e+00 1.5369e+00 2.5601e+00
COVARIANCE MATRIX CALCULATED SUCCESSFULLY
FCN=58.9284 FROM HESSE STATUS=OK 40 CALLS 164 TOTAL
EDM=2.83537e-05 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 -8.62472e-01 8.91793e-01 2.08429e-03 4.68256e-04
2 p1 4.58294e+01 2.64212e+00 1.52471e-03 -1.63791e-03
3 p2 -1.33163e+01 9.76930e-01 6.23584e-04 6.32364e-03
4 p3 1.38135e+01 2.17742e+00 5.05443e-03 -2.23116e-04
5 p4 1.72389e-01 3.58301e-02 9.43447e-05 1.89644e-02
6 p5 9.87280e-01 1.12690e-02 4.24065e-05 -7.70600e-02
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3 4 5 6
1 0.78593 1.000 -0.512 0.400 -0.082 -0.117 0.042
2 0.98828 -0.512 1.000 -0.978 -0.526 -0.391 -0.061
3 0.98564 0.400 -0.978 1.000 0.545 0.410 0.053
4 0.78922 -0.082 -0.526 0.545 1.000 0.710 0.071
5 0.71738 -0.117 -0.391 0.410 0.710 1.000 0.070
6 0.09369 0.042 -0.061 0.053 0.071 0.070 1.000
FCN=58.9284 FROM MIGRAD STATUS=PROGRESS 176 CALLS 177 TOTAL
EDM=6.09404e-13 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 -8.64713e-01 8.91793e-01 -2.24105e-03 1.85566e-07
2 p1 4.58434e+01 2.64212e+00 1.39273e-02 -9.90056e-09
3 p2 -1.33214e+01 9.76930e-01 -5.15131e-03 2.02571e-07
4 p3 1.38074e+01 2.17742e+00 -6.03314e-03 7.41648e-07
5 p4 1.72309e-01 3.58301e-02 -7.96940e-05 -2.58628e-05
6 p5 9.87281e-01 1.12690e-02 1.37418e-06 -8.42700e-05
MIGRAD MINIMIZATION HAS CONVERGED.
FCN=58.9284 FROM MIGRAD STATUS=CONVERGED 176 CALLS 177 TOTAL
EDM=6.09404e-13 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 0.0 per cent
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 -8.64713e-01 8.91794e-01 -2.24105e-03 1.85566e-07
2 p1 4.58434e+01 2.64221e+00 1.39273e-02 -9.90056e-09
3 p2 -1.33214e+01 9.76963e-01 -5.15131e-03 2.02571e-07
4 p3 1.38074e+01 2.17751e+00 -6.03314e-03 7.41648e-07
5 p4 1.72309e-01 3.58302e-02 -7.96940e-05 -2.58628e-05
6 p5 9.87281e-01 1.12690e-02 1.37418e-06 -8.42700e-05
EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 6 ERR DEF=1
7.953e-01 -1.205e+00 3.484e-01 -1.594e-01 -3.729e-03 4.227e-04
-1.205e+00 6.981e+00 -2.525e+00 -3.027e+00 -3.704e-02 -1.812e-03
3.484e-01 -2.525e+00 9.545e-01 1.159e+00 1.434e-02 5.871e-04
-1.594e-01 -3.027e+00 1.159e+00 4.742e+00 5.537e-02 1.737e-03
-3.729e-03 -3.704e-02 1.434e-02 5.537e-02 1.284e-03 2.833e-05
4.227e-04 -1.812e-03 5.871e-04 1.737e-03 2.833e-05 1.270e-04
PARAMETER CORRELATION COEFFICIENTS
NO. GLOBAL 1 2 3 4 5 6
1 0.78593 1.000 -0.512 0.400 -0.082 -0.117 0.042
2 0.98828 -0.512 1.000 -0.978 -0.526 -0.391 -0.061
3 0.98564 0.400 -0.978 1.000 0.545 0.410 0.053
4 0.78924 -0.082 -0.526 0.545 1.000 0.710 0.071
5 0.71738 -0.117 -0.391 0.410 0.710 1.000 0.070
6 0.09364 0.042 -0.061 0.053 0.071 0.070 1.000
EXTERNAL ERROR MATRIX. NDIM= 6 NPAR= 6 ERR DEF=1
7.953e-01 -1.205e+00 3.484e-01 -1.594e-01 -3.729e-03 4.227e-04
-1.205e+00 6.981e+00 -2.525e+00 -3.027e+00 -3.704e-02 -1.812e-03
3.484e-01 -2.525e+00 9.545e-01 1.159e+00 1.434e-02 5.871e-04
-1.594e-01 -3.027e+00 1.159e+00 4.742e+00 5.537e-02 1.737e-03
-3.729e-03 -3.704e-02 1.434e-02 5.537e-02 1.284e-03 2.833e-05
4.227e-04 -1.812e-03 5.871e-04 1.737e-03 2.833e-05 1.270e-04
FCN=58.9284 FROM MIGRAD STATUS=CONVERGED 176 CALLS 177 TOTAL
EDM=6.09404e-13 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 0.0 per cent
EXT PARAMETER PARABOLIC MINOS ERRORS
NO. NAME VALUE ERROR NEGATIVE POSITIVE
1 p0 -8.64713e-01 8.91794e-01
2 p1 4.58434e+01 2.64221e+00
3 p2 -1.33214e+01 9.76963e-01
4 p3 1.38074e+01 2.17751e+00
5 p4 1.72309e-01 3.58302e-02
6 p5 9.87281e-01 1.12690e-02
#include "TH1.h"
#include "TMath.h"
#include "TF1.h"
#include "TLegend.h"
#include "TCanvas.h"
// Quadratic background function
return par[0] + par[1]*x[0] + par[2]*x[0]*x[0];
}
// Lorenzian Peak function
Double_t lorentzianPeak(Double_t *x, Double_t *par) {
return (0.5*par[0]*par[1]/TMath::Pi()) /
TMath::Max( 1.e-10,(x[0]-par[2])*(x[0]-par[2])
+ .25*par[1]*par[1]);
}
// Sum of background and peak function
return background(x,par) + lorentzianPeak(x,&par[3]);
}
void FittingDemo() {
//Bevington Exercise by Peter Malzacher, modified by Rene Brun
const int nBins = 60;
Double_t data[nBins] = { 6, 1,10,12, 6,13,23,22,15,21,
23,26,36,25,27,35,40,44,66,81,
75,57,48,45,46,41,35,36,53,32,
40,37,38,31,36,44,42,37,32,32,
43,44,35,33,33,39,29,41,32,44,
26,39,29,35,32,21,21,15,25,15};
TCanvas *c1 = new TCanvas("c1","Fitting Demo",10,10,700,500);
c1->SetFillColor(33);
c1->SetGrid();
TH1F *histo = new TH1F("histo",
"Lorentzian Peak on Quadratic Background",60,0,3);
histo->SetMarkerStyle(21);
histo->SetMarkerSize(0.8);
histo->SetStats(0);
for(int i=0; i < nBins; i++) histo->SetBinContent(i+1,data[i]);
// create a TF1 with the range from 0 to 3 and 6 parameters
TF1 *fitFcn = new TF1("fitFcn",fitFunction,0,3,6);
fitFcn->SetNpx(500);
fitFcn->SetLineWidth(4);
// first try without starting values for the parameters
// This defaults to 1 for each param.
// this results in an ok fit for the polynomial function
// however the non-linear part (lorenzian) does not
// respond well.
fitFcn->SetParameters(1,1,1,1,1,1);
histo->Fit("fitFcn","0");
// second try: set start values for some parameters
fitFcn->SetParameter(4,0.2); // width
fitFcn->SetParameter(5,1); // peak
histo->Fit("fitFcn","V+","ep");
// improve the picture:
TF1 *backFcn = new TF1("backFcn",background,0,3,3);
backFcn->SetLineColor(kRed);
TF1 *signalFcn = new TF1("signalFcn",lorentzianPeak,0,3,3);
signalFcn->SetLineColor(kBlue);
signalFcn->SetNpx(500);
Double_t par[6];
// writes the fit results into the par array
fitFcn->GetParameters(par);
backFcn->SetParameters(par);
backFcn->Draw("same");
signalFcn->SetParameters(&par[3]);
signalFcn->Draw("same");
// draw the legend
TLegend *legend=new TLegend(0.6,0.65,0.88,0.85);
legend->SetTextFont(72);
legend->SetTextSize(0.04);
legend->AddEntry(histo,"Data","lpe");
legend->AddEntry(backFcn,"Background fit","l");
legend->AddEntry(signalFcn,"Signal fit","l");
legend->AddEntry(fitFcn,"Global Fit","l");
legend->Draw();
}
Author
Rene Brun

Definition in file FittingDemo.C.