RE: [ROOT] TTreeFormula within TSelector::ProcessCut

From: Chris Roat (croat@SLAC.stanford.edu)
Date: Fri Dec 21 2001 - 01:41:09 MET


Hi Philipe,

Thanks so much for your solution.  It worked great and I'm now back up and
running.  I have another question on a related note.

I need to be sure that my TSelector reads in the branches necessary (and
*only* those branches, since I have 100s) for the TTreeFormulas I am
using.  But I don't see the need to add/change SetBranchStatus lines in my
TSelector::Init method everytime I add/change my TTreeFormulas.

Is there a way to do this more easily, like by looping over the leaves a
TTreeFormula needs?

Cheers,
Chris




*** Today, you (Philippe Canal) wrote ***

>Hi Chris,
>
>The problem was that the TTreeFormula were not informed properly that
>the chain loaded a need TTree.  To fix that you need to add at the end of
>generic::Notify the following:
>
>  // fChain->LoadTree(fChain->GetReadEntry());
>  // Also update the formulas:
>  for (Int_t cut=0; cut<_cs->nCuts(); cut++) {
>     ttform[cut]->UpdateFormulaLeaves();
>  }
>
>Now in your sample case (only one file), it should not have been loading
>any new file in the first place.  The reason why it was, is that you have
>in all your selector's Notify method (like generic::Notify) calls like:
>
>	fChain->SetBranchStatus("*",kFALSE);
>
>This forces a reload of the current file.  The SetBranchStatus actually
>belongs in the generic::Init method because they only need to be once
>by chain.  The chain (at least in newer ROOT) keeps track of the
>info and pass it to each TTree.  If for some reasons (very old ROOT
>version) this does not work, then uncomment the first like in my
>first code fragment.
>
>Cheers,
>Philipe.
>
>
>-----Original Message-----
>From: owner-roottalk@pcroot.cern.ch
>[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Chris Roat
>Sent: Wednesday, December 19, 2001 1:03 PM
>To: roottalk@pcroot.cern.ch
>Subject: [ROOT] TTreeFormula within TSelector::ProcessCut
>
>
>Hi ROOT,
>
>I'm having problems finding out if a particular entry in a tree passes a
>cut.  I'm using a TSelector which takes recieves a list of strings (which
>are cuts, of the form "p>3" or "myBool" from the outside world).  During
>ProcessCut/ProcessFill, I would like to see if the entry I'm on passes any
>of the strings.
>
>I am trying to use TTreeFormula to tackle this, but without prolonged
>luck.  It works fine on the first entry - EvalInstance(0) returns the
>correct answer, so I'm on the right track.  However, EvalInstance(0) seg
>faults on subsequent entries.
>
>Could there be a problem with ProcessCut() and EvalInstance() both getting
>info from the tree?
>
>Thanks for any insight,
>Chris
>
>
>



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