ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/ReadConfig.py
Revision: 1.29
Committed: Tue Jan 22 10:20:16 2013 UTC (12 years, 3 months ago) by awoodard
Content type: text/x-python
Branch: MAIN
CVS Tags: HEAD
Changes since 1.28: +0 -7 lines
Log Message:
Taking out obsolete options

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.AllTriggers=0
23 self.MonTargetLumi=0
24 self.LSWindow=-1
25 self.CompareReference=0
26 self.ShifterMode=0
27 self.NoVersion=0
28 self.MaxExpressRate=999
29 self.ForbiddenCols=[]
30 self.CirculatingBeamsColumn=9
31 self.MaxLogMonRate=10
32 self.DefWarnOnSigmaDiff=1
33 self.DefShowSigmaAndPercDiff=0
34 self.DoL1=0
35 self.DefaultMaxBadRatesToShow=500
36 self.L1SeedChangeFit=0
37 self.ShowAllBadRates=0
38
39 def ReadList(self,filename):
40 filename=self.BasePath+'/'+filename
41 list = []
42 if not os.path.exists(filename):
43 return list
44 f = open(filename)
45 for line in f:
46 if line.startswith('#'):
47 continue
48 if len(line)<3 or line=='\n':
49 continue
50 line = ((line.rstrip('\n')).rstrip(' '))
51 if line.find(':')==-1: # exclude list, no rate estimates
52 list.append( line )
53 else:
54 split = line.split(':')
55 list.append(split[0])
56 ##list.append([split[0],split[1],split[2],split[3]])
57 f.close()
58 return list
59
60 def ReadCFG(self):
61 f=open(self.CFGfile)
62 for line in f:
63 if line.startswith('#'):
64 continue
65 if len(line)<1:
66 continue
67
68 strippedLine = line.split('#')[0]
69 strippedLine = strippedLine.rstrip('\n').rstrip(' ')
70 if strippedLine=='':
71 continue
72 tok = strippedLine.split('=')
73 par = tok[0].rstrip(' ').lstrip(' ')
74 if len(tok)>=2:
75 arg=tok[1].rstrip('\n').rstrip(' ').lstrip(' ')
76 else:
77 arg=''
78
79 if par=="ReferenceRun":
80 self.ReferenceRun=arg
81 elif par=="ShowSigmaAndPercDiff":
82 self.DefShowSigmaAndPercDiff=float(arg)
83 elif par=="DefaultAllowedRatePercDiff":
84 self.DefAllowRatePercDiff=float(arg)
85 elif par=="DefaultAllowedRateSigmaDiff":
86 self.DefAllowRateSigmaDiff=float(arg)
87 elif par=="DefaultIgnoreThreshold":
88 self.DefAllowIgnoreThresh=float(arg)
89 elif par=="ExcludeTriggerList":
90 self.ExcludeList=self.ReadList(arg)
91 elif par=="TriggerToMonitorList":
92 tmp=self.ReadList(arg)
93 for line in tmp:
94 self.MonitorList.append(line)
95 #self.MonitorIntercept.append(float(line[1]))
96 #self.MonitorSlope.append(float(line[2]))
97 #self.MonitorQuad.append(float(line[3]))
98 elif par=="ForbiddenColumns":
99 tmp=arg.split(',')
100 for line in tmp:
101 try:
102 self.ForbiddenCols.append(int(line))
103 except:
104 print "Cannot parse Forbidden Cols parameter"
105 elif par =="AllTriggers":
106 self.AllTriggers=int(arg)
107 elif par=="LSSlidingWindow":
108 self.LSWindow=int(arg)
109 elif par=="CompareReference":
110 self.CompareReference=int(arg)
111 elif par=="ShifterMode":
112 self.ShifterMode=arg
113 elif par=="MaxExpressRate":
114 self.MaxExpressRate=float(arg)
115 elif par=="MaxStreamARate":
116 self.MaxStreamARate=float(arg)
117 elif par=="FitFileName":
118 self.FitFileName=arg
119 elif par=="NoVersion":
120 self.NoVersion=int(arg)
121 elif par=="CirculatingBeamsColumn":
122 self.CircBeamCol=int(arg)
123 elif par=="MaxLogMonRate":
124 self.MaxLogMonRate=float(arg)
125 elif par=="WarnOnSigmaDiff":
126 self.DefWarnOnSigmaDiff=float(arg)
127 elif par=="DoL1":
128 self.DoL1=int(arg)
129 elif par=="DefaultMaxBadRatesToShow":
130 self.DefaultMaxBadRatesToShow=int(arg)
131 elif par=="L1SeedChangeFit":
132 self.L1SeedChangeFit=int(arg)
133 elif par=="ShowAllBadRates":
134 self.ShowAllBadRates=int(arg)
135 else:
136 print "Invalid Option : "+strippedLine
137
138 f.close()
139
140 def AnalyzeTrigger(self,TrigName): ## Have to pass this a version number stripped Trigger
141 if TrigName in self.ExcludeList:
142 return False
143 if self.MonitorOnly and not TrigName in self.MonitorList:
144 return False
145 return True
146
147 def GetExpectedRate(self,TrigName,Input,InputPS,live,delivered,deadtime,L1SeedChangeFit,HeadLumiRange,PSColumnByLS):
148 #replaced live/delivered with deadtimebeamactive
149 if self.NoVersion:
150 TrigName=StripVersion(TrigName)
151 if TrigName not in Input.keys():
152 return [0.0,0.0,"No prediction (fit missing)"]
153
154 if not L1SeedChangeFit:
155 try:
156 sigma = Input[TrigName][5]
157 except:
158 if Input[TrigName][0] == "fit failed":
159 return [0.0,0.0,"No prediction (fit missing)"]
160 else:
161 return [0.0,0.0,"Exception error"]
162
163 try:
164 if Input[TrigName][0] == "line" or Input[TrigName][0] == "quad" or Input[TrigName][0] == "cube":
165 return [(1-deadtime)*(Input[TrigName][1]+Input[TrigName][2]*delivered+Input[TrigName][3]*delivered*delivered+Input[TrigName][4]*delivered*delivered*delivered), sigma,""]
166 elif Input[TrigName][0] == "expo":
167 return [(1-deadtime)*(Input[TrigName][1]+Input[TrigName][2]*math.exp(Input[TrigName][3]+Input[TrigName][4]*delivered)), sigma,""]
168 except:
169 return [0.0,0.0,"Exception error"]
170
171 ###L1SeedChangeFit
172 else:
173 firstLS=min(HeadLumiRange)
174 psi=PSColumnByLS[firstLS]
175
176 try:
177 sigma = InputPS[psi][TrigName][5]
178 except:
179 #print psi, TrigName
180
181 #if InputPS[psi][TrigName][0] == "fit failed":
182 # return [0.0,0.0,"No prediction (fit missing)"]
183 #else:
184 return [0.0,0.0,"Exception error"]
185
186 try:
187 if InputPS[psi][TrigName][0] == "line" or InputPS[psi][TrigName][0] == "quad" or InputPS[psi][TrigName][0] == "cube":
188 return [(1-deadtime)*(InputPS[psi][TrigName][1]+InputPS[psi][TrigName][2]*delivered+InputPS[psi][TrigName][3]*delivered*delivered+InputPS[psi][TrigName][4]*delivered*delivered*delivered), sigma,""]
189 elif InputPS[psi][TrigName][0] == "expo":
190 return [(1-deadtime)*(InputPS[psi][TrigName][1]+InputPS[psi][TrigName][2]*math.exp(InputPS[psi][TrigName][3]+InputPS[psi][TrigName][4]*delivered)), sigma,""]
191 except:
192 return [0.0,0.0,"Exception error"]
193
194 return -1
195
196
197 ## def GetExpectedL1Rates(self,lumi):
198 ## if not lumi:
199 ## return {}
200 ## expectedRates = {}
201 ## for col,inter,slope,quad in self.L1Predictions:
202 ## try:
203 ## expectedRates[int(col)] = lumi*(float(inter)+float(slope)*lumi+float(quad)*lumi*lumi)
204 ## except:
205 ## return {}
206 ## return expectedRates
207
208