Hi Stephane, What happens is as follow: TH1F* h1=new TH1F("h1",...); TH1F* h2=new TH1F("h2",...); myfunc(h1,...) // at this point an histogram named 'hr' has been created and // is kept in the current directory's list of object hr->SetName("h1r"); // a 'variable' whose name is also 'hr' and is a 'TH1F*' is // automatically created by CINT and it values is set to the // address of the object whose ROOT-name is 'hr'. myfunc(h2,...) // another histogram named 'hr' has been created and // is kept in the current directory's list of object hr->SetName("h2r"); // there is variable whose name is 'hr' already in scope, // CINT does NOT recreate it and does NOT change its value // hence is changes the name of the first histo (from h1r to h2r). To avoid this issue do: TH1F * myfunc(TH1F* h1,...){ hr=new TH1F("hr",...); return hr; } and TH1F* h1=new TH1F("h1",...); TH1F* h2=new TH1F("h2",...); TH1F* hrp = myfunc(h1,...) hrp->Setname("h1r"); hrp = myfunc(h2,...) hrp->Setname("h2r"); Cheers, Philippe -----Original Message----- From: owner-roottalk@pcroot.cern.ch [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Stephane Plaszczynski Sent: Thursday, September 04, 2003 6:46 AM To: roottalk@pcroot.cern.ch Subject: [ROOT] troubles renaming object several times hello, I encounter a problem when creating histograms inside an external script. I have a function which takes as argument an histogram and create another one in the code called "hr". myfunc(TH1F* h1,...){ hr=new TH1F("hr",...) } now I call it (from another script) and change the "hr" name. TH1F* h1=new TH1F("h1",...); myfunc(h1,...) hr->Setname("h1r"); this works and I got "h1" and "h1r". But when I do it twice: TH1F* h1=new TH1F("h1",...); TH1F* h2=new TH1F("h2",...); myfunc(h1,...) hr->Setname("h1r"); myfunc(h2,...) hr->Setname("h2r"); here I should have h1,h1r,h2,h2r but I actually got: .ls root [2] .ls TROOT* Rint The ROOT of EVERYTHING OBJ: TH1F h1 : 0 at: 0x8a1f490 OBJ: TH1F h2 : 0 at: 0x8a1f9a8 OBJ: TH1F hr : 0 at: 0x8ab5260 OBJ: TH1F h2r : 0 at: 0x8a9dce8 does any one knows what happens? (h1r actually exists but is now the same than h2r!) Stephane PS: I attach the entire script (use test() function to reproduce the problem).
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:15 MET