ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/DatabaseRatePredictor.py
Revision: 1.13
Committed: Thu Mar 15 16:43:57 2012 UTC (13 years, 1 month ago) by grchrist
Content type: text/x-python
Branch: MAIN
Changes since 1.12: +48 -44 lines
Log Message:
included dt in fitting to remove bad points

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