Re: [ROOT] TRefArray and Unique ID

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sun Nov 02 2003 - 09:56:11 MET


Hi Sebastien, John,

You cannot mix in the same TRefArray references to objects that have 
uids set in different sessions. In your case, there is a very simple 
workaround: In your job creating your original collection of tracks,
create a dummy TRef referencing all the tracks in the array.
This will force all the tracks to be assigned a uid with the same
process id.
  TRef dummy;
  for all tracks do {
     dummy = trak[i];
  }
Then build your TRefArray of jets referencing these tracks.

Rene Brun

On 
Wed, 29 Oct 2003, Sebastien Greder wrote:

> 
>  Hello ,
> 
>  Her e is what I'd like to do :
> 
>  I have 50 tracks and 10 of them in a jet.
>  I have a jet class which has a TRefArray referencing
>  the tracks.
>  I run over my data and build a TTree with these objects.
> 
>  Now I read again this TTree in another ROOT session and 
>  get my referenced tracks, well !
> 
>  Now I'd like to create new jets and reference again 
>  some of the previous tracks to this new one.
> 
>  Unfortenatly I'm getting troubles while assigning already
>  referenced tracks to a new TRefArray in another ROOT session
>  (everything behaves nicely in the same one since it is
>  under the same process id control) 
> 
>  I put a small code in :
> 
>  /afs/in2p3.fr/home/g/greder/public/test.tar.gz
> 
>  which is a simple version of my problem.
> 
>  You'll find in MyClass.C/h 2 classes :
> 
>  MyClass (== tracks) and MyClassRef (==jets), the latter owning a 
>  TRefArray.
> 
>  Threre is a file MakeTree.C which creates an "event" :
> 
>  it creates a TClonesArray of MuClass objects and referenced
>  some of them to MyClassRef and save these guys in a ROOT file.
> 
>  A second methods reads back the file and reference these tracks
>  to another MYClassRef object.
> 
>  To run the code just do in a Root session : .x Compile.C
> 
>  it will print out an output that looks correct to
>  me. 
>  Now quit ROOT and comment the line  MakeTree(); in
>  Compile.C and re-run Compile.C in a ROOT session.
> 
>  The final output has changed.
> 
>  Well, this is due to the fact that it is a new ROOT 
>  session.
> 
>  But what I'd like to understand is why the objects
>  in myclassref2's TRefArray have been doubled ? 
>  
>  And I'd like to know how could I give the objects MyClass to
>  a new object MyClassRef 
> 
>  It sounds to me I misunderstood something about the TRefArray
>  doc, but cannot figure out how to solve my pb.
> 
>  thanks,
> 
>  sebastien.
> 



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET