ATLAS Offline Software
Public Member Functions | Public Attributes | List of all members
python.TrigValSteering.CheckSteps.LogMergeStep Class Reference
Inheritance diagram for python.TrigValSteering.CheckSteps.LogMergeStep:
Collaboration diagram for python.TrigValSteering.CheckSteps.LogMergeStep:

Public Member Functions

def __init__ (self, name='LogMerge')
 
def configure (self, test)
 
def process_extra_regex (self)
 
def merge_logs (self)
 
def run (self, dry_run=False)
 

Public Attributes

 log_files
 
 extra_log_regex
 
 merged_name
 
 warn_if_missing
 
 result
 

Detailed Description

Merge several log files into one for post-processing

Definition at line 121 of file CheckSteps.py.

Constructor & Destructor Documentation

◆ __init__()

def python.TrigValSteering.CheckSteps.LogMergeStep.__init__ (   self,
  name = 'LogMerge' 
)

Definition at line 124 of file CheckSteps.py.

124  def __init__(self, name='LogMerge'):
125  super(LogMergeStep, self).__init__(name)
126  self.log_files = None
127  self.extra_log_regex = None
128  self.merged_name = 'athena.merged.log'
129  self.warn_if_missing = True
130 

Member Function Documentation

◆ configure()

def python.TrigValSteering.CheckSteps.LogMergeStep.configure (   self,
  test 
)

Definition at line 131 of file CheckSteps.py.

131  def configure(self, test):
132  if self.log_files is None:
133  self.log_files = []
134  for step in test.exec_steps:
135  self.log_files.append(step.name)
136  # Protect against infinite loop
137  if self.merged_name in self.log_files:
138  self.misconfig_abort(
139  'output log name %s is same as one of the input log names.'
140  ' This will lead to infinite loop, aborting.', self.merged_name)
141  super(LogMergeStep, self).configure(test)
142 

◆ merge_logs()

def python.TrigValSteering.CheckSteps.LogMergeStep.merge_logs (   self)

Definition at line 151 of file CheckSteps.py.

151  def merge_logs(self):
152  try:
153  with open(self.merged_name, 'w', encoding='utf-8') as merged_file:
154  for log_name in self.log_files:
155  if not os.path.isfile(log_name):
156  if self.warn_if_missing:
157  self.log.warning('Cannot open %s', log_name)
158  merged_file.write(
159  '### WARNING Missing {} ###\n'.format(log_name))
160  continue
161  with open(log_name, encoding='utf-8') as log_file:
162  merged_file.write('### {} ###\n'.format(log_name))
163  # temporary workaround to ignore false positives in AOD->DAOD log parsing
164  # FIXME: drop AODtoDAOD once test_trigAna_AODtoDAOD_run2_build.py is migrated to Derivation_tf
165  if log_name == 'log.Derivation' or log_name == 'log.AODtoDAOD':
166  for line in log_file:
167  merged_file.write(line.replace('Selected dynamic Aux', 'Selected Dynamic Aux'))
168  else:
169  for line in log_file:
170  merged_file.write(line)
171  return 0
172  except OSError as e:
173  self.log.error('%s merging failed due to OSError: %s',
174  self.name, e.strerror)
175  return 1
176 

◆ process_extra_regex()

def python.TrigValSteering.CheckSteps.LogMergeStep.process_extra_regex (   self)

Definition at line 143 of file CheckSteps.py.

143  def process_extra_regex(self):
144  if self.extra_log_regex:
145  files = os.listdir('.')
146  r = re.compile(self.extra_log_regex)
147  match_files = filter(r.match, files)
148  for f in match_files:
149  self.log_files.append(f)
150 

◆ run()

def python.TrigValSteering.CheckSteps.LogMergeStep.run (   self,
  dry_run = False 
)

Definition at line 177 of file CheckSteps.py.

177  def run(self, dry_run=False):
178  self.process_extra_regex()
179  # Sort log files by modification time
180  self.log_files.sort(key=lambda f : os.path.getmtime(f) if os.path.isfile(f) else 0)
181  self.log.info('Running %s merging logs %s into %s',
182  self.name, self.log_files, self.merged_name)
183  if dry_run:
184  self.result = 0
185  else:
186  self.result = self.merge_logs()
187  return self.result, '# (internal) {} in={} out={}'.format(self.name, self.log_files, self.merged_name)
188 
189 

Member Data Documentation

◆ extra_log_regex

python.TrigValSteering.CheckSteps.LogMergeStep.extra_log_regex

Definition at line 127 of file CheckSteps.py.

◆ log_files

python.TrigValSteering.CheckSteps.LogMergeStep.log_files

Definition at line 126 of file CheckSteps.py.

◆ merged_name

python.TrigValSteering.CheckSteps.LogMergeStep.merged_name

Definition at line 128 of file CheckSteps.py.

◆ result

python.TrigValSteering.CheckSteps.LogMergeStep.result

Definition at line 184 of file CheckSteps.py.

◆ warn_if_missing

python.TrigValSteering.CheckSteps.LogMergeStep.warn_if_missing

Definition at line 129 of file CheckSteps.py.


The documentation for this class was generated from the following file:
grepfile.info
info
Definition: grepfile.py:38
vtune_athena.format
format
Definition: vtune_athena.py:14
configure
bool configure(asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionTool > &tool, ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > &electronEffToolsHandles, ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > &electronSFToolsHandles, ToolHandleArray< CP::IMuonTriggerScaleFactors > &muonToolsHandles, ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > &photonEffToolsHandles, ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > &photonSFToolsHandles, const std::string &triggers, const std::map< std::string, std::string > &legsPerTool, unsigned long nToys, bool debug)
Definition: TrigGlobEffCorrValidation.cxx:514
run
int run(int argc, char *argv[])
Definition: ttree2hdf5.cxx:28
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
covarianceTool.filter
filter
Definition: covarianceTool.py:514
python.processes.powheg.ZZ.ZZ.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZ.py:18
Trk::open
@ open
Definition: BinningType.h:40
error
Definition: IImpactPoint3dEstimator.h:70