ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/DatabaseRatePredictor.py
Revision: 1.11
Committed: Mon Mar 12 16:04:13 2012 UTC (13 years, 1 month ago) by grchrist
Content type: text/x-python
Branch: MAIN
CVS Tags: V00-00-14
Changes since 1.10: +136 -88 lines
Log Message:
more debugged version of masking

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