Re: [ROOT] Interactive minuit access from ROOT?

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Dec 04 2001 - 08:23:39 MET


Art,

I know that this may seem a bit confusing.
By default, when you fit with a predefined function, the initial values
for the parameters are automatically computed and parameters cannot be
fixed.
Only when you fit with a predefined function ("gaus","expo","poln") and
you want to fix a parameter, you have to:
 - specify the option "b"
 - set the initial values of the parameters

If you do not fit with a predefined functions, the option "b" is not
necessary. As soon as you call TF1::FixParameter or SetLimits, this option
will be automatically selected.

Rene Brun

On Mon, 3 Dec 2001, Arthur E. Snyder wrote:

> 
> This works in 3.02-03. There is one remaining small problem. When one fits
> without the "b" option minuit still claims the "fixed" parameters are
> fixed, but they are not. This is likely to confuse people.
> 
> With "b" option on it works great.
> 
> Thanks again,
> Art
> 
> 
> A.E. Snyder, Group EC                        \!c*p?/
> SLAC Mail Stop #95                          ((.   .))
> Box 4349                                        |
> Stanford, Ca, USA, 94309                      '\|/`
> e-mail:snyder@slac.stanford.edu                 o
> phone:650-926-2701                              _
> http://www.slac.stanford.edu/~snyder          BaBar
> FAX:650-926-2657                          Collaboration
> 
> 
> 
> On Mon, 3 Dec 2001, Rene Brun wrote:
> 
> > Art,
> >
> > Here is a small example:
> >
> > void fixp() {
> >    TH1F *h = new TH1F("h","test",100,-4,4);
> >    h->FillRandom("gaus",5000);
> >    TF1 *e = new TF1("e","pol4",-1,1);
> >    e->FixParameter(0,160);
> >    h->Fit("e","br");
> > }
> >
> > Using the option "b" (Boundary) is important. The documentation of TH1::Fit
> > says:
> >
> > //*-*   Setting initial conditions
> > //*-*   ==========================
> > //*-*   Parameters must be initialized before invoking the Fit function.
> > //*-*   The setting of the parameter initial values is automatic for the
> > //*-*   predefined functions : poln, expo, gaus. One can however disable
> > //*-*   this automatic computation by specifying the option "B".
> > //*-*   You can specify boundary limits for some or all parameters via
> > //*-*        f1->SetParLimits(p_number, parmin, parmax);
> > //*-*   if parmin>=parmax, the parameter is fixed
> > //*-*   Note that you are not forced to fix the limits for all parameters.
> > //*-*   For example, if you fit a function with 6 parameters, you can do:
> > //*-*     func->SetParameters(0,3.1,1.e-6,-1.5,0,100);
> > //*-*     func->SetParLimits(3,-10,-4);
> > //*-*     func->FixParameter(4,0);
> > //*-*     func->SetParLimits(5, 1,1);
> > //*-*   With this setup, parameters 0->2 can vary freely
> > //*-*   Parameter 3 has boundaries [-10,-4] with initial value -8
> > //*-*   Parameter 4 is fixed to 0
> > //*-*   Parameter 5 is fixed to 100.
> > //*-*   When the lower limit and upper limit are equal, the parameter is fixed.
> > //*-*   However to fix a parameter to 0, one must call the FixParameter
> > function.
> >
> > Rene Brun
> >
> >
> > Arthur E. Snyder wrote:
> > >
> > > The SetParLimits function really seems to be totally ineffective:
> > >
> > > root [180] efit->GetParameter(0)
> > > (Double_t)5.89071269118343935e+02
> > > root [181] efit->SetParameter(0,2.0)
> > > root [182] efit->GetParameter(0)
> > > (Double_t)2.00000000000000000e+00
> > > root [183] efit->SetParLimits(0,1.0,1.0)
> > >
> > > -so parmeter 0 of this function (a "pol4") should be fixed to 2.0
> > >
> > > root [184] bhist->Fit("e")  [note a]
> > >  FCN=66.7558 FROM MIGRAD    STATUS=CONVERGED     134 CALLS         135
> > > TOTAL
> > >                      EDM=5.71703e-14    STRATEGY= 1      ERR MATRIX NOT
> > > POS-DEF
> > >   EXT PARAMETER                APPROXIMATE        STEP         FIRST
> > >   NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
> > >    1  p0           5.89071e+02     fixed
> > >    2  p1          -3.16776e+03   2.00304e+00   1.51050e-03   8.00435e-08
> > >    3  p2           6.43575e+03   3.89200e+00   3.06881e-03  -8.40017e-09
> > >    4  p3          -5.79772e+03   4.44730e+00   2.76457e-03   9.71526e-09
> > >    5  p4           1.94450e+03   3.58314e+00   1.54134e-03   6.48922e-08
> > >
> > > -it fits parameter 0 though claiming it is fixed!?
> > >
> > > -am I doing somthing real stupid or is this a bug?
> > >
> > > Art S.
> > >
> > > note a: "e" is the name I gave the TF1 function *efit. BTW, the function
> > > TH1::Fit(TF1*) also seems to be missing in action, so I have to use the
> > > one that finds the function by name rather than pointer.
> > >
> > > A.E. Snyder, Group EC                        \!c*p?/
> > > SLAC Mail Stop #95                          ((.   .))
> > > Box 4349                                        |
> > > Stanford, Ca, USA, 94309                      '\|/`
> > > e-mail:snyder@slac.stanford.edu                 o
> > > phone:650-926-2701                              _
> > > http://www.slac.stanford.edu/~snyder          BaBar
> > > FAX:650-926-2657                          Collaboration
> > >
> > > On Sun, 2 Dec 2001, Rene Brun wrote:
> > >
> > > > Art,
> > > >
> > > > Even in PAW, people included the Minuit commands in a KUIP macro.
> > > > You should do the same. However, currently, it is not easy to get
> > > > the control after each iteration. You get the control only at the end
> > > > of the fit, unless you implement your own fitting model (like
> > > > H1FitChisquare or likelihood). One could imagine a new option
> > > > to force a call to a function or macro after each iteration.
> > > > If there are more suggestions, they are welcome.
> > > >
> > > > Rene Brun
> > > >
> > > > On Sun, 2 Dec 2001, Arthur E. Snyder wrote:
> > > >
> > > > > Hi Rene,
> > > > >
> > > > > I was able to grab gMinuit and use mnexcm to execute minuit commands, refit,
> > > > > etc. It is pretty awkward interactively, but works. However, the results do
> > > > > not propagate back to the function attached to my histogram, so when I
> > > > > redraw it I see the result of the original default fit. Also, if I refit it
> > > > > seems to start again from scratch and forget any 'fix' or 'set par' I've
> > > > > done to gMinuit object.
> > > > >
> > > > > Perhaps, I would be better off using the get/set functions provided in TF1?
> > > > > It looks pretty easy to write my own little macro to manipulate these
> > > > > functions with minimal typing ...
> > > > >
> > > > > Art
> > > > >
> > > > >
> > > > > ----- Original Message -----
> > > > > From: "Rene Brun" <brun@pcbrun.cern.ch>
> > > > > To: "Arthur E. Snyder" <snyder@SLAC.Stanford.EDU>
> > > > > Cc: <roottalk@pcroot.cern.ch>
> > > > > Sent: Sunday, December 02, 2001 1:39 PM
> > > > > Subject: Re: [ROOT] Interactive minuit access from ROOT?
> > > > >
> > > > >
> > > > > > Use the global gMinuit
> > > > > >
> > > > > > Rene Brun
> > > > > >
> > > > > > On Sun, 2 Dec 2001, Arthur E. Snyder wrote:
> > > > > >
> > > > > > > Thanks, Rene. Can you tell me how I access TMinuit object when I'm
> > > > > fitting a
> > > > > > > histogram? I don't find an assessor either in TF1 or TH1. I've also
> > > > > looked
> > > > > > > up the inheritance tree but don't find anything that looks like the
> > > > > right
> > > > > > > thing.
> > > > > > >
> > > > > > > Art
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > ----- Original Message -----
> > > > > > > From: "Rene Brun" <brun@pcbrun.cern.ch>
> > > > > > > To: "Arthur E. Snyder" <snyder@SLAC.Stanford.EDU>
> > > > > > > Cc: <roottalk@pcroot.cern.ch>
> > > > > > > Sent: Sunday, December 02, 2001 9:49 AM
> > > > > > > Subject: Re: [ROOT] Interactive minuit access from ROOT?
> > > > > > >
> > > > > > >
> > > > > > > > Hi Art,
> > > > > > > >
> > > > > > > > The direct equivalent of PAW option "M" does not exist.
> > > > > > > > However, you can invoke any function from TMinuit directly.
> > > > > > > > This should provide even more flexibility at the expense
> > > > > > > > of slightly more typing.
> > > > > > > >
> > > > > > > > Rene Brun
> > > > > > > >
> > > > > > > > On Sat, 1 Dec 2001, Arthur E. Snyder wrote:
> > > > > > > >
> > > > > > > > > Try again to post this with more sensible subject line!
> > > > > > > > >
> > > > > > > > > ----- Original Message -----
> > > > > > > > > From: "Arthur E. Snyder" <snyder@SLAC.Stanford.EDU>
> > > > > > > > > To: <roottalk@pcroot.cern.ch>
> > > > > > > > > Sent: Saturday, December 01, 2001 12:29 AM
> > > > > > > > > Subject: Re: [ROOT] tiny Bug in root
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > > Is it possible to invoke interactive minuit from within ROOT?
> > > > > I.e.,
> > > > > > > the
> > > > > > > > > > equivalent of 'h/fit 100 myfunc.f m' in paw? The ROOT fit provides
> > > > > > > most of
> > > > > > > > > > the options of paw, but not this one. The 'm' option in ROOT seems
> > > > > to
> > > > > > > be
> > > > > > > > > > something different.
> > > > > > > > > >
> > > > > > > > > > I've looked in TMinuit, TF, and TH1 classes, but have not been
> > > > > able to
> > > > > > > > > find
> > > > > > > > > > anyway to get to the interactive interface of minuit or some
> > > > > > > alternative.
> > > > > > > > > >
> > > > > > > > > > Art Snyder at SLAC
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > > >
> >
> 



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