Source code for alphatwirl.summary.Reader
# Tai Sakuma <tai.sakuma@cern.ch>
import logging
from .WeightCalculatorOne import WeightCalculatorOne
##__________________________________________________________________||
[docs]class Reader(object):
def __init__(self, keyValComposer, summarizer, nextKeyComposer = None,
weightCalculator = WeightCalculatorOne(),
nevents = None):
self.keyValComposer = keyValComposer
self.summarizer = summarizer
self.weightCalculator = weightCalculator
self.nextKeyComposer = nextKeyComposer
self.nevents = nevents
self.ievent = 0
def __repr__(self):
return '{}(keyValComposer = {!r}, summarizer = {!r}, weightCalculator = {!r}, nextKeyComposer = {!r}), nevents = {!r})'.format(
self.__class__.__name__,
self.keyValComposer,
self.summarizer,
self.weightCalculator,
self.nextKeyComposer,
self.nevents
)
[docs] def begin(self, event):
self.keyValComposer.begin(event)
[docs] def event(self, event):
if self.nevents is not None and self.nevents <= self.ievent: return
self.ievent += 1
try:
keyvals = self.keyValComposer(event)
except Exception as e:
logger = logging.getLogger(__name__)
logger.error(e)
logger.error(self)
raise
weight = self.weightCalculator(event)
for key, val in keyvals:
self.summarizer.add(key = key, val = val, weight = weight)
[docs] def end(self):
if self.nextKeyComposer is None: return
for key in sorted(self.summarizer.keys()):
nextKeys = self.nextKeyComposer(key)
for nextKey in nextKeys: self.summarizer.add_key(nextKey)
[docs] def results(self):
return self.summarizer
##__________________________________________________________________||