diff --git a/Control/GaudiSequencer/python/PyCompsExt.py b/Control/GaudiSequencer/python/PyCompsExt.py new file mode 100644 index 0000000000000000000000000000000000000000..4b5025c4cb10bb7c0c746656dfd7b529610024fc --- /dev/null +++ b/Control/GaudiSequencer/python/PyCompsExt.py @@ -0,0 +1,55 @@ +# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + +# @file: GaudiSequencer/python/PyCompsExt.py +# @purpose: Library defines a class for filtering events. Allows to provide run/event numbers from a file. +# @author: Oldrich Kepka <oldrich.kepka@cern.ch> + + +__doc__ = 'Library defines a class for filtering events. Allows to provide run/event numbers from a file.' +__author__ = 'Oldrich Kepka <oldrich.kepka@cern.ch' + +from GaudiSequencer.PyComps import PyEvtFilter +from AthenaPython.PyAthena import StatusCode + +class PyEvtFilterFromFile (PyEvtFilter): + """ Algorithm which loads list of runnunber/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.Failure + 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/evtFilterFromFile.py b/Control/GaudiSequencer/share/evtFilterFromFile.py new file mode 100644 index 0000000000000000000000000000000000000000..65e1b33bca83e5a8c08e86140a5485a0df819ddd --- /dev/null +++ b/Control/GaudiSequencer/share/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