[ROOT] Object Tree stored in a TTree?

From: Greg Novak (novak@post.harvard.edu)
Date: Wed Jul 12 2000 - 14:53:51 MEST


I'm trying to figure out how to get my data structure stored in a
TTree.  It'd be nice if I could also easily plot all my variables using
the TTree->Draw() method, but that part is negotiable.  The problem is
that my data structure amounts to a tree of objects and not all of them
seem to make it into the TTree.  

I have a data sructure encoding an event that contains a TClonesArray of
tracks.  The Track object in turn includes at TClonesArray of detectors
that were involved in constructing the track.  The TTree seems to get the
first TClonesArray (of tracks) but does not get the TClonesArray buried
inside the Track object.  Here are simplified versions of my objects:

class Event : TObject {
	Int_t EventID;
	TClonesArray *track;
}
class Track : TObject {
	Float_t angle;
	TClonesArray *detector;
}
class Detector : TObject {
	Float_t x,y;
}

I pack them up w/ code that looks something like:

Event *evt=new Event();
evt->track = new TClonesArray("Track", 10);
new( (*track) [0]) Track();
((Track *) (*track)[0])->detector = new TClonesArray("Detector", 10);
new (((Track *) (*track)[0])->detector[0] ) Detector();
new (((Track *) (*track)[0])->detector[1] ) Detector();
new( (*track) [1]) Track();
((Track *) (*track)[0])->detector = new TClonesArray("Detector", 10);
new (((Track *) (*track)[1])->detector[0] ) Detector();
new (((Track *) (*track)[1])->detector[1] ) Detector();

Sorry, some of those lines are rather dense.  I have wrapper functions so
that my real code is much prettier.  :-)  Now I compile all this, run the
code that generates all this information, and write it to a root
file.  Then I run root interactively and I can do things like:
data->Draw("EventID");
data->Draw("track.angle");

but *not*:
data->Draw("track.detector.x");

When I do data->MakeClass("foo"); and then inspect foo.C, I find a
generated class with data structures like:
class foo {
	Int_t EventID;
	Int_t track_;
	Int_t track_angle[10];
}
I can't seem to get to my information about the detectors, if it's
stored there at all.

So, that's my story.  I'm at a loss, I'll really appreciate any help at
all.

Thanks!
Greg



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