Hi all,
I created a large number of TFiles containing a tree with splitlevel =
99. The tree was generated using a mother event class MEvent :
class MEvent : public TObject {
public:
enum ETypes {INCLUS, D0, DStar, UNKNOWN};
static const int MAXNTRA;
static const int MAXNVER;
static const int MAXNK0;
static const int MAXND0;
int number;
int run;
int type;
int trmsk;
double mD0;
double thetakmin;
int nver;
TClonesArray *vertex;
int ntra;
TClonesArray *track;
int nk0;
TClonesArray *k0s;
int nd0;
TClonesArray *d0s;
int npi;
TClonesArray *pis;
int nk;
TClonesArray *ks;
int ndstar;
TClonesArray *dstars;
...
each TClonesArray contains instances of a class that has only basic data
types as attributes.
I now face 2 problems, which are kind of related :
- MakeClass seems to understand this structure, and one branch is
created for
each variable, which gets the address of a basic variable (unsigned, int,
float, double, or arrays of these data types). The generated code does not
depend anymore on the classes used to create the tree.
Therefore, I was assuming that I had all I need to read this tree again,
using the generated code. Yet when trying, I get these error messages :
Warning in <TClass::TClass>: no dictionary for class MEvent is available
Warning in <TClass::TClass>: no dictionary for class MVertex is available
Warning in <TClass::TClass>: no dictionary for class MTrack is available
Warning in <TClass::TClass>: no dictionary for class MK0 is available
Warning in <TClass::TClass>: no dictionary for class MParticle is
available
Warning in <TClass::TClass>: no dictionary for class MD0 is available
Warning in <TClass::TClass>: no dictionary for class MPi is available
Warning in <TClass::TClass>: no dictionary for class MK is available
Warning in <TClass::TClass>: no dictionary for class MDStar is available
These are classes which should not be necessary anymore, cause split = 99
creates one branch in the tree for each data type contained in these
classes.
With root 3.00, this leads to a segmentation violation, but with root
3.03/07 there is no problem... so I upgraded the reading part (the
trees are still created by root 3.00/06 - tell me if this is a
problem... I could try to update the writing part)
- Now the number of TFiles gets really large (~ 3000), and I would like to
merge them together in about 10 files, in order to speed up looping a
bit, and to handle them more easily. To do that I used
TChain::Merge.
Thinking my tree is containing only simple data types I first didn't set
the branch addresses before merging. As a result, I only the very
simple branches are filled in the output tree (basic data types of the
event
class, data stored in TClonesArrrays has disappeared)
Then I tried to set the branch address of the mother class "event". This
seems to work : the tree can be drawn, and some cuts can be applied. But
now, when I chain these 10 output files together, the following messages
are printed when going to a new file :
Warning in <TBranchClones::Streamer>: Unknow class: MVertex. Cannot read
BranchClones: vertex
Warning in <TBranchClones::Streamer>: Unknow class: MTrack. Cannot read
BranchClones: track
Warning in <TBranchClones::Streamer>: Unknow class: MK0. Cannot read
BranchClones: k0s
Warning in <TBranchClones::Streamer>: Unknow class: MD0. Cannot read
BranchClones: d0s
Warning in <TBranchClones::Streamer>: Unknow class: MPi. Cannot read
BranchClones: pis
Warning in <TBranchClones::Streamer>: Unknow class: MK. Cannot read
BranchClones: ks
Warning in <TBranchClones::Streamer>: Unknow class: MDStar. Cannot read
BranchClones: dstars
Despite that I can use the chain interactively.
Now, unlike the first one, this chain cannot be read by the MakeClass
generated macro !
root [14] mdst.Loop()
Warning in <TBranchObject::GetEntry>: Cannot get class: MEvent
*** Break *** segmentation violation
I've been stuck on that for a while. Split 99 is really what fits my
needs, and it would be nice to be able to merge the trees together
easily. I obviously miss something crucial about how split mode works.
Why are the classes used to generate the tree still necessary for reading
?
Really sorry for this long email...
cheers,
Colin
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:09 MET