Source code for alphatwirl.selection.modules.LambdaStr
# Tai Sakuma <tai.sakuma@cern.ch>
##__________________________________________________________________||
[docs]class LambdaStr(object):
"""select events to which a lambda returns True.
A lambda should be given as a string to __init__ and will be
evaluated in begin(). This is because a lambda is not picklable.
In the multiprocessing mode, __init__() is called in the main
process. Then, the instance will be pickled and sent to
subprocesses. begin() will be called in the subprocesses.
"""
def __init__(self, lambda_str, name = None):
self.name = name if name is not None else lambda_str
self.lambda_str = lambda_str
def __repr__(self):
return '{}(name = {!r}, lambda_str = {!r})'.format(
self.__class__.__name__,
self.name,
self.lambda_str
)
[docs] def begin(self, event):
self.func = eval('lambda ' + self.lambda_str)
[docs] def event(self, event):
try:
return self.func(event)
except BaseException as e:
raise ValueError('{}: error in executing "{}". raised -- {}: {}'.format(
self.__class__.__name__,
self.lambda_str, type(e).__name__, e
))
def __call__(self, event):
return self.event(event)
[docs] def end(self):
self.func = None
##__________________________________________________________________||