Re: bug in TMinuit calling "fcn" function

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Jan 12 1999 - 10:50:10 MET


Hi Stefan,
Thanks for reporting thsi problem when running TMinuit interactively.
The 4th parameter iflag was unfortunately passed by address
instead of by value in TMinuit::SetFCN(void *fcn).
This problem is now fixed in my development version 2.21/01.

I have reported to Masa the problem with the array declaration.

Rene Brun


stefan kluth wrote:
> 
> On Mon, 11 Jan 1999, Rene Brun wrote:
> > > with root 2.20/06 I find that in
> > >
> > > void fcn( Int_t &npar, Double_t *gin, Double_t &f,
> > >           Double_t *par, Int_t iflag) {
> > >
> > >   // my fit code
> > >
> > > }
> > >
> > > which is called by MINUIT through TMinuit the parameter iflag is not
> > > passed correctly. Even calling fcn explicitly with
> > >
> > >   ...
> > >   arglist[0]= 4;
> > >   gMinuit->mnexcm( "CALL", arglist, 1, ierflg );
> > >   ...
> > >
> > > I get nonsense (i.e something like iflag= 6585878) for iflag in fcn. This
> > > is bad, because traditionally in MINUIT style fits one has if-blocks in
> > > the fcn function which test the value of iflag to initialise, calculate
> > > the fit function or do some final calculation after the fit is done. At
> > > the moment, I have a workaround by using an extra constant fit parameter
> > > to pass a value for iflag, but this is quite ugly.
> 
> > I cannot reproduce this problem.
> > We provide a simple test program in $ROOTSYS/test/minexam.
> > Could you put a print statement in the function fcnk0 of the example
> > and tell me if you get what is expected. I have no problems with it.
> 
> Hm, the difference is that the minexam.cxx is compiled while mine is
> interpreted. I reproduced my problem by modifying minexam.cxx such that it
> can be loaded with ".L minexam.cxx". On printing "iflag" at the beginning
> if fcnk0 I get:
> 
> iflag= 536751360     (dec/alpha cxx6)
> iflag= -1073835196   (Linux)
> 
> The compiled versions work fine on both systems.
> 
> cheers, Stefan
> 
> PS: I found that cint doesn't like
> 
> const Int_t MXBIN= 50;
> static Double_t thplu[MXBIN];
> 
> I had to change it to
> 
> static Double_t thplu[50];
> 
> but I don't understand why.
> 
> ---Stefan Kluth---------------Lynen Fellow----------------|\--|\-------
> -  LBNL, MS 50A 2160       -  phone:  +1 510 495 2376  -  |/  |/      -
> -  1 Cyclotron Rd.         -  fax:    +1 510 495 2957  -  |\/\|\/\|'  -
> ---Berkeley, CA94720, USA-----e-mail: SKluth@lbl.gov------|/\/|/\/|----



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:28 MET