Re: TF1 cloning problem (correctiong subject)

From: Arthur E. Snyder <snyder_at_slac.stanford.edu>
Date: Tue, 12 Jun 2012 14:06:28 -0700


BTW, the problem does not occur with 'native' functions like 'gaus'

-AE

A.E. Snyder, The Former Group C (TFC)        \!c*p?/
SLAC Mail Stop #95                          ((.   .))
Box 4349                                        |
Stanford, Ca, USA, 94309                      '\|/`
e-mail:snyder_at_slac.stanford.edu                 o
phone:650-926-2701                              _
http://www.slac.stanford.edu/~snyder          BaBar
FAX:707-313-0250                          Collaboration
                                                 &
                                            Fermi/GLAST



On Tue, 12 Jun 2012, Arthur E. Snyder wrote:

>> Hi Rooters,
>>
>> I find the following weird behavior with cloned |TF1|s:
>>
>> fp=makePowerLaw(); <---creates a simple power law TF1
>>
>> make function: lo=1 up=10 power=2 name=powerLaw
>> (class TF1*)0xa0f6ad0
>>
>> root [29] fp->Print()
>> powerLaw : Ndim= 1, Npar= 4, Noper= 0
>> Par 0 p0 = 1
>> Par 1 p1 = 2
>> Par 2 p2 = 1
>> Par 3 p3 = 10
>> root [30]
>>
>> root [30] fpa=(TF1*)fp->Clone()
>> (class TF1*)0xa0f6968
>>
>> root [32] fpa->Print()
>> powerLaw : Ndim= 1, Npar= 4, Noper= 0
>> Par 0 p0 = 1
>> Par 1 p1 = 2
>> Par 2 p2 = 1
>> Par 3 p3 = 10
>>
>>
>> root [31] fpa->Draw()
>> root [32]
>>
>> --at this point cloned copy makes same plot as original |fp|
>>
>> root [6] fpa->SetParameter(1,4)
>> root [7] fpa->Print()
>> powerLaw : Ndim= 1, Npar= 4, Noper= 0
>> Par 0 p0 = 1
>> Par 1 p1 = 4
>> Par 2 p2 = 1
>> Par 3 p3 = 10
>>
>> --changing parameter of clone seems to work, but ..
>>
>> root [8] fpa->Draw() <--- attached looks the same as fp->Draw() with p1=2!
>>
>> but the plot still shows the same as above .. i.e., p1=2, not 4
>>
>> If I look with debugger this:
>>
>> (gdb) b 'powerLaw(double*, double*)'
>> Breakpoint 1 at 0x4b8feb2: file
>> /afs/slac.stanford.edu/u/ek/snyder/glast/root/./powerLaw.C, line 10.
>> (gdb) c
>>
>> I find |fpa->Draw()| does not stop in the underlying c++ function
>> |PowerLaw|.
>>
>> |fp| does stop in |PowerLaw|
>>
>> This is pretty strange. A clone is not a clone. It's behavior is not the
>> same as the function i was cloned from. It seems to have somekind of copy
>> of the curve, but no control over it.
>>
>> If I try to fit with clone, it fails.
>>
>> Is this a bug or a feature?
>>
>> -Arthur
>>
>>
>> powerLaw:
>>
>> double powerLaw(double* x,double *par) {
>>
>> double N=par[0];
>> double power=par[1];
>> double xp=x[0];
>>
>>
>> double emin=par[2];
>> double emax=par[3];
>>
>> if(xp<=0) return 0.0;
>>
>> double temp=1.0/TMath::Power(xp,power);
>>
>> double fIntegral=
>>
>> (TMath::Power((emin),(-power+1))-TMath::Power((emax),(-power+1)))/(power-1);
>>
>> temp/=fIntegral;
>> temp*=N;
>>
>> return temp;
>> }
>>
>>
>>
>> A.E. Snyder, The Former Group C (TFC) \!c*p?/
>> SLAC Mail Stop #95 ((. .))
>> Box 4349 |
>> Stanford, Ca, USA, 94309 '\|/`
>> e-mail:snyder_at_slac.stanford.edu o
>> phone:650-926-2701 _
>> http://www.slac.stanford.edu/~snyder BaBar
>> FAX:707-313-0250 Collaboration
>> &
>> Fermi/GLAST
>>
>>
>>
>> On Tue, 12 Jun 2012, Chris Jones wrote:
>>
>>
>> [NON-Text Body part not included]

> Received on Tue Jun 12 2012 - 23:06:48 CEST

This archive was generated by hypermail 2.2.0 : Wed Jun 13 2012 - 11:50:02 CEST