Hi All, In the past few months, I twice stumbled across the same problem, which is probably due to some numerical imprecisions. The problem probably only pops up in some special cases, but it can be quite nagging, so I thought it is worthwhile to report. In some cases, when one tries to fit the same data in a TGraph and a histogram, the TGraph fails and the histogram doesn't. This mainly occurs when the data are in some small range, not centered at zero (e.g. 1.7 to 1.9). It probably has to do with the initialization routines for standard functions (pol, gaus, expo). I can think of a couple of reasons why this should be so, and I even tried to investigate in the code, to find out, but I soon got lost. So maybe somebody who is more familiar with the code has an idea?? Strangely enough, it seems to me that the routines are largely identical, and moreover, everywhere double precision is used, but still there is this difference... Included is a macro which reproduces this behaviour for the pol3 case. It initialises a TH1D and two TGraphErrors with the same data, but one of the TGraphErrors has a shifted x-axis. Try it and see for yourself... (Root v2.23/12 on Redhat) By the way, this also triggers the question: Is there a way to use e.g. a "pol3" in a fit without having ROOT initialise the function itself?? As far as I can see, ROOT always initialises the standardfunctions if you try to fit them to a TGraph or TH1... Kind regards, Marco van Leeuwen. ----- fit_test.C {{ gROOT->Reset(); TCanvas *c1=new TCanvas("c1","Canvas #1",500,500); TCanvas *c2=new TCanvas("c2","Canvas #2",500,600); c2->Divide(1,2,0,0,0); TF1 *f1=new TF1("f1","pol3",1.75,1.96); f1->SetParameter(0,1.30015e+07); f1->SetParameter(1,-2.10148e+07); f1->SetParameter(2,1.13154e+07); f1->SetParameter(3,-2.02969e+06); TH1D *h1 = new TH1D("h1","test histo",1000,0,2); TGraphErrors *gr = new TGraphErrors(105); TGraphErrors *gr2 = new TGraphErrors(105); for (Int_t i=875;i<980;i++){ Float_t x=h1->GetBinCenter(i); h1->SetBinContent(i,f1->Eval(x)+gRandom->Gaus(0,400)); h1->SetBinError(i,400); gr->SetPoint(i-875,x,h1->GetBinContent(i)); gr->SetPointError(i-875,0,h1->GetBinError(i)); gr2->SetPoint(i-875,x-1.85,h1->GetBinContent(i)); gr2->SetPointError(i-875,0,h1->GetBinError(i)); } h1->GetXaxis()->SetRange(875,980); c1->cd(); h1->Draw(); h1->Fit("pol3"); c2->cd(1); gPad->DrawFrame(1.74,-1200,1.96,1200); gr->Draw("p"); gr->Fit("pol3"); c2->cd(2); gPad->DrawFrame(-0.11,-1200,0.11,1200); gr2->Draw("p"); gr2->Fit("pol3"); }}
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET