ATLAS Offline Software
Loading...
Searching...
No Matches
python.TrigValSteering.CheckSteps.LogMergeStep Class Reference
Inheritance diagram for python.TrigValSteering.CheckSteps.LogMergeStep:
Collaboration diagram for python.TrigValSteering.CheckSteps.LogMergeStep:

Public Member Functions

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

Public Attributes

list log_files = None
 extra_log_regex = None
str merged_name = 'athena.merged.log'
bool warn_if_missing = True
 name
int result = 0

Detailed Description

Merge several log files into one for post-processing

Definition at line 121 of file CheckSteps.py.

Constructor & Destructor Documentation

◆ __init__()

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()

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
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)

◆ merge_logs()

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 if "Derivation" in log_name:
165 for line in log_file:
166 merged_file.write(line.replace('Selected dynamic Aux', 'Selected Dynamic Aux'))
167 else:
168 for line in log_file:
169 merged_file.write(line)
170 return 0
171 except OSError as e:
172 self.log.error('%s merging failed due to OSError: %s',
173 self.name, e.strerror)
174 return 1
175

◆ process_extra_regex()

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()

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

Definition at line 176 of file CheckSteps.py.

176 def run(self, dry_run=False):
177 self.process_extra_regex()
178 # Sort log files by modification time
179 self.log_files.sort(key=lambda f : os.path.getmtime(f) if os.path.isfile(f) else 0)
180 self.log.info('Running %s merging logs %s into %s',
181 self.name, self.log_files, self.merged_name)
182 if dry_run:
183 self.result = 0
184 else:
185 self.result = self.merge_logs()
186 return self.result, '# (internal) {} in={} out={}'.format(self.name, self.log_files, self.merged_name)
187
188
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Definition run.py:1

Member Data Documentation

◆ extra_log_regex

python.TrigValSteering.CheckSteps.LogMergeStep.extra_log_regex = None

Definition at line 127 of file CheckSteps.py.

◆ log_files

python.TrigValSteering.CheckSteps.LogMergeStep.log_files = None

Definition at line 126 of file CheckSteps.py.

◆ merged_name

python.TrigValSteering.CheckSteps.LogMergeStep.merged_name = 'athena.merged.log'

Definition at line 128 of file CheckSteps.py.

◆ name

python.TrigValSteering.CheckSteps.LogMergeStep.name

Definition at line 173 of file CheckSteps.py.

◆ result

python.TrigValSteering.CheckSteps.LogMergeStep.result = 0

Definition at line 183 of file CheckSteps.py.

◆ warn_if_missing

bool python.TrigValSteering.CheckSteps.LogMergeStep.warn_if_missing = True

Definition at line 129 of file CheckSteps.py.


The documentation for this class was generated from the following file: