ATLAS Offline Software
pix_defect.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
2 
3 from ROOT import gROOT, TFile
4 import collections
5 defect_val = collections.namedtuple('defect_val',
6  'defect, comment, recoverable')
7 defect_iov = collections.namedtuple('defect_iov',
8  'defect, comment, recoverable, since, until')
9 
10 
11 
12 def find_standby(nlayer, hhits, lb_max, standby_lb):
13  threshold_hit = 10
14  for i in range(0, nlayer):
15  start = 0
16  start_lb = 0
17  end_lb = 0
18 
19  nbin = hhits[i].GetNbinsX()
20 
21  start_lb = 0
22  for j in range(1, nbin-1):
23  val = hhits[i].GetBinContent(j+1)
24  if val >= threshold_hit:
25  end_lb = j
26  if start_lb == 0:
27  start_lb = j
28 
29  for j in range(1, nbin-1):
30  #val_global = hglobal.GetBinContent(j+1)
31  val = hhits[i].GetBinContent(j+1)
32  if val < threshold_hit:
33  if start == 0:
34  start = 1
35  start_lb = j
36  elif start == 1:
37  if j > start_lb and j < end_lb:
38  standby_lb.append([i, start_lb, j-1])
39  start = 0
40  start_lb = 0
41  if start == 1:
42  if lb_max > start_lb:
43  standby_lb.append([i, start_lb, lb_max])
44 
45 
46 def find_notready(nlayer, hist, pct_low, pct_high, notready_lb, lb_max=2000):
47 
48  for i in range(0, nlayer):
49  start = 0
50  start_lb = 0
51 
52  nbin = hist[i].GetNbinsX()
53  if i == 2:
54  for j in range(1, nbin-1):
55  val = hist[2].GetBinContent(
56  j+1)*38/90 + hist[3].GetBinContent(j+1)*52/90
57  if val >= pct_low and val < pct_high:
58  if start == 0:
59  start = 1
60  start_lb = j
61  elif start == 1:
62  notready_lb.append([i, start_lb, j-1])
63  start = 0
64  start_lb = 0
65  if start == 1:
66  notready_lb.append([i, start_lb, lb_max])
67  elif i == 3:
68  # nothing to do
69  pass
70  else:
71  for j in range(1, nbin-1):
72  val = hist[i].GetBinContent(j+1)
73  if val >= pct_low and val < pct_high:
74  if start == 0:
75  start = 1
76  start_lb = j
77  elif start == 1:
78  notready_lb.append([i, start_lb, j-1])
79  start = 0
80  start_lb = 0
81  if start == 1:
82  notready_lb.append([i, start_lb, lb_max])
83 
84 
85 def find_btagdeg(hist, pct_low, pct_high, btagdeg_lb, lb_max):
86  start = 0
87  start_lb = 0
88 
89  nbin = hist.GetNbinsX()
90  for i in range(1, nbin-1):
91  val = hist.GetBinContent(i+1)
92  if val >= pct_low and val < pct_high:
93  if start == 0:
94  start = 1
95  start_lb = i
96  elif start == 1:
97  btagdeg_lb.append([start_lb, i-1])
98  start = 0
99  start_lb = 0
100  if start == 1:
101  btagdeg_lb.append([start_lb, lb_max])
102 
103 
104 def print_def(defect_name, defect_lb):
105  for i in range(0, len(defect_lb)):
106  print(defect_name, "[", defect_lb[i][0], "]:", defect_lb[i][1], "-", defect_lb[i][2])
107 
108 def print_btagdegdef(defect_name, defect_lb):
109  for i in range(0, len(defect_lb)):
110  print(defect_name, ": ", defect_lb[i][0], "-", defect_lb[i][1])
111 
112 
113 def assign_defect(db, defect_name, run, defect_lb):
114  for i in range(0, len(defect_lb)):
115  layer = defect_lb[i][0]
116  if layer == 0:
117  slayer = "IBL"
118  elif layer == 1:
119  slayer = "LAYER0"
120  elif layer == 2:
121  slayer = "BARREL"
122  elif layer == 3:
123  slayer = "BARREL"
124  elif layer == 4:
125  slayer = "ENDCAPA"
126  elif layer == 5:
127  slayer = "ENDCAPC"
128 
129  sdefect = "PIXEL_" + slayer + "_" + defect_name
130 
131  lbstart = defect_lb[i][1]
132  lbend = defect_lb[i][2]
133 
134  start = (run << 32) + lbstart
135  until = (run << 32) + lbend + 1
136 
137  #print(sdefect, ": LB = ", lbstart,"-",lbend,")")
138  comment = "assign " + sdefect
139  db.append(defect_iov(sdefect, comment, False, start, until))
140 
141 
142 
143 def assign_lowstat(db, run, comment):
144  sdefect = "PIXEL_LOWSTAT"
145  lbstart = 1
146  lbend = 2000
147  start = (run << 32) + lbstart
148  until = (run << 32) + lbend + 1
149  #print(sdefect, ": LB = ", lbstart,"-",lbend,")")
150  db.append(defect_iov(sdefect, comment, False, start, until))
151 
152 
153 def assign_btagdegdef(db, defect_name, run, defect_lb):
154  for i in range(0, len(defect_lb)):
155  sdefect = "PIXEL_" + defect_name
156  lbstart = defect_lb[i][0]
157  lbend = defect_lb[i][1]
158 
159  start = (run << 32) + lbstart
160  until = (run << 32) + lbend + 1
161 
162  comment = "assign " + sdefect
163  db.append(defect_iov(sdefect, comment, False, start, until))
164 
165 
166 
167 def execute(run, sfile, lb_max):
168  db = []
169  gROOT.Reset()
170  file = TFile(sfile)
171 
172  shits = []
173  shits.append("InnerDetector/Pixel/IBL/Hits/AvgOccActivePerLumi_IBL2D")
174  shits.append("InnerDetector/Pixel/BLayer/Hits/AvgOccActivePerLumi_BLayer")
175  shits.append("InnerDetector/Pixel/Layer1/Hits/AvgOccActivePerLumi_Layer1")
176  shits.append("InnerDetector/Pixel/Layer2/Hits/AvgOccActivePerLumi_Layer2")
177  shits.append("InnerDetector/Pixel/ECA/Hits/AvgOccActivePerLumi_ECA")
178  shits.append("InnerDetector/Pixel/ECC/Hits/AvgOccActivePerLumi_ECC")
179 
180  sbtagdeg = "InnerDetector/Pixel/PixelExpert/BTagDegEstimation/TotalDegradationPerLumi"
181 
182  sclus = "Global/Luminosity/AnyTrigger/nClustersAll_vs_LB"
183 
184  nlayer = 6
185  hhits = []
186  fexist_hhits = True
187  for i in range(0, nlayer):
188  if not file.Get(shits[i]):
189  fexist_hhits = False
190  continue
191 
192  hhits.append(file.Get(shits[i]))
193 
194  standby_lb = []
195  if fexist_hhits is True:
196  find_standby(nlayer, hhits, lb_max, standby_lb)
197 
198  #print_def("standby", standby_lb)
199  #user = "atlpixdq"
200  #assign_defect(db, "STANDBY", run, standby_lb)
201 
202  fexist_hbtagdeg = True
203  hbtagdeg = file.Get(sbtagdeg)
204  if not hbtagdeg:
205  fexist_hbtagdeg = False
206  btagdegestim_tolerable_lb = []
207  btagdegestim_intolerable_lb = []
208 
209  if fexist_hhits is True and fexist_hbtagdeg is True:
210  find_btagdeg(hbtagdeg, 0.05, 0.25, btagdegestim_tolerable_lb, lb_max)
211  find_btagdeg(hbtagdeg, 0.25, 1., btagdegestim_intolerable_lb, lb_max)
212 
213  if 0:
214  print_btagdegdef("tolerable", btagdegestim_tolerable_lb)
215  print_btagdegdef("intolerable", btagdegestim_intolerable_lb)
216 
217  if 1:
218  assign_btagdegdef(db, "PERFORMANCE_TOLERABLE", run, btagdegestim_tolerable_lb)
219  assign_btagdegdef(db, "PERFORMANCE_INTOLERABLE", run, btagdegestim_intolerable_lb)
220 
221  fexist_hclus = True
222  hclus = file.Get(sclus)
223  if not hclus:
224  fexist_hclus = False
225  if fexist_hclus is True:
226  nevent = hclus.GetEntries()
227  if nevent < 100000:
228  assign_lowstat(db, run, "assign PIXEL_LOWSTAT")
229 
230  return db
python.pix_defect.assign_lowstat
def assign_lowstat(db, run, comment)
Definition: pix_defect.py:143
python.pix_defect.assign_btagdegdef
def assign_btagdegdef(db, defect_name, run, defect_lb)
Definition: pix_defect.py:153
python.pix_defect.execute
def execute(run, sfile, lb_max)
Definition: pix_defect.py:167
python.pix_defect.find_standby
def find_standby(nlayer, hhits, lb_max, standby_lb)
Definition: pix_defect.py:12
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:26
python.pix_defect.print_def
def print_def(defect_name, defect_lb)
Definition: pix_defect.py:104
python.pix_defect.defect_iov
defect_iov
Definition: pix_defect.py:7
python.pix_defect.assign_defect
def assign_defect(db, defect_name, run, defect_lb)
Definition: pix_defect.py:113
python.pix_defect.find_btagdeg
def find_btagdeg(hist, pct_low, pct_high, btagdeg_lb, lb_max)
Definition: pix_defect.py:85
python.pix_defect.find_notready
def find_notready(nlayer, hist, pct_low, pct_high, notready_lb, lb_max=2000)
Definition: pix_defect.py:46
python.pix_defect.print_btagdegdef
def print_btagdegdef(defect_name, defect_lb)
Definition: pix_defect.py:108