[ROOT] Interactive fitting

From: Arthur E. Snyder (snyder@slac.stanford.edu)
Date: Wed Sep 29 2004 - 00:12:53 MEST


The command TF1::FixParameter does not seem to work. E.g.,:aroot [3] TH1F*
h=gDirectory->FindObject("deltamgood")
root [4] h
(class TH1F*)0x975a090
root [5] TF1* f=gROOT->GetFunction("gaus")
root [6] f->SetParameter(1
tab completion not implemented for this context
root [6] f->SetParameter(1,0.15)
root [7] f->SetParameter(2,0.001)
root [8] f->FixParameter(2)
root [10] f->Print()
                 gaus : gaus Ndim= 1, Npar= 3, Noper= 1
 fExpr[0] = gaus  fOper = 2001
 Par  0              Constant = 1
 Par  1                  Mean = 0.15
 Par  2                 Sigma = 0.001

root [11] h->Fit(f)
 FCN=15572.3 FROM MIGRAD    STATUS=CONVERGED      65 CALLS          66
TOTAL
                     EDM=1.89405e-08    STRATEGY= 1      ERROR MATRIX
ACCURATE
  EXT PARAMETER                                   STEP         FIRST
  NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE
   1  Constant     4.53561e+03   3.22550e+01   1.16184e+00  -9.02437e-06
   2  Mean         1.45671e-01     fixed
   3  Sigma        7.46547e-04   4.27946e-06   4.88547e-05  -2.40157e-01
(Int_t)0
root [12] f->Print()
                 gaus : gaus Ndim= 1, Npar= 3, Noper= 1
 fExpr[0] = gaus  fOper = 2001
 Par  0              Constant = 4535.61
 Par  1                  Mean = 0.145671
 Par  2                 Sigma = 0.000746547
root [13]

--so you can see it has gone ahead and fit for the nominally fixed
parameters.

--the limits have in fact been set by FixParameters (see blow), but the
fit doesn't seems to ignore it .. Minuit even thinks the parameter is
"fixed" (see Minuit output above), but doesn't treat it has fixed.

root [13] Double_t l,u
root [14] f->GetParLimits(1,l,u)
root [15] u
(Double_t)1.49999999999999994e-01
root [16] l
(Double_t)1.49999999999999994e-01

The error assigned to parameter 1 is 0, but it moved it!

--Is this a known problem? Looks like a bug to me.

-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 Wed, 22 Sep 2004, Chris Crawford wrote:

> Hi Victor,
>    Thanks!  I replaced gPad with TVirtualPad::Pad(), and it works just
> fine in CINT.
> --Chris
>
> Victor Perevoztchikov wrote:
>
> >>> Could anyone please tell me what is wrong with the following little
> >>>piece of code?  I am using v4.00/08, linux redhat 8.0.  I'm not sure it
> >>>
> >>>
> >gPad is not a variable. It is macro.
> >#define gPad (TVirtualPad::Pad())
> >CINT does not work with macros. For C++ your code is valid.
> >Victor
> >
> >
> >
> >Victor M. Perevoztchikov   perev@bnl.gov
> >Brookhaven National Laboratory MS 510A PO Box 5000 Upton NY 11973-5000
> >tel office : 631-344-7894; fax 631-344-4206;
> >
> >----- Original Message -----
> >From: "Axel Naumann" <axel-naumann@gmx.de>
> >To: "Chris Crawford" <chris2@lns.mit.edu>
> >Cc: <roottalk@pcroot.cern.ch>
> >Sent: Wednesday, September 22, 2004 5:51 PM
> >Subject: Re: [ROOT] for + if + gPad problem?
> >
> >
> >
> >
> >>Hi Chris,
> >>this is due to cint's loop optimization. .O 0 prevents it.
> >>Axel.
> >>
> >>Chris Crawford wrote:
> >>
> >>
> >>>Hello,
> >>> Could anyone please tell me what is wrong with the following little
> >>>piece of code?  I am using v4.00/08, linux redhat 8.0.  I'm not sure it
> >>>really has to do with gPad, that's just what I ran across.
> >>>--thanks,
> >>>Chris Crawford
> >>>
> >>>{
> >>> new TCanvas("cv1","cv1");
> >>> for (int x=0;x<2;x++) { //x=1;x<2;x++
> >>>   cout<<"gPad1="<<gPad<<endl;
> >>>   if (!x) cout<<"gPad2="<<gPad<<endl;
> >>>   if (x)  cout<<"gPad3="<<gPad<<endl;
> >>> }
> >>>}
> >>>
> >>>
> >>>
> >>>
>
>



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