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

Detailed Description

View in nbviewer Open in SWAN fitting a parabola to a multigraph of 3 partly overlapping graphs with different errors

FCN=95.1374 FROM MIGRAD STATUS=CONVERGED 54 CALLS 55 TOTAL
EDM=4.06527e-20 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 3.21134e+00 4.28055e-01 8.68677e-04 4.08980e-11
2 p1 1.87952e+00 2.48404e-01 2.95405e-04 -8.41861e-10
3 p2 1.00914e+00 3.49228e-02 6.26446e-05 -1.30438e-08
#include "TMultiGraph.h"
#include "TRandom.h"
#include "TF1.h"
#include "TGraphErrors.h"
#include "TCanvas.h"
#include "TMath.h"
void fitMultiGraph()
{
Int_t n = 30;
Double_t *xvalues1 = new Double_t[n];
Double_t *xvalues2 = new Double_t[n];
Double_t *xvalues3 = new Double_t[n];
Double_t *yvalues1 = new Double_t[n];
Double_t *yvalues2 = new Double_t[n];
Double_t *yvalues3 = new Double_t[n];
Double_t *evalues1 = new Double_t[n];
Double_t *evalues2 = new Double_t[n];
Double_t *evalues3 = new Double_t[n];
//generate the data for the graphs
Int_t i;
for (i=0; i<n; i++) {
xvalues1[i] = r.Uniform(0.1, 5);
xvalues2[i] = r.Uniform(3, 8);
xvalues3[i] = r.Uniform(9, 15);
yvalues1[i] = 3 + 2*xvalues1[i] + xvalues1[i]*xvalues1[i] + r.Gaus();
yvalues2[i] = 3 + 2*xvalues2[i] + xvalues2[i]*xvalues2[i] + r.Gaus()*10;
evalues1[i] = 1;
evalues2[i] = 10;
evalues3[i] = 20;
yvalues3[i] = 3 + 2*xvalues3[i] + xvalues3[i]*xvalues3[i] + r.Gaus()*20;
}
//create the graphs and set their drawing options
TGraphErrors *gr1 = new TGraphErrors(n, xvalues1, yvalues1, 0, evalues1);
TGraphErrors *gr2 = new TGraphErrors(n, xvalues2, yvalues2, 0, evalues2);
TGraphErrors *gr3 = new TGraphErrors(n, xvalues3, yvalues3, 0, evalues3);
gr2->SetMarkerStyle(24);
gr2->SetMarkerSize(0.3);
gr3->SetMarkerStyle(24);
gr3->SetMarkerSize(0.3);
//add the graphs to the multigraph
TMultiGraph *mg=new TMultiGraph("mg",
"TMultiGraph of 3 TGraphErrors");
mg->Add(gr1);
mg->Add(gr2);
mg->Add(gr3);
TCanvas *myc = new TCanvas("myc",
"Fitting a MultiGraph of 3 TGraphErrors");
myc->SetGrid();
mg->Draw("ap");
//fit
mg->Fit("pol2", "F");
//access to the fit function
TF1 *fpol = mg->GetFunction("pol2");
fpol->SetLineWidth(1);
}
void fitminuit()
{
Int_t n = 30;
Double_t *xvalues1 = new Double_t[n];
Double_t *xvalues2 = new Double_t[n];
Double_t *xvalues3 = new Double_t[n];
Double_t *yvalues1 = new Double_t[n];
Double_t *yvalues2 = new Double_t[n];
Double_t *yvalues3 = new Double_t[n];
Double_t *evalues1 = new Double_t[n];
Double_t *evalues2 = new Double_t[n];
Double_t *evalues3 = new Double_t[n];
Double_t *xtotal = new Double_t[n*3];
Double_t *ytotal = new Double_t[n*3];
Double_t *etotal = new Double_t[n*3];
Int_t i;
for (i=0; i<n; i++) {
xvalues1[i] = r.Uniform(-3, -1);
xvalues2[i] = r.Uniform(-1, 1);
xvalues3[i] = r.Uniform(1, 3);
yvalues1[i] = TMath::Gaus(xvalues1[i], 0, 1);
yvalues2[i] = TMath::Gaus(xvalues2[i], 0, 1);
evalues1[i] = 0.00001;
evalues2[i] = 0.00001;
evalues3[i] = 0.00001;
yvalues3[i] = TMath::Gaus(xvalues3[i], 0, 1);
}
for (i=0; i<n; i++)
{xtotal[i]=xvalues1[i]; ytotal[i]=yvalues1[i]; etotal[i]=0.00001;}
for (i=n; i<2*n; i++)
{xtotal[i] = xvalues2[i-n]; ytotal[i]=yvalues2[i-n]; etotal[i]=0.00001;}
for (i=2*n; i<3*n; i++)
{xtotal[i] = xvalues3[i-2*n]; ytotal[i]=yvalues3[i-2*n]; etotal[i]=0.00001;}
//create the graphs and set their drawing options
TGraphErrors *gr1 = new TGraphErrors(n, xvalues1, yvalues1, 0, evalues1);
TGraphErrors *gr2 = new TGraphErrors(n, xvalues2, yvalues2, 0, evalues2);
TGraphErrors *gr3 = new TGraphErrors(n, xvalues3, yvalues3, 0, evalues3);
TGraphErrors *grtotal = new TGraphErrors(n*3, xtotal, ytotal, 0, etotal);
TMultiGraph *mg=new TMultiGraph("mg", "TMultiGraph of 3 TGraphErrors");
mg->Add(gr1);
mg->Add(gr2);
mg->Add(gr3);
//mg->Draw("ap");
//TF1 *ffit = new TF1("ffit", "TMath::Gaus(x, [0], [1], [2])", -3, 3);
//ffit->SetParameters(0, 1, 0);
//mg->Fit(ffit);
grtotal->Fit("gaus");
mg->Fit("gaus");
}
ROOT::R::TRInterface & r
Definition Object.C:4
int Int_t
Definition RtypesCore.h:45
double Double_t
Definition RtypesCore.h:59
@ kRed
Definition Rtypes.h:66
@ kGreen
Definition Rtypes.h:66
@ kBlue
Definition Rtypes.h:66
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition TAttLine.h:43
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition TAttLine.h:40
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Definition TAttMarker.h:40
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Definition TAttMarker.h:41
The Canvas class.
Definition TCanvas.h:23
1-Dim function class
Definition TF1.h:213
A TGraphErrors is a TGraph with error bars.
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0)
Fit this graph with function with name fname.
Definition TGraph.cxx:1073
A TMultiGraph is a collection of TGraph (or derived) objects.
Definition TMultiGraph.h:36
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0)
Fit this graph with function with name fname.
virtual void Add(TGraph *graph, Option_t *chopt="")
Add a new graph to the list of graphs.
TF1 * GetFunction(const char *name) const
Return pointer to function with name.
virtual void Draw(Option_t *chopt="")
Draw this multigraph with its current attributes.
void SetGrid(Int_t valuex=1, Int_t valuey=1) override
Definition TPad.h:326
This is the base class for the ROOT Random number generators.
Definition TRandom.h:27
const Int_t n
Definition legend1.C:16
Double_t Gaus(Double_t x, Double_t mean=0, Double_t sigma=1, Bool_t norm=kFALSE)
Calculate a gaussian function with mean and sigma.
Definition TMath.cxx:448
Author
Anna Kreshuk

Definition in file fitMultiGraph.C.