Hi Art,
Do not use SetNumber, but fit option "b".
Instead of
h->Fit(f);
do
h->Fit(f,"b");
Rene Brun
On Wed, 29 Sep 2004, Arthur E. Snyder wrote:
> It looks like it might be possible to avoid the problem by using
> TF1::SetNumber to change the identification number. Sounds a little
> dangerous though .. but it works!
>
> root [14] f->SetNumber(13313)
> root [12] f->FixParameter(1,0.15)
> root [13] h->Fit(f)
> FCN=70133.3 FROM MIGRAD STATUS=CONVERGED 165 CALLS 166
> TOTAL
> EDM=1.52786e-07 STRATEGY= 1 ERROR MATRIX
> ACCURATE
> EXT PARAMETER STEP FIRST
> NO. NAME VALUE ERROR SIZE DERIVATIVE
> 1 Constant 3.55542e+01 1.29881e+00 1.02231e-01 6.94347e-04
> 2 Mean 1.50000e-01 fixed
> 3 Sigma 3.41244e-03 1.00248e-04 1.30824e-03 3.91318e-02
> (Int_t)0
> root [14]
>
>
> --The only place I find fNumber used is in TH1F where it indicates
> "specials". It's set to -1 to indicate use of an 'intrepreted function',
> so it seems reasonable safe to mess with it.
>
> --However, it would be more natural if attempt to set initial values was
> not used for 'fixed' parameters ..
>
> 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, 29 Sep 2004, federico wrote:
>
> > Hi,
> >
> > I think you are using FixParameter with a missing argument, the value at
> > which you want the parameter to be fixed....
> >
> > virtual void <ListOfTypes.html#void> FixParameter
> > <#TF1:FixParameter>(Int_t <ListOfTypes.html#Int_t> ipar, Double_t
> > <ListOfTypes.html#Double_t> value)
> >
> > I can tell you I used it many times and it works....
> >
> > Cheers,
> > Federico
> >
> > Arthur E. Snyder wrote:
> >
> > >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