Re: [ROOT] Question about TChain::Add

From: Thomas Bretz (tbretz@uni-sw.gwdg.de)
Date: Mon Nov 05 2001 - 17:23:22 MET


Hi Rene,

does this mean, I cannot add all files of one chain to another chain
which references a different tree by one call? It is not a problem for
me to use the loop like in the example below, but this means, that using
Add(TChain*) overrides the Tree-name which is given in the constructor.
Maybe this should be mentioned in the documentation (or that you assume,
that the chain to be added is referencing the same tree).

We have several trees in our files and this trees are processed
independantly. I thought the idea of Add(TChain*) is to create easily
chains of the same file referencing different trees, but I was wrong.

Thomas.

> By definition, a TChain references always the same Tree name. You should do:
> 
> TChain c1("Events"); // Tree containing 1000 Events
> c1.Add("file1.root");
> c1.Add("file2.root");
> 
> TChain c2("Events"); // Tree containing one event
> c2.Add(&c1);
> c2.Add("file3.root");
> 
> >
> > I have to chains, which should contain the same files, I tried:
> > ------
> > TChain c1("Events"); // Tree containing 1000 Events
> > c1.Add("file1.root");
> > c1.Add("file2.root");
> >
> > TChain c2("RunHeaders"); // Tree containing one event
> > c2.Add(&c1);
> > -----
> > c2.GetEntries() results in 1000 instead of one and reading results in
> > reading "Events" instead of "RunHeaders".
> >
> > I tried the following, too, and this worked:
> > ------
> > TChain chain("RunHeaders");
> > TObject *obj;
> > TIter N(c1.GetListOfFiles());
> > while ((obj=N()))
> >   c2.Add(obj->GetTitle());
> > -------



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:06 MET