ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/ReadConfig.py
Revision: 1.15
Committed: Fri Jul 20 10:01:21 2012 UTC (12 years, 9 months ago) by awoodard
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-01-02, V00-01-01
Changes since 1.14: +8 -5 lines
Log Message:
Updating error calculation to use Chi2 error instead of percent difference for RateMonitor

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