Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
myfit.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_fit
3 /// \notebook -js
4 /// Get in memory an histogram from a root file and fit a user defined function.
5 /// Note that a user defined function must always be defined
6 /// as in this example:
7 /// - first parameter: array of variables (in this example only 1-dimension)
8 /// - second parameter: array of parameters
9 /// Note also that in case of user defined functions, one must set
10 /// an initial value for each parameter.
11 ///
12 /// \macro_image
13 /// \macro_output
14 /// \macro_code
15 ///
16 /// \author Rene Brun
17 
18 Double_t fitf(Double_t *x, Double_t *par)
19 {
20  Double_t arg = 0;
21  if (par[2] != 0) arg = (x[0] - par[1])/par[2];
22 
23  Double_t fitval = par[0]*TMath::Exp(-0.5*arg*arg);
24  return fitval;
25 }
26 void myfit()
27 {
28  TString dir = gROOT->GetTutorialDir();
29  dir.Append("/hsimple.C");
30  dir.ReplaceAll("/./","/");
31  if (!gInterpreter->IsLoaded(dir.Data())) gInterpreter->LoadMacro(dir.Data());
32  TFile *hsimpleFile = (TFile*)gROOT->ProcessLineFast("hsimple(1)");
33  if (!hsimpleFile) return;
34 
35  TCanvas *c1 = new TCanvas("c1","the fit canvas",500,400);
36 
37  TH1F *hpx = (TH1F*)hsimpleFile->Get("hpx");
38 
39 // Creates a Root function based on function fitf above
40  TF1 *func = new TF1("fitf",fitf,-2,2,3);
41 
42 // Sets initial values and parameter names
43  func->SetParameters(100,0,1);
44  func->SetParNames("Constant","Mean_value","Sigma");
45 
46 // Fit histogram in range defined by function
47  hpx->Fit(func,"r");
48 
49 // Gets integral of function between fit limits
50  printf("Integral of function = %g\n",func->Integral(-2,2));
51 }