Definition at line 12 of file EvgenParserTool.py.
◆ __init__()
def EvgenParserTool.evgenParserTool.__init__ |
( |
|
self, |
|
|
|
name = 'evgenLogParser' , |
|
|
** |
kw |
|
) |
| |
Definition at line 14 of file EvgenParserTool.py.
14 def __init__ ( self, name = 'evgenLogParser', **kw ):
15 self.msg = Logging.logging.getLogger(name)
17 self.FixHepMCDict = {
'reasons':{},
'denominator':0,
'lines':{}}
21 self.TestHepMCDict = {
'p':0,
'f':0,
'pfline':
None,
'rate':{},
'notinc':[],
'rline':
None,
'effline':
None,
'lastpf':0}
23 self.FilterSeqDict = {
'num':0,
'den':0,
'wnum':0,
'wden':0,
'line':
None,
'wline':
None}
25 self.MetadataDict = {
'sumOfPosWeights':0.,
'sumOfNegWeights':0.,
'sumOfSqrWeights':0.,
26 'sumOfPosWeightsNoFilter':0.,
'sumOfNegWeightsNoFilter':0.,
'sumOfSqrWeightsNoFilter':0.,
27 'xsec_holder':0.,
'xsec_weight':0.,
'xsec_sum':0.}
◆ processLine()
def EvgenParserTool.evgenParserTool.processLine |
( |
|
self, |
|
|
|
line |
|
) |
| |
Function to process a log line and keep what's needed for final reporting
Definition at line 30 of file EvgenParserTool.py.
30 def processLine( self, line ):
31 ''' Function to process a log line and keep what's needed for final reporting'''
34 if "PerfMonMTSvc" in line:
38 if 'FixHepMC' in line
and 'INFO Removed' in line:
40 if 'because of loops' in line:
41 self.FixHepMCDict[
'denominator'] +=
int( line.split(
' of ')[1].
split()[0].strip() )
43 reason = line.split(
'particles')[1]
45 if reason
not in self.FixHepMCDict[
'reasons']:
46 self.FixHepMCDict[
'reasons'][reason] = 0
47 self.FixHepMCDict[
'reasons'][reason] +=
int( line.split(
'Removed')[1].
split()[0].strip() )
49 if reason
not in self.FixHepMCDict[
'lines']:
50 self.FixHepMCDict[
'lines'][reason] = [ line.split(
'Removed')[0] , line.split(
'particles')[1] ]
52 elif 'Py:EvgenFilterSeq' in line:
54 if 'Weighted Filter Efficiency' in line:
56 numbers = re.findall(
r'[\d.]+',line)
57 self.FilterSeqDict[
'wnum'] +=
float( numbers[-2] )
58 self.FilterSeqDict[
'wden'] +=
float( numbers[-1] )
60 self.FilterSeqDict[
'wline'] = line.split(
'=')[0]
61 elif 'Filter Efficiency' in line:
63 numbers = re.findall(
r'[\d.]+',line)
64 self.FilterSeqDict[
'num'] +=
int( numbers[-2] )
65 self.FilterSeqDict[
'den'] +=
int( numbers[-1] )
67 if self.FilterSeqDict[
'line']
is None:
68 self.FilterSeqDict[
'line'] = line.split(
'=')[0]
70 elif 'TestHepMC' in line
and 'Event' in line:
71 if 'Events passed' in line:
73 numbers = re.findall(
r'[\d.]+',line)
74 self.TestHepMCDict[
'p'] +=
int(numbers[-2])
75 self.TestHepMCDict[
'f'] +=
int(numbers[-1])
77 self.TestHepMCDict[
'pfline'] = line.split(
'=')[0]
79 self.TestHepMCDict[
'lastpf'] =
int(numbers[-2]) +
int(numbers[-1])
82 reason = line.split(
'Event rate')[1].
split(
'=')[0]
83 if reason
not in self.TestHepMCDict[
'rate']:
84 self.TestHepMCDict[
'rate'][reason] = 0
86 if 'not included in test efficiency' in line:
87 self.TestHepMCDict[
'notinc'] += [reason]
89 my_perc =
float( line.split(
'=')[1].
split(
'%')[0] )
90 self.TestHepMCDict[
'rate'][reason] += my_perc * self.TestHepMCDict[
'lastpf']/100.
92 self.TestHepMCDict[
'rline'] = line.split(
'Event rate')[0]
94 elif 'TestHepMC' in line
and 'Efficiency' in line:
96 self.TestHepMCDict[
'effline'] = line.split(
'=')[0]
99 elif 'MetaData:' in line:
101 field = line.split(
'MetaData:')[1].
split(
'=')[0].strip()
102 if field
in self.MetadataDict:
103 self.MetadataDict[field] +=
float( line.split(
'=')[1] )
106 if field ==
'cross-section (nb)':
107 self.MetadataDict[
'xsec_holder'] =
float( line.split(
'=')[1] )
110 elif field ==
'sumOfPosWeightsNoFilter':
111 self.MetadataDict[
'xsec_weight'] =
float( line.split(
'=')[1] )
113 elif field ==
'sumOfNegWeightsNoFilter':
114 my_negw =
float( line.split(
'=')[1] )
115 self.MetadataDict[
'xsec_sum'] += self.MetadataDict[
'xsec_holder']*(self.MetadataDict[
'xsec_weight']-my_negw)
◆ report()
def EvgenParserTool.evgenParserTool.report |
( |
|
self | ) |
|
Function to print final statistics grabbed from the logs
Definition at line 118 of file EvgenParserTool.py.
119 ''' Function to print final statistics grabbed from the logs'''
122 self.msg.
debug(
'Not running MP, nothing to do')
126 self.msg.
info(f
'Printing final summary statistics from {self.isMP} MP workers')
128 for reason
in self.FixHepMCDict[
'reasons']:
129 print(f
"{self.FixHepMCDict['lines'][reason][0]}Removed {self.FixHepMCDict['reasons'][reason]} of {self.FixHepMCDict['denominator']} particles {self.FixHepMCDict['lines'][reason][1]}")
131 print(f
"{self.TestHepMCDict['pfline']}= {self.TestHepMCDict['p']}, Events Failed = {self.TestHepMCDict['f']}")
133 denom = self.TestHepMCDict[
'p'] + self.TestHepMCDict[
'f']
135 for rate
in self.TestHepMCDict[
'rate']:
139 pct = (self.TestHepMCDict[
'rate'][rate] / denom)*100.
140 print(f
"{self.TestHepMCDict['rline']}Event rate {rate} = {pct}%{' (not included in test efficiency)' if rate in self.TestHepMCDict['notinc'] else ''}")
144 final_eff = self.TestHepMCDict[
'p']/denom
145 print(f
"{self.TestHepMCDict['effline']}= {final_eff*100.}%")
147 eff = (self.FilterSeqDict[
'num']/self.FilterSeqDict[
'den'])
if self.FilterSeqDict[
'den'] > 0
else 1.
148 print(f
"{self.FilterSeqDict['line']} = {eff} [{self.FilterSeqDict['num']} / {self.FilterSeqDict['den']}]")
149 eff = (self.FilterSeqDict[
'wnum']/self.FilterSeqDict[
'wden'])
if self.FilterSeqDict[
'wden'] >0
else 1.
150 print(f
"{self.FilterSeqDict['wline']} = {eff} [{self.FilterSeqDict['wnum']} / {self.FilterSeqDict['wden']}]")
◆ updateMetadata()
def EvgenParserTool.evgenParserTool.updateMetadata |
( |
|
self, |
|
|
|
metadata |
|
) |
| |
Update the metadata based on the logfile information
Definition at line 153 of file EvgenParserTool.py.
153 def updateMetadata(self, metadata):
154 ''' Update the metadata based on the logfile information'''
157 self.msg.
debug(
'Not running MP, nothing to do')
161 denom = self.MetadataDict[
'sumOfPosWeightsNoFilter']-self.MetadataDict[
'sumOfNegWeightsNoFilter']
164 my_xsec = self.MetadataDict[
'xsec_sum'] / denom
165 self.msg.
info(f
'cross-section (nb)= {my_xsec:e}')
166 metadata[
'cross-section (nb)'] = f
'{my_xsec:e}'
168 self.msg.
info(
'Updated metadata:')
169 for field
in self.MetadataDict:
171 if field
in metadata:
172 self.msg.
info(f
'{field} = {self.MetadataDict[field]:e}')
173 metadata[field] = f
'{self.MetadataDict[field]:e}'
177 geneff = (self.MetadataDict[
'sumOfPosWeights']-self.MetadataDict[
'sumOfNegWeights'])/denom
178 self.msg.
info(f
'GenFiltEff = {geneff:e}')
179 if 'GenFiltEff' in metadata:
180 metadata[
'GenFiltEff'] = f
'{geneff:e}'
◆ FilterSeqDict
EvgenParserTool.evgenParserTool.FilterSeqDict |
◆ FixHepMCDict
EvgenParserTool.evgenParserTool.FixHepMCDict |
◆ isMP
EvgenParserTool.evgenParserTool.isMP |
◆ MetadataDict
EvgenParserTool.evgenParserTool.MetadataDict |
◆ msg
EvgenParserTool.evgenParserTool.msg |
◆ TestHepMCDict
EvgenParserTool.evgenParserTool.TestHepMCDict |
The documentation for this class was generated from the following file: