Re: [ROOT] CopyTree and Single Object Branches

From: Roger Moore (rwmoore@fnal.gov)
Date: Wed Feb 26 2003 - 21:10:24 MET


On Tue, 25 Feb 2003, Rene Brun wrote:

> Could you prepare a tar file with one data file and the necessary
> classes to reproduce the problem. If you do it, make sure that your
> classes are expurged from missing references or things that I dont' need
> to investigate the problem. Put this file on a public AFS area or
> on a web server.

This will take a little time since I link into the D0 code releases which
you obviously don't want! I'll work on this and get back to you as soon
as I can extract the code.

In the meantime I found a work around. If I save the TEventList I produce
and then load it back in to a separate macro where I have addresses
defined for all the branches then I can loop over the entries and fill a
cloned TTree.

> Concerning rootcint, you should see improvements and no degradation
> with newer versions. If you have classes giving problems with the
> most recent versions, please let us know as soon as possible.

Well, reviewing my notes from my attempt the first thing I noted was that
all classes now need a default constructor whereas they did not before. I
added ones that will set up the classes in a completely broken way (e.g.
null pointers to required objects) so I'm worried that if ROOT uses this
and then attempts to use the class there will be problems. I also got
problems with the STL headers with v03.04/02 but not with v03.05/00.
However I will need to re-run make with that version to give you the exact
errors.

Roger

> On Tue, 25 Feb 2003, Roger Moore wrote:
>
> > On Tue, 25 Feb 2003, Rene Brun wrote:
> >
> > > If you have created your Tree with one single top level branch (eg event), you
> > > should set the address of this top level branch and not the address of one of
> > > the sub-branches. I need to see your code to come with a better
> > > diagnostic.
> >
> > The tree is definitely not created from a single top level object - it is
> > created from multiple branches each containing a TClonesArray or a single
> > object. I can copy the TClonesArray branches successfully - they work
> > fine. It is only the single object branches that I have trouble with.
> >
> > The code used to create the branches is:
> >
> >    if (_Fruits->InheritsFrom("TClonesArray")) {
> >       tree->Branch(_BranchName.Data(), &_Fruits, buffersize);
> >    } else {
> >       tree->Branch(_BranchName.Data(),_Fruits->ClassName(),&_Fruits,buffersize);
> >    }
> >
> > However I have no control over this code (it's part of the D0 thumbnail
> > package). In the case in question _Fruits is a TObject * which points to
> > an instance of TMBGlob.
> >
> > The code I have written to access the branch is:
> >
> >   // Turn on the branch for readout
> >   tree()->SetBranchStatus(_bname.c_str(),1);
> >   // Set the branch address to the data object
> >   tree()->SetBranchAddress(_bname.c_str(),&_ptr);
> >
> > and this works fine for the original TTree. _ptr points to a valid
> > instance of TMBGlob which gets filled with the data. I can also email a
> > tarball of the entire readout code if you need to see it all. I have also
> > tried turning on branches "Glob.*"  but then I get the error that ROOT
> > con't find them. One thing that is worth mentioning is that I only provide
> > addresses for the branches which are turned on. I know this has
> > implications for the I/O speed but not for the CopyTree method.
> >
> > > You are mentionning problems with rootcint with the more recent versions of
> > > ROOT. Did you report these problems to somebody?
> >
> > I haven't reported these problems yet because I haven't had a chance to
> > look at them in detail. I had assumed that there were significant changes
> > to rootcint and that I would need to alter my code to make it work.
> > However if code that compiles with ROOT 3.03/09 should compile with ROOT
> > 3.04/02 without changes then I'd be happy to send you the error messages I
> > get along with my code. If there are definite changes that I need to make
> > then I'd be very happy if you could give me a pointer to them - I didn't
> > see anything in the release notes that gave me cause for concern.
> >
> > Roger
> >
> > > Roger Moore wrote:
> > > >
> > > > I have been using the CopyTree method, along with a TEventList, to select
> > > > a subset of events and branches in a TChain to write out to a TTree. This
> > > > works absolutely fine for TClonesArray branches. However for the single
> > > > object branch in the TChain it fails miserably. The entire branch somehow
> > > > gets converted into a single 'TObject' branch. Shown below is the result
> > > > of a 'Print' of the original TChain branch:
> > > >
> > > > root [5] TMBTree->GetBranch("Glob")->Print("")
> > > > *Branch  :Glob                                                               *
> > > > *Entries :    13865 : BranchElement (see below)                              *
> > > > *............................................................................*
> > > > *Br    1 :fUniqueID :                                                        *
> > > > *Entries :    13865 : Total  Size=      68940 bytes  File Size  =       1414 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=  39.59     *
> > > > *............................................................................*
> > > > *Br    2 :fBits     :                                                        *
> > > > *Entries :    13865 : Total  Size=      68860 bytes  File Size  =       1400 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=  39.99     *
> > > > *............................................................................*
> > > > *Br    3 :_evtno    :                                                        *
> > > > *Entries :    13865 : Total  Size=      68880 bytes  File Size  =      49526 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=   1.13     *
> > > > *............................................................................*
> > > > *Br    4 :_runno    :                                                        *
> > > > *Entries :    13865 : Total  Size=      68880 bytes  File Size  =       2602 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=  21.50     *
> > > > *............................................................................*
> > > > *Br    5 :_store    :                                                        *
> > > > *Entries :    13865 : Total  Size=      68880 bytes  File Size  =       2279 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=  24.55     *
> > > > *............................................................................*
> > > > *Br    6 :_solpol   :                                                        *
> > > > *Entries :    13865 : Total  Size=      68900 bytes  File Size  =       1418 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=  39.46     *
> > > > *............................................................................*
> > > > *Br    7 :_torpol   :                                                        *
> > > > *Entries :    13865 : Total  Size=      68900 bytes  File Size  =       1418 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=  39.46     *
> > > > *............................................................................*
> > > > *Br    8 :_ticknum  :                                                        *
> > > > *Entries :    13865 : Total  Size=      68920 bytes  File Size  =      17272 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=   3.24     *
> > > > *............................................................................*
> > > > *Br    9 :_lumblk   :                                                        *
> > > > *Entries :    13865 : Total  Size=      68900 bytes  File Size  =       6973 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=   8.02     *
> > > > *............................................................................*
> > > > *Br   10 :_solcur   :                                                        *
> > > > *Entries :    13865 : Total  Size=      68900 bytes  File Size  =       1980 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=  28.26     *
> > > > *............................................................................*
> > > > *Br   11 :_torcur   :                                                        *
> > > > *Entries :    13865 : Total  Size=      68900 bytes  File Size  =       2299 *
> > > > *Baskets :       14 : Basket Size=       4000 bytes  Compression=  24.34     *
> > > > *............................................................................*
> > > >
> > > > and after CopyTree has done its work the branch in the output file is now:
> > > >
> > > > *Branch  :Glob                                                               *
> > > > *Entries :      326 : BranchElement (see below)                              *
> > > > *............................................................................*
> > > > *Br    0 :TObject   :                                                        *
> > > > *Entries :      326 : Total  Size=      16976 bytes  File Size  =        526 *
> > > > *Baskets :        1 : Basket Size=       4000 bytes  Compression=   5.95     *
> > > > *............................................................................*
> > > >
> > > > The original class, TMBGlob, is loaded and ROOT clearly recognises it
> > > > since with the original branch I can decode and look at all the entries
> > > > with the class loaded. When I set the branch address I use the command:
> > > >
> > > >         SetBranchAddress("Glob",&_ptr);
> > > >
> > > > where _ptr is of type "TMBGlob *" and points to a TMBGlob class instance.
> > > >
> > > > The version of ROOT I am running is v3.03/09. I have tried compiling the
> > > > code under both v03.04/02 and v03.05/00. However there are lots of
> > > > problems with both version from rootcint and, after an initial attempt to
> > > > fix them, I have come to the conclusiosn that this is several days effort
> > > > which is time I don't currently have!
> > > >
> > > > So is there a fix or workaround which I can use with v03.03/09?
> > > >
> > > > Thanks,
> > > >
> > > > Roger
> > >
> >
>
>



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET