ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/RateMonShiftTool_dev/DatabaseRatePredictor.py
Revision: 1.12
Committed: Thu Mar 15 14:23:11 2012 UTC (13 years, 1 month ago) by grchrist
Content type: text/x-python
Branch: MAIN
Changes since 1.11: +64 -47 lines
Log Message:
fixed fitting so now works again

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