Hi George, Stephan, Thanks Stephan for providing a test file and George for putting me on the right track. There is effectively a problem in 2.23/10 with TClonesArray when the referenced class has an array with a current length equal to 1. I have fixed this problem in my development version. If the fix is urgent for you, I can provide my current source file or/and the binary for your machine. Let me know. Rene Brun George Irwin wrote: > > 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