Re: Difference in opening TClonesArray with 2.22.10 and 2.23.10

From: George Irwin (gmieg@EGNEXT1.SLAC.STANFORD.EDU)
Date: Mon Jan 10 2000 - 20:53:05 MET


Hi Stephan,

After ROOT 2.23.06 we have begun having a similar problem reading
our standard data files.  These files have trees of TClonesArrays.
Here are some observations about it:

1) It affects Linux RH5.2 and Sunos5.6 which we have checked.

2) The problem affects Float_t arrays which are data members of
   objects held in TClonesArrays.  The first element of the
   Float_t array is OK; all subsequent elements are zero.

3) The problem only affects those TClonesArrays containing a
   single object.  Objects in TClonesArrays containing more
   than one object are read in normally.

4) Although our files were written by much earlier versions of
   ROOT, the problem does not go away when we rewrite them with
   ROOT 2.23.10.

George Irwin

> Dear Rooters,
> 

> I've got the following problem: A colleague of mine created a file  
for
> calorimeter calibration with ROOT version 2.22.10. He introduced a
> TClonesArray containing a class "RootVlqCaloCluster" containing  
itself a
> normal standart C-array "Float_t ChannelEnergies[168];" . So far so  
good.
> Now we try to open his file and we get different results with  
different
> versions of ROOT. 

> 

> See the output from an interactive session with ROOT 2.22.10:
> 

> 

> Initialising finished.
> 

> root [0] gSystem.Load("libroot2.22.10.so");                                                   

> root [1] TFile *f1 = new  
TFile("/h1wgs/naxos/x03/usr/nix/CalibrationSample1/CalibData1.root");
> root [2] TTree *mytree = (TTree*)f1->Get("T");                                                

> root [3] mytree->SetBranchStatus("CaloCluster",1);                                            

> root [4] TClonesArray* rootVlqCaloCluster = new  
TClonesArray("RootVlqCaloCluster", 1);        

> root [5] TBranchClones *calo  = (TBranchClones*)  
mytree->GetBranch("CaloCluster");            

> root [6] calo ->SetAddress(&rootVlqCaloCluster);                                              

> root [7] mytree->GetEvent(5);                                                                 

> root [8] printf("rootVlqCaloCluster->GetLast()  
%d\n",rootVlqCaloCluster->GetLast());
> rootVlqCaloCluster->GetLast() 0                <-------- AHA, ONE  
RESULT IN ARRAY!
> root [9] RootVlqCaloCluster  *caloclus =  
(RootVlqCaloCluster*)rootVlqCaloCluster->At(0);
> root [10] printf("ChannelEnergies[59]  
%f\n",caloclus->ChannelEnergies[59]);
> ChannelEnergies[59] -0.018854                  <-------- RIGHT  
RESULT, ONLY NOISE!
> 

> Ok, that's what we want so see also with ROOT 2.23.10. New Session,  
new
> lib:
> 

> 

> Initialising finished.
> 

> root [0] gSystem.Load("libroot2.23.10.so");                                                   

> root [1] TFile *f1 = new  
TFile("/h1wgs/naxos/x03/usr/nix/CalibrationSample1/CalibData1.root");
> root [2] TTree *mytree = (TTree*)f1->Get("T");                                                

> root [3] mytree->SetBranchStatus("CaloCluster",1);                                            

> Error in <TTree::SetBranchStatus>: unknown branch -> CaloCluster  
<---- OOOPS, WHY NOT ?
> root [4] TClonesArray* rootVlqCaloCluster = new  
TClonesArray("RootVlqCaloCluster", 1);        

> root [5] TBranchClones *calo  = (TBranchClones*)  
mytree->GetBranch("CaloCluster");            

> root [6] calo ->SetAddress(&rootVlqCaloCluster);                                              

> root [7] mytree->GetEvent(5);                                                                 

> root [8] printf("rootVlqCaloCluster->GetLast()  
%d\n",rootVlqCaloCluster->GetLast());
> rootVlqCaloCluster->GetLast() 0            <---- AHA, ONE RESULT  
AGAIN!
> root [9] RootVlqCaloCluster  *caloclus =  
(RootVlqCaloCluster*)rootVlqCaloCluster->At(0);
> root [10] printf("ChannelEnergies[59]  
%f\n",caloclus->ChannelEnergies[59]);
> ChannelEnergies[59] 0.000000               <---- WRONG RESULT!
> 

> 

> I'm pretty shure we've done something wrong, but at the moment,  
we're too
> blind to see it. For that reason our macros deliver wrong results.  
Can
> anybody help? Has the file format changed?
> 

> The used code for the example above resides in 

> 

> /afs/desy.de/user/h/hurling/RootTest/...
> 

> 

> Many thanks for your help!!
> 

> All the best / Alles Gute
> 

> Stephan
> 



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:16 MET