See example of nested Fits in the macro DoubleFit.C in attachement
Rene Brun
On Thu,
19 Aug 2004, Dr. John Krane wrote:
> Hi,
>
> I'm running a stand-alone program with ROOT libraries (v4.00/03)
> compilied into it so I can use Minuit. Because I am doing complicated
> fits, I can't just fit a histogram, I instead do:
>
> TVirtualFitter *minuit = TVirtualFitter::Fitter(0, 150);
> minuit->SetFCN(dummy_func); // wrapper for my full-blown fit routine
>
> ...etc. and all is well. I have the command
>
> minuit->ExecuteCommand("MINI",arglist,0);
>
> inside a loop that adds a new data point each time through. Again, all
> this is working just fine, but today I decided I would like to look at
> the slope of the residuals of this fit. So I figured I would use TH1D
> for the residuals and the method Fit("pol1"). (Actually, I made my own
> TF1 so I can get the slope parameter.) So into the loop I put:
>
> TF1 p1("p1","[0]+x*[1]",0.0,100.0);
> p1.SetParameters(0.0,0.0);
> tempbvalshist.Fit("p1");
> slope1=p1.GetParameter(1);
>
> ...and this works as well...once. When I get back up to the
> minuit->ExecuteCommand("MINI") part, I get a terrible crash:
>
> *** Break *** segmentation violation
> Generating stack trace...
> 0x40fbe949 in TMinuit::Eval(int, double*, double&, double*, int) + 0x2b
> from /bin/root/lib/libMinuit.so
> 0x40fc2dfc in TMinuit::mnderi() + 0x47c from /bin/root/lib/libMinuit.so
> 0x40fcb8f7 in TMinuit::mnmigr() + 0x20b from /bin/root/lib/libMinuit.so
> 0x40fc45d6 in TMinuit::mnexcm(char const*, double*, int, int&) + 0x686
> from /bin/root/lib/libMinuit.so
> 0x40fba057 in TFitter::ExecuteCommand(char const*, double*, int) + 0x31
> from /bin/root/lib/libMinuit.so
> 0x080598fc in main + 0x22fa from simulate_signals
> 0x420156a4 in __libc_start_main + 0xe4 from /lib/tls/libc.so.6
> 0x0804ead9 in TFile::TFile[in-charge](char const*, char const*, char
> const*, int) + 0x31 from simulate_signals
> Aborted
>
> Now, it seems from reading through the roottalk archives that Greg
> Landsberg had this problem back in March 2003, running in ROOT with a
> macro. His solution was to save the pointer gMinuit before his second
> fit and then restore the pointer afterward. Because I'm running
> stand-alone, I don't have a gMinuit, I only have my pointer to the
> TVirtualFitter. The roottalk archives indicate that Rene has fixed
> things, but I'm still stuck. I'm using version 4.00/03, which dates
> from 10 May 2004, so I'm not sure if this is the same problem Greg had
> after all.
>
> Could somebody please advise me on how to get out of this little hole
> I'm stuck in?
>
> - John
>
>
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET