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 'FixHepMC' in line
and 'INFO Removed' in line:
36 if 'because of loops' in line:
37 self.FixHepMCDict[
'denominator'] +=
int( line.split(
' of ')[1].
split()[0].strip() )
39 reason = line.split(
'particles')[1]
41 if reason
not in self.FixHepMCDict[
'reasons']:
42 self.FixHepMCDict[
'reasons'][reason] = 0
43 self.FixHepMCDict[
'reasons'][reason] +=
int( line.split(
'Removed')[1].
split()[0].strip() )
45 if reason
not in self.FixHepMCDict[
'lines']:
46 self.FixHepMCDict[
'lines'][reason] = [ line.split(
'Removed')[0] , line.split(
'particles')[1] ]
48 elif 'Py:EvgenFilterSeq' in line:
50 if 'Weighted Filter Efficiency' in line:
52 numbers = re.findall(
r'[\d.]+',line)
53 self.FilterSeqDict[
'wnum'] +=
float( numbers[-2] )
54 self.FilterSeqDict[
'wden'] +=
float( numbers[-1] )
56 self.FilterSeqDict[
'wline'] = line.split(
'=')[0]
57 elif 'Filter Efficiency' in line:
59 numbers = re.findall(
r'[\d.]+',line)
60 self.FilterSeqDict[
'num'] +=
int( numbers[-2] )
61 self.FilterSeqDict[
'den'] +=
int( numbers[-1] )
63 if self.FilterSeqDict[
'line']
is None:
64 self.FilterSeqDict[
'line'] = line.split(
'=')[0]
66 elif 'TestHepMC' in line
and 'Event' in line:
67 if 'Events passed' in line:
69 numbers = re.findall(
r'[\d.]+',line)
70 self.TestHepMCDict[
'p'] +=
int(numbers[-2])
71 self.TestHepMCDict[
'f'] +=
int(numbers[-1])
73 self.TestHepMCDict[
'pfline'] = line.split(
'=')[0]
75 self.TestHepMCDict[
'lastpf'] =
int(numbers[-2]) +
int(numbers[-1])
78 reason = line.split(
'Event rate')[1].
split(
'=')[0]
79 if reason
not in self.TestHepMCDict[
'rate']:
80 self.TestHepMCDict[
'rate'][reason] = 0
82 if 'not included in test efficiency' in line:
83 self.TestHepMCDict[
'notinc'] += [reason]
85 my_perc =
float( line.split(
'=')[1].
split(
'%')[0] )
86 self.TestHepMCDict[
'rate'][reason] += my_perc * self.TestHepMCDict[
'lastpf']/100.
88 self.TestHepMCDict[
'rline'] = line.split(
'Event rate')[0]
90 elif 'TestHepMC' in line
and 'Efficiency' in line:
92 self.TestHepMCDict[
'effline'] = line.split(
'=')[0]
95 elif 'MetaData:' in line:
97 field = line.split(
'MetaData:')[1].
split(
'=')[0].strip()
98 if field
in self.MetadataDict:
99 self.MetadataDict[field] +=
float( line.split(
'=')[1] )
102 if field ==
'cross-section (nb)':
103 self.MetadataDict[
'xsec_holder'] =
float( line.split(
'=')[1] )
106 elif field ==
'sumOfPosWeightsNoFilter':
107 self.MetadataDict[
'xsec_weight'] =
float( line.split(
'=')[1] )
109 elif field ==
'sumOfNegWeightsNoFilter':
110 my_negw =
float( line.split(
'=')[1] )
111 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 114 of file EvgenParserTool.py.
115 ''' Function to print final statistics grabbed from the logs'''
118 self.msg.
debug(
'Not running MP, nothing to do')
122 self.msg.
info(f
'Printing final summary statistics from {self.isMP} MP workers')
124 for reason
in self.FixHepMCDict[
'reasons']:
125 print(f
"{self.FixHepMCDict['lines'][reason][0]}Removed {self.FixHepMCDict['reasons'][reason]} of {self.FixHepMCDict['denominator']} particles {self.FixHepMCDict['lines'][reason][1]}")
127 print(f
"{self.TestHepMCDict['pfline']}= {self.TestHepMCDict['p']}, Events Failed = {self.TestHepMCDict['f']}")
129 denom = self.TestHepMCDict[
'p'] + self.TestHepMCDict[
'f']
131 for rate
in self.TestHepMCDict[
'rate']:
135 pct = (self.TestHepMCDict[
'rate'][rate] / denom)*100.
136 print(f
"{self.TestHepMCDict['rline']}Event rate {rate} = {pct}%{' (not included in test efficiency)' if rate in self.TestHepMCDict['notinc'] else ''}")
140 final_eff = self.TestHepMCDict[
'p']/denom
141 print(f
"{self.TestHepMCDict['effline']}= {final_eff*100.}%")
143 eff = (self.FilterSeqDict[
'num']/self.FilterSeqDict[
'den'])
if self.FilterSeqDict[
'den'] > 0
else 1.
144 print(f
"{self.FilterSeqDict['line']} = {eff} [{self.FilterSeqDict['num']} / {self.FilterSeqDict['den']}]")
145 eff = (self.FilterSeqDict[
'wnum']/self.FilterSeqDict[
'wden'])
if self.FilterSeqDict[
'wden'] >0
else 1.
146 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 149 of file EvgenParserTool.py.
149 def updateMetadata(self, metadata):
150 ''' Update the metadata based on the logfile information'''
153 self.msg.
debug(
'Not running MP, nothing to do')
157 denom = self.MetadataDict[
'sumOfPosWeightsNoFilter']-self.MetadataDict[
'sumOfNegWeightsNoFilter']
160 my_xsec = self.MetadataDict[
'xsec_sum'] / denom
161 self.msg.
info(f
'cross-section (nb)= {my_xsec:e}')
162 metadata[
'cross-section (nb)'] = f
'{my_xsec:e}'
164 self.msg.
info(
'Updated metadata:')
165 for field
in self.MetadataDict:
167 if field
in metadata:
168 self.msg.
info(f
'{field} = {self.MetadataDict[field]:e}')
169 metadata[field] = f
'{self.MetadataDict[field]:e}'
173 geneff = (self.MetadataDict[
'sumOfPosWeights']-self.MetadataDict[
'sumOfNegWeights'])/denom
174 self.msg.
info(f
'GenFiltEff = {geneff:e}')
175 if 'GenFiltEff' in metadata:
176 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: