ATLAS Offline Software
Loading...
Searching...
No Matches
DeMoLib.py
Go to the documentation of this file.
1# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
2# Author : Benjamin Trocme (CNRS/IN2P3 - LPSC Grenoble)- 2017 - 2023
3# Python 3 migration by Miaoran Lu (University of Iowa)- 2022
4#
5# Definition of system/year/tag characteristisc and functions used by DeMoUpdate, DeMoStatus
6# and DemoScan
7#
8# Documentation: https://twiki.cern.ch/twiki/bin/viewauth/Atlas/DataQualityDemo
9
10
11from ROOT import THStack
12from ROOT import TCanvas,TLegend
13from ROOT import kYellow,kOrange,kRed,kBlue,kPink,kMagenta,kGreen,kSpring,kViolet,kAzure,kCyan,kTeal,kBlack,kWhite
14from ROOT import TProfile,TH1F
15
16import time,os,subprocess
17
18def MakeTProfile(name,xtitle,ytitle,xmin,xmax,nbins,color):
19 h = TProfile(name,name, nbins, xmin, xmax)
20 h.SetYTitle(ytitle)
21 h.SetXTitle(xtitle)
22 h.SetMarkerStyle(22)
23 h.SetMarkerColor(color)
24 h.SetLineColor(1)
25 h.SetFillColor(color)
26 h.SetStats(0)
27 h.SetTitle("")
28 return h
29
30def MakeTH1(name,xtitle,ytitle,xmin,xmax,nbins,color):
31 h = TH1F(name,name,nbins, xmin,xmax)
32 h.SetYTitle(ytitle)
33 h.SetXTitle(xtitle)
34 h.SetLineColor(1)
35 h.SetMarkerStyle(22)
36 h.SetMarkerColor(color)
37 h.SetFillColor(color)
38 h.Sumw2()
39 return h
40
41def SetXLabel(h,list):
42 for i in range(len(list)):
43 h.GetXaxis().SetBinLabel(i+1,str(list[i]))
44 return
45
46def MakeLegend(xmin,ymin,xmax,ymax):
47 l = TLegend(xmin,ymin,xmax,ymax)
48 l.SetFillColor(kWhite)
49 l.SetTextSize(0.03)
50 l.SetBorderSize(0)
51 return l
52
53
56def returnPeriod(runNb,system,year,tag):
57 p = subprocess.Popen(["grep","%d"%runNb,"YearStats-%s/%s/%s/runs-ALL.dat"%(system,year,tag)],stdout = subprocess.PIPE)
58 (o,e) = p.communicate()
59 tmp = o.decode().split("(")
60 if len(tmp)>0:
61 tmp2 = tmp[1].split(")")[0]
62
63 return tmp2
64
65
69 ytp = {"Description":"","Defect tag":"","Veto tag":"","OflLumi tag":"","OflLumiAcct tag":""}
70 DeMoConfigFile = open("YearStats-common/%s/DeMoConfig-%s-%s.dat"%(year,year,tag),"r")
71 for line in DeMoConfigFile:
72 for i_ytp in ytp.keys():
73 if ("%s: "%i_ytp in line):
74 ytp[i_ytp] = (line.split("%s: "%i_ytp)[1]).replace("\n","")
75 DeMoConfigFile.close()
76
77 for i_ytp in ytp.keys():
78 if (ytp[i_ytp] == ""):
79 print("ERROR: Missing (%s) in YearStats-common/%s/DeMoConfig-%s-%s.dat -> Please check or define it with DeMoSetup.py"%(i_ytp,year,year,tag))
80
81 return ytp
82
83
86def strLumi(lumi,unit="ub",latex = True,floatNumber = False):
87 if (unit == "%%"):
88 string0 = "%.2f%% "%(lumi)
89 else:
90 if (unit == "pb" or unit == "pb^{-1}" or unit == "pb-1"):
91 lumi = lumi*1e6
92
93 if lumi < 1e3:
94 if latex:
95 if (floatNumber):string0 = "%.2f #mub"%(lumi)
96 else:string0 = "%.0f #mub"%(lumi)
97 else:
98 if (floatNumber):string0 = "%.2f ub"%(lumi)
99 else:string0 = "%.0f ub"%(lumi)
100 elif lumi<1e6:
101 if (floatNumber):string0 = "%.2f nb"%(lumi/1e3)
102 else: string0 = "%.0f nb"%(lumi/1e3)
103 elif lumi<1e9:
104 if (floatNumber):string0 = "%.2f pb"%(lumi/1e6)
105 else:string0 = "%.0f pb"%(lumi/1e6)
106 else:
107 if (floatNumber):string0 = "%.3f fb"%(lumi/1e9)
108 else:string0 = "%.1f fb"%(lumi/1e9)
109 if latex:
110 string0= string0+"^{-1}"
111 else:
112 string0= string0+"-1"
113
114 return string0
115
116
117
118def plotStack(name,histo,index,indexName,histoIntLumi,lumiBool,resStack,resCanvas,resLegend,recovBool = True,compBool = False,approvedPlots = False):
119# name: Mainly an index of the output. Also used to define TAxis Title
120# histo: dict of histograms or TProfile to be displayed
121# index: list of keys of histo to be displayed
122# indexName: dict of namesof index used for the TLegend
123# histoIntLumi : integrated lumi with the same x binning as histo
124# lumiBool : display results in term of lumi and not percent
125# resStack, resCanvas, resLegend: dict of (stacks, canvas, legend) outputs
126# recovBool: display the recoverable histograms (referenced as %%%__recov in histo
127# compBool: this is a >=2 yearTag plots. Write all numbers in TLegend and not only last bin (that is not meaningful in yearTag)
128
129 # unit is the main unit. unitAux is the complementary one used only the TLegend
130 if (lumiBool):
131 unit = "pb^{-1}"
132 unitAux = "%%"
133 else:
134 unit = "%%"
135 unitAux = "pb^{-1}"
136
137 nameSplitted = name.split("--") # Assume that the name is "Veto/defect (y axis) - Year/Run (x axis)- Dataset name"
138 xAxisTitle = nameSplitted[1]
139 if unit == "%%":
140 yAxisTitle = "Lost luminosity due to %s [%%]"%(nameSplitted[0])
141 else:
142 yAxisTitle = "Lost luminosity due to %s [%s]"%(nameSplitted[0],unit)
143 legendHeader = "%s - %s"%(nameSplitted[2],time.strftime("%d %b", time.localtime()))
144
145 resCanvas[name] = TCanvas(name,"%s - %s"%(yAxisTitle,xAxisTitle),100, 10, 1350, 500)
146 resCanvas[name].SetLeftMargin(0.08)
147 resCanvas[name].SetRightMargin(0.35)
148 resCanvas[name].SetGridy(1)
149 resStack[name] = THStack("%s_stack"%name,"")
150 resLegend[name] = MakeLegend(0.66,0.8,0.98,0.95) # Y1 will be redefined later according to the number of entries
151 resLegend[name].AddEntry(0, "", "")
152
153 first = True
154
155 nBinsX = histoIntLumi.GetNbinsX()
156 totalIneff = 0.
157 if (compBool):
158 totalIneff_comp = nBinsX * [0.]
159
160 totalIntegratedLumi = histoIntLumi.GetBinContent(nBinsX)
161 if lumiBool:
162 auxScaleFactor = 100./totalIntegratedLumi
163 else:
164 auxScaleFactor = totalIntegratedLumi/100.
165
166 tmpColor = [kBlue-4,kOrange-7,kTeal+1,kMagenta-4,kPink-3,kGreen+3,kSpring-3,kViolet+4,kAzure-8,kCyan+1]
167 tmpColorIndex = 0
168
169 for iIndex in sorted(index,reverse=True):
170 if first: # Create a recoverable histograms just in case of
171 resStack["%s__recov"%name] = MakeTH1("h1_%s__recovTotal"%(name),"Recoverable","",-0.5,-0.5+nBinsX,nBinsX,1)
172 resStack["%s__recov"%name].SetMarkerStyle(23)
173 first = False
174 iIndexName = iIndex.split("_")[0]
175
176 # Define a "temporary" color for the defect histogram for which it was not yet defined
177 # Mandatory for defect that are not yet known as impacting the system (i.e. with a loss-[defect].dat file
178 # Especially useful for weekly reports with a new type of defect affecting the system
179 if (histo[iIndex].GetFillColor() == kBlack and tmpColorIndex < len(tmpColor) and histo[iIndex].GetBinContent(histo[iIndex].GetNbinsX()) != 0):
180 histo[iIndex].SetFillColor(tmpColor[tmpColorIndex])
181 tmpColorIndex = tmpColorIndex + 1
182
183 # Fill histo["%s_toStack"] the main histo
184 # and histo["%s_aux"] the complementary one used only for TLegend
185 if (histo[iIndex]).IsA().InheritsFrom("TProfile"):
186 histo['%s_toStack'%iIndex] = histo[iIndex].ProjectionX()
187 histo['%s_toStack'%iIndex].SetFillColor(histo[iIndex].GetFillColor())
188 else:
189 histo['%s_toStack'%iIndex] = histo[iIndex]
190 if lumiBool:
191 histo['%s_toStack'%iIndex].Multiply(histo['%s_toStack'%iIndex],histoIntLumi,0.01)
192 histo['%s_toStack'%iIndex].LabelsOption("v")
193 resStack[name].Add(histo['%s_toStack'%iIndex])
194
195 entryNb = 0
196 for iIndex in sorted(index): # Reverse order to have the TLegend ordered as the stacks
197 iIndexName = iIndex.split("__")[0] # Trick needed to get the defect name for the recoverable defect histogram
198 baseEntry = "%s"%(strLumi(histo['%s_toStack'%iIndex].GetBinContent(nBinsX),unit))
199 auxEntry = "%s"%(strLumi(histo['%s_toStack'%iIndex].GetBinContent(nBinsX)*auxScaleFactor,unitAux))
200
201 if (recovBool and "%s__recov"%iIndex in list(histo.keys()) and histo["%s__recov"%iIndex].GetBinContent(nBinsX) != 0.):
202 baseEntryRecov = "%s"%(strLumi(histo["%s__recov"%iIndex].GetBinContent(nBinsX),unit))
203 entry = "#splitline{%s}{%s(recov:%s) / %s}"%(indexName[iIndexName],baseEntry,baseEntryRecov,auxEntry) # Second part of Legend to fix
204 for iBin in range(nBinsX+1):
205 resStack["%s__recov"%name].Fill(iBin-1,histo["%s__recov"%iIndex].GetBinContent(iBin))
206 else:
207 entry = "#splitline{%s}{%s / %s}"%(indexName[iIndex],baseEntry,auxEntry)
208
209 if (compBool): # This is a >=2 yearTag histograms
210 if histo[iIndex].GetNbinsX() >= 2 and histo[iIndex].GetNbinsX()<5:
211 if histo[iIndex].GetBinContent(1) != 0.:
212 entry = "#splitline{%s}{%s"%(indexName[iIndexName],strLumi(histo[iIndex].GetBinContent(1),unit))
213 else:
214 entry = "#splitline{%s}{ - "%(indexName[iIndexName])
215 for iTag in range(2,histo[iIndex].GetNbinsX()+1):
216 if histo[iIndex].GetBinContent(iTag) != 0.:
217 entry += " / %s "%(strLumi(histo[iIndex].GetBinContent(iTag),unit))
218 else:
219 entry += " / - "
220 entry += "}"
221 else:
222 entry = "%s"%(indexName[iIndexName])
223
224 if (histo[iIndex].GetMaximum() != 0):
225 resLegend[name].AddEntry(histo[iIndex],entry,"f")
226 entryNb = entryNb+1
227
228 # Extract the total inefficiency
229 allIndex = ""
230 if ("allIntol" in list(histo.keys())):
231 allIndex = "allIntol"
232 if ("allVeto" in list(histo.keys())):
233 allIndex = "allVeto"
234
235 if allIndex != "":
236 if compBool:
237 for iBin in range(1,nBinsX+1):
238 totalIneff_comp[iBin-1] = histo[allIndex].GetBinContent(iBin)
239 else:
240 totalIneff = histo[allIndex].GetBinContent(nBinsX)
241
242 mx = resStack[name].GetMaximum()*1.2
243 resStack[name].SetMaximum(mx)
244 resStack[name].Draw("hist")
245 resStack[name].GetXaxis().LabelsOption("v")
246 resStack[name].GetXaxis().SetLabelSize(0.04)
247 resStack[name].GetXaxis().SetTitle("%s"%xAxisTitle)
248 resStack[name].GetXaxis().SetTitleOffset(1.45)
249 resStack[name].GetYaxis().SetTitle("%s"%yAxisTitle)
250 resStack[name].GetYaxis().SetTitleOffset(0.7)
251 if resStack[name].GetMaximum()>10.:
252 resCanvas[name].SetLogy(1)
253
254 if compBool:
255 resStack[name].GetXaxis().SetLabelSize(0.065)
256 if histo[iIndex].GetNbinsX() == 2:
257 resLegend[name].SetHeader("#splitline{%s}{Total loss: %s / %s}"%(legendHeader,strLumi(totalIneff_comp[0],unit),strLumi(totalIneff_comp[1],unit)))
258 elif histo[iIndex].GetNbinsX() == 3:
259 resLegend[name].SetHeader("#splitline{%s}{Total loss: %s / %s / %s}"%(legendHeader,strLumi(totalIneff_comp[0],unit),strLumi(totalIneff_comp[1],unit),strLumi(totalIneff_comp[2],unit)))
260 elif histo[iIndex].GetNbinsX() == 4:
261 resLegend[name].SetHeader("#splitline{%s}{Total loss: %s / %s / %s / %s}"%(legendHeader,strLumi(totalIneff_comp[0],unit),strLumi(totalIneff_comp[1],unit),strLumi(totalIneff_comp[2],unit),strLumi(totalIneff_comp[3],unit)))
262 else:
263 resLegend[name].SetHeader("%s"%(legendHeader))
264 else:
265 totalIneffAux = totalIneff*auxScaleFactor
266 if (approvedPlots):
267 resLegend[name].SetHeader("#splitline{%s}{Total loss: %s / %s}"%(legendHeader,strLumi(totalIneff,unit),strLumi(totalIneffAux,unitAux)))
268 else:
269 if (totalIneff != 0.):
270 resLegend[name].SetHeader("#splitline{%s (%s)}{Total loss: %s / %s}"%(legendHeader,strLumi(totalIntegratedLumi,"pb"),strLumi(totalIneff,unit),strLumi(totalIneffAux,unitAux)))
271 else:
272 resLegend[name].SetHeader("%s (%s)"%(legendHeader,strLumi(totalIntegratedLumi,"pb")))
273 if resStack["%s__recov"%name].GetEntries() != 0.:
274 resStack["%s__recov"%name].SetMarkerStyle(20)
275 resStack["%s__recov"%name].SetMarkerColor(kAzure+8)
276 resStack["%s__recov"%name].Draw("PSAME HIST")
277 resLegend[name].AddEntry(resStack["%s__recov"%name],"#splitline{Recoverable}{total: %.2f%%}"%(resStack["%s__recov"%name].GetBinContent(nBinsX)),"p")
278 entryNb = entryNb + 1
279
280 if (entryNb<9):
281 resLegend[name].SetTextSize(0.035)
282 else:
283 resLegend[name].SetTextSize(0.028)
284
285 resLegend[name].SetY1(max(0.83-entryNb*0.098,0.05))
286 resLegend[name].Draw()
287
288 resCanvas[name].Update()
289
290 return totalIneff # totalIneff is used only with the savePage1 option in DeMoStatus
291
292
294def initializeMonitoredDefects(system,partitions,defects0,defectVeto,veto,signOff,year,tag,runlist = {}):
295
296 runlist["filename"] = "runlist-%s-%s.dat"%(year,tag)
297
298
322
323
324
325
326 if system == "Pixel":
327 partitions["color"] = {'IBL':kYellow-9,'LAYER0':kYellow,'BARREL':kOrange,'ENDCAPC':kOrange-3,'ENDCAPA':kRed-3}
328 partitions["list"] = list(partitions["color"].keys())
329
330 defects0["prefix"] = ["PIXEL"]
331 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
332 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
333 defects0["partIntol"] = ["DISABLED","GT30pct_NOTREADY","READOUT_PROBLEM","HVSCAN","TIMING","STANDBY"] # Pixel system
334 defects0["partTol"] = [] # Pixel system
335 # Global intolerable and tolerable defects
336 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
337 defects0["globIntol"] = ["UNKNOWN"] # Pixel system
338 defects0["globTol"] = [] # Pixel system
339
340 veto["all"] = [] # Veto name as defined in the COOL database
341 veto["COOL"] = {} # Veto name as defined in the COOL database
342
343 defectVeto["description"] = {"DISABLED":"One layer disabled",
344 "IBL_DISABLED":"IBL disabled",
345 "GT30pct_NOTREADY":">30% modules in error",
346 "READOUT_PROBLEM":"Readout problem",
347 "IBL_READOUT_PROBLEM":"IBL readout problem",
348 "HVSCAN":"HV scan",
349 "TIMING":"Timing scan",
350 "UNKNOWN":"Unknown",
351 "STANDBY":"Standby"}
352
353 signOff["EXPR."] = ["PIXEL_UNCHECKED"]
354 signOff["BULK"] = ["PIXEL_BULK_UNCHECKED"]
355 signOff["FINAL"] = []
356
357
359 if system == "SCT":
360 partitions["color"] = {}
361 partitions["list"] = list(partitions["color"].keys())
362
363 defects0["prefix"] = ["SCT"]
364 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
365 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
366 defects0["partIntol"] = []
367 defects0["partTol"] = []
368 # Global intolerable and tolerable defects
369 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
370 defects0["globIntol"] = ["GLOBAL_STANDBY","CRATE_OUT","ROD_OUT_MAJOR","PERIOD_ERR_MAJOR","GLOBAL_DESYNC","GLOBAL_RECONFIG","GLOBAL_UNKNOWN","GLOBAL_DISABLED","SIMULATION_DATA_FLAG"] # SCT system
371 defects0["globTol"] = ["MOD_OUT_GT40","MOD_ERR_GT40","MOD_NOISE_GT40","PERIOD_ERR_GT40","ROD_OUT","EFF_LT99","NOTNOMINAL_HV","NOTNOMINAL_THRESHOLD","NOTNOMINAL_TIMING","COOLINGLOOP_OUT_1","PS_TRIP"] # SCT system
372
373 defectVeto["description"] = {"GLOBAL_STANDBY":"Standby", # Intolerable defects
374 "CRATE_OUT":">=1 crate out",
375 "ROD_OUT_MAJOR":"Large inefficency (ROD)",
376 "PERIOD_ERR_MAJOR":"Large inefficiency (Period)",
377 "GLOBAL_DESYNC":"Global desync",
378 "GLOBAL_RECONFIG":"Global reconfig",
379 "GLOBAL_UNKNOWN":"Unknown",
380 "GLOBAL_DISABLED":"Disabled",
381 "SIMULATION_DATA_FLAG":"Simulation data flag wrongly activated",
382 "MOD_OUT_GT40":"More than 40 modules excluded in DAQ in addition to the permanent disabled modules (37 modules as of June 2017)", # Tolerable defects
383 "MOD_ERR_GT40":"More than 40 modules with bytestream errors ",
384 "MOD_NOISE_GT40":"More than 40 noisy modules",
385 "PERIOD_ERR_GT40":"More than 80 links with errors in a short period of time (fine for the rest of the run), corresponding to about 40 modules",
386 "ROD_OUT":"One or more ROD(s) excluded from readout, however less than 5% region in eta-phi plane have masked link errors among more than two layers.",
387 "EFF_LT99":"Less than 99% efficiency for 1st BC and less than 98% efficiency for all bunches in one or more DQ regions",
388 "NOTNOMINAL_HV":"SCT neither at 150 V nor at 50 V",
389 "NOTNOMINAL_THRESHOLD":"SCT threshold not at 1 fC",
390 "NOTNOMINAL_TIMING":"Unusual timing settings, e.g. timing scan",
391 "COOLINGLOOP_OUT_1":"Loss of a single cooling loop",
392 "PS_TRIP":"Failed modules due to a power supply trip"}
393
394 veto["all"] = [] # Veto name as defined in the COOL database
395 veto["COOL"] = {} # Veto name as defined in the COOL database
396
397 signOff["EXPR."] = ["SCT_UNCHECKED"]
398 signOff["BULK"] = ["SCT_BULK_UNCHECKED"]
399 signOff["FINAL"] = []
400
401
403 if system == "TRT":
404 partitions["color"] = {}
405 partitions["list"] = list(partitions["color"].keys())
406
407 defects0["prefix"] = ["TRT"]
408 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
409 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
410 defects0["partIntol"] = [] # TRT system
411 defects0["partTol"] = [] # TRT system
412 # Global intolerable and tolerable defects
413 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
414 defects0["globIntol"] = ["BADCALIBRATION","BADSTRAWLIST","BADGAS","DAQPROBLEMS_OTHER","DESYNC","NODATA_06","DISABLED","UNKNOWN"] # TRT system
415 defects0["globTol"] = ["BADCALIBRATION_MINOR","BADGAS_MINOR","BYTESTREAM_BITFLIPS","DAQPROBLEMS_OTHER_MINOR","NODATA_01","NONNOMINAL_HT","NONNOMINAL_LT"] # TRT system
416
417 # Some defects may not exist in past years. Remove them to avoid crashes
418 # WARNING: this fix does not work with multiple year plot
419 defectVeto["description"] = {"BADCALIBRATION":"Bad calibration",
420 "BADSTRAWLIST":"Bad dead stram list",
421 "BADGAS":"Bad gas mixture",
422 "DAQPROBLEMS_OTHER":"DAQ problems",
423 "DESYNC":"Desynchronisation",
424 "NODATA_06":"Large part of TRT off",
425 "DISABLED":"Disabled",
426 "UNKNOWN":"Unknown"}
427
428 veto["all"] = [] # Veto name as defined in the COOL database
429 veto["COOL"] = {} # Veto name as defined in the COOL database
430
431 signOff["EXPR."] = ["TRT_UNCHECKED"]
432 signOff["BULK"] = ["TRT_BULK_UNCHECKED"]
433 signOff["FINAL"] = []
434
435
439 if system == "LAr":
440 partitions["color"] = { 'EMBA':kYellow-9,'EMBC':kYellow,'EMECA':kOrange,'EMECC':kOrange-3,'HECA':kRed-3,'HECC':kRed+2,'FCALA':kBlue-3,'FCALC':kBlue+2}
441 partitions["list"] = list(partitions["color"].keys())
442
443 defects0["prefix"] = ["LAR","CALO_ONLINEDB"]
444 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
445 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
446 defects0["partIntol"] = ["HVTRIP","SEVNOISEBURST","SEVCOVERAGE","HVNONNOMINAL","SEVNOISYCHANNEL","SEVMISCALIB","SEVUNKNOWN"] # LAr system - LAR Prefix - LAR_[PART]_[NAME]
447 defects0["partTol"] = ["COVERAGE","HVNONNOM_CORRECTED"] # LAr system
448 # Global intolerable and tolerable defects
449 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
450 defects0["globIntol"] = ["DATACORRUPT","RECOCORRUPT","SPECIALSTUDIES","BADTIMING","LOWMUCONFIG_IN_HIGHMU_EmergencyMeasures"] # LAr system - LAR Prefix - LAR_[NAME] or # CALO Prefix - CALO_[NAME] (last defect)
451 defects0["globTol"] = [] # LAr system
452
453 defectVeto["description"] = {"HVTRIP":"High voltage trip", # First per partition LAr defects
454 "NOISEBURST":"Noise bursts (before veto)",
455 "HVNONNOMINAL":"HV non nominal",
456 "SEVNOISEBURST":"Noise burst",
457 "SEVNOISYCHANNEL":"Noisy channels",
458 "SEVCOVERAGE":"Coverage",
459 "SEVMISCALIB":"Global miscalibration",
460 "SEVUNKNOWN":"Unknown reason",
461 "DATACORRUPT":"Data corruption", # Then global LAr defects
462 "RECOCORRUPT":"Corrupted reconstruction",
463 "SPECIALSTUDIES":"Special studies (on purpose)",
464 "BADTIMING":"Bad timing",
465 "COVERAGE":"Coverage (tolerable)",
466 "LOWMUCONFIG_IN_HIGHMU_EmergencyMeasures":"Trigger misconfiguration", # And the global CALO defects
467 "noiseBurst":"Noise burst", # And finally the LAr veto
468 "miniNoiseBurst":"Mini noise burst",
469 "corruption":"Data corruption"}
470
471 veto["all"] = ["noiseBurst","miniNoiseBurst","corruption"] # Veto name as defined in the COOL database
472 veto["COOL"] = {"noiseBurst":"allNoise",
473 "miniNoiseBurst":"MNBNoise",
474 "corruption":"allCorruption"} # Veto name as defined in the COOL database
475
476 signOff["EXPR."] = ["LAR_UNCHECKED"]
477 signOff["BULK"] = ["LAR_BULK_UNCHECKED"]
478 signOff["FINAL"] = ["LAR_UNCHECKED_FINAL"]
479
480
482 if system == "Tile":
483 partitions["color"] = { 'EBA':kYellow-9,'EBC':kYellow,'LBA':kOrange,'LBC':kOrange-3}
484 partitions["list"] = list(partitions["color"].keys())
485
486 defects0["prefix"] = ["TILE"]
487 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
488 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
489 defects0["partIntol"] = ["BAD_COVER","DAQ_PRB","DB_SEVERE","TIMING_SEVERE","UNSPECIFIED_SEVERE"] # Tile system
490 defects0["partTol"] = ["DB_MINOR","TIMING_MINOR","TRIP","UNSPECIFIED_MINOR"] # Tile system
491 # Global intolerable and tolerable defects
492 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
493 defects0["globIntol"] = ["LOWSTAT"] # Tile system
494 defects0["globTol"] = ["TIMEJUMPS_UNDEFINED"] # Tile system
495
496 # Some defects may not exist in past years. Remove them to avoid crashes
497 # WARNING: this fix does not work with multiple year plot
498 defectVeto["description"] = {"BAD_COVER":"Coverage",
499 "DAQ_PRB":"DAQ problem",
500 "DB_SEVERE":"DB issue",
501 "TIMING_SEVERE":"Timing issue",
502 "UNSPECIFIED_SEVERE":"Severe unspecified",
503 "LOWSTAT":"Low stats"}
504
505 veto["all"] = [] # Veto name as defined in the COOL database
506 veto["COOL"] = {} # Veto name as defined in the COOL database
507
508 signOff["EXPR."] = ["TILE_UNCHECKED"]
509 signOff["BULK"] = ["TILE_UNCHECKED"]
510 signOff["FINAL"] = []
511
512
515 if system == "CSC":
516 partitions["color"] = {"EA":kYellow-9,'EC':kRed-3}
517
518 partitions["list"] = list(partitions["color"].keys())
519
520 defects0["prefix"] = ["MS_CSC"]
521 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
522 defects0["partIntol"] = ["STANDBY_HV",
523 "PROBLEM",
524 "ROD_DISABLED",
525 "DISABLED"]
526
527 defects0["partTol"] = ["DISCONNECTED2","LATENCY_MINOR","THRESHOLD"]
528 # Global intolerable and tolerable defects
529 defects0["globIntol"] = []
530 defects0["globTol"] = []
531
532 veto["all"] = [] # Veto name as defined in the COOL database
533 veto["COOL"] = {} # Veto name as defined in the COOL database
534
535 defectVeto["description"] = {"STANDBY_HV":"Standby HV",
536 "PROBLEM":"Coverage loss > 10%%",
537 "ROD_DISABLED":">=1 ROD not readout",
538 "DISABLED":"Disabled"}
539
540 signOff["EXPR."] = ["MS_UNCHECKED"]
541 signOff["BULK"] = ["MS_BULK_UNCHECKED"]
542 signOff["FINAL"] = []
543
544
546 if system == "MDT":
547 partitions["color"] = {"EA":kYellow-9,'EC':kRed-3,'BA':kBlue-3,'BC':kOrange-3}
548
549 partitions["list"] = list(partitions["color"].keys())
550
551 defects0["prefix"] = ["MS_MDT"]
552 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
553 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
554 defects0["partIntol"] = ["STANDBY_HV","PROBLEM","ROD_PROBLEM_5orMore","DISABLED"] # MDT system
555 defects0["partTol"] = ["ROD_PROBLEM_1","ROD_PROBLEM_2to4"] # MDT system
556 # Global intolerable and tolerable defects
557 defects0["globIntol"] = [] # MDT system
558 defects0["globTol"] = [] # MDT system
559
560 veto["all"] = [] # Veto name as defined in the COOL database
561 veto["COOL"] = {} # Veto name as defined in the COOL database
562
563 defectVeto["description"] = {"STANDBY_HV":"Standby HV",
564 "PROBLEM":"Coverage loss > 10%%",
565 "ROD_PROBLEM_5orMore":">=5 RODs not readout",
566 "DISABLED":"Disabled"}
567
568 signOff["EXPR."] = ["MS_UNCHECKED"]
569 signOff["BULK"] = ["MS_BULK_UNCHECKED"]
570 signOff["FINAL"] = []
571
572
574 if system == "RPC":
575 partitions["color"] = {'BA':kBlue-3,'BC':kOrange-3}
576
577 partitions["list"] = list(partitions["color"].keys())
578
579 defects0["prefix"] = ["MS_RPC"]
580 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
581 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
582 defects0["partIntol"] = ["STANDBY_HV","PROBLEM","PROBLEM_10to15percent","PROBLEM_MoreThan15percent","OutOfSync_3orMore","LowEfficiency_MoreThan10percent","DISABLED"] # RPC system
583 defects0["partTol"] = ["LowEfficiency_5to10percent","OutOfSync_2","OutOfSync_1","ROD_PROBLEM_1","PROBLEM_5to10percent"] # RPC system
584 # Global intolerable and tolerable defects
585 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
586 defects0["globIntol"] = []
587 defects0["globTol"] = []
588
589 veto["all"] = [] # Veto name as defined in the COOL database
590 veto["COOL"] = {} # Veto name as defined in the COOL database
591
592 defectVeto["description"] = {"STANDBY_HV":"Standby HV",
593 "PROBLEM":"Coverage loss > 10%%",
594 "PROBLEM_10to15percent":"Coverage loss > 10%%",
595 "PROBLEM_MoreThan15percent":"Coverage loss > 15%%",
596 "OutOfSync_3orMore":">3 Out of sync",
597 "LowEfficiency_MoreThan10percent":"Low efficiency > 10%%",
598 "DISABLED":"Disabled"}
599
600 signOff["EXPR."] = ["MS_UNCHECKED"]
601 signOff["BULK"] = ["MS_BULK_UNCHECKED"]
602 signOff["FINAL"] = []
603
604
606 if system == "TGC":
607 partitions["color"] = {"EA":kYellow-9,'EC':kRed-3}
608
609 partitions["list"] = list(partitions["color"].keys())
610
611 defects0["prefix"] = ["MS_TGC"]
612 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
613 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
614 defects0["partIntol"] = ["STANDBY_HV","PROBLEM","ROD_PROBLEM-2orMore","DISABLED"] # TGC system
615 defects0["partTol"] = ["PROBLEM_1"] # TGC system
616 # Global intolerable and tolerable defects
617 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
618 defects0["globIntol"] = [] # TGC system
619 defects0["globTol"] = [] # TGC system
620
621 veto["all"] = [] # Veto name as defined in the COOL database
622 veto["COOL"] = {} # Veto name as defined in the COOL database
623
624 defectVeto["description"] = {"STANDBY_HV":"Standby HV",
625 "PROBLEM":"Coverage loss > 10%%",
626 "ROD_PROBLEM_2orMore":">=2 RODs not readout",
627 "DISABLED":"Disabled"}
628
629 signOff["EXPR."] = ["MS_UNCHECKED"]
630 signOff["BULK"] = ["MS_BULK_UNCHECKED"]
631 signOff["FINAL"] = []
632
633
635 if system == "MuonCP":
636 defects0["prefix"] = ["MCP"]
637 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
638 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
639 defects0["partIntol"] = []
640 defects0["partTol"] = []
641 # Global intolerable and tolerable defects
642 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
643 defects0["globIntol"] = ["ALIGN_GEO","LOW_EFFICIENCY_MAJOR"] # MuonCP system
644 defects0["globTol"] = ["CHI2_PROBLEM","ID_PROBLEM","LOW_EFFICIENCY_MINOR","MS_PROBLEM"] # MuonCP system
645
646 veto["all"] = [] # Veto name as defined in the COOL database
647 veto["COOL"] = {} # Veto name as defined in the COOL database
648
649 defectVeto["description"] = {"ALIGN_GEO":"[MCP] Bad alignment/geometry)",
650 "LOW_EFFICIENCY_MAJOR":"[MCP] Low reconstruction efficiency" }
651
652 signOff["EXPR."] = ["MS_UNCHECKED"]
653 signOff["BULK"] = ["MS_BULK_UNCHECKED"]
654 signOff["FINAL"] = []
655
656
657 if system == "IDGlobal":
658 partitions["color"] = {}
659 partitions["list"] = list(partitions["color"].keys())
660
661 defects0["prefix"] = ["ID"]
662 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
663 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
664 defects0["partIntol"] = []
665 defects0["partTol"] = []
666 # Global intolerable and tolerable defects
667 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
668 defects0["globIntol"] = ["NOTRACKS","IBL_TRACKCOVERAGE_SEVERE","PIXEL_TRACKCOVERAGE_SEVERE","SCT_TRACKCOVERAGE_SEVERE","TRT_TRACKCOVERAGE_SEVERE","UNKNOWN","BS_RUNAVERAGE","BS_PARAMETERSTEP","BS_NOTNOMINAL"] # IDGlobal system
669 defects0["globTol"] = ["ALIGN_DEGRADED","LOWSTAT","IBL_TRACKCOVERAGE","PIXEL_TRACKCOVERAGE","SCT_TRACKCOVERAGE","TRT_TRACKCOVERAGE","VERTEXBUG"] # IDGlobal system
670
671 veto["all"] = [] # Veto name as defined in the COOL database
672 veto["COOL"] = {} # Veto name as defined in the COOL database
673
674 defectVeto["description"] = {"NOTRACKS":"No tracks",
675 "IBL_TRACKCOVERAGE_SEVERE":"[IBL] > 10 %% coverage loss",
676 "PIXEL_TRACKCOVERAGE_SEVERE":"[PIXEL] > 10 %% coverage loss",
677 "SCT_TRACKCOVERAGE_SEVERE":"[SCT] > 10 %% coverage loss",
678 "TRT_TRACKCOVERAGE_SEVERE":"[TRT] > 10 %% coverage loss",
679 "UNKNOWN":"Unknown",
680 "BS_RUNAVERAGE":"Problematic BS determination",
681 "BS_PARAMETERSTEP":"Large changes in BS",
682 "BS_NOTNOMINAL":"Sizable modulation in d0 vs phi",
683 "ALIGN_DEGRADED":"Degarded alignment",
684 "LOWSTAT":"Low statistics",
685 "x_TRACKCOVERAGE":"Significant change in coverage, but not severe (between 5-10% coverage loss)",
686 "VERTEXBUG":"Problems in the determination of the primary vertex"}
687
688 signOff["EXPR."] = ["ID_UNCHECKED"]
689 signOff["BULK"] = ["ID_BULK_UNCHECKED"]
690 signOff["FINAL"] = []
691
692
696 if system == "CaloCP":
697 partitions["color"] = { 'BARREL':kYellow-9,'CRACK':kRed-3,'ENDCAP':kBlue-3, # EGamma partitions
698 'B':kYellow-9,'CR':kRed-3,'E':kBlue-3, # Tau partitions
699 'CALB':kYellow-9,'CALEA':kRed-3,'CALC':kBlue-3} # CaloGlobal partitions
700
701 partitions["list"] = list(partitions["color"].keys())
702
703 defects0["prefix"] = ["JET","EGAMMA","MET","TAU","CALO_"]
704 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
705 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
706 defects0["partIntol"] = ["LARNOISE","ENERGY","CALO","TRK","KIN","ID","TopoClusterNoiseSevere"] # CaloCP system - EGAMMA Prefix - EGAMMA_[NAME]_[PART] / TAU Prefix- TAU_[PART]_[NAME] / CaloGlobal Prefix - CALO_[PART]_[NAME]
707 defects0["partTol"] = []
708 # Global intolerable and tolerable defects
709 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
710 defects0["globIntol"] = ["NOJETSREGION","SEVERE_HOTSPOT","BEAMSPOT","Ex_largeshift","Ey_largeshift","SumEt_largeshift"] # CaloCP system - JET Prefix - JET_[NAME] / EGAMMA Prefix - EGAMMA_[NAME] / MET Prefix - MET_[NAME]
711 defects0["globTol"] = ["ETAPHI_SPIKES"] # CaloCP system
712
713
714 defectVeto["description"] = {"NOJETSREGION":"[Jet] Cold region",
715 "SEVERE_HOTSPOT":"[Jet] Hot region",
716 "LARNOISE":"[EGamma] Noise in LAr",
717 "ENERGY":"[EGamma] Problem in energy",
718 "BEAMSPOT":"[EGamma] Problem in beam spot",
719 "ETAPHI_SPIKES":"[Egamma] Eta/phi spikes",
720 "Ex_largeshift":"[MEt] Ex large shift",
721 "Ey_largeshift":"[MEt] EY large shift",
722 "SumEt_largeshift":"[MEt] SumEt large shift",
723 "CALO":"[Tau] Calo problem",
724 "TRK":"[Tau] Tracking problem",
725 "KIN":"[Tau] Kinetic problem",
726 "ID":"[Tau] Identification problem",
727 "TopoClusterNoiseSevere":"[TopoCluster] Hot spot"}
728
729 veto["all"] = [] # Veto name as defined in the COOL database
730 veto["COOL"] = {} # Veto name as defined in the COOL database
731
732 signOff["EXPR."] = ['CALO_UNCHECKED','EGAMMA_UNCHECKED','JET_UNCHECKED','MET_UNCHECKED','TAU_UNCHECKED']
733 signOff["BULK"] = ['CALO_BULK_UNCHECKED','EGAMMA_BULK_UNCHECKED','JET_BULK_UNCHECKED','MET_BULK_UNCHECKED','TAU_BULK_UNCHECKED']
734 signOff["FINAL"] = []
735
736
738 if system == "BTag":
739 partitions["color"] = { } # No partition needed
740
741 partitions["list"] = list(partitions["color"].keys())
742
743 defects0["prefix"] = ["BTAG"]
744 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
745 defects0["partIntol"] = [] # No partition defect
746 defects0["partTol"] = []
747 # Global intolerable and tolerable defects
748 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
749 defects0["globIntol"] = ["BLAYER_SERIOUS_PROBLEM","BTAG_SCT_SERIOUS_PROBLEM","BTAG_TRT_SERIOUS_PROBLEM","BTAG_JET_SEVHOTSPOT"] # BTag system
750 defects0["globTol"] = ["BEAMSPOT_SHIFT","BTAG_BLAYER_PROBLEM","BTAG_SCT_PROBLEM","BTAG_TRT_PROBLEM","NOJETS"] # BTag system
751
752
753 defectVeto["description"] = {"BLAYER_SERIOUS_PROBLEM":"B layer problem",
754 "BTAG_SCT_SERIOUS_PROBLEM":"SCT problem",
755 "BTAG_TRT_SERIOUS_PROBLEM":"TRT problem",
756 "BTAG_JET_SEVHOTSPOT":"Jet hot spot",
757 "BEAMSPOT_SHIFT":"Beamspot shift",
758 "BTAG_NOJETS":"No jets in monitoring"}
759
760 veto["all"] = [] # Veto name as defined in the COOL database
761 veto["COOL"] = {} # Veto name as defined in the COOL database
762
763 signOff["EXPR."] = ['BTAG_UNCHECKED']
764 signOff["BULK"] = ['BTAG_BULK_UNCHECKED']
765 signOff["FINAL"] = []
766
767
769 if system == "Trig_L1":
770 partitions["color"] = {}
771 partitions["list"] = list(partitions["color"].keys())
772
773 defects0["prefix"] = ["TRIG_L1"]
774 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
775
776
777 defects0["partIntol"] = []
778 defects0["partTol"] = []
779 # Global intolerable and tolerable defects
780 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
781 defects0["globIntol"] = ["CAL_coverage","CAL_misconf_calib","CAL_misconf_electronics","CAL_misconf_satBCID","CAL_off","MUB_busy","MUB_coverage","MUB_failed_electronics","MUB_lost_sync","MUB_misconf_electronics","MUE_busy","MUE_coverage","MUE_misconf_electronics","MUE_pt15GeV","MUE_pt20GeV","CTP_CTP_MuCTPI_bcid","CTP_CTP_ROD_bcid","CTP_CTPsim","CTP_TAPnoTBP","CTP_TAVnoTAP","CTP_UNKNOWN","CTP_bcid","CTP_bcidrange","CTP_candnumber","CTP_clock","CTP_counter","CTP_lumiblockrange","CTP_lumiblocktime","CTP_multpt","CTP_nanosectime","CTP_prescale_error","CTP_roiCand","CTP_roiNum","CTP_wrong_BGK","CTP_CTPIN_MU","CTP_CTPIN_JET2","TOPO_inputs","TOPO_outputs","TOPO_misconf_calib","TOPO_misconf_electronics","TOPO_off","TOPO_readout","CAL_LOWMUCONFIG_IN_HIGHMU"] # Trig_L1 system
782 defects0["globTol"] = ["CAL_coverage_tolerable","CAL_misconf_calib_tolerable","CAL_misconf_electronics_tolerable","CAL_misconf_satBCID_tolerable","CAL_misconf_tile_drawer","CAL_readout_cpjep_tolerable","CAL_readout_pp_tolerable","CAL_mistimed_larTBB_SEU_tolerable","CTP_NONSTANDARD_CONFIG","MUB_lost_sync_tolerable","MUB_failed_electronics_tolerable","MUB_coverage_tolerable","MUB_misconf_electronics_tolerable","MUB_LOWER_EFFICIENCY_TOLERABLE","MUE_coverage_tolerable","MUE_pt15GeV_tolerable","MUE_pt20GeV_tolerable","MUE_FakeBurst","TOPO_inputs_tolerable","TOPO_outputs_tolerable","TOPO_misconf_calib_tolerable","TOPO_misconf_electronics_tolerable","TOPO_readout_tolerable","TOPO_readout_roib","TOPO_not_good_for_physics"] # Trig_L1 system
783
784 veto["all"] = [] # Veto name as defined in the COOL database
785 veto["COOL"] = {} # Veto name as defined in the COOL database
786
787 defectVeto["description"] = {"CAL_coverage":"",
788 "CAL_misconf_calib":"[Calo] Electronics miscalibration",
789 "CAL_misconf_electronics":"[Calo] Electronics misconfiguration",
790 "CAL_misconf_satBCID":"",
791 "CAL_off":"[Calo] L1Calo off",
792 "CAL_mistimed_larTBB_SEU_tolerable":"[LAr] TBB SEU leading to mistiming",
793 "CAL_LOWMUCONFIG_IN_HIGHMU":"[Calo] Low-mu configuration in high-mu run",
794 "MUB_busy":"[Muon] Busy",
795 "MUB_coverage":"[Muon] Barrel coverage",
796 "MUB_failed_electronics":"[Muon] Electronics failure",
797 "MUB_lost_sync":"[Muon] Lost synchr.",
798 "MUB_misconf_electronics":"[Muon] Electronics misconfig",
799 "MUE_busy":"[Muon] Busy",
800 "MUE_coverage":"[Muon] Forward coverage",
801 "MUE_misconf_electronics":"[Muon] Electronics misconfig",
802 "MUE_pt15GeV":"[Muon] Pt15GeV",
803 "MUE_pt20GeV":"[Muon] Pt20GeV",
804 "CTP_wrong_BGK":"[CTP] Wrong bunch group key",
805 "CTP_CTPIN_MU":"[CTPIN] Cable problems for muons",
806 "CTP_CTPIN_JET2":"[CTPIN] Cable problems for jets",
807 "TOPO_misconf_electronics":"[CaloTopo] Electronics misconfiguration"}
808
809 signOff["EXPR."] = ["TRIG_L1_CAL_UNCHECKED","TRIG_L1_CTP_UNCHECKED","TRIG_L1_MUB_UNCHECKED","TRIG_L1_MUE_UNCHECKED","TRIG_L1_TOPO_UNCHECKED"]
810 signOff["BULK"] = []
811 signOff["FINAL"] = []
812
813
814 if system == "Trig_HLT":
815 partitions["color"] = {}
816 partitions["list"] = list(partitions["color"].keys())
817
818 defects0["prefix"] = ["TRIG_HLT"]
819 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
820 defects0["partIntol"] = []
821 defects0["partTol"] = []
822 # Global intolerable and tolerable defects
823 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
824 defects0["globIntol"] = ["BJT_beam_spot_flag","BJT_no_secvtx","BJT_no_tracking","BJT_INACCURATE_ONLINE_BEAMSPOT","BJT_NO_MULTIBJET","BPH_no_muon","BPH_no_tracking","CAL_LAR_SourceMajor","CAL_TILE_SourceMajor","CAL_missing_data","CAL_no_primaries","ELE_no_clustering","ELE_no_tracking","ELE_primary_chain_misconfigured","ELE_unknown","ELE_tracking_issue","GAM_no_clustering","GAM_partial_clustering","GAM_primary_chain_misconfigured","GAM_unknown","GENERAL_debugstream","GENERAL_no_primaries","GENERAL_prescale_problem","GENERAL_standby","GENERAL_xpu_misconf","IDT_EF_FAIL","IDT_IDS_FAIL","IDT_SIT_FAIL","IDT_PRIVX_INEFF","JET_algo_problem","JET_menu_misconf","JET_unknown","MBI_no_tracking","MET_missing_data","MUO_Upstream_Barrel_problem","MUO_Upstream_Endcap_problem","TAU_misconf","TAU_caloIssue","TAU_nocalo","TAU_no_tracking","TRG_HLT_TAU_tracking_issue","TAU_dbIssue_BeamSpot","IDT_PIX_DATA_ERROR","MUO_chain_disabled"] # Trig_HLT system
825 defects0["globTol"] = ["BJT_partial_tracking","BJT_unknown","BJT_ONLINE_BEAMSPOT_GT1p6MM","BJT_ONLINE_BEAMSPOT_GT2MM","BPH_algcrash","BPH_misconf","BPH_partial_muon","BPH_partial_tracking","BPH_unknown","CAL_LAR_SourceMinor","CAL_ROI_EXCESS","CAL_TILE_SourceMinor","CAL_partial_missing_data","CAL_spike","CAL_incorrect_BCID_correction","CAL_unknown","ELE_chain_misconfigured","ELE_clustering_issue","ELE_lowEfficiency_all_electrons","ELE_non_primary_poor_performance_e15_HLTtighter","ELE_non_primary_poor_performance_e15_tight","ELE_nonprimary_misconfigured","ELE_partial_clustering","ELE_partial_tracking","ELE_primary_poor_performance_e20_medium1","ELE_primary_poor_performance_e22_medium1","ELE_tracking_issue_Tolerable","GAM_chain_misconfigured","GAM_clustering_issue","GAM_nonprimary_misconfigured","GENERAL_streaming","GENERAL_tolerableDebugstream","GENERAL_no_1e34_primaries","GENERAL_no_12e33_primaries","GENERAL_no_15e33_primaries","GENERAL_no_17e33_primaries","IDT_BSPOT_FAILUR","IDT_BSPOT_INVALID_STATUS","IDT_BSPOT_INVALIDATOR_PROBLEM","IDT_EFT_FAIL","IDT_LOWSTAT","IDT_SCT_OUTOFTIMEHITS","IDT_TRT_DATA_LOST","IDT_TRT_OUTOFTIMEHITS","IDT_TSF_FAIL","IDT_unknown","JET_calib_issue","JET_energy_excess","JET_GSC_BEAMSPOT_PROBLEM","JET_hotspot","JET_partialscan_issue","MBI_HI_time_shift_mbts","MBI_partial_tracking","MBI_unknown","MBI_spacepoint_noise","MET_XS_Triggers_OFF","MET_missingEt_spike","MET_partial_missing_data","MET_phi_spike","MET_sumEt_spike","MET_unknown","MUO_EFMSonly_problem","MUO_Fullscan_problem","MUO_L2Iso_problem","MUO_L2muonSA_problem","MUO_MSonly_Barrel_problem","MUO_MSonly_Endcapl_problem","MUO_MuComb_problem","MUO_MuGirl_problem","MUO_Multi_Muon_problemchains","MUO_MuonEFTrackIso_problem","MUO_MuonEF_problem","MUO_Slow_problem","MUO_unknown","MUO_chain_misconfigured","TAU_unknown","TAU_dbIssue_mu","TAU_tracking_issue_Tolerable"] # Trig_HLT system
826
827 veto["all"] = [] # Veto name as defined in the COOL database
828 veto["COOL"] = {} # Veto name as defined in the COOL database
829
830 defectVeto["description"] = {"CAL_LAR_SourceMajor":"[LAr] Major problem",
831 "CAL_no_primaries":"[Calo] No primaries",
832 "GENERAL_no_primaries":"No primaries",
833 "GENERAL_prescale_problem":"Prescale problem",
834 "MUO_Upstream_Barrel_problem":"[Muon] Upstream barrel problem",
835 "BJT_INACCURATE_ONLINE_BEAMSPOT":"Inaccurate online beam spot",
836 "BJT_ONLINE_BEAMSPOT_GT1p6MM":"Online beam spot > 1.6mm",
837 "BJT_ONLINE_BEAMSPOT_GT2MM":"Online beam spot > 2mm",
838 "BJT_beam_spot_flag":"Beam spot flag",
839 "BJT_NO_MULTIBJET":"No multi b-jets",
840 "GENERAL_debugstream":"Problem in debug stream",
841 "BJT_no_secvtx":"[b-jet] No Secondary vertex",
842 "IDT PIX DATA ERROR":""
843 }
844
845 signOff["EXPR."] = ["TRIG_HLT_BJT_UNCHECKED","TRIG_HLT_BPH_UNCHECKED","TRIG_HLT_CAL_UNCHECKED","TRIG_HLT_ELE_UNCHECKED","TRIG_HLT_GAM_UNCHECKED","TRIG_HLT_IDT_UNCHECKED","TRIG_HLT_JET_UNCHECKED","TRIG_HLT_MBI_UNCHECKED","TRIG_HLT_MET_UNCHECKED","TRIG_HLT_MUO_UNCHECKED","TRIG_HLT_TAU_UNCHECKED"]
846 signOff["BULK"] = []
847 signOff["FINAL"] = []
848
849
851 if system == "Lumi":
852 partitions["color"] = { } # No partition needed
853
854 partitions["list"] = list(partitions["color"].keys())
855
856 defects0["prefix"] = ["LUMI"]
857 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
858 defects0["partIntol"] = [] # No partition defect
859 defects0["partTol"] = []
860 # Global intolerable and tolerable defects
861 defects0["globIntol"] = ["BEAMS_MOVING","CALIB_UNCERTAIN","CTP_ERROR","EMITTANCESCAN","INFR_ERROR","LCD_MISSINGCURRENT","OLC2COOL_FAILURE","ONLINEDB_ERROR","ONL_DET_ERROR_SEVERE","ONL_OLC2HLT_SEVERE","ONL_ONLINEDB_ERROR","PERBCIDINFO_ABSENT","UNKNOWN","VDM"] # Lumi system
862 defects0["globTol"] = []
863
864
865 defectVeto["description"] = {"BEAMS_MOVING":"Beams moving",
866 "CALIB_UNCERTAIN":"Uncertain calibration",
867 "CTP_ERROR":"CTP error",
868 "EMITTANCESCAN":"Emittance scan",
869 "INFR_ERROR":"Infr. error",
870 "LCD_MISSINGCURRENT":"Missing LCD current",
871 "OLC2COOL_FAILURE":"OLC2COOL failure",
872 "ONLINEDB_ERROR":"Online DB error",
873 "ONL_DET_ERROR_SEVERE":"Detector error",
874 "ONL_OLC2HLT_SEVERE":"OLC2HLT error",
875 "ONL_ONLINEDB_ERROR":"Online DB error",
876 "PERBCIDINFO_ABSENT":"Missing per BCID info",
877 "UNKNOWN":"Unknown",
878 "VDM":"VDM scan"}
879
880 veto["all"] = [] # Veto name as defined in the COOL database
881 veto["COOL"] = {} # Veto name as defined in the COOL database
882
883 signOff["EXPR."] = ['LUMI_UNCHECKED']
884 signOff["BULK"] = []
885 signOff["FINAL"] = []
886
887
888 if system == "LUCID":
889 partitions["color"] = {}
890 partitions["list"] = list(partitions["color"].keys())
891
892 defects0["prefix"] = ["LCD"]
893 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
894 defects0["partIntol"] = []
895 defects0["partTol"] = []
896 # Global intolerable and tolerable defects
897 defects0["globIntol"] = ["DAQ_ERROR","DISABLED","GAS_CHANGING","HV_CHANGE","HV_RESET","LUMAT_ERROR","MAGNETS_RAMPING","MDA_FAIL"]
898 defects0["globTol"] = ["LCD_HV_OFF","LCD_LEDBOARD_ERROR","LCD_LV_OFF"]
899
900 veto["all"] = [] # Veto name as defined in the COOL database
901 veto["COOL"] = {} # Veto name as defined in the COOL database
902
903 defectVeto["description"] = {"DAQ_ERROR":"DAQ error",
904 "DISABLED":"Disabled",
905 "GAS_CHANGING":"Gas changing",
906 "HV_CHANGE":"HV change",
907 "HV_RESET":"HV reset",
908 "LUMAT_ERROR":"Lumat error",
909 "MAGNETS_RAMPING":"Ramping magnets",
910 "MDA_FAIL":"MDA fail"}
911
912 signOff["EXPR."] = ["LCD_UNCHECKED"]
913 signOff["BULK"] = []
914 signOff["FINAL"] = []
915
916
917 if system == "ALFA":
918 partitions["color"] = {}
919 partitions["list"] = list(partitions["color"].keys())
920
921 defects0["prefix"] = ["ALFA"]
922 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
923 defects0["partIntol"] = []
924 defects0["partTol"] = []
925 # Global intolerable and tolerable defects
926 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
927 defects0["globIntol"] = ["MISSING_TRIGGER","WRONG_POSITION","MISSING_PMF_5orMore"] # ALFA system
928 defects0["globTol"] = ["MISSING_PMF_1to4"] # ALFA system
929
930 veto["all"] = [] # Veto name as defined in the COOL database
931 veto["COOL"] = {} # Veto name as defined in the COOL database
932
933 defectVeto["description"] = {"MISSING_TRIGGER":"Missing trigger",
934 "WRONG_POSITION":"Wrong position",
935 "MISSING_PMF_5orMore":"Missing PMF"}
936
937 signOff["EXPR."] = []
938 signOff["BULK"] = []
939 signOff["FINAL"] = []
940
941
942 if system == "AFP":
943 partitions["color"] = {'C':kYellow-9,'A':kYellow,'C_FAR':kOrange,'C_NEAR':kOrange-3,'A_FAR':kRed-3,'A_NEAR':kBlue-3}
944 partitions["list"] = partitions["color"].keys()
945
946 defects0["prefix"] = ["AFP"]
947 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
948 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
949 defects0["partIntol"] = ["TOF_NOT_OPERATIONAL_HV","TOF_NOT_OPERATIONAL_LV","TOF_WRONG_CABLING","TOF_WRONG_TIMING","TOF_TRIGGER_PROBLEM","SIT_NOT_OPERATIONAL_HV","SIT_NOT_OPERATIONAL_LV","SIT_NOT_OPERATIONAL","SIT_WRONG_TIMING","IN_GARAGE"] # AFP system
950 defects0["partTol"] = [] # AFP system
951 # Global intolerable and tolerable defects
952 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
953 defects0["globIntol"] = ["WRONG_MAPPING","ERROR"] # AFP system
954 defects0["globTol"] = [] # AFP system
955
956 veto["all"] = [] # Veto name as defined in the COOL database
957 veto["COOL"] = {} # Veto name as defined in the COOL database
958
959 defectVeto["description"] = {"TOF_NOT_OPERATIONAL_HV":"[ToF] Non-nominal HV",
960 "TOF_NOT_OPERATIONAL_LV":"[ToF] Non-operational LV",
961 "TOF_WRONG_CABLING":"[ToF] Wrong cabling",
962 "TOF_WRONG_TIMING":"[ToF] Wrong timing",
963 "TOF_TRIGGER_PROBLEM":"[ToF] Trigger problem",
964 "SIT_NOT_OPERATIONAL_HV":"[SiT] < 3 planes at nominal HV",
965 "SIT_NOT_OPERATIONAL_LV":"[SiT] < 3 planes available (LV)",
966 "SIT_NOT_OPERATIONAL":"[SiT] < 3 SiT planes available",
967 "SIT_WRONG_TIMING":"[SiT] Wrong timing",
968 "IN_GARAGE":">= 1 RP in the garage or moving",
969 "WRONG_MAPPING":"[ToF] Wrong mapping",
970 "ERROR":"Unknown problem"}
971
972 signOff["EXPR."] = ["AFP_UNCHECKED"]
973 signOff["BULK"] = ["AFP_BULK_UNCHECKED"]
974 signOff["FINAL"] = []
975
976
977
978 if system == "ZDC":
979 partitions["color"] = {}
980 partitions["list"] = list(partitions["color"].keys())
981
982 defects0["prefix"] = ["ALPHA"]
983 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
984 defects0["partIntol"] = []
985 defects0["partTol"] = []
986 # Global intolerable and tolerable defects
987 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
988 defects0["globIntol"] = ["SEVUNKNOWN"] # ZDC system
989 defects0["globTol"] = ["ZDC_NONOPTIMALHV","ZDC_NONOPTIMALTIMING","ZDC_PERBCIDINFO_ABSENT","ZDC_UNKNOWN"] # ZDC system
990
991 veto["all"] = [] # Veto name as defined in the COOL database
992 veto["COOL"] = {} # Veto name as defined in the COOL database
993
994 defectVeto["description"] = {}
995
996 signOff["EXPR."] = []
997 signOff["BULK"] = []
998 signOff["FINAL"] = []
999
1000
1001 if system == "Global":
1002 partitions["color"] = {}
1003 partitions["list"] = list(partitions["color"].keys())
1004
1005 defects0["prefix"] = ["GLOBAL"]
1006 # Partition intolerable and tolerable defects - Order determines what defect is proeminent
1007 defects0["partIntol"] = []
1008 defects0["partTol"] = []
1009 # Global intolerable and tolerable defects
1010 # Warning : do not remove/edit the comment specifying the system. It is used to display the defects in the webpage
1011 defects0["globIntol"] = ["BUSY_GREATER50PCT","LOWMUCONFIG_IN_HIGHMU","OFFLINE_PROCESSING_PROBLEM","SOLENOID_OFF","SOLENOID_RAMPING","SOLENOID_NOTNOMINAL","TOROID_OFF","TOROID_NOTNOMINAL","TOROID_RAMPING", "NOTCONSIDERED","LHC_HIGHBETA","NONSTANDARD_BC","LOW_N_BUNCHES"] # Global system
1012 defects0["globTol"] = [] # Global system
1013
1014 veto["all"] = [] # Veto name as defined in the COOL database
1015 veto["COOL"] = {} # Veto name as defined in the COOL database
1016
1017 defectVeto["description"] = {"BUSY_GREATER50PCT":"Busy",
1018 "LOWMUCONFIG_IN_HIGHMU":"Low mu config in high mu",
1019 "OFFLINE_PROCESSING_PROBLEM":"Offline processing problem",
1020 "SOLENOID_OFF":"Solenoid off",
1021 "SOLENOID_RAMPING":"Solenoid ramping",
1022 "SOLENOID_NOTNOMINAL":"Solenoid not nominal",
1023 "TOROID_OFF":"Toroid off",
1024 "TOROID_NOTNOMINAL":"Toroid not nominal",
1025 "TOROID_RAMPING":"Toroid ramping",
1026 "NOTCONSIDERED":"Not considered",
1027 "LHC_HIGHBETA":"LHC: high beta*",
1028 "NONSTANDARD_BC":"LHC: non standard BC",
1029 "LOW_N_BUNCHES":"LHC: low nbunches"
1030 }
1031
1032 signOff["EXPR."] = []
1033 signOff["BULK"] = []
1034 signOff["FINAL"] = []
1035
1036
1039 defects0["globalFilterDefects"] = ["GLOBAL_LHC_50NS","GLOBAL_LHC_NONSTANDARD_BC","GLOBAL_LHC_LOW_N_BUNCHES","GLOBAL_LHC_NOBUNCHTRAIN","GLOBAL_LHC_COMMISSIONING","GLOBAL_LHC_HIGHBETA","GLOBAL_LOWMUCONFIG_IN_HIGHMU","LUMI_VDM","GLOBAL_NOTCONSIDERED"]
1040 if system == "Global": # In the case of the Global system, do not apply global filtering as they may be common intolerable defects.
1041 for iDef in defects0["globalFilterDefects"]:
1042 if iDef not in defects0["globIntol"]:
1043 defects0["globIntol"].append(iDef)
1044 defects0["globalFilterDefects"] = []
1045
1046 defects0["part"] = defects0["partIntol"] + defects0["partTol"]
1047 defects0["glob"] = defects0["globIntol"] + defects0["globTol"]
1048
1049 defects0["intol"] = defects0["globIntol"] + defects0["partIntol"]
1050 defects0["tol"] = defects0["globTol"] + defects0["partTol"]
1051
1052 defects0["partIntol_recov"] = []
1053 defects0["globIntol_recov"] = []
1054 for idef in defects0["partIntol"]: # Create a duplicated list of intol defect to monitor the recoverability
1055 defects0["partIntol_recov"].append("%s__recov"%idef)
1056 for idef in defects0["globIntol"]: # Create a duplicated list of intol defect to monitor the recoverability
1057 defects0["globIntol_recov"].append("%s__recov"%idef)
1058 defects0["intol_recov"] = defects0["partIntol_recov"] + defects0["globIntol_recov"]
1059
1060# If the description is not available, define it with the defect name
1061 for iDef in defects0["intol"]+defects0["tol"]:
1062 if iDef not in list(defectVeto["description"].keys()):
1063 defectVeto["description"][iDef] = iDef
1064
1065# New dynamic way to define the color for the defect affecting the year / tag
1066 defectVeto["color"] = {}
1067 iColor=0
1068 for iDefectVeto in list(defectVeto["description"].keys()):
1069 # If more than 12 defects affecting a system, add new color in vector below - https://root.cern.ch/doc/master/pict1_TColor_002.png
1070 colorPalette = [kBlue+3,kRed+1,kGreen-2,kOrange,kBlue-4,kMagenta+2,kYellow+1,kSpring-9,kAzure+6,kViolet-4,kPink,kBlue-9,kPink-6]
1071 if (os.path.exists("YearStats-%s/%s/%s/loss-%s.dat"%(system,year,tag,iDefectVeto))) and iColor<len(colorPalette):
1072 defectVeto["color"][iDefectVeto] = colorPalette[iColor]
1073 iColor = iColor + 1
1074 else:
1075 defectVeto["color"][iDefectVeto] = kBlack
1076
1077 if (system == "LAr"):
1078 defectVeto["color"]["noiseBurst"] = kBlue-2
1079 defectVeto["color"]["miniNoiseBurst"] = kMagenta+1
1080 defectVeto["color"]["corruption"] = kAzure+9
1081
1082
1083# The definition below are there only to avoid crashed, as these summed histogram are not (yet?) displayed
1084 defectVeto["description"]["allIntol"] = "Dummy"
1085 defectVeto["description"]["allIntol_recov"] = "Dummy"
1086 defectVeto["color"]["allIntol"] = kBlack
1087 defectVeto["color"]["allIntol_recov"] = kBlack
1088 defectVeto["description"]["allVeto"] = "Dummy"
1089 defectVeto["color"]["allVeto"] = kBlack
1090
1091 return True
void print(char *figname, TCanvas *c1)
TGraphErrors * GetEntries(TH2F *histo)
#define max(a, b)
Definition cfImp.cxx:41
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:310
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177
strLumi(lumi, unit="ub", latex=True, floatNumber=False)
Return a string with the luminosity in a human readable way If the unit is %%, this is a percentage.
Definition DeMoLib.py:86
MakeTProfile(name, xtitle, ytitle, xmin, xmax, nbins, color)
Definition DeMoLib.py:18
MakeTH1(name, xtitle, ytitle, xmin, xmax, nbins, color)
Definition DeMoLib.py:30
plotStack(name, histo, index, indexName, histoIntLumi, lumiBool, resStack, resCanvas, resLegend, recovBool=True, compBool=False, approvedPlots=False)
Definition DeMoLib.py:118
returnPeriod(runNb, system, year, tag)
Return the data period of a run based on the information stored in YearStats-[system]/[year]/[tag]/ru...
Definition DeMoLib.py:56
initializeMonitoredDefects(system, partitions, defects0, defectVeto, veto, signOff, year, tag, runlist={})
Definition DeMoLib.py:294
retrieveYearTagProperties(year, tag)
Return the year/tag properties (defect/veto/lumi tags...) stored in YearStats-common/DeMoConfig-[year...
Definition DeMoLib.py:68
MakeLegend(xmin, ymin, xmax, ymax)
Definition DeMoLib.py:46
SetXLabel(h, list)
Definition DeMoLib.py:41
#define IsA
Declare the TObject style functions.