RE: [ROOT] selecting events in a TTree

From: Philippe Canal (pcanal@popgtw.fnal.gov)
Date: Mon Oct 30 2000 - 19:36:16 MET


Hi Matthieu,

Did you take a look at the TEventList class.  From your original tree
you can do:

  mytree->Draw(">>mylistof_events","cut");
  .... 
  mytree->SetEventList(mylistof_events);
  ...
  // Do more cut on the sub-set.

Philippe.

> -
> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
> [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Matthieu Guillo
> Sent: Monday, October 30, 2000 11:52 AM
> To: roottalk@pcroot.cern.ch
> Subject: [ROOT] selecting events in a TTree
> 
> 
> 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