28 Double_t gaus2D(Double_t *x, Double_t *par) {
29 double t1 = x[0] - par[1];
30 double t2 = x[1] - par[2];
31 return par[0]* exp( - 0.5 * ( t1*t1/( par[3]*par[3]) + t2*t2 /( par[4]*par[4] ) ) ) ;
35 Double_t fitFunction(Double_t *x, Double_t *par) {
39 void fillHisto(
int n =10000) {
41 gRandom =
new TRandom3();
42 for (
int i = 0; i < n; ++i) {
43 double x = gRandom->Gaus(2,3);
44 double y = gRandom->Gaus(-1,4);
49 void DoFit(
const char* fitter, TVirtualPad *pad, Int_t npass) {
51 TVirtualFitter::SetDefaultFitter(fitter);
53 fitFcn->SetParameters(100,0,0,2,7);
57 histo->Fit(
"fitFcn",
"0");
61 Double_t cputime = timer.CpuTime();
62 printf(
"%s, npass=%d : RT=%7.3f s, Cpu=%7.3f s\n",fitter,npass,timer.RealTime(),cputime);
63 TPaveLabel *p =
new TPaveLabel(0.5,0.7,0.85,0.8,Form(
"%s CPU= %g s",fitter,cputime),
"brNDC");
68 void minuit2FitBench2D(
int n = 100000) {
69 TH1::AddDirectory(kFALSE);
70 TCanvas *c1 =
new TCanvas(
"c1",
"Fitting Demo",10,10,900,900);
73 fitFcn =
new TF2(
"fitFcn",fitFunction,-10,10,-10,10,5);
76 gStyle->SetStatY(0.6);
79 histo =
new TH2D(
"h2",
"2D Gauss",100,-10,10,100,-10,10);
86 DoFit(
"Minuit",gPad,npass);
90 DoFit(
"Fumili",gPad,npass);
94 DoFit(
"Minuit2",gPad,npass);
98 DoFit(
"Fumili2",gPad,npass);