Re: [ROOT] fit-function

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Jul 17 2001 - 22:00:16 MEST


Hi Danilo,
You had several problems in your macro. In particular,
you should have saved the TGraphErrors object instead of the TH1F.
Same on reading.
See my modified files in the two attachments. Do
 root > .x danilo.C
 root > .x danilo2.C

Rene Brun

On Tue, 17 Jul 2001, Danilo Behnke wrote:

> Hi ROOTers,
>  
> in order to fit some data I rewrote the example-files myfit.C and
> hsimple.C. Here I have to fit no histogram but some data-points. But as
> far as I recognized, that should be nearly the same. I tried to fit with a
> simple linear term (because I wanted to get familiar with user defined
> function), but I did not get what I expected (but a straight line on the
> x-axis).
> What maybe the mistake? And could you give me an advice, how to implement
> an integral (with 2 or 3 parameters) as my fit function?
> Thank you for your effort, maybe I am not able to read the manual
> correct... 
>  
> Danilo
>  
>  
> This is my modified myfit.C
>  
> Double_t fitfunc(Double_t *x, Double_t *par)
> {
>   Double_t fitval = par[0]+x[0]*par[1]+x[0]*x[0]*par[2];
>   return fitval;
> }
> gRoot->Reset();
> //this function used fitfunc to fit a graph
> void test_2()
>   {
>      TFile *f = new TFile("daten.root");
>      TH1F *data = (TH1F*)f->Get("data");
>      TF1 *function = new TF1("fitfunc","fitfunc",0,1,3);
>      function->SetParNames("const","linear","quadratic");
>      data->Fit(function,"R");
>   }
> 
> And this is the modified hsimple.C
>  
> {
>   gROOT->Reset();
>  
>   c1 = new TCanvas("c1","Data",200,10,700,500);
>   c1->SetFillColor(42);
>   c1->GetFrame()->SetFillColor(21);
>   c1->GetFrame()->SetBorderSize(12);
>   c1->GetFrame()->SetBorderMode(-1);
>  
>   TFile *hfile = (TFile*)gROOT->FindObject("daten.root"); 
>   if (hfile) hfile->Close();
>   hfile = new TFile("daten.root","RECREATE","DATA");
>  
>   data = new TH1F("data","These are the data",42,0,1);
>  
>   data->SetMarkerColor(4);
>   data->SetMarkerStyle(20);
>  
>     gBenchmark->Start("daten");
>     
>     //Create the points
>     const Int_t n = 42;     
>     Double_t x[n] =
> {0.458,0.354,0.425,0.374,0.420,0.372,0.378,0.453,0.465,0.498,0.655,0.4,0.615,0.480,0.450,0.388,0.570,0.490,0.495,0.656,0.828,0.450,0.430,0.580,0.763,0.526,0.172,0.619,0.592,0.550,0.180,0.374,0.472,0.430,0.657,0.612,0.320,0.579,0.450,0.581,0.416,0.830};
>     Double_t y[n] =
> {23.11,22.38,22.13,21.72,22.55,22.26,22.58,23.17,23.33,23.71,23.27,22.36,23.19,22.96,22.51,22.65,23.27,23.10,22.83,23.57,24.65,23.17,23.13,23.46,24.47,23.15,20.17,23.80,24.42,23.51,20.43,23.52,23.11,22.57,23.83,23.69,21.86,23.48,22.83,23.09,22.57,24.32};
>   
>     //create the width of errors in x and y direction
>     Double_t ex[n] =
> {0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.005,0.001,0.001,0.03,0.001,0.001,0.001,0.001,0.001,0.01,0.001,0.001,0.001,0.01,0.01,0.001,0.001,0.001,0.001,0.001,0.001,0.01,0.001,0.001,0.001,0.01,0.001,0.001,0.01,0.001,0.01,0.001,0.001,0.01};  
>     Double_t ey[n] =
> {0.46,0.33,0.49,0.22,0.25,0.20,0.37,0.25,0.30,0.25,0.21,0.19,0.25,0.24,0.23,0.2,0.22,0.2,0.19,0.28,0.54,0.23,0.22,0.23,0.53,0.20,0.18,0.28,0.37,0.25,0.17,0.24,0.19,0.18,0.23,0.21,0.18,0.22,0.3,0.22,0.2,0.22};
>     
>      //create the TGraphErrors and draw
>  
>     gr = new TGraphErrors(n,x,y,ex,ey);
>     gr->SetTitle("Data-file");
>     gr->SetMarkerColor(4);
>     gr->SetMarkerStyle(20);
>     gr->Draw("AP");
>     
>     gBenchmark->Show("daten");
>   
>   data->SetMarkerColor(0);
>   data->SetMarkerStyle(20);
>   hfile->Write();
>   data->SetMarkerColor(4);
>   data->SetMarkerStyle(20);
>   c1->Modified();
> }
> 
>  
> 
> Danilo Behnke
> 






This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:52 MET