ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/ReadConfig.py
Revision: 1.17
Committed: Fri Jul 20 13:05:14 2012 UTC (12 years, 9 months ago) by awoodard
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-01-08, V00-01-07, V00-01-06, V00-01-05, V00-01-04
Changes since 1.16: +3 -0 lines
Log Message:
Adding option to show sigma and percent error in rate monitor table

File Contents

# Content
1 #!/usr/bin/env python
2 import os
3 import cPickle as pickle
4 import math
5 from DatabaseParser import *
6
7 class RateMonConfig:
8
9 def __init__(self,path='./'):
10 self.CFGfile=path+"/defaults.cfg"
11 self.BasePath=path
12 self.ReferenceRun=""
13 self.DefAllowRatePercDiff=0.0
14 self.DefAllowRateSigmaDiff=0.0
15 self.DefAllowIgnoreThresh=0.0
16 self.ExcludeList=[]
17 self.MonitorList=[]
18 self.MonitorIntercept=[]
19 self.MonitorSlope=[]
20 self.MonitorQuad=[]
21 self.L1Predictions=[]
22 self.MonitorOnly=0
23 self.MonTargetLumi=0
24 self.FindL1Zeros=0
25 self.LSWindow=-1
26 self.CompareReference=0
27 self.ShifterMode=0
28 self.NoVersion=0
29 self.MaxExpressRate=999
30 self.ForbiddenCols=[]
31 self.CirculatingBeamsColumn=9
32 self.MaxLogMonRate=10
33 self.DefWarnOnSigmaDiff=1
34 self.DefShowSigmaAndPercDiff=0
35
36 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 list.append(split[0])
53 ##list.append([split[0],split[1],split[2],split[3]])
54 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 elif par=="ShowSigmaAndPercDiff":
79 self.DefShowSigmaAndPercDiff=float(arg)
80 elif par=="DefaultAllowedRatePercDiff":
81 self.DefAllowRatePercDiff=float(arg)
82 elif par=="DefaultAllowedRateSigmaDiff":
83 self.DefAllowRateSigmaDiff=float(arg)
84 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 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 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 elif par=="L1CrossSection":
103 self.L1Predictions = self.ReadList(arg)
104 elif par =="MonitorOnlyListed":
105 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 elif par=="ShifterMode":
115 self.ShifterMode=arg
116 elif par=="MaxExpressRate":
117 self.MaxExpressRate=float(arg)
118 elif par=="MaxStreamARate":
119 self.MaxStreamARate=float(arg)
120 elif par=="FitFileName":
121 self.FitFileName=arg
122 elif par=="NoVersion":
123 self.NoVersion=int(arg)
124 elif par=="CirculatingBeamsColumn":
125 self.CircBeamCol=int(arg)
126 elif par=="MaxLogMonRate":
127 self.MaxLogMonRate=float(arg)
128 elif par=="WarnOnSigmaDiff":
129 self.DefWarnOnSigmaDiff=float(arg)
130 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 ## 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 def GetExpectedRate(self,TrigName,Input,Rates,live,delivered,deadtime):
152 RefRun = False
153 #replaced live/delivered with deadtimebeamactive
154 if self.NoVersion:
155 TrigName=StripVersion(TrigName)
156 if TrigName not in Input.keys():
157 return 0
158
159 try:
160 Chi2 = Input[TrigName][5]
161 if Input[TrigName][0] == "poly":
162 return [(1-deadtime)*(Input[TrigName][1]+Input[TrigName][2]*delivered+Input[TrigName][3]*delivered*delivered+Input[TrigName][4]*delivered*delivered*delivered), Chi2]
163 else:
164 return [(1-deadtime)*(Input[TrigName][1]+Input[TrigName][2]*math.exp(Input[TrigName][3]+Input[TrigName][4]*delivered)), Chi2]
165 except:
166 RefRun = True
167 #print "EXCEPT ERR"
168
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 return -1
186
187
188 ## 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
199