1 |
grchrist |
1.1 |
#!/usr/bin/env python
|
2 |
|
|
import os
|
3 |
abrinke1 |
1.4 |
import cPickle as pickle
|
4 |
|
|
import math
|
5 |
grchrist |
1.8 |
from DatabaseParser import *
|
6 |
grchrist |
1.1 |
|
7 |
|
|
class RateMonConfig:
|
8 |
|
|
|
9 |
|
|
def __init__(self,path='./'):
|
10 |
|
|
self.CFGfile=path+"/defaults.cfg"
|
11 |
|
|
self.BasePath=path
|
12 |
|
|
self.ReferenceRun=""
|
13 |
awoodard |
1.15 |
self.DefAllowRatePercDiff=0.0
|
14 |
|
|
self.DefAllowRateSigmaDiff=0.0
|
15 |
grchrist |
1.1 |
self.DefAllowIgnoreThresh=0.0
|
16 |
|
|
self.ExcludeList=[]
|
17 |
|
|
self.MonitorList=[]
|
18 |
|
|
self.MonitorIntercept=[]
|
19 |
|
|
self.MonitorSlope=[]
|
20 |
|
|
self.MonitorQuad=[]
|
21 |
amott |
1.3 |
self.L1Predictions=[]
|
22 |
grchrist |
1.1 |
self.MonitorOnly=0
|
23 |
|
|
self.MonTargetLumi=0
|
24 |
|
|
self.FindL1Zeros=0
|
25 |
|
|
self.LSWindow=-1
|
26 |
|
|
self.CompareReference=0
|
27 |
grchrist |
1.2 |
self.ShifterMode=0
|
28 |
grchrist |
1.10 |
self.NoVersion=0
|
29 |
amott |
1.5 |
self.MaxExpressRate=999
|
30 |
amott |
1.12 |
self.ForbiddenCols=[]
|
31 |
grchrist |
1.14 |
self.CirculatingBeamsColumn=9
|
32 |
|
|
self.MaxLogMonRate=10
|
33 |
awoodard |
1.16 |
self.DefWarnOnSigmaDiff=1
|
34 |
awoodard |
1.17 |
self.DefShowSigmaAndPercDiff=0
|
35 |
awoodard |
1.15 |
|
36 |
grchrist |
1.1 |
def ReadList(self,filename):
|
37 |
|
|
filename=self.BasePath+'/'+filename
|
38 |
|
|
list = []
|
39 |
|
|
if not os.path.exists(filename):
|
40 |
|
|
return list
|
41 |
|
|
f = open(filename)
|
42 |
|
|
for line in f:
|
43 |
|
|
if line.startswith('#'):
|
44 |
|
|
continue
|
45 |
|
|
if len(line)<3 or line=='\n':
|
46 |
|
|
continue
|
47 |
|
|
line = ((line.rstrip('\n')).rstrip(' '))
|
48 |
|
|
if line.find(':')==-1: # exclude list, no rate estimates
|
49 |
|
|
list.append( line )
|
50 |
|
|
else:
|
51 |
|
|
split = line.split(':')
|
52 |
grchrist |
1.9 |
list.append(split[0])
|
53 |
|
|
##list.append([split[0],split[1],split[2],split[3]])
|
54 |
grchrist |
1.1 |
f.close()
|
55 |
|
|
return list
|
56 |
|
|
|
57 |
|
|
def ReadCFG(self):
|
58 |
|
|
f=open(self.CFGfile)
|
59 |
|
|
for line in f:
|
60 |
|
|
if line.startswith('#'):
|
61 |
|
|
continue
|
62 |
|
|
if len(line)<1:
|
63 |
|
|
continue
|
64 |
|
|
|
65 |
|
|
strippedLine = line.split('#')[0]
|
66 |
|
|
strippedLine = strippedLine.rstrip('\n').rstrip(' ')
|
67 |
|
|
if strippedLine=='':
|
68 |
|
|
continue
|
69 |
|
|
tok = strippedLine.split('=')
|
70 |
|
|
par = tok[0].rstrip(' ').lstrip(' ')
|
71 |
|
|
if len(tok)>=2:
|
72 |
|
|
arg=tok[1].rstrip('\n').rstrip(' ').lstrip(' ')
|
73 |
|
|
else:
|
74 |
|
|
arg=''
|
75 |
|
|
|
76 |
|
|
if par=="ReferenceRun":
|
77 |
|
|
self.ReferenceRun=arg
|
78 |
awoodard |
1.17 |
elif par=="ShowSigmaAndPercDiff":
|
79 |
|
|
self.DefShowSigmaAndPercDiff=float(arg)
|
80 |
awoodard |
1.15 |
elif par=="DefaultAllowedRatePercDiff":
|
81 |
|
|
self.DefAllowRatePercDiff=float(arg)
|
82 |
|
|
elif par=="DefaultAllowedRateSigmaDiff":
|
83 |
|
|
self.DefAllowRateSigmaDiff=float(arg)
|
84 |
grchrist |
1.1 |
elif par=="DefaultIgnoreThreshold":
|
85 |
|
|
self.DefAllowIgnoreThresh=float(arg)
|
86 |
|
|
elif par=="ExcludeTriggerList":
|
87 |
|
|
self.ExcludeList=self.ReadList(arg)
|
88 |
|
|
elif par=="TriggerToMonitorList":
|
89 |
|
|
tmp=self.ReadList(arg)
|
90 |
|
|
for line in tmp:
|
91 |
grchrist |
1.8 |
self.MonitorList.append(line)
|
92 |
|
|
#self.MonitorIntercept.append(float(line[1]))
|
93 |
|
|
#self.MonitorSlope.append(float(line[2]))
|
94 |
|
|
#self.MonitorQuad.append(float(line[3]))
|
95 |
amott |
1.12 |
elif par=="ForbiddenColumns":
|
96 |
|
|
tmp=arg.split(',')
|
97 |
|
|
for line in tmp:
|
98 |
|
|
try:
|
99 |
|
|
self.ForbiddenCols.append(int(line))
|
100 |
|
|
except:
|
101 |
|
|
print "Cannot parse Forbidden Cols parameter"
|
102 |
amott |
1.3 |
elif par=="L1CrossSection":
|
103 |
|
|
self.L1Predictions = self.ReadList(arg)
|
104 |
awoodard |
1.15 |
elif par =="MonitorOnlyListed":
|
105 |
grchrist |
1.1 |
self.MonitorOnly=int(arg)
|
106 |
|
|
elif par=="MonitorTargetLumi":
|
107 |
|
|
self.MonTargetLumi=float(arg)
|
108 |
|
|
elif par=="FindL1Zeros":
|
109 |
|
|
self.FindL1Zeros=int(arg)
|
110 |
|
|
elif par=="LSSlidingWindow":
|
111 |
|
|
self.LSWindow=int(arg)
|
112 |
|
|
elif par=="CompareReference":
|
113 |
|
|
self.CompareReference=int(arg)
|
114 |
grchrist |
1.2 |
elif par=="ShifterMode":
|
115 |
|
|
self.ShifterMode=arg
|
116 |
amott |
1.5 |
elif par=="MaxExpressRate":
|
117 |
|
|
self.MaxExpressRate=float(arg)
|
118 |
grchrist |
1.6 |
elif par=="MaxStreamARate":
|
119 |
|
|
self.MaxStreamARate=float(arg)
|
120 |
grchrist |
1.7 |
elif par=="FitFileName":
|
121 |
|
|
self.FitFileName=arg
|
122 |
grchrist |
1.10 |
elif par=="NoVersion":
|
123 |
|
|
self.NoVersion=int(arg)
|
124 |
grchrist |
1.14 |
elif par=="CirculatingBeamsColumn":
|
125 |
|
|
self.CircBeamCol=int(arg)
|
126 |
|
|
elif par=="MaxLogMonRate":
|
127 |
|
|
self.MaxLogMonRate=float(arg)
|
128 |
awoodard |
1.16 |
elif par=="WarnOnSigmaDiff":
|
129 |
|
|
self.DefWarnOnSigmaDiff=float(arg)
|
130 |
grchrist |
1.1 |
else:
|
131 |
|
|
print "Invalid Option : "+strippedLine
|
132 |
|
|
f.close()
|
133 |
|
|
|
134 |
|
|
def AnalyzeTrigger(self,TrigName): ## Have to pass this a version number stripped Trigger
|
135 |
|
|
if TrigName in self.ExcludeList:
|
136 |
|
|
return False
|
137 |
|
|
if self.MonitorOnly and not TrigName in self.MonitorList:
|
138 |
|
|
return False
|
139 |
|
|
return True
|
140 |
|
|
|
141 |
abrinke1 |
1.4 |
## def GetExpectedRate(self,TrigName,lumi):
|
142 |
|
|
## for trig,intercept,slope,quad in zip(self.MonitorList,self.MonitorIntercept,self.MonitorSlope,self.MonitorQuad):
|
143 |
|
|
## if trig==TrigName:
|
144 |
|
|
## #print "mon list",self.MonitorList
|
145 |
|
|
## if lumi:
|
146 |
|
|
## return intercept + lumi*slope/1000 + lumi*lumi*quad/1000000
|
147 |
|
|
## else:
|
148 |
|
|
## return intercept + 3000*slope/1000 + 3000*3000*quad/1000000
|
149 |
|
|
## return -1
|
150 |
|
|
|
151 |
grchrist |
1.10 |
def GetExpectedRate(self,TrigName,Input,Rates,live,delivered,deadtime):
|
152 |
abrinke1 |
1.4 |
RefRun = False
|
153 |
grchrist |
1.10 |
#replaced live/delivered with deadtimebeamactive
|
154 |
|
|
if self.NoVersion:
|
155 |
|
|
TrigName=StripVersion(TrigName)
|
156 |
|
|
if TrigName not in Input.keys():
|
157 |
amott |
1.11 |
return 0
|
158 |
|
|
|
159 |
abrinke1 |
1.4 |
try:
|
160 |
|
|
Chi2 = Input[TrigName][5]
|
161 |
|
|
if Input[TrigName][0] == "poly":
|
162 |
grchrist |
1.10 |
return [(1-deadtime)*(Input[TrigName][1]+Input[TrigName][2]*delivered+Input[TrigName][3]*delivered*delivered+Input[TrigName][4]*delivered*delivered*delivered), Chi2]
|
163 |
abrinke1 |
1.4 |
else:
|
164 |
grchrist |
1.13 |
return [(1-deadtime)*(Input[TrigName][1]+Input[TrigName][2]*math.exp(Input[TrigName][3]+Input[TrigName][4]*delivered)), Chi2]
|
165 |
abrinke1 |
1.4 |
except:
|
166 |
|
|
RefRun = True
|
167 |
grchrist |
1.10 |
#print "EXCEPT ERR"
|
168 |
abrinke1 |
1.4 |
|
169 |
|
|
if RefRun:
|
170 |
|
|
|
171 |
|
|
num_compare = 0
|
172 |
|
|
pred_rate = 0
|
173 |
|
|
for iterator in range(len(Rates[TrigName]["rate"])):
|
174 |
|
|
delivered_lumi = Rates[TrigName]["delivered_lumi"][iterator]
|
175 |
|
|
if delivered_lumi > delivered - 100 and delivered_lumi < delivered + 100:
|
176 |
|
|
live_lumi = Rates[TrigName]["live_lumi"][iterator]
|
177 |
|
|
rate = Rates[TrigName]["rate"][iterator]
|
178 |
|
|
pred_rate += (live/delivered)*rate*(delivered_lumi/live_lumi)
|
179 |
|
|
num_compare += 1
|
180 |
|
|
|
181 |
|
|
pred_rate = pred_rate/num_compare
|
182 |
|
|
Chi2 = pred_rate/math.sqrt(num_compare)
|
183 |
|
|
return [pred_rate, Chi2]
|
184 |
|
|
|
185 |
grchrist |
1.1 |
return -1
|
186 |
abrinke1 |
1.4 |
|
187 |
|
|
|
188 |
grchrist |
1.9 |
## def GetExpectedL1Rates(self,lumi):
|
189 |
|
|
## if not lumi:
|
190 |
|
|
## return {}
|
191 |
|
|
## expectedRates = {}
|
192 |
|
|
## for col,inter,slope,quad in self.L1Predictions:
|
193 |
|
|
## try:
|
194 |
|
|
## expectedRates[int(col)] = lumi*(float(inter)+float(slope)*lumi+float(quad)*lumi*lumi)
|
195 |
|
|
## except:
|
196 |
|
|
## return {}
|
197 |
|
|
## return expectedRates
|
198 |
grchrist |
1.2 |
|
199 |
|
|
|