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