Hi ROOT'ers
I have a peculiar problem. I'm trying to write objects to a TTree, via
a TClonesArray. However, it seems, that the array isn't written to
file, and the TBranchClones objects fList pointer points to zero. What
am I doing wrong?
Here's the code:
// file Foo.C ////////////////////////////////////////
TFile* file;
TNamed* obj;
TClonesArray* array;
TTree* tree;
TBranch* branch;
int
Foo(void)
{
file = new TFile("foo.root", "RECREATE");
tree = new TTree("tree", "A tree");
array = new TClonesArray("TNamed",2);
branch = tree->Branch("branch",&array);
(*array)[0] = new TNamed("foo", "Foo object");
tree->Fill();
(*array)[1] = new TNamed("bar", "Bar object");
tree->Fill();
file->Write();
file->Close();
delete file;
return 0;
}
int
Bar(void)
{
file = new TFile("foo.root", "READ");
file->ls();
tree = (TTree*)file->Get("tree");
if (!tree) {
cout << "Bad!" << endl;
return 1;
}
branch = tree->GetBranch("branch");
if (!branch) {
cout << "Bad!" << endl;
return 2;
}
cout << "Object `branch' is a "
<< branch->IsA()->GetName() << " object"
<< " with " << branch->GetEntries() << " entries" << endl;
array = ((TBranchClones*)branch)->GetList();
if (!array) {
cout << "Bad! (address of array is " << array << ")" << endl;
return 4;
}
int n = array->GetEntriesFast();
for (int i = 0; i < n ; i++) {
if (!(*array)[i]) {
cout << "Bad! (No object at position " << i
<< " in array)" << endl;
continue;
}
cout << "Entry " << i << " in Clones array in tree is "
<< ((TNamed*)(*array)[i])->GetName() << " "
<< ((TNamed*)(*array)[i])->GetTitle() << endl;
}
return 0;
}
// End of file Foo.C /////////////////////////////////
And the output:
// Output from ROOT //////////////////////////////////
root [0] .L Foo.C
root [1] Foo()
(int)0
root [2] Bar()
TFile** foo.root
TFile* foo.root
KEY: TTree tree;1 A tree
Object `branch' is a TBranchClones object with 0 entries
Bad! (address of array is (nil))
(int)4
// End of Output from ROOT ///////////////////////////
If any of you have an idea why this fails, please notice that I'm not
on the roottalk mailing list (Too much trafic I'm afraid - how about a
rootdigest list?), so please respond to me (cholm@nbi.dk) also.
Thanks
Christian Holm
----------------------------------------------------------------
Christian Holm Christensen Phone: (+45) 35 35 96 91
Sankt Hansgade 23. 1, th Office: (+45) 353 25 307
DK-2200 Copenhagen N Email: cholm@nbi.dk
Denmark Homepage: www.nbi.dk/~cholm
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:43 MET