ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/ReadConfig.py
Revision: 1.7
Committed: Mon Mar 26 15:50:19 2012 UTC (13 years, 1 month ago) by grchrist
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-00-23, V00-00-22, V00-00-21
Changes since 1.6: +3 -0 lines
Log Message:
changed the fit ref file, and now RMonitoring is with deadtimebeamactive from db

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