31 def processLine( self, line ):
32 ''' Function to process a log line and keep what's needed for final reporting'''
33
34
35 if "PerfMonMTSvc" in line:
36 return
37
38
39 if 'FixHepMC' in line and 'INFO Removed' in line:
40
41 if 'because of loops' in line:
42 self.FixHepMCDict[
'denominator'] += int( line.split(
' of ')[1].
split()[0].
strip() )
43
44 reason = line.split('particles')[1]
45
46 if reason not in self.FixHepMCDict['reasons']:
47 self.FixHepMCDict['reasons'][reason] = 0
48 self.FixHepMCDict[
'reasons'][reason] += int( line.split(
'Removed')[1].
split()[0].
strip() )
49
50 if reason not in self.FixHepMCDict['lines']:
51 self.FixHepMCDict['lines'][reason] = [ line.split('Removed')[0] , line.split('particles')[1] ]
52
53 elif 'Py:EvgenFilterSeq' in line:
54
55 if 'Weighted Filter Efficiency' in line:
56
57 numbers = re.findall(r'[\d.]+',line)
58 self.FilterSeqDict['wnum'] += float( numbers[-2] )
59 self.FilterSeqDict['wden'] += float( numbers[-1] )
60
61 self.FilterSeqDict['wline'] = line.split('=')[0]
62 elif 'Filter Efficiency' in line:
63
64 numbers = re.findall(r'[\d.]+',line)
65 self.FilterSeqDict['num'] += int( numbers[-2] )
66 self.FilterSeqDict['den'] += int( numbers[-1] )
67
68 if self.FilterSeqDict['line'] is None:
69 self.FilterSeqDict['line'] = line.split('=')[0]
70
71 elif 'TestHepMC' in line and 'Event' in line:
72 if 'Events passed' in line:
73
74 numbers = re.findall(r'[\d.]+',line)
75 self.TestHepMCDict['p'] += int(numbers[-2])
76 self.TestHepMCDict['f'] += int(numbers[-1])
77
78 self.TestHepMCDict['pfline'] = line.split('=')[0]
79
80 self.TestHepMCDict['lastpf'] = int(numbers[-2]) + int(numbers[-1])
81 else:
82
83 reason = line.split(
'Event rate')[1].
split(
'=')[0]
84 if reason not in self.TestHepMCDict['rate']:
85 self.TestHepMCDict['rate'][reason] = 0
86
87 if 'not included in test efficiency' in line:
88 self.TestHepMCDict['notinc'] += [reason]
89
90 my_perc = float( line.split(
'=')[1].
split(
'%')[0] )
91 self.TestHepMCDict['rate'][reason] += my_perc * self.TestHepMCDict['lastpf']/100.
92
93 self.TestHepMCDict['rline'] = line.split('Event rate')[0]
94
95 elif 'TestHepMC' in line and 'Efficiency' in line:
96
97 self.TestHepMCDict['effline'] = line.split('=')[0]
98
99 self.isMP += 1
100 elif 'MetaData:' in line:
101
102 field = line.split(
'MetaData:')[1].
split(
'=')[0].
strip()
103 if field in self.MetadataDict:
104 self.MetadataDict[field] += float( line.split('=')[1] )
105
106 if field == 'generatorName' and 'Sherpa' in line:
107 self.isSherpa = True
108
109
110 if field == 'cross-section (nb)':
111 self.MetadataDict['xsec_holder'] = float( line.split('=')[1] )
112
113
114 elif field == 'sumOfPosWeightsNoFilter':
115 self.MetadataDict['xsec_weight'] = float( line.split('=')[1] )
116
117 elif field == 'sumOfNegWeightsNoFilter':
118 my_negw = float( line.split('=')[1] )
119
120 if self.isSherpa:
121 if self.MetadataDict['xsec_holder'] != 0:
122
123 self.MetadataDict['xsec_sum'] += (self.MetadataDict['xsec_weight']-my_negw)/(self.MetadataDict['xsec_holder']*1000.)
124 else:
125 self.MetadataDict['xsec_sum'] += self.MetadataDict['xsec_holder']*(self.MetadataDict['xsec_weight']-my_negw)
126
127
128
std::vector< std::string > split(const std::string &s, const std::string &t=":")