[ROOT] Making cut scans from a TTree -- counting events

From: Topher Cawlfield (cawlfiel@uiuc.edu)
Date: Wed Sep 24 2003 - 22:44:27 MEST


Hi,

Does anyone know how I can (quickly and easily) get a count of events in 
a TTree that pass a certain cut?  One method is to make a histogram, use 
TTree::Project to fill it, and then get the total bin contents from 
TH1::GetStats.  But this seems unnecessarily tedious and time-consuming, 
creating (and later destroying) a histogram, and requires knowing of a 
dummy variable to bin in.

The reason for this is that I want to make a simple, general-purpose 
utility for creating plots of quantities like yield and S/N for a 
variety of cuts.  One common way to assess yield and background is to 
perform a fit.  Simpler still, one could perform background subtraction 
(such as sideband, wrong-sign, Monte Carlo, etc.).

So, I thought I'd make a function that takes a baseline cut, an array of 
experimental cuts, and an instance of a subclass of "Evaluator", and 
makes a plot (one point per cut).   Evaluator would be an abstract class 
that defines a "getXY" virtual function that takes a cut and returns an 
x, dx, y, and dy.    X and Y would be, for example, S/N and yield.  Then 
I'd make a derived class, say "EvalSubtract", that you can hand a TTree, 
signal cut, and background cut.  The evaluation of signal (or 
background) would simply be a count of events passing both the analysis 
cuts and the signal (or background) cuts.  Well, it sounded trivial to 
me, until I ended up searching through the root docs for a TTree member 
function that performed the count.  No luck!

I suppose one solution could be to write a counting TSelector and using 
TTree::Process.  But I don't know how to write the ProcessCut function 
to evaluate a TCut, or whether or not this is the best way.

Any ideas?

   Topher Cawlfield



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:15 MET