ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/ReadConfig.py
Revision: 1.14
Committed: Tue Jul 17 15:12:28 2012 UTC (12 years, 9 months ago) by grchrist
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-00-34, V00-00-33
Changes since 1.13: +6 -1 lines
Log Message:
log monitoring, tier0 warnings, correct prompt stream A rate

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