Re: [ROOT] tree and TClonesArray

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Dec 06 2002 - 21:37:53 MET


Hi HP,

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);

or
   TClonesArray *arr =0;
   tree->SetBranchAddress("T", &arr);
   TBranch *bf1 = tree->GetBranch("f1");
   TBranch *bf2 = tree->GetBranch("f2");
   //then in the loop
   for (Int_t ev = 0;ev<nentries;ev++) {
      bf1->GetEntry(i);
      bf2->GetEntry(i);
      Int_t n = arr->GetEntriesFast();
      for (Int_t i=0;i<n;i++) {
         Class *c = (Class*)arr->At(i);
         hist->Fill(c->f1);
      }
   }


Rene Brun

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:22 MET