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