Re: Typical analysis: add leaves to existing tree. Efficient ? Doable ?

Rene Brun (Rene.Brun@cern.ch)
Thu, 03 Sep 1998 14:57:51 +0200


Stephen,
You can add new branches/leaves to an existing Tree.
You must open teh Root file in Update mode, create your new
branch(es). You must be very carefull, however, to fill ONLY
the new branches to make sure that you have the corresponding
event sequence. If you have the pointer to the branch, simply
call branch->Fill for these branches. At the end, you must save
a new copy of the tree header with tree->Write().
In the likely case where you write the analysis event loop yourself,
note the very interesting following feature: you can read as many
Trees as you want in the loop. For example, you may want
to read only a subset of a given Tree (via a selection mechanism).
For the selected events, you can read entries from another Tree
where (may be) the corresponding event number is one of the leaves
of the first Tree.
Example:
for (Int_t i=0;i<nentries;i++) {
tree1->GetEvent(i);
// some selections
if (notSelected) continue;
tree2->GetEvent(index);
//where index is a leaf value filled by tree1->GetEvent(i);
.....
}

Rene Brun

Stephen Bailey wrote:
>
> On Wed, 2 Sep 1998, Rene Brun wrote:
>
> > David Rousseau, CERN wrote:
> > >
> > > Hi Rooters,
> > >
> > > Browsing the documentation, it's not clear to me how I should do the
> > > following (not unusual) thing:
> > > Starting from a TTree (a converted Ntuple) with lots of events and variables,
> > > I want to compute a few complex variables for each of a few selected events,
> > > and store them to be able to use them many times (for example
> > > to do an unbinned maximum likelihood fit).
> > > With Fortran/Hbook I would read the ntuple, select the events, and put
> > > the few complex variables for each of a few selected events in a common. Then
> > > my MINUIT FCN would use this common.
> > > With Root, I imagine I can do exactly the same thing, create a new
> > > TTree with only the variables I need and the events I need. Then my MINUIT
> > > FCN would use this TTree. But I would have lost all links to the original
> > > event data.
> > > But since I was told in C++ course that I have to think completely different,
> > > I thought I could do the following: add a selection flag as a leaf
> > > to all events (not even sure if and how it is doable), add my complex
> > > variables as new leaves to the event which are selected. Then my MINUIT FCN
> > > would read first the event flag, then the complex variables only for the good
> > > events (as explained in the web pages).
> > > So, what is the right way ?
> > >
> > > Note: the examples on the web are in the style: I loop once on the events and
> > > fill histograms. I would like to do (but maybe I shouldn't):
> > > I loop on the events, and add information to be used later.
> > >
> > > Thanks a lot
> > >
> > > David Rousseau
> >
> > David,
> > What you want to do makes a lot of sense.
> > I recently added in version 2.00/11 a few utilities in this direction.
> > Look at the documentation of TTree::Draw ("Getting more info").
> > After a TTree::Draw call, you have access to all the information
> > computed in the function. You can call TMinuit with the resulting
> > arrays.
> >
> > Rene Brun
> >
>
> The additional information is helpful, but I have also wanted
> to do the general case of adding information to a pre-existing
> TNtuple as David described. e.g. I have an ntuple coming from
> h2root which contains particle track parameters. I loop through
> the events, making invariant masses for candidate decays, etc.
> It would be very nice if I could add this invariant mass info back
> to the original TNtuple so that all of the original information would
> still be there for when I want to make interactive cuts later. For
> now I put the invariant mass info into another ntuple along with any
> data from the original ntuple that I think I might need. Copying the
> data seems a bit wasteful, but I'm not sure how else to do it for
> now.
>
> But I'm not sure how realistic this request is, both in terms of
> ease of implementation and efficiency of running. But if it was
> possible to add leaves to an existing TNtuple, I'd use that feature...
>
> Regards,
>
> Stephen