Re: [ROOT] seg fault while trying to gMinuit->Write()

From: Edmond Offermann (edmondoffermann@yahoo.com)
Date: Tue Mar 30 2004 - 04:17:46 MEST


Hi John,

I see two different scenarios:

1) Your fit is linear in the fit parameters .
   So it takes 4 weeks to calculate the derivatives
   of interest for estimating the Hessian matrix and
the
   gradient . I see absolutely no way to store
   the status half way and pick it up from there 
   without heavy hacking in the code .
2) The fit is non-linear in the parameters and it
takes
   several iterations to get the objective's minimum.
   In this case, all you need are the current
   fit parameter values after each step . Minuit
   does print these values out but I do not see at the
   moment an implemented function to get them .
   It is easy to pinpoint the place where they are
   printed, so you could add some statements there.

Eddy

--- "Dr. John Krane" <jkrane@netzero.com> wrote:
> Hi everyone,
> 
> I'm not sure I made my original desire clear.  My
> fit takes anywhere 
> from 1 week to 4 weeks to complete.  That is a
> single "MINI" command.  I 
> would like to write the intermediate states to a
> file so I don't lose 
> data completely if I overwhelm Windows on day 6 with
> a huge database 
> operation while ROOT is working in the background.
> 
> So my structure is basically
> 
> TVirutalFitter *myminuit;  //declared globally
> int main( blah ) {
>   myminuit = TVirtualFitter::Fitter(0, ARRAYSIZE);
>   myminuit->ExecuteCommand("MINI",arglist,0);
> }
> void func_fit::minimize(Int_t &npar, Double_t *grad,
> Double_t &mychi2,
>                             Double_t *params, Int_t
> iflag){
>     // blah blah...compute "mychi2" based on "npar"
> values
>     count++;
>     if (fmod(count,10000)==0) myminuit->Write();
> }
> 
> So, myminuit is *in the middle* of fitting when I
> try to write it to 
> disk.  In fact, it is in the middle of a call to my
> user-function when I 
> try to write it to disk.  I don't know if I can
> write successfully at 
> this time, but it is what I must try to do.  In this
> sense, putting 
> gMinuit->Write() into tutorials/Ifit.C is not
> relevant because I do not 
> intend to wait politely for Minuit to finish the fit
> before I try to 
> write it to disk.
> 
> Does anybody know if something about the guts of
> TVirtualFitter 
> prohibits me from even trying to do this?  Maybe I
> can edit 
> TVirtualFitter in ROOT to put in a method that does
> a this->Write() or 
> something, so it at least won't be in the middle of
> a function call when 
> I try to write it.
> 
>     - John
> 
> >>Program received signal SIGSEGV, Segmentation
> fault.
> >>[Switching to Thread 1091201184 (LWP 24100)]
> >>0x4025d8a2 in ROOT::TObject_IsA(void const*) ()
> from
> >>
> >>/bin/root/lib/libCore.so
> >>(gdb) where
> >>#0  0x4025d8a2 in ROOT::TObject_IsA(void const*)
> ()
> >>from 
> >>/bin/root/lib/libCore.so
> >>#1  0x401619b4 in TClass::GetActualClass(void
> >>const*) const () from 
> >>/bin/root/lib/libCore.so
> >>#2  0x400ec4ff in TBuffer::WriteObjectAny(void
> >>const*, TClass*) () from 
> >>/bin/root/lib/libCore.so
> >>#3  0x4024f7cf in operator<<(TBuffer&, TObject
> >>const*) () from 
> >>/bin/root/lib/libCore.so
> >>#4  0x40e9d933 in TMinuit::Streamer(TBuffer&) ()
> >>from 
> >>/bin/root/lib/libMinuit.so
> >>#5  0x40101246 in TKey::TKey(TObject*, char
> const*,
> >>int) () from 
> >>/bin/root/lib/libCore.so
> >>#6  0x4010e293 in TObject::Write(char const*, int,
> >>int) () from 
> >>/bin/root/lib/libCore.so
> >>#7  0x0805297c in func_fit::minimize(int&,
> double*,
> >>double&, double*, 
> >>int) (this=0x8059a20, npar=@0xbfffd4f4,
> >>grad=0xd6f56d0, mychi2=@0xbfffd620,
> >>    params=0xd6ec0b0, iflag=4) at func_fit.cpp:395
> >>#8  0x080547d5 in dummy_func(int&, double*,
> double&,
> >>double*, int) 
> >>(npar=@0xbfffd4f4, grad=0xd6f56d0,
> >>mychi2=@0xbfffd620, params=0xd6ec0b0, 
> >>iflag=4)
> >>    at fit_idx.cpp:46
> >>#9  0x40e8458d in TMinuit::Eval(int, double*,
> >>double&, double*, int) () 
> >>from /bin/root/lib/libMinuit.so
> >>#10 0x40e8d827 in TMinuit::mnhess() () from
> >>/bin/root/lib/libMinuit.so
> >>#11 0x40e914b7 in TMinuit::mnmigr() () from
> >>/bin/root/lib/libMinuit.so
> >>#12 0x40e8a21a in TMinuit::mnexcm(char const*,
> >>double*, int, int&) () 
> >>from /bin/root/lib/libMinuit.so
> >>#13 0x40e8020f in TFitter::ExecuteCommand(char
> >>const*, double*, int) () 
> >>from /bin/root/lib/libMinuit.so
> >>#14 0x08055296 in main (argc=2, argv=0xbfffe874)
> at
> >>fit_idx.cpp:140
> >>#15 0x420156a4 in __libc_start_main () from
> >>/lib/tls/libc.so.6
> >>
> >>
> >>    
> >>
> >
> >
> >
> >  
> >
> 
> -- 
> 
> Dr. John Krane
> jkrane@netzero.com
> 
> 



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:07 MET