Hi Alexander,
TH1::Fit is always setting ErrorDef=1.
I have introduced (CVS version only) a new function in TVirtualfitter
static TVirtualFitter::SetErrorDef(Double_t errdef=1);
With this version, you can do, eg:
void seterr2() {
TH1F *h = new TH1F("h","test",100,-3,3);
h->FillRandom("gaus",1000);
hpx->Fit("gaus","e");
TVirtualFitter::SetErrorDef(2);
hpx->Fit("gaus","e");
}
With your version, you can do something like:
void seterr() {
TH1F *h = new TH1F("h","test",100,-3,3);
h->FillRandom("gaus",1000);
hpx->Fit("gaus","qe");
TVirtualFitter *hFitter = TVirtualFitter::Fitter(h);
Double_t eplus,eminus,eparab, globcc;
printf("==ERRORS with ERRDEF=1\n");
for (Int_t i=0;i<3;i++) {
hFitter->GetErrors(i,eplus,eminus,eparab,globcc);
printf("%d eplus= %g eminus= %g, eparab= %g\n",i,eplus,eminus,eparab);
}
Double_t arglist[2];
arglist[0] = 2;
hFitter->ExecuteCommand("SET ERR",arglist,1);
arglist[0] = 500;
arglist[1] = 1e-7;
hFitter->ExecuteCommand("MIGRAD",arglist,2);
hFitter->ExecuteCommand("MINOS",arglist,0);
printf("==ERRORS with ERRDEF = 2\n");
for (Int_t i=0;i<3;i++) {
hFitter->GetErrors(i,eplus,eminus,eparab,globcc);
printf("%d eplus= %g eminus= %g, eparab= %g\n",i,eplus,eminus,eparab);
}
}
Rene Brun
Alexander Dietz wrote:
>
> Hi,
>
> to change the ERRDEF-parameter in MINUIT I tried the following:
>
> Double_t arglist[100];
>
> TH1F* h1=new TH1F("h1","h1",3,1,4);
> h1->Fill(1,1);
> h1->Fill(2,2);
> h1->Fill(3,1);
> h1->Draw();
>
> TVirtualFitter *hFitter = TVirtualFitter::Fitter(h1);
> h1->Fit("pol0"); // Fit 1
>
> arglist[0]=1;
> hFitter->ExecuteCommand("SET ERR",arglist,0.7);
> gMinuit->SetErrorDef(0.7);
> h1->Fit("pol0"); // Fit 2
>
> But both fits gave the same errors!
> So how to change the ERRDEF -parameter?
>
> Alexander Dietz
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:17 MET