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