Re: [ROOT] Pb with Fits

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Jun 01 2001 - 19:45:32 MEST


Hi Olivier,

In April, I answered a similar question from Pascal Perrodo.
This was my answer;
"Currently, TH1 or TGraph::Fit cannot make nested fits.
All TH1 or TGraph objects share the same fitter. Support for nested fits
would require each object having its own fitter.
I would not like to implement this by default because fitters are quite
fat objects, but it could be an option for cases like yours.
"
I see that I have to put a higher priority to this problem.
Note that you can already do it by making two instances of TFitter.
The only problem is that you have to save the gMinuit pointer before
setting the new Fitter and then restore it in the loop.
Contact me if you do not manage to implement it yourself.
I cannot work on this problem until end of June.

Rene Brun

On Fri, 1 Jun 2001, Olivier Meplan wrote:

>  Hello Rooters,
> I have a problem with fits....
> The goal is to fit the histogram MyHisto, which contains -1/(x+10)^2
>   between 0 and 100, by the function MyFunction.
> 
>   Unfortunately, MyFunction uses fits itself, as a way to compute the
>   derivative of 1/(x+p), in this example.
> 
>   It seems that the fits performed inside MyFunctions affects the
>   variables used to perform the main fit, causing a segmentation
>   fault.
> 
>   How is it possible to use separate places in memory for those
>   separate fits ?
> Thanks
> Olivier Meplan
> -----------------------------here is an example ----------
> 
> 
> #include <TROOT.h>
> #include <TApplication.h>
> #include <TCanvas.h>
> #include <TF1.h>
> #include <TH1.h>
> 
> Double_t MyFunction(Double_t *x, Double_t *par) {
> 
>   TH1D TempHisto("TempHisto","",100,0,100);
>   for (Int_t i=1;i<=TempHisto.GetNbinsX();i++)
>     TempHisto.SetBinContent(i,1.0/(i+par[0]));
> 
>   TF1 PolF1("MyPol","pol1");
>   TempHisto.Fit(&PolF1,"QN",0,x[0]-5.,x[0]+5.);
> 
>   return PolF1.GetParameter(1);
> 
> }
> 
> int main(int argc,char **argv) {
> 
>   TROOT MyRoot("MyRoot","");
>   TApplication MyApp("MyApp", &argc, argv);
> 
>   TH1D MyHisto("MyHisto","",100,0,100);
> 
>   for (Int_t i=1;i<=MyHisto.GetNbinsX();i++)
>     MyHisto.SetBinContent(i,-1.0/(i+10.0)/(i+10.0));
> 
>   TF1 *MyF1=new TF1("MyFunc",MyFunction,20,80,1);
>   MyF1->SetParameter(0,15);
> 
>   TCanvas MyCanvas("MyCanvas","");
>   MyCanvas.cd();
>   MyHisto.Draw();
>   MyHisto.Fit(MyF1,"R");
> 
>   MyCanvas.Update();
> 
>   MyApp.Run();
> 
> }
> 
> 



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:47 MET