ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/ReadConfig.py
Revision: 1.20
Committed: Wed Sep 26 22:12:49 2012 UTC (12 years, 7 months ago) by grchrist
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-02-04, V00-02-03
Changes since 1.19: +3 -0 lines
Log Message:
added L1 monitoring to rate monitoring

File Contents

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