ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/DatabaseRatePredictor.py
Revision: 1.10
Committed: Sat Mar 10 16:25:20 2012 UTC (13 years, 1 month ago) by grchrist
Content type: text/x-python
Branch: MAIN
Changes since 1.9: +153 -44 lines
Log Message:
masking by subsystem

File Contents

# User Rev Content
1 grchrist 1.3 #!/usr/bin/env python
2    
3 abrinke1 1.1 from DatabaseParser import *
4 abrinke1 1.5 from GetListOfRuns import *
5 abrinke1 1.1 import sys
6     import os
7     from numpy import *
8     import pickle
9    
10     from ROOT import gROOT, TCanvas, TF1, TGraph, TGraphErrors, TPaveStats, gPad, gStyle
11     from ROOT import TFile, TPaveText
12     from ROOT import gBenchmark
13     import array
14     import math
15 grchrist 1.8 from ReadConfig import RateMonConfig
16 abrinke1 1.1
17 abrinke1 1.5 from selectionParser import selectionParser
18    
19 abrinke1 1.1 def main():
20    
21 abrinke1 1.5 ## Can use any combination of LowestRunNumber, HighestRunNumber, and NumberOfRuns -
22     ## just modify "ExistingRuns.sort" and for "run in ExistingRuns" accordingly
23    
24     LowestRunNumber = 176000
25     HighestRunNumber = 180252
26     NumberOfRuns = 1
27    
28     run_list = []
29     ExistingRuns = GetLatestRunNumber(LowestRunNumber)
30     #ExistingRuns.sort(reverse = True) ##Allows you to count down from last run
31    
32     for run in ExistingRuns:
33     #if NumberOfRuns > 0:
34     if run <= HighestRunNumber:
35     run_list.append(run)
36     NumberOfRuns-=1
37    
38 grchrist 1.8 ##
39     ## to get list of triggers
40     ##
41     Config = RateMonConfig(os.path.abspath(os.path.dirname(sys.argv[0])))
42     Config.CFGfile="defaults.cfg"
43     Config.ReadCFG()
44    
45 abrinke1 1.7 ## ###### TO CREATE FITS #########
46 abrinke1 1.5 ## #run_list = [179497,179547,179558,179563,179889,179959,179977,180072,180076,180093,180241,180250,180252]
47 abrinke1 1.7 ## #run_list = [180241]
48     ## trig_name = "IsoMu"
49 abrinke1 1.5 ## num_ls = 10
50     ## physics_active_psi = True ##Requires that physics and active be on, and that the prescale column is not 0
51     ## #JSON = [] ##To not use a JSON file, just leave the array empty
52     ## JSON = GetJSON("Cert_160404-180252_7TeV_PromptReco_Collisions11_JSON.txt") ##Returns array JSON[runs][ls_list]
53    
54 abrinke1 1.1 ## debug_print = False
55    
56 abrinke1 1.5 ## min_rate = 0.1
57 abrinke1 1.1 ## print_table = False
58 abrinke1 1.5 ## data_clean = True ##Gets rid of anomalous rate points, reqires physics_active_psi (PAP) and deadtime < 20%
59     ## ##plot_properties = [varX, varY, do_fit, save_root, save_png, fit_file]
60 abrinke1 1.7 ## plot_properties = [["delivered", "rate", True, False, False, ""]]
61 abrinke1 1.5
62 abrinke1 1.1 ## masked_triggers = ["AlCa_", "DST_", "HLT_L1", "HLT_L2", "HLT_Zero"]
63 abrinke1 1.7 ## save_fits = True
64 grchrist 1.8 ## max_dt=2.0 ## no deadtime cut
65 abrinke1 1.1
66 abrinke1 1.7 ###### TO SEE RATE VS PREDICTION ########
67 grchrist 1.8 run_list = [180250]
68 abrinke1 1.1
69 grchrist 1.8 trig_name = "HLT"
70     ##trig_list = ["HLT_IsoMu24_eta2p1","HLT_HT650"]
71     trig_list=Config.MonitorList
72 abrinke1 1.1 num_ls = 1
73 abrinke1 1.5 physics_active_psi = True
74     JSON = []
75 abrinke1 1.1 debug_print = False
76    
77 abrinke1 1.7 min_rate = 1.0
78 abrinke1 1.1 print_table = False
79 grchrist 1.8 data_clean = True
80 abrinke1 1.5 ##plot_properties = [varX, varY, do_fit, save_root, save_png, fit_file]
81 grchrist 1.10 plot_properties = [["ls", "rawrate", False, True, False, "Fits/2011/Fit_HLT_10LS_Run176023to180252.pkl"]]
82 abrinke1 1.1 masked_triggers = ["AlCa_", "DST_", "HLT_L1", "HLT_L2", "HLT_Zero"]
83     save_fits = False
84 grchrist 1.8 max_dt=2.0 ## no deadtime cut
85 grchrist 1.10 SubSystemOff={'Any':False,'Mu':False,'HCal':True,'ECal':False,'Tracker':False,'EndCap':False}
86     print SubSystemOff.keys()
87     print SubSystemOff.values()
88 abrinke1 1.1
89 abrinke1 1.2
90 abrinke1 1.5 ######## END PARAMETERS - CALL FUNCTIONS ##########
91 grchrist 1.10 [Rates,LumiPageInfo]= GetDBRates(run_list, trig_name, num_ls, max_dt, physics_active_psi, JSON, debug_print)
92     ##if not checkLS(Rates,LumiPageInfo,trig_list):
93     ## print "Missing LS!"
94    
95     MakePlots(Rates, LumiPageInfo, run_list, trig_name, trig_list, num_ls, min_rate, max_dt, print_table, data_clean, plot_properties, masked_triggers, save_fits, debug_print,SubSystemOff)
96 abrinke1 1.1
97    
98 grchrist 1.8 def GetDBRates(run_list,trig_name,num_ls, max_dt, physics_active_psi,JSON,debug_print):
99 abrinke1 1.1
100     Rates = {}
101 grchrist 1.10 LumiPageInfo={}
102 abrinke1 1.5 ## Save in RefRuns with name dependent on trig_name, num_ls, JSON, and physics_active_psi
103     if JSON:
104     if physics_active_psi:
105     RefRunNameTemplate = "RefRuns/2011/Rates_%s_%sLS_JPAP.pkl"
106     else:
107     RefRunNameTemplate = "RefRuns/2011/Rates_%s_%sLS_JSON.pkl"
108     else:
109     if physics_active_psi:
110     RefRunNameTemplate = "RefRuns/2011/Rates_%s_%sLS_PAP.pkl"
111     else:
112     RefRunNameTemplate = "RefRuns/2011/Rates_%s_%sLS.pkl"
113 grchrist 1.10
114    
115 abrinke1 1.1 RefRunFile = RefRunNameTemplate % (trig_name,num_ls)
116 abrinke1 1.5 RefRunFileHLT = RefRunNameTemplate % ("HLT",num_ls)
117 grchrist 1.10
118     print "RefRun=",RefRunFile
119     print "RefRunFileHLT",RefRunFileHLT
120 abrinke1 1.5 try: ##Open an existing RefRun file with the same parameters and trigger name
121 abrinke1 1.1 pkl_file = open(RefRunFile, 'rb')
122     Rates = pickle.load(pkl_file)
123     pkl_file.close()
124     os.remove(RefRunFile)
125 grchrist 1.10 print "using",RefRunFile
126    
127    
128 abrinke1 1.1 except:
129 abrinke1 1.5 try: ##Open an existing RefRun file with the same parameters and HLT for trigger name
130     pkl_file = open(RefRunFileHLT)
131     HLTRates = pickle.load(pkl_file)
132     for key in HLTRates:
133     if trig_name in str(key):
134     Rates[key] = HLTRates[key]
135 grchrist 1.10 #print str(RefRunFile)+" does not exist. Creating ..."
136 abrinke1 1.5 except:
137     print str(RefRunFile)+" does not exist. Creating ..."
138 grchrist 1.10
139     ## try the lumis file
140     RefLumiNameTemplate = "RefRuns/2011/Lumis_%s_%sLS.pkl"
141     RefLumiFile= RefLumiNameTemplate % ("HLT",num_ls)
142     try:
143     pkl_lumi_file = open(RefLumiFile, 'rb')
144     LumiPageInfo = pickle.load(pkl_lumi_file)
145     pkl_lumi_file.close()
146     os.remove(RefLumiFile)
147     print "using",RefLumiFile
148     except:
149     print str(RefLumiFile)+" doesn't exist. Make it..."
150 abrinke1 1.5
151     for RefRunNum in run_list:
152 abrinke1 1.1
153 abrinke1 1.5 if JSON:
154     if not RefRunNum in JSON:
155     continue
156 abrinke1 1.1 try:
157 grchrist 1.10
158 abrinke1 1.1 ExistsAlready = False
159     for key in Rates:
160     if RefRunNum in Rates[key]["run"]:
161     ExistsAlready = True
162     break
163 grchrist 1.10
164    
165     LumiExistsLAready=False
166     for v in LumiPageInfo.itervalues():
167     #print RefRunNum, v["Run"]
168    
169     if RefRunNum == v["Run"]:
170     LumiExistsAlready=True
171     break
172     if ExistsAlready and LumiExistsAlready:
173 abrinke1 1.1 continue
174 grchrist 1.10
175    
176 abrinke1 1.1 except:
177     print "Getting info for run "+str(RefRunNum)
178    
179     if RefRunNum < 1:
180     continue
181 grchrist 1.10 print "calculating rates and green lumis"
182    
183 abrinke1 1.5 if True: ##Placeholder
184 abrinke1 1.1 if True: #May replace with "try" - for now it's good to know when problems happen
185     RefParser = DatabaseParser()
186     RefParser.RunNumber = RefRunNum
187     RefParser.ParseRunSetup()
188 abrinke1 1.5 RefLumiRangePhysicsActive = RefParser.GetLSRange(1,9999) ##Gets array of all LS with physics and active on
189     RefLumiArray = RefParser.GetLumiInfo() ##Gets array of all existing LS and their lumi info
190 abrinke1 1.2 RefLumiRange = []
191 grchrist 1.9 RefMoreLumiArray = RefParser.GetMoreLumiInfo()#dict with keys as bits from lumisections WBM page and values are dicts with key=LS:value=bit
192    
193 grchrist 1.10
194 abrinke1 1.5 for iterator in RefLumiArray[0]: ##Makes array of LS with proper PAP and JSON properties
195     if not physics_active_psi or (RefLumiArray[5][iterator] == 1 and RefLumiArray[6][iterator] == 1 and RefLumiArray[0][iterator] > 0):
196     if not JSON or RefRunNum in JSON:
197     if not JSON or iterator in JSON[RefRunNum]:
198     RefLumiRange.append(iterator)
199 grchrist 1.9 #print iterator, RefLumiArray[0][iterator], "active=",RefLumiArray[5][iterator],"physics=",RefLumiArray[6][iterator], "HBHEA=",RefLumiArray[7][iterator],
200     #print "hbhea=",RefMoreLumiArray['hbhea'][iterator]
201    
202 abrinke1 1.5 try:
203     nls = RefLumiRange[0]
204     LSRange = {}
205     except:
206     print "Run "+str(RefRunNum)+" has no good LS"
207     continue
208     if num_ls > len(RefLumiRange):
209 abrinke1 1.1 print "Run "+str(RefRunNum)+" is too short: from "+str(nls)+" to "+str(RefLumiRange[-1])+", while num_ls = "+str(num_ls)
210     continue
211     while nls < RefLumiRange[-1]-num_ls:
212 abrinke1 1.5 LSRange[nls] = []
213     counter = 0
214     for iterator in RefLumiRange:
215     if iterator >= nls and counter < num_ls:
216     LSRange[nls].append(iterator)
217     counter += 1
218 abrinke1 1.1 nls = LSRange[nls][-1]+1
219 abrinke1 1.5
220 abrinke1 1.1 print "Run "+str(RefRunNum)+" contains LS from "+str(min(LSRange))+" to "+str(max(LSRange))
221 grchrist 1.8 for nls in sorted(LSRange.iterkeys()):
222 grchrist 1.9
223 abrinke1 1.1 TriggerRates = RefParser.GetHLTRates(LSRange[nls])
224 abrinke1 1.5
225     [inst, live, delivered, dead, pscols] = RefParser.GetAvLumiInfo(LSRange[nls])
226    
227 abrinke1 1.2 physics = 1
228     active = 1
229 abrinke1 1.5 psi = 99
230     for iterator in LSRange[nls]: ##Gets lowest value of physics, active, and psi in the set of lumisections
231 abrinke1 1.2 if RefLumiArray[5][iterator] == 0:
232     physics = 0
233     if RefLumiArray[6][iterator] == 0:
234     active = 0
235 abrinke1 1.5 if RefLumiArray[0][iterator] < psi:
236     psi = RefLumiArray[0][iterator]
237 abrinke1 1.2
238 grchrist 1.10 MoreLumiMulti=LumiRangeGreens(RefMoreLumiArray,LSRange,nls,RefRunNum)
239    
240     #print MoreLumiMulti.keys()
241     # print "\n\n\n"
242    
243    
244 grchrist 1.9
245 abrinke1 1.5 if inst < 0 or live < 0 or delivered < 0:
246     print "Run "+str(RefRunNum)+" LS "+str(nls)+" inst lumi = "+str(inst)+" live lumi = "+str(live)+", delivered = "+str(delivered)+", physics = "+str(physics)+", active = "+str(active)
247 abrinke1 1.2
248 grchrist 1.10
249    
250     LumiPageInfo[nls]=MoreLumiMulti
251     ##print LumiPageInfo[nls]
252     ## try:
253     ## LumiPageInfo[keys].append(values)
254     ## except:
255     ## print "Failed",RefRunNum, nls, keys
256    
257 abrinke1 1.1 for key in TriggerRates:
258     if not trig_name in key:
259     continue
260     name = key
261 abrinke1 1.5 if re.match('.*_v[0-9]+',name): ##Removes _v#
262 abrinke1 1.1 name = name[:name.rfind('_')]
263    
264     if not Rates.has_key(name):
265     Rates[name] = {}
266     Rates[name]["run"] = []
267     Rates[name]["ls"] = []
268     Rates[name]["ps"] = []
269     Rates[name]["inst_lumi"] = []
270     Rates[name]["live_lumi"] = []
271     Rates[name]["delivered_lumi"] = []
272     Rates[name]["deadtime"] = []
273     Rates[name]["rawrate"] = []
274     Rates[name]["rate"] = []
275     Rates[name]["rawxsec"] = []
276     Rates[name]["xsec"] = []
277 abrinke1 1.2 Rates[name]["physics"] = []
278     Rates[name]["active"] = []
279 abrinke1 1.5 Rates[name]["psi"] = []
280 grchrist 1.9
281 grchrist 1.10 #for keys, values in MoreLumiMulti.iteritems():
282     # Rates[name][keys] = []
283    
284 grchrist 1.9
285 abrinke1 1.1 [avps, ps, rate, psrate] = TriggerRates[key]
286     Rates[name]["run"].append(RefRunNum)
287     Rates[name]["ls"].append(nls)
288     Rates[name]["ps"].append(ps)
289     Rates[name]["inst_lumi"].append(inst)
290     Rates[name]["live_lumi"].append(live)
291     Rates[name]["delivered_lumi"].append(delivered)
292     Rates[name]["deadtime"].append(dead)
293     Rates[name]["rawrate"].append(rate)
294 abrinke1 1.2 if live == 0:
295 abrinke1 1.5 Rates[name]["rate"].append(0)
296 abrinke1 1.2 Rates[name]["rawxsec"].append(0.0)
297     Rates[name]["xsec"].append(0.0)
298     else:
299 abrinke1 1.5 Rates[name]["rate"].append(psrate/(1.0-dead))
300 abrinke1 1.2 Rates[name]["rawxsec"].append(rate/live)
301     Rates[name]["xsec"].append(psrate/live)
302     Rates[name]["physics"].append(physics)
303     Rates[name]["active"].append(active)
304 abrinke1 1.5 Rates[name]["psi"].append(psi)
305 grchrist 1.9
306    
307 grchrist 1.10 #for keys, values in MoreLumiMulti.iteritems():
308     # Rates[name][keys].append(values)
309 grchrist 1.9 #print nls, name, keys, values
310     #print " "
311 abrinke1 1.5 #except: ##If we replace "if True:" with "try:"
312 abrinke1 1.1 #print "Failed to parse run "+str(RefRunNum)
313    
314 grchrist 1.10 RateOutput = open(RefRunFile, 'wb') ##Save new Rates[] to RefRuns
315     pickle.dump(Rates, RateOutput, 2)
316     RateOutput.close()
317     LumiOutput = open(RefLumiFile,'wb')
318     pickle.dump(LumiPageInfo,LumiOutput, 2)
319     LumiOutput.close()
320    
321    
322     return [Rates,LumiPageInfo]
323 abrinke1 1.1
324 grchrist 1.10 def MakePlots(Rates, LumiPageInfo, run_list, trig_name, trig_list, num_ls, max_dt, min_rate, print_table, data_clean, plot_properties, masked_triggers, save_fits, debug_print, SubSystemOff):
325 abrinke1 1.1 min_run = min(run_list)
326     max_run = max(run_list)
327    
328 abrinke1 1.5 InputFit = {}
329     OutputFit = {}
330 abrinke1 1.1
331     RootNameTemplate = "%s_%sLS_Run%sto%s.root"
332     RootFile = RootNameTemplate % (trig_name, num_ls, min_run, max_run)
333    
334 abrinke1 1.5 for varX, varY, do_fit, save_root, save_png, fit_file in plot_properties:
335     if fit_file:
336 abrinke1 1.1 pkl_file = open(fit_file, 'rb')
337 abrinke1 1.5 InputFit = pickle.load(pkl_file)
338 abrinke1 1.1 pkl_file.close()
339     if save_root:
340     try:
341     os.remove(RootFile)
342     except:
343     break
344    
345     for print_trigger in Rates:
346 abrinke1 1.7 ##Limits Rates[] to runs in run_list
347     NewTrigger = {}
348 grchrist 1.8 if not print_trigger in trig_list:
349     continue
350 abrinke1 1.7 for key in Rates[print_trigger]:
351     NewTrigger[key] = []
352     for iterator in range (len(Rates[print_trigger]["run"])):
353     if Rates[print_trigger]["run"][iterator] in run_list:
354     for key in Rates[print_trigger]:
355     NewTrigger[key].append(Rates[print_trigger][key][iterator])
356     Rates[print_trigger] = NewTrigger
357    
358 abrinke1 1.1 meanrawrate = sum(Rates[print_trigger]["rawrate"])/len(Rates[print_trigger]["rawrate"])
359     if not trig_name in print_trigger:
360     continue
361     if meanrawrate < min_rate:
362     continue
363     masked_trig = False
364     for mask in masked_triggers:
365     if str(mask) in print_trigger:
366     masked_trig = True
367     if masked_trig:
368     continue
369    
370 abrinke1 1.5 OutputFit[print_trigger] = {}
371 abrinke1 1.1
372     lowlumi = 0
373 abrinke1 1.7 meanlumi_init = median(Rates[print_trigger]["live_lumi"])
374 abrinke1 1.1 meanlumi = 0
375     highlumi = 0
376     lowxsec = 0
377     meanxsec = 0
378     highxsec = 0
379     nlow = 0
380     nhigh = 0
381     for iterator in range(len(Rates[print_trigger]["rate"])):
382     if Rates[print_trigger]["live_lumi"][iterator] <= meanlumi_init:
383 abrinke1 1.7 if ( Rates[print_trigger]["rawrate"][iterator] > 0.04 and Rates[print_trigger]["physics"][iterator] == 1 and Rates[print_trigger]["active"][iterator] == 1 and Rates[print_trigger]["deadtime"][iterator] < 0.20 and Rates[print_trigger]["psi"][iterator] > 0 and Rates[print_trigger]["live_lumi"] > 500):
384 abrinke1 1.1 meanxsec+=Rates[print_trigger]["xsec"][iterator]
385     lowxsec+=Rates[print_trigger]["xsec"][iterator]
386     meanlumi+=Rates[print_trigger]["live_lumi"][iterator]
387     lowlumi+=Rates[print_trigger]["live_lumi"][iterator]
388     nlow+=1
389     if Rates[print_trigger]["live_lumi"][iterator] > meanlumi_init:
390 abrinke1 1.7 if ( Rates[print_trigger]["rawrate"][iterator] > 0.04 and Rates[print_trigger]["physics"][iterator] == 1 and Rates[print_trigger]["active"][iterator] == 1 and Rates[print_trigger]["deadtime"][iterator] < 0.20 and Rates[print_trigger]["psi"][iterator] > 0 and Rates[print_trigger]["live_lumi"] > 500):
391 abrinke1 1.1 meanxsec+=Rates[print_trigger]["xsec"][iterator]
392     highxsec+=Rates[print_trigger]["xsec"][iterator]
393     meanlumi+=Rates[print_trigger]["live_lumi"][iterator]
394     highlumi+=Rates[print_trigger]["live_lumi"][iterator]
395     nhigh+=1
396 abrinke1 1.7 try:
397     meanxsec = meanxsec/(nlow+nhigh)
398     meanlumi = meanlumi/(nlow+nhigh)
399     slopexsec = ( (highxsec/nhigh) - (lowxsec/nlow) ) / ( (highlumi/nhigh) - (lowlumi/nlow) )
400     except:
401     print str(print_trigger)+" has no good datapoints - setting initial xsec slope estimate to 0"
402     meanxsec = median(Rates[print_trigger]["xsec"])
403     meanlumi = median(Rates[print_trigger]["live_lumi"])
404     slopexsec = 0
405 abrinke1 1.1
406 abrinke1 1.5 [run_t,ls_t,ps_t,inst_t,live_t,delivered_t,deadtime_t,rawrate_t,rate_t,rawxsec_t,xsec_t,psi_t,e_run_t,e_ls_t,e_ps_t,e_inst_t,e_live_t,e_delivered_t,e_deadtime_t,e_rawrate_t,e_rate_t,e_rawxsec_t,e_xsec_t,e_psi_t,rawrate_fit_t,rate_fit_t,rawxsec_fit_t,xsec_fit_t,e_rawrate_fit_t,e_rate_fit_t,e_rawxsec_fit_t,e_xsec_fit_t] = MakePlotArrays()
407    
408     if fit_file:
409     FitType = InputFit[print_trigger][0]
410     X0 = InputFit[print_trigger][1]
411     X1 = InputFit[print_trigger][2]
412     X2 = InputFit[print_trigger][3]
413     X3 = InputFit[print_trigger][4]
414     Chi2 = InputFit[print_trigger][5]
415 abrinke1 1.7 ##print str(print_trigger)+" "+str(FitType)+" "+str(X0)+" "+str(X1)+" "+str(X2)+" "+str(X3)
416 grchrist 1.8 ## we are 2 lumis off when we start! -gets worse when we skip lumis
417     it_offset=2
418 abrinke1 1.1 for iterator in range(len(Rates[print_trigger]["rate"])):
419     if not Rates[print_trigger]["run"][iterator] in run_list:
420     continue
421     prediction = meanxsec + slopexsec * (Rates[print_trigger]["live_lumi"][iterator] - meanlumi)
422     realvalue = Rates[print_trigger]["xsec"][iterator]
423 grchrist 1.8
424     #if not data_clean or ( ((realvalue > 0.4*prediction and realvalue < 2.5*prediction) or (realvalue > 0.4*meanxsec and realvalue < 2.5*meanxsec) or prediction < 0 ) and Rates[print_trigger]["physics"][iterator] == 1 and Rates[print_trigger]["active"][iterator] == 1 and Rates[print_trigger]["deadtime"][iterator] < 0.20 and Rates[print_trigger]["psi"][iterator] > 0):
425 grchrist 1.10 if pass_cuts(data_clean, realvalue, prediction, meanxsec, Rates, print_trigger, iterator, num_ls,LumiPageInfo,SubSystemOff):
426 grchrist 1.8
427     if num_ls==1:
428     ##fit is 2 ls ahead of real rate
429     fit_iterator=iterator+it_offset
430     if fit_iterator>(len(Rates[print_trigger]["rate"])-1):
431     ##don't let fit_iterator go above the length of the array
432     fit_iterator=iterator
433 grchrist 1.10
434 abrinke1 1.1 run_t.append(Rates[print_trigger]["run"][iterator])
435     ls_t.append(Rates[print_trigger]["ls"][iterator])
436     ps_t.append(Rates[print_trigger]["ps"][iterator])
437     inst_t.append(Rates[print_trigger]["inst_lumi"][iterator])
438 grchrist 1.8 live_t.append(Rates[print_trigger]["live_lumi"][fit_iterator])
439     delivered_t.append(Rates[print_trigger]["delivered_lumi"][fit_iterator])
440     deadtime_t.append(Rates[print_trigger]["deadtime"][fit_iterator])
441 abrinke1 1.1 rawrate_t.append(Rates[print_trigger]["rawrate"][iterator])
442     rate_t.append(Rates[print_trigger]["rate"][iterator])
443     rawxsec_t.append(Rates[print_trigger]["rawxsec"][iterator])
444     xsec_t.append(Rates[print_trigger]["xsec"][iterator])
445 abrinke1 1.5 psi_t.append(Rates[print_trigger]["psi"][iterator])
446 abrinke1 1.1
447     e_run_t.append(0.0)
448     e_ls_t.append(0.0)
449     e_ps_t.append(0.0)
450     e_inst_t.append(14.14)
451     e_live_t.append(14.14)
452     e_delivered_t.append(14.14)
453 abrinke1 1.2 e_deadtime_t.append(0.01)
454 abrinke1 1.1 e_rawrate_t.append(math.sqrt(Rates[print_trigger]["rawrate"][iterator]/(num_ls*23.3)))
455     e_rate_t.append(Rates[print_trigger]["ps"][iterator]*math.sqrt(Rates[print_trigger]["rawrate"][iterator]/(num_ls*23.3)))
456 abrinke1 1.5 e_psi_t.append(0.0)
457 abrinke1 1.2 if live_t[-1] == 0:
458     e_rawxsec_t.append(0)
459     e_xsec_t.append(0)
460     else:
461     e_rawxsec_t.append(math.sqrt(Rates[print_trigger]["rawrate"][iterator]/(num_ls*23.3))/Rates[print_trigger]["live_lumi"][iterator])
462     e_xsec_t.append(Rates[print_trigger]["ps"][iterator]*math.sqrt(Rates[print_trigger]["rawrate"][iterator]/(num_ls*23.3))/Rates[print_trigger]["live_lumi"][iterator])
463 abrinke1 1.5
464     if fit_file:
465     if FitType == "expo":
466     rate_prediction = X0 + X1*math.exp(X2*delivered_t[-1])
467     else:
468     rate_prediction = X0 + X1*delivered_t[-1] + X2*delivered_t[-1]*delivered_t[-1] + X3*delivered_t[-1]*delivered_t[-1]*delivered_t[-1]
469     ## if rate_t[-1] < 0.7 * rate_prediction or rate_t[-1] > 1.4 * rate_prediction:
470     ## print str(run_t[-1])+" "+str(ls_t[-1])+" "+str(print_trigger)+" "+str(ps_t[-1])+" "+str(deadtime_t[-1])+" "+str(rate_prediction)+" "+str(rate_t[-1])+" "+str(rawrate_t[-1])
471    
472 abrinke1 1.2 if live_t[-1] == 0:
473 abrinke1 1.5 rawrate_fit_t.append(0)
474     rate_fit_t.append(0)
475 abrinke1 1.2 rawxsec_fit_t.append(0)
476     xsec_fit_t.append(0)
477 abrinke1 1.7 e_rawrate_fit_t.append(0)
478     e_rate_fit_t.append(math.sqrt(Chi2))
479     e_rawxsec_fit_t.append(0)
480     e_xsec_fit_t.append(0)
481 abrinke1 1.2 else:
482 abrinke1 1.5 rawrate_fit_t.append(rate_prediction*(1.0-deadtime_t[-1])/(ps_t[-1]))
483     rate_fit_t.append(rate_prediction)
484     rawxsec_fit_t.append(rawrate_fit_t[-1]/live_t[-1])
485     xsec_fit_t.append(rate_prediction*(1.0-deadtime_t[-1])/live_t[-1])
486 abrinke1 1.7 e_rawrate_fit_t.append(math.sqrt(Chi2)*rawrate_fit_t[-1]/rate_fit_t[-1])
487     e_rate_fit_t.append(math.sqrt(Chi2))
488     e_rawxsec_fit_t.append(math.sqrt(Chi2)*rawxsec_fit_t[-1]/rate_fit_t[-1])
489     e_xsec_fit_t.append(math.sqrt(Chi2)*xsec_fit_t[-1]/rate_fit_t[-1])
490 abrinke1 1.5
491 grchrist 1.8 #print iterator, fit_iterator, "ls=",ls_t[-1], "rate=",round(rawrate_t[-1],2), "deadtime=",round(deadtime_t[-1],2), "rawrate_fit=",round(rawrate_fit_t[-1],2), "max it=",len(Rates[print_trigger]["rate"])
492    
493    
494    
495 abrinke1 1.5 else: ##If the data point does not pass the data_clean filter
496 abrinke1 1.1 if debug_print:
497     print str(print_trigger)+" has xsec "+str(round(Rates[print_trigger]["xsec"][iterator],6))+" at lumi "+str(round(Rates[print_trigger]["live_lumi"][iterator],2))+" where the expected value is "+str(prediction)
498    
499 abrinke1 1.5 ## End "for iterator in range(len(Rates[print_trigger]["rate"])):" loop
500 abrinke1 1.1
501 abrinke1 1.5 AllPlotArrays = [run_t,ls_t,ps_t,inst_t,live_t,delivered_t,deadtime_t,rawrate_t,rate_t,rawxsec_t,xsec_t,psi_t,e_run_t,e_ls_t,e_ps_t,e_inst_t,e_live_t,e_delivered_t,e_deadtime_t,e_rawrate_t,e_rate_t,e_rawxsec_t,e_xsec_t,e_psi_t,rawrate_fit_t,rate_fit_t,rawxsec_fit_t,xsec_fit_t,e_rawrate_fit_t,e_rate_fit_t,e_rawxsec_fit_t,e_xsec_fit_t]
502     [VX, VXE, VY, VYE, VF, VFE] = GetVXVY(plot_properties, fit_file, AllPlotArrays)
503 abrinke1 1.1
504 abrinke1 1.5 if save_root or save_png:
505     c1 = TCanvas(str(varX),str(varY))
506     c1.SetName(str(print_trigger)+"_"+str(varY)+"_vs_"+str(varX))
507    
508     gr1 = TGraphErrors(len(VX), VX, VY, VXE, VYE)
509     gr1.SetName("Graph_"+str(print_trigger)+"_"+str(varY)+"_vs_"+str(varX))
510     gr1.GetXaxis().SetTitle(varX)
511     gr1.GetYaxis().SetTitle(varY)
512     gr1.SetTitle(str(print_trigger))
513     gr1.SetMinimum(0)
514     gr1.SetMaximum(1.2*max(VY))
515     #gr1.GetXaxis().SetLimits(min(VX)-0.2*max(VX),1.2*max(VX))
516     gr1.GetXaxis().SetLimits(0,1.2*max(VX))
517     gr1.SetMarkerStyle(8)
518     if fit_file:
519     gr1.SetMarkerSize(0.8)
520     else:
521     gr1.SetMarkerSize(0.5)
522     gr1.SetMarkerColor(2)
523    
524     if fit_file:
525     gr3 = TGraphErrors(len(VX), VX, VF, VXE, VFE)
526     gr3.SetMarkerStyle(8)
527     gr3.SetMarkerSize(0.4)
528     gr3.SetMarkerColor(4)
529     gr3.SetFillColor(4)
530     gr3.SetFillStyle(3003)
531 abrinke1 1.1
532 abrinke1 1.5 if do_fit:
533     if "rate" in varY:
534     f1a = TF1("f1a","pol2",0,8000)
535     f1a.SetLineColor(4)
536     f1a.SetLineWidth(2)
537     f1a.SetParLimits(0,0,0.2*(sum(VY)/len(VY))+0.8*min(VY))
538     f1a.SetParLimits(1,0,2.0*max(VY)/(max(VX)*max(VX)))
539     #gr1.Fit("f1a","B","Q")
540     gr1.Fit("f1a","Q","rob=0.90")
541    
542     f1b = 0
543     f1c = 0
544     if True:
545     f1b = TF1("f1b","pol3",0,8000)
546     f1b.SetLineColor(2)
547     f1b.SetLineWidth(2)
548     f1b.SetParLimits(0,0,0.2*(sum(VY)/len(VY))+0.8*min(VY))
549     f1b.SetParLimits(1,0,f1a.GetParameter(1)+0.0000001)
550     f1b.SetParLimits(2,0,f1a.GetParameter(2)+0.0000000001)
551     f1b.SetParLimits(3,0,2.0*max(VY)/(max(VX)*max(VX)*max(VX)))
552     gr1.Fit("f1b","Q","rob=0.90")
553     #if f1b.GetChisquare()/f1b.GetNDF() < f1a.GetChisquare()/f1a.GetNDF():
554     print "X0 = "+str(f1a.GetParameter(0))+" X1 = "+str(f1a.GetParameter(1))+" X2 = "+str(f1a.GetParameter(2))
555     print str(print_trigger)+" f1a Chi2 = "+str(10*f1a.GetChisquare()*math.sqrt(len(VY))/(math.sqrt(sum(VY))*num_ls*f1a.GetNDF()))+", f1b Chi2 = "+str(10*f1b.GetChisquare()*math.sqrt(len(VY))/(math.sqrt(sum(VY))*num_ls*f1b.GetNDF()))
556     print "X0 = "+str(f1b.GetParameter(0))+" X1 = "+str(f1b.GetParameter(1))+" X2 = "+str(f1b.GetParameter(2))+" X3 = "+str(f1b.GetParameter(3))
557 abrinke1 1.1
558 abrinke1 1.5 f1c = TF1("f1c","[0]+[1]*expo(2)",0,8000)
559     f1c.SetLineColor(3)
560     f1c.SetLineWidth(2)
561     f1c.SetParLimits(0,0,0.2*(sum(VY)/len(VY))+0.8*min(VY))
562     f1c.SetParLimits(1,max(VY)/math.exp(10.0),max(VY)/math.exp(2.0))
563     f1c.SetParLimits(2,0.0,0.0000000001)
564     f1c.SetParLimits(3,2.0/max(VX),10.0/max(VX))
565     print str(max(VY)/math.exp(2.0))+" "+str(10.0/max(VX))
566     gr1.Fit("f1c","Q","rob=0.90")
567     #if f1c.GetChisquare()/f1c.GetNDF() < f1a.GetChisquare()/f1a.GetNDF():
568     print str(print_trigger)+" f1a Chi2 = "+str(10*f1a.GetChisquare()*math.sqrt(len(VY))/(math.sqrt(sum(VY))*num_ls*f1a.GetNDF()))+", f1c Chi2 = "+str(10*f1c.GetChisquare()*math.sqrt(len(VY))/(math.sqrt(sum(VY))*num_ls*f1c.GetNDF()))
569     print "X0 = "+str(f1c.GetParameter(0))+" X1 = "+str(f1c.GetParameter(1))+" X2 = "+str(f1c.GetParameter(2))+" X3 = "+str(f1c.GetParameter(3))
570 abrinke1 1.2
571 abrinke1 1.5 else: ##If this is not a rate plot
572     f1a = TF1("f1a","pol1",0,8000)
573     f1a.SetLineColor(4)
574     f1a.SetLineWidth(2)
575     if "xsec" in varY:
576     f1a.SetParLimits(0,0,meanxsec*1.5)
577     if slopexsec > 0:
578     f1a.SetParLimits(1,0,max(VY)/max(VX))
579     else:
580     f1a.SetParLimits(1,2*slopexsec,-2*slopexsec)
581 abrinke1 1.1 else:
582 abrinke1 1.5 f1a.SetParLimits(0,-1000,1000)
583     gr1.Fit("f1a","Q","rob=0.80")
584 abrinke1 1.1
585 abrinke1 1.5 if save_root or save_png:
586     gr1.Draw("APZ")
587     ## ##Option to draw stats box
588     ## p1 = TPaveStats()
589     ## p1 = gr1.GetListOfFunctions().FindObject("stats")
590     ## print p1
591     ## gr1.PaintStats(f1b).Draw("same")
592     if fit_file:
593     gr3.Draw("P3")
594     if do_fit:
595     f1a.Draw("same")
596     try:
597     f1b.Draw("same")
598     f1c.Draw("same")
599     except:
600     True
601     c1.Update()
602     if save_root:
603     myfile = TFile( RootFile, 'UPDATE' )
604     c1.Write()
605     myfile.Close()
606     if save_png:
607     c1.SaveAs(str(print_trigger)+"_"+str(varY)+"_vs_"+str(varX)+".png")
608 abrinke1 1.1
609    
610     if print_table or save_fits:
611 abrinke1 1.5 if not do_fit:
612     print "Can't have save_fits = True and do_fit = False"
613     continue
614     if f1c.GetChisquare()/f1c.GetNDF() < 0.95*f1a.GetChisquare()/f1a.GetNDF() and f1c.GetChisquare()/f1c.GetNDF() < 0.95*f1b.GetChisquare()/f1b.GetNDF():
615     OutputFit[print_trigger] = ["expo", f1c.GetParameter(0), f1c.GetParameter(1), f1c.GetParameter(3), 0.0, f1c.GetChisquare()/f1c.GetNDF(), meanrawrate]
616     elif f1b.GetChisquare()/f1b.GetNDF() < 0.95*f1a.GetChisquare()/f1a.GetNDF():
617     OutputFit[print_trigger] = ["poly", f1b.GetParameter(0), f1b.GetParameter(1), f1b.GetParameter(2), f1b.GetParameter(3), f1b.GetChisquare()/f1b.GetNDF(), meanrawrate]
618     else:
619     OutputFit[print_trigger] = ["poly", f1a.GetParameter(0), f1a.GetParameter(1), f1a.GetParameter(2), 0.0, f1a.GetChisquare()/f1a.GetNDF(), meanrawrate]
620 abrinke1 1.1
621     if save_root:
622     print "Output root file is "+str(RootFile)
623    
624     if save_fits:
625     FitNameTemplate = "Fits/2011/Fit_%s_%sLS_Run%sto%s.pkl"
626     FitFile = FitNameTemplate % (trig_name, num_ls, min_run, max_run)
627     if os.path.exists(FitFile):
628     os.remove(FitFile)
629 abrinke1 1.5 FitOutputFile = open(FitFile, 'wb')
630     pickle.dump(OutputFit, FitOutputFile, 2)
631     FitOutputFile.close()
632 abrinke1 1.7 print "Output fit file is "+str(FitFile)
633 abrinke1 1.1
634     if print_table:
635 abrinke1 1.5 print "The expo fit is of the form p0+p1*e^(p2*x), poly is p0+(p1/10^3)*x+(p2/10^6)*x^2+(p3/10^9)*x^3, where x is Deliv. Lumi."
636     print '%60s%10s%10s%10s%10s%10s%10s%10s' % ("Trig", "fit", "p0", "p1", "p2", "p3", "Chi2", "Av raw")
637     for print_trigger in OutputFit:
638     _trigger = (print_trigger[:56] + '...') if len(print_trigger) > 59 else print_trigger
639 abrinke1 1.1 try:
640 abrinke1 1.5 if OutputFit[print_trigger][0] == "poly":
641     print '%60s%10s%10s%10s%10s%10s%10s' % (_trigger, OutputFit[print_trigger][0], round(OutputFit[print_trigger][1],3), round(OutputFit[print_trigger][2],6)*1000, round(OutputFit[print_trigger][3],9)*1000000, round(OutputFit[print_trigger][4],12)*1000000000, round(OutputFit[print_trigger][5],2), round(OutputFit[print_trigger][6],3))
642     else:
643     print '%60s%10s%10s%10s%10s%10s%10s' % (_trigger, OutputFit[print_trigger][0], OutputFit[print_trigger][1], OutputFit[print_trigger][2], OutputFit[print_trigger][3], OutputFit[print_trigger][4], round(OutputFit[print_trigger][5],2), round(OutputFit[print_trigger][6],3))
644 abrinke1 1.1 except:
645     print str(print_trigger)+" is somehow broken"
646    
647 abrinke1 1.5
648     ############# SUPPORTING FUNCTIONS ################
649    
650    
651     def GetJSON(json_file):
652    
653     input_file = open(json_file)
654     file_content = input_file.read()
655     inputRange = selectionParser(file_content)
656     JSON = inputRange.runsandls()
657     return JSON
658     ##JSON is an array: JSON[run_number] = [1st ls, 2nd ls, 3rd ls ... nth ls]
659    
660     def MakePlotArrays():
661     run_t = array.array('f')
662     ls_t = array.array('f')
663     ps_t = array.array('f')
664     inst_t = array.array('f')
665     live_t = array.array('f')
666     delivered_t = array.array('f')
667     deadtime_t = array.array('f')
668     rawrate_t = array.array('f')
669     rate_t = array.array('f')
670     rawxsec_t = array.array('f')
671     xsec_t = array.array('f')
672     psi_t = array.array('f')
673    
674     e_run_t = array.array('f')
675     e_ls_t = array.array('f')
676     e_ps_t = array.array('f')
677     e_inst_t = array.array('f')
678     e_live_t = array.array('f')
679     e_delivered_t = array.array('f')
680     e_deadtime_t = array.array('f')
681     e_rawrate_t = array.array('f')
682     e_rate_t = array.array('f')
683     e_rawxsec_t = array.array('f')
684     e_xsec_t = array.array('f')
685     e_psi_t = array.array('f')
686    
687     rawrate_fit_t = array.array('f')
688     rate_fit_t = array.array('f')
689     rawxsec_fit_t = array.array('f')
690     xsec_fit_t = array.array('f')
691     e_rawrate_fit_t = array.array('f')
692     e_rate_fit_t = array.array('f')
693     e_rawxsec_fit_t = array.array('f')
694     e_xsec_fit_t = array.array('f')
695    
696     return [run_t,ls_t,ps_t,inst_t,live_t,delivered_t,deadtime_t,rawrate_t,rate_t,rawxsec_t,xsec_t,psi_t,e_run_t,e_ls_t,e_ps_t,e_inst_t,e_live_t,e_delivered_t,e_deadtime_t,e_rawrate_t,e_rate_t,e_rawxsec_t,e_xsec_t,e_psi_t,rawrate_fit_t,rate_fit_t,rawxsec_fit_t,xsec_fit_t,e_rawrate_fit_t,e_rate_fit_t,e_rawxsec_fit_t,e_xsec_fit_t]
697    
698    
699     def GetVXVY(plot_properties, fit_file, AllPlotArrays):
700    
701     VF = "0"
702     VFE = "0"
703    
704     [run_t,ls_t,ps_t,inst_t,live_t,delivered_t,deadtime_t,rawrate_t,rate_t,rawxsec_t,xsec_t,psi_t,e_run_t,e_ls_t,e_ps_t,e_inst_t,e_live_t,e_delivered_t,e_deadtime_t,e_rawrate_t,e_rate_t,e_rawxsec_t,e_xsec_t,e_psi_t,rawrate_fit_t,rate_fit_t,rawxsec_fit_t,xsec_fit_t,e_rawrate_fit_t,e_rate_fit_t,e_rawxsec_fit_t,e_xsec_fit_t] = AllPlotArrays
705     for varX, varY, do_fit, save_root, save_png, fit_file in plot_properties:
706     if varX == "run":
707     VX = run_t
708     VXE = run_t_e
709     elif varX == "ls":
710     VX = ls_t
711     VXE = e_ls_t
712     elif varX == "ps":
713     VX = ps_t
714     VXE = e_ps_t
715     elif varX == "inst":
716     VX = inst_t
717     VXE = e_inst_t
718     elif varX == "live":
719     VX = live_t
720     VXE = e_live_t
721     elif varX == "delivered":
722     VX = delivered_t
723     VXE = e_delivered_t
724     elif varX == "deadtime":
725     VX = deadtime_t
726     VXE = e_deadtime_t
727     elif varX == "rawrate":
728     VX = rawrate_t
729     VXE = e_rawrate_t
730     elif varX == "rate":
731     VX = rate_t
732     VXE = e_rate_t
733     elif varX == "rawxsec":
734     VX = rawxsec_t
735     VXE = e_rawxsec_t
736     elif varX == "xsec":
737     VX = xsec_t
738     VXE = e_xsec_t
739     elif varX == "psi":
740     VX = psi_t
741     VXE = e_psi_t
742     else:
743     print "No valid variable entered for X"
744     continue
745     if varY == "run":
746     VY = run_t
747     VYE = run_t_e
748     elif varY == "ls":
749     VY = ls_t
750     VYE = e_ls_t
751     elif varY == "ps":
752     VY = ps_t
753     VYE = e_ps_t
754     elif varY == "inst":
755     VY = inst_t
756     VYE = e_inst_t
757     elif varY == "live":
758     VY = live_t
759     VYE = e_live_t
760     elif varY == "delivered":
761     VY = delivered_t
762     VYE = e_delivered_t
763     elif varY == "deadtime":
764     VY = deadtime_t
765     VYE = e_deadtime_t
766     elif varY == "rawrate":
767     VY = rawrate_t
768     VYE = e_rawrate_t
769     if fit_file:
770     VF = rawrate_fit_t
771     VFE = e_rawrate_fit_t
772     elif varY == "rate":
773     VY = rate_t
774     VYE = e_rate_t
775     if fit_file:
776     VF = rate_fit_t
777     VFE = e_rate_fit_t
778     elif varY == "rawxsec":
779     VY = rawxsec_t
780     VYE = e_rawxsec_t
781     if fit_file:
782     VF = rawxsec_fit_t
783     VFE = e_rawxsec_fit_t
784     elif varY == "xsec":
785     VY = xsec_t
786     VYE = e_xsec_t
787     if fit_file:
788     VF = xsec_fit_t
789     VFE = e_xsec_fit_t
790     elif varY == "psi":
791     VY = psi_t
792     VYE = e_psi_t
793     else:
794     print "No valid variable entered for Y"
795     continue
796    
797     return [VX, VXE, VY, VYE, VF, VFE]
798    
799 grchrist 1.10 def pass_cuts(data_clean, realvalue, prediction, meanxsec, Rates, print_trigger, iterator, num_ls,LumiPageInfo,SubSystemOff):
800 grchrist 1.8 it_offset=2
801     if num_ls==1:
802     ##fit is 2 ls ahead of real rate
803     fit_iterator=iterator+it_offset
804     if fit_iterator>(len(Rates[print_trigger]["rate"])-1):
805     ##don't let fit_iterator go above the length of the array
806     fit_iterator=iterator
807    
808 grchrist 1.10 LS=Rates[print_trigger]["ls"][iterator]
809     #print "ls=",LS,
810     LSRange=LumiPageInfo[LS]["LSRange"]
811     #print LSRange,
812     LS2=LSRange[-1]
813     #LS2=LSRange.pop()
814     #print "LS2=",LS2
815    
816     #print LumiPageInfo[LS]
817     lumidict={}
818     lumidict=LumiPageInfo[LS]
819     Passed=True
820     if SubSystemOff["Any"]:
821     for keys in LumiPageInfo[LS]:
822     #print LS, keys, LumiPageInfo[LS][keys]
823     if not LumiPageInfo[LS][keys]:
824     Passed=False
825     break
826     else:
827     if SubSystemOff["Mu"]:
828     if not (LumiPageInfo[LS]["rpc"] or LumiPageInfo[LS]["dt0"] or LumiPageInfo[LS]["dtp"] or LumiPageInfo[LS]["dtm"] or LumiPageInfo["cscp"] or LumiPageInfo["cscm"]):
829     Passed=False
830    
831    
832     elif SubSystemOff["HCal"]:
833     if not (LumiPageInfo[LS]["hbhea"] and LumiPageInfo[LS]["hbheb"] and LumiPageInfo[LS]["hbhec"]):
834     Passed=False
835     if SubSystemOff["EndCap"] and not (LumiPageInfo[LS]["hf"]):
836     Passed=False
837     elif SubSystemOff["ECal"]:
838     if not (LumiPageInfo[LS]["ebp"] and LumiPageInfo[LS]["ebm"]):
839     Passed=False
840     if SubSystemOff["EndCap"] and not (LumiPageInfo[LS]["eep"] and LumiPageInfo[LS]["eem"] and LumiPageInfo["esp"] or LumiPageInfo["esm"]):
841     Passed=False
842     elif SubSystemOff["Tracker"]:
843     if not (LumiPageInfo[LS]["tob"] and LumiPageInfo[LS]["tibtid"] and LumiPageInfo[LS]["bpix"] and LumiPageInfo[LS]["fpix"]):
844     Passed=False
845     if SubSystemOff["EndCap"] and not (LumiPageInfo[LS]["tecp"] and LumiPageInfo["tecm"]):
846     Passed=False
847    
848    
849    
850     #print "LS",LS, Passed
851    
852 grchrist 1.8 if not data_clean or (
853     (
854    
855     (
856     realvalue > 0.4*prediction
857     and realvalue < 2.5*prediction
858     )
859    
860     or
861    
862     (
863     realvalue > 0.4*meanxsec
864     and realvalue < 2.5*meanxsec
865     )
866    
867     or prediction < 0
868     )
869    
870     and Rates[print_trigger]["physics"][iterator] == 1
871     and Rates[print_trigger]["active"][iterator] == 1
872     and Rates[print_trigger]["deadtime"][fit_iterator] < 0.20
873     and Rates[print_trigger]["psi"][iterator] > 0
874 grchrist 1.10 and Passed
875 grchrist 1.8 ):
876     return True
877     else:
878     return False
879 abrinke1 1.5
880 grchrist 1.10
881     #### LumiRangeGreens ####
882     ####inputs: RefMoreLumiArray --dict with lumi page info in LS by LS blocks,
883     #### LRange --list range over lumis,
884     #### nls --number of lumisections
885     #### RefRunNum --run number
886     ####
887     ####outputs RangeMoreLumi --lumi page info in dict LSRange blocks with lumi, added items Run and LSRange
888     def LumiRangeGreens(RefMoreLumiArray,LSRange,nls,RefRunNum):
889 grchrist 1.9
890     RangeMoreLumi={}
891     for keys,values in RefMoreLumiArray.iteritems():
892     RangeMoreLumi[keys]=1
893 grchrist 1.10
894 grchrist 1.9 for iterator in LSRange[nls]:
895     for keys, values in RefMoreLumiArray.iteritems():
896     if RefMoreLumiArray[keys][iterator]==0:
897     RangeMoreLumi[keys]=0
898 grchrist 1.10 RangeMoreLumi['LSRange']=LSRange[nls]
899     RangeMoreLumi['Run']=RefRunNum
900    
901 grchrist 1.9 return RangeMoreLumi
902    
903 grchrist 1.10 #### CheckLumis ####
904     ####inputs:
905     #### PageLumiInfo --dict of LS with dict of some lumipage info
906     #### Rates --dict of triggernames with dict of info
907     def checkLS(Rates, PageLumiInfo,trig_list):
908     rateslumis=Rates[trig_list[-1]]["ls"]
909     keys=PageLumiInfo.keys()
910     print "lumi run=",PageLumiInfo[keys[-1]]["Run"]
911     ll=0
912     for ls in keys:
913     print ls,rateslumis[ll]
914     ll=ll+1
915     return False
916    
917    
918 grchrist 1.9
919 abrinke1 1.1 if __name__=='__main__':
920     main()