ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/ReadConfig.py
Revision: 1.4
Committed: Wed Mar 7 11:44:00 2012 UTC (13 years, 1 month ago) by abrinke1
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-00-12, V00-00-11, V00-00-10, V00-00-09
Changes since 1.3: +42 -9 lines
Log Message:
Gets predictions from new DB fits or RefRun files

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