Hello Rooters,
I have problems with writing a TClonesArray to a root-file
and my work doesn't look to different from the Event/Track
examples coming with ROOT.
However, let me describe the situation in detail first.
1. I wrote an own class, called WARequest, which serves as a
kind of data container for different variables of type
string, map<string,string>, Double_t, etc.
It is derived from TObject.
That class includes the ClassDef-/ClassImp-Makros and a
dictionary-file is generated with rootcint successfully.
2. In my main application I have a TClonesArray which is
filled with n objects of type WARequest. The objects
in TClonesArray are still fine after filling the array, because
WARequest* r = (WARequest*) myClonesArray->At(0);
cout << r->getValue() << endl;
returns a senseful string like "Hello world!" to the console.
3. I want to use a TTree that holds a TClonesArray with my
WARequest-Objects as branch. Therefore I coded (shortened):
TClonesArray* aBuf = new TClonesArray( "WARequest", 100 );
dT = new TTree( "myTree", "No description" );
dT->Branch( "myArrayBranch", "TClonesArray", &aBuf, 32000, 99 );
and I fill the tree with
aBuf = myClonesArray;
dT->Fill();
At this point all objects in TClonesArray are still in
a fine condition.
4. I write the tree and close the file.
When I read the file, get the tree, open the branch, get an entry
and access the TClonesArray, TClonesArray::GetEntries() returns
the right number of objects inside.
If I take an object from TClonesArray and want to get data from
the object, say again for example
WARequest* r = (WARequest*) myClonesArray->At(0);
cout << r->getValue() << endl;
the output consists of strange characters.
It seems the objects in TClonesArray "forget" the values
in their fields.
What is happening here? Am I doing something wrong? If so, what?
Thanks for any help.
H.-Gerd Rosarius
Tech: Using ROOT 3.05/03 made from source with g++ 3.0.4, running
on a Debian Linux box.
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:15 MET