ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/ReadConfig.py
Revision: 1.16
Committed: Fri Jul 20 12:11:15 2012 UTC (12 years, 9 months ago) by awoodard
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-01-03
Changes since 1.15: +3 -0 lines
Log Message:
Adding configuration option to choose whether to warn on percent difference or sigma difference

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