Hi. I had a similar problem last year, wanting to do a fit
within a fit. Rene posted a suggested solution. See
"fit within a fit trouble", 22-23 Mar 2000 in the roottalk
digest.
Stephen
On Fri, 1 Jun 2001, Rene Brun wrote:
> 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