diff --git a/Control/GaudiSequencer/python/PyCompsExt.py b/Control/GaudiSequencer/python/PyCompsExt.py new file mode 100644 index 0000000000000000000000000000000000000000..4985b6f5004a9ece7e9b5c3556f6dd0be47250c5 --- /dev/null +++ b/Control/GaudiSequencer/python/PyCompsExt.py @@ -0,0 +1,45 @@ +from GaudiSequencer.PyComps import PyEvtFilter +from AthenaPython.PyAthena import StatusCode + +class PyEvtFilterFromFile (PyEvtFilter): + """ Algorithm which loads list of runnuber/eventnumbers from file for filtering and pass it to PyEvtFilter + """ + + def __init__(self, name='filterFromFile', **kw): + super(PyEvtFilterFromFile, self).__init__(name,**kw) + + self.input_file = kw.get('selectorInputFile', None) + + def initialize(self): + + _info = self.msg.info + _error = self.msg.error + + _info('==> PyEvtFilterFromFile initialize') + if not self.input_file: + _error('Input_file is required.') + return StatusCode.Failure + try: + f = open(self.input_file, 'r') + except IOError: + _error = self.msg.error('File {} cannot be opened.'.format(self.input_file)) + return StatusCode.Falure + else: + _info('==> File {} opened. Loading Runnumber/Eventnumber list'.format(self.input_file)) + with f: + self.evt_list = [] + for line in f: + if '#' in line: + continue + + numbers = line.split() + + if not numbers: + continue + if len(numbers) != 2: + self.msg.warning('Following line cannot be parsed: {}'.format(line)) + + self.evt_list.append((int(numbers[0]), int(numbers[1]))) + + super(PyEvtFilterFromFile,self).initialize() + return StatusCode.Success diff --git a/Control/GaudiSequencer/share/preinclude.evtFilterFromFile.py b/Control/GaudiSequencer/share/preinclude.evtFilterFromFile.py new file mode 100644 index 0000000000000000000000000000000000000000..65e1b33bca83e5a8c08e86140a5485a0df819ddd --- /dev/null +++ b/Control/GaudiSequencer/share/preinclude.evtFilterFromFile.py @@ -0,0 +1,9 @@ +from GaudiSequencer.PyCompsExt import PyEvtFilterFromFile + +evtSelector = PyEvtFilterFromFile('eventSelector') +if 'selectorInputFile' in locals(): + evtSelector.input_file = selectorInputFile + +from AthenaCommon.AlgSequence import AthSequencer +filtseq = AthSequencer ("AthFilterSeq") +filtseq += evtSelector