Re: [ROOT] TTree, TRef and TProcessID for tree update

From: Rene Brun (Rene.Brun@cern.ch)
Date: Thu May 09 2002 - 10:11:41 MEST


Hi Dirk,

Thanks for reporting this problem with TRef.
It is now fixed in CVS. The problem was in TProcessID::WriteProcessID
where the line testing if a TProcessID was already encountered in the file
was not correct.

Rene Brun


On Wed, 8 May 2002, Dirk Geppert wrote:

> Dear Rooters,
> 
> attached you may find a simple program with two classes A and B, 
> where B has an attribute pointing to an instance of A via TRef.
> Both classes are written to two branches of a tree.
> 
> Running the program ONCE works as expected:
> - no error messages
> - one TProcessID object is written out,  listed via 
>   a) hfile->GetListOfProcessIDs()->Print()
>   b) hfile->GetNProcessIDs()
>   c) loop over all TKeys in the created file with ClassName TProcessID
> 
> However, updating the tree, i.e. running the program again, 
> - an error message appears in tree->Fill() (only when B is written out): 
>   Error in <TObjArray::At>: index 2 out of bounds 
>                        (size: 2, this:0x08493030)
> - the number of listed TProcessIDs is inconsistent:
>   via a)     twice the number of created B objects, 
>              with all the same Name and Title (of TProcessID) 
>   via b & c) same as a) plus 1 (from first run)
> 
> Version 3.03/05 on Linux RH 6.1 with gcc 2.95.2
> 
> My questions are:
> - Why does the error message appear? Is there something wrong in the way 
>   the tree/branches are updated?
> - Why for n>1 runs of the program not only one process ID for each time
>   the program is run is written to the file?
> - Why are in TFile::ListOfProcessIDs only the new TProcessIDs stored 
>   while TFile::NProcessIDs gives the correct answer?
> 
> Thanks for you help,
> Dirk
> 
> 
> 



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