[ROOT] selecting events in a TTree

From: Matthieu Guillo (guillo@jlab.org)
Date: Mon Oct 30 2000 - 18:51:36 MET


Hello rooters, 

I am trying to write a function which selects events in a TTree. I would
like to have the selection done the same way the Draw() is implemented.
The only way I know how to do it is to use the CopyTree() method but there
is an overhead of memory if I have a lot of branches (let's say 50) I
don't want to use. The cut can be applied on other branches I am not
interested in (for instance on variable "y").

For instance:

Float_t Sum_X_Square(TTree* T, TCut cut){
  TTree* T_new = T->CopyTree(cut);
  Float_t x;
  T_new->SetBranchAdress("x",&x);
  T_new->SetBranchStatus("*",0);  // disable all branches
  T_new->SetBranchStatus("x",1);  // able the "x" branch

  Float total = 0;
  Int_t nEntries = T_new->GetEntries();
  for (Int_t i = 0; i < nEntries; i++) {
     T_new->GetEvent(i);
     total += x * x;
  } 

  delete T_new;
  return(total);
} 

Is there a better way to do it, without going through the overhead of the
T_new object? The problem I have is that if T is too big, I have a crash
because my machine hasn't got enough memory.

Regards,  

Matthieu Guillo
Thomas Jefferson National Laboratory
Office 71 trailer 16
Phone: 757-269-5551



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:36 MET