Re: [ROOT] tree and TClonesArray

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sat Dec 07 2002 - 15:10:01 MET


HP,

I cannot tell you if you result is OK or not.
In the first case, you read 2 branches, but only 1 in your
second case.
Are the results correct ?
Note that you should not do:

double *pf1 = (double *) malloc(dimension*sizeof(double));
but
double *pf1 = new double[dimension];

Rene Brun


On Fri, 6 Dec 2002, HP Wei wrote:

> 
> >You can do:
> >   TClonesArray *arr =0;
> >   tree->SetBranchAddress("T", &arr);
> >   tree->SetBranchStatus("*",0);
> >   tree->SetBranchStatus("f1",1);
> >   tree->SetBranchStatus("f2",1);
> >   //then in the loop (see below
> >   tree->GetEntry(i);
> 
>   Hi REne,
>      I compared this method with the following one:
>      
>      (1) From the branch T_, find the dimension of the TClonesArray at i-th
>          entry.
>      (2) double *pf1 = (double *) malloc(dimension*sizeof(double));
>      (3) tree->SetBranchAddress("T.f1", pf1);
>      (4) tree->SetBranchStatus("T.f1", 1);
>      (5) tree->GetEntry(i)
>      then, the array pointed by pf1 contains the data at the i-th entry.
>      
>      This method appears to be about three time faster than the 
>      above TClonesArray method.
>      
>      Is this normal ?  Or am I missing something in the TClonesArray method?
>    --HP
>      
> >On Fri, 6 Dec 2002, HP Wei wrote:
> >
> >> I have a tree with one branch ("T") into which I populate with
> >> TClonesArray of objects of class CL:
> >> 
> >> Class CL : public TObject {
> >> public:
> >>    double f1;
> >>    double f2;
> >>    int    f3;
> >>    int    f4;
> >>    
> >>    ....
> >> };
> >> 
> >> The split is set to 1 when the tree is filled with data.
> >> 
> >> Now, I want to read data from the resulting root file.
> >> As in the tcl.C example,  I do the following:
> >> TClonesArray *arr =0;
> >> tree->SetBranchAddress("T", &arr);
> >> tree->GetEvent(event_number);
> >> 
> >> This will extract data for f1, f2, f3, and f3... (all data fields defined
> >> in class CL.)
> >> 
> >> Suppose I want only f1, and f2.
> >> What is the best way ?
> >> 
> >> --HP
> >> 
> >> 
> >
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:23 MET