[ROOT] Re: Clone TF1 objects

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Nov 29 2002 - 16:50:15 MET


Hi Stanislas,

Functions referencing an interpreted or compiled function
cannot be cloned because the code is not persistent.
Only functions built with predefined functions can be cloned.
Replace your line;
   TF1* dedxpf = (TF1*)dedxf->Clone();
by
  TF1 *dedxpf = new TF1("dedxpf",func,0.05,1.,1);

Rene Brun

On Fri, 29 Nov 2002, Stanislav NESTEROV wrote:

> 
>    Dear Rene,
>    
>    I've encounter small problem while trying to clone TF1 objects. 
> After user function defenition I'm passing parameters to this new function 
> and everything is works fine. But when I'm cloning this function and 
> passing  new parameter to it, newly created function don't get this 
> parameter as if it has ZERO parameters.
>   The problem here is that Cloned object rejects to change parameters 
> of the function.
>    Below I put small example that reproduce this problem. The second 
> function `dedxpf' always has `par[0]==0', i.e. after cloning this TF1 
> object doesn't chage its parameters. So it is drawn as zero line.
> 
> 
> ROOT-3.03/09 RH7.2gcc296.
> 			Best regards,
> 					Stanislav.
> 
> 
> 
> 
>  Double_t func(Double_t*x,Double_t*par) {
>   Float_t massa=par[0];
>   if(x[0]==0.) return 0.;
>   if(massa==0.) return 0.;
>   Float_t pmp=(massa*massa/(x[0]*x[0]));
>   Float_t beta = 1./TMath::Sqrt(1+pmp);
>   return beta;
> }
> void pp(){
>   TF1 *dedxf = new TF1("dedx",func,0.05,1.,1);
>   TCanvas *cc=new TCanvas("cc","Canvas",600,600);
>   
>   TH2F *hh=new TH2F("hh","HH",50,0.05,1.,50,0,3);
>   TF1* dedxpf = (TF1*)dedxf->Clone();
>   dedxf->SetParameter(0,0.13957);
>   dedxpf->SetParameter(0,0.93827);
>   hh->GetListOfFunctions()->Add(dedxf);
>   hh->GetListOfFunctions()->Add(dedxpf);
>   hh->FillRandom("gaus");
>   hh->Draw();
>   
> }
> 
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:21 MET