[ROOT] Problems with fitting data

From: Alexander Dietz (adietz@mickey.mpi-hd.mpg.de)
Date: Wed Oct 02 2002 - 13:27:14 MEST


Hello Rooters,

I have a problem in fitting some data.

The code below creates a histogram with 100 bins, in it a contstant
background and a Gaussian line with variable size.
When executing the fit with a size of 1000 for the line all works fine.
When I use 100 counts for the line the fit-result is only 84 counts
(instead of 100).
And when I use 10 counts for the line the fit is done very bad.

So what can I do to obtain a correct fit to the data WITHOUT using the
Chi-square method (because the Chi-square method is limited at low
statistics, see http://root.cern.ch/root/roottalk/roottalk02/1395.html).


Cheers,

	Alexander





Double_t fitf(Double_t *x, Double_t *par)
{
  Double_t arg=(x[0]-par[2])/par[3];
  Double_t gauss1=par[1]*exp(-0.5*arg*arg)/(2.5066283*par[3]);
  // function=gauss+constant background
  return gauss1+par[0];
}

void start(void)
{
  TH1F* h1=new TH1F("h1","test histogram",100,1,100);
  double sigma=5.0;
  double lineSize=1000; // HERE THE SIZE CAN BE CHANGED
  for (int i=1;i<=100;i++) {
    double arg=(double(i)-50.0)/sigma;
    double content=4.0+lineSize*exp(-arg*arg/2)/(sigma*2.5066);
    h1->Fill(i,content);
  }

  h1->SetFillColor(2);
  h1->SetLineColor(2);
  h1->SetMinimum(0.0);

  // specifying function and set fit parameters
  TF1* func=new TF1("fitf",fitf,10,90,4);
  func->SetLineWidth(2);
  func->SetParameters(5.0, 10, 45, 6.0);
  func->SetParLimits(0, 0.0, 10.0);
  func->SetParLimits(1, 0.0, 1000.0);
  func->SetParLimits(2, 47.0,53.0);
  func->SetParLimits(3, 2.0, 10.0);

  // do the fit
  h1->Fit("fitf","LME");

}



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:12 MET