CMS 3D CMS Logo

MergeOccDeadROC.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 
3 from __future__ import print_function
4 import ROOT
5 from ROOT import TBufferFile, TH1F, TProfile, TProfile2D, TH2F, TFile, TH1D, TH2D
6 import re
7 import os
8 
9 
10 def draw_line(lineList,x1,x2,y1,y2,width=1,style=1,color=1):
11  from ROOT import TLine
12  l=TLine(x1,y1,x2,y2)
13  l.SetBit(ROOT.kCanDelete)
14  l.SetLineWidth(width)
15  l.SetLineStyle(style)
16  l.SetLineColor(color)
17  l.Draw()
18  lineList.append(l)
19 
20 def draw_box(boxList,xl,xr,yl,yr,opacity=1,color=1,style=1001,lstyle=1,lw=3):
21  from ROOT import TBox
22  b=TBox(xl,yl,xr,yr)
23  b.SetBit(ROOT.kCanDelete)
24  b.SetFillStyle(style)
25  b.SetFillColorAlpha(color, opacity)
26  b.SetLineColor(color)
27  b.SetLineWidth(lw)
28  b.SetLineStyle(lstyle)
29  b.Draw()
30  boxList.append(b)
31 
32 def renderPluginBPIX(lineList,layer) :
33  from ROOT import TCanvas,TLine
34  nlad=[6,14,22,32]
35  coordSign=[(-1,-1),(-1,1),(1,-1),(1,1)]
36  for xsign,ysign in coordSign:
37  xlow = xsign*0.5
38  xhigh= xsign*(0.5+4)
39  ylow = ysign*0.5
40  yhigh= ysign*(0.5 + nlad[layer-1])
41  # Outside Box
42  draw_line(lineList,xlow, xhigh, ylow, ylow) # bottom
43  draw_line(lineList,xlow, xhigh, yhigh, yhigh) # top
44  draw_line(lineList,xlow, xlow, ylow, yhigh) # left
45  draw_line(lineList,xhigh, xhigh, ylow, yhigh) # right
46  # Inner Horizontal lines
47  for lad in range(nlad[layer-1]):
48  lad+=1
49  if lad != nlad[layer-1]:
50  y = ysign * (lad+0.5)
51  draw_line(lineList,xlow, xhigh, y, y)
52  y = ysign * (lad);
53  draw_line(lineList,xlow, xhigh, y, y, 1, 3);
54  # Inner Vertical lines
55  for mod in range(3) :
56  mod+=1
57  x = xsign * (mod + 0.5);
58  draw_line(lineList,x, x, ylow, yhigh);
59 
60  # Draw ROC0
61  for mod in range(4):
62  mod+=1
63  for lad in range(nlad[layer-1]):
64  lad+=1
65  if ysign==1:
66  flipped = not(lad%2==0)
67  else :
68  flipped = not(lad%2==1)
69  if flipped : roc0_orientation = -1
70  else : roc0_orientation = 1
71  if xsign==-1 : roc0_orientation *= -1
72  if ysign==-1 : roc0_orientation *= -1
73  x1 = xsign * (mod+0.5)
74  x2 = xsign * (mod+0.5 - 1./8);
75  y1 = ysign * (lad)
76  y2 = ysign * (lad + roc0_orientation*1./2)
77  if layer == 1 and xsign == -1 :
78  x1 = xsign * (mod-0.5)
79  x2 = xsign * (mod-0.5 + 1./8)
80  y1 = ysign * (lad)
81  y2 = ysign * (lad - roc0_orientation*1./2)
82 
83  draw_line(lineList,x1, x2, y1, y1, 1)
84  draw_line(lineList,x2, x2, y1, y2, 1)
85 
86  else:
87  draw_line(lineList,x1, x2, y1, y1, 1)
88  draw_line(lineList,x2, x2, y1, y2, 1)
89 
90 def maskBPixROC(boxList,xsign,ysign,layer,lad,mod,roc):
91  if roc<8 :
92  rocShiftX=roc*1./8
93  rocShiftY=0
94  else :
95  rocShiftX=(15-roc)*1./8
96  rocShiftY=1./2
97  if ysign==1:
98  flipped = not(lad%2==0)
99  else :
100  flipped = not(lad%2==1)
101  if flipped : roc0_orientation = -1
102  else : roc0_orientation = 1
103  if xsign==-1 : roc0_orientation *= -1
104  if ysign==-1 : roc0_orientation *= -1
105  x1 = xsign * (mod+0.5-rocShiftX)
106  x2 = xsign * (mod+0.5 - 1./8-rocShiftX);
107  y1 = ysign * (lad-roc0_orientation*rocShiftY)
108  y2 = ysign * (lad + roc0_orientation*1./2-roc0_orientation*rocShiftY)
109  if layer == 1 and xsign == -1 :
110  x1 = xsign * (mod-0.5)-rocShiftX
111  x2 = xsign * (mod-0.5 + 1./8)-rocShiftX
112  y1 = ysign * (lad +rocShiftY)
113  y2 = ysign * (lad - roc0_orientation*1./2+rocShiftY)
114  draw_box(boxList,min(x1,x2),max(x1,x2),min(y1, y2),max(y1,y2),0.75)
115 
116 
117 
118 def renderPluginFPIX(lineList,ring) :
119  from ROOT import TCanvas,TLine
120  coordSign=[(-1,-1),(-1,1),(1,-1),(1,1)]
121  for dsk in range(3) :
122  dsk+=1
123  for xsign,ysign in coordSign:
124  for bld in range(5+ring*6):
125  bld+=1
126  # Panel 2 has dashed mid-plane
127  x1 = xsign * (0.5 + dsk - 1)
128  x2 = xsign * (0.5 + dsk)
129  sign = ysign
130  y1 = ysign * (bld + sign*0.5)
131  y2 = ysign * (bld)
132  yp2_mid = ysign * (bld - sign*0.25)
133  y3 = ysign * (bld - sign*0.5)
134  draw_line(lineList,x1, x2, y1, y1)
135  draw_line(lineList,x1, x2, y2, y2)
136  draw_line(lineList,x1, x2, yp2_mid, yp2_mid,1,2)
137  draw_line(lineList,x1, x2, y3, y3)
138  # Vertical lines
139  x = xsign * (0.5 + dsk - 1)
140  draw_line(lineList,x, x, y1, y2)
141  draw_line(lineList,x, x, y2, y3)
142  if ring==2 :
143  x = xsign * (0.5 + dsk)
144  draw_line(lineList,x, x, y1, y2)
145  draw_line(lineList,x, x, y2, y3)
146  #Make a BOX around ROC 0
147  x1 = xsign * (0.5 + dsk - 1/8.)
148  x2 = xsign * (0.5 + dsk)
149  y1_p1 = ysign * (bld + sign*0.25)
150  y2_p1 = ysign * (bld + sign*0.25 + xsign*ysign*0.25)
151  draw_line(lineList,x1, x2, y1_p1, y1_p1, 1)
152  draw_line(lineList,x1, x1, y1_p1, y2_p1, 1)
153  y1_p2 = ysign * (bld - sign*0.25)
154  y2_p2 = ysign * (bld - sign*0.25 - xsign*ysign*0.25)
155  draw_line(lineList,x1, x2, y1_p2, y1_p2)
156  draw_line(lineList,x1, x1, y1_p2, y2_p2)
157 
158 def maskFPixROC(boxList,xsign,ysign,dsk,bld,pnl,roc) :
159  from ROOT import TCanvas,TLine
160  if roc<8 :
161  rocShiftX=roc*1./8
162  rocShiftY=0
163  else :
164  rocShiftX=(15-roc)*1./8
165  rocShiftY=1./4
166  sign=ysign
167  x1 = xsign * (0.5 + dsk - 1/8.-rocShiftX)
168  x2 = xsign * (0.5 + dsk-rocShiftX)
169  if pnl==1:
170  y1 = ysign * (bld + sign*0.25)-xsign*rocShiftY
171  y2 = ysign * (bld + sign*0.25 + xsign*ysign*0.25)-xsign*rocShiftY
172  else:
173  y1 = ysign * (bld - sign*0.25)+xsign*rocShiftY
174  y2 = ysign * (bld - sign*0.25 - xsign*ysign*0.25)+xsign*rocShiftY
175  draw_box(boxList,min(x1,x2),max(x1,x2),min(y1,y2),max(y1,y2),0.75)
176 
177 
178 def dqm_get_dataset(server, match, run, type="offline_data"):
179  datareq = urllib2.Request(('%s/data/json/samples?match=%s') % (server, match))
180  datareq.add_header('User-agent', ident)
181  # Get data
182  data = eval(re.sub(r"\bnan\b", "0", urllib2.build_opener(X509CertOpen()).open(datareq).read()),
183  { "__builtins__": None }, {})
184  ret = ""
185  for l in data['samples']:
186  if l['type'] == type:
187  for x in l['items']:
188  if int(x['run']) == int(run):
189  ret=x['dataset']
190  break
191  print(ret)
192  return ret
193 
194 
195 
196 
197 def main():
198  import sys
199  import os
200  import ROOT
201 
202  if len(sys.argv) != 2:
203  print("input file needed!")
204  return
205  else:
206  filename=sys.argv[1]
207  print(filename+" -- "+filename[19:25])
208  runNum=filename[19:25]
209 
210  dir="DQMData/Run " + runNum + "/PixelPhase1/Run summary/Pahse1_MechanicalView/"
211  dirFED="DQMData/Run " + runNum + "/PixelPhase1/Run summary/FED/"
212 
213 
214  dirBPix=dir + "PXBarrel/"
215  dirFPix=dir + "PXForward/"
216 
217  hoccB="digi_occupancy_per_SignedModuleCoord_per_SignedLadderCoord_PXLayer_"
218  hoccF="digi_occupancy_per_SignedDiskCoord_per_SignedBladePanelCoord_PXRing_"
219  hdeadB="Dead Channels per ROC_per_SignedModuleCoord_per_SignedLadderCoord_PXLayer_"
220  hdeadF="Dead Channels per ROC_per_SignedDiskCoord_per_SignedBladePanelCoord_PXRing_"
221 
222  ROOT.gROOT.SetBatch(1)
223  ROOT.gStyle.SetOptStat(0)
224  ROOT.gStyle.SetPalette(1) #104 kTemperatureMap // 55 kRainBow
225  ROOT.gStyle.SetNumberContours(128)
226  rootf=ROOT.TFile(filename)
227 
228 
229 
230  c=ROOT.TCanvas("c","c",1250,1000)
231  #BPIX
232  print("----> Build maps for BPix")
233  histOccList=[]
234  histDeadList=[]
235  for lyr in range(1,5):
236  histOccList.append(rootf.FindObjectAny(hoccB+str(lyr)))
237  histDeadList.append(rootf.FindObjectAny(hdeadB+str(lyr)))
238  for hist1, hist2 in zip(histOccList, histDeadList):
239  if hist1 != None or hist2 !=None:
240  hist1.Draw("colz")
241  match=re.search('(?<=PXLayer_)[0-9]',hist1.GetName())
242  if match != None and "per_SignedModuleCoord_per_SignedLadderCoord" in hist1.GetName():
243  lyr=int(match.group(0))
244  hist1.SetTitle("Digi Occupancy Layer {0}".format(lyr))
245  boxList=[]
246  lineList=[]
247  renderPluginBPIX(lineList,lyr)
248  lineWd=3
249  if lyr==4 :
250  lineWd=2
251  if lyr==1:
252  tbmRoc=4
253  else:
254  tbmRoc=8
255  binTBM=[]
256  for biny in range(1,hist2.GetNbinsY()+1):
257  if len(binTBM)!=0:
258  x1=hist2.GetXaxis().GetBinLowEdge(binTBM[0])
259  x2=hist2.GetXaxis().GetBinUpEdge(binTBM[len(binTBM)-1])
260  y1=hist2.GetYaxis().GetBinLowEdge(biny-1)
261  y2=hist2.GetYaxis().GetBinUpEdge(biny-1)
262  if hist2.GetBinContent(binTBM[0],biny-1) >= 0.97*hist2.GetMaximum():
263  draw_box(boxList,x1,x2,y1,y2,0.2,1,0,1,lineWd)
264  else:
265  draw_box(boxList,x1,x2,y1,y2,0.2,633,0,1,lineWd)
266  binTBM=[]
267  for binx in range(1,hist2.GetNbinsX()+1):
268  if hist2.GetBinContent(binx,biny)!=0:
269  if len(binTBM)==0:
270  binTBM.append(binx)
271  else:
272  if len(binTBM)==tbmRoc:
273  x1=hist2.GetXaxis().GetBinLowEdge(binTBM[0])
274  x2=hist2.GetXaxis().GetBinUpEdge(binTBM[len(binTBM)-1])
275  y1=hist2.GetYaxis().GetBinLowEdge(biny)
276  y2=hist2.GetYaxis().GetBinUpEdge(biny)
277  if hist2.GetBinContent(binTBM[0],biny) >= 0.97*hist2.GetMaximum():
278  draw_box(boxList,x1,x2,y1,y2,0.2,1,0,1,lineWd)
279  else:
280  draw_box(boxList,x1,x2,y1,y2,0.2,633,0,1,lineWd)
281  binTBM=[]
282  binTBM.append(binx)
283  else:
284  binTBM.append(binx)
285  else:
286  if len(binTBM)!=0:
287  x1=hist2.GetXaxis().GetBinLowEdge(binTBM[0])
288  x2=hist2.GetXaxis().GetBinUpEdge(binTBM[len(binTBM)-1])
289  y1=hist2.GetYaxis().GetBinLowEdge(biny)
290  y2=hist2.GetYaxis().GetBinUpEdge(biny)
291  if hist2.GetBinContent(binTBM[0],biny) >= 0.97*hist2.GetMaximum():
292  draw_box(boxList,x1,x2,y1,y2,0.2,1,0,1,lineWd)
293  else:
294  draw_box(boxList,x1,x2,y1,y2,0.2,633,0,1,lineWd)
295  c.SaveAs('MergedOccupancyDeadROC_BPix_Layer{0}_TBM.pdf'.format(lyr))
296  os.system('gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dUseCropBox -sOutputFile=MergedOccupancyDeadROC_BPix_Layer{0}_TBM.png -r144 -q MergedOccupancyDeadROC_BPix_Layer{0}_TBM.pdf'.format(lyr))
297  os.system('rm -f MergedOccupancyDeadROC_BPix_Layer{0}_TBM.pdf'.format(lyr))
298  else :
299  print("Some Error in get the histograms for FPIX")
300  #FPIX
301  print("----> Build maps for FPix")
302  for rng in range(1,3):
303  histOccList.append(rootf.FindObjectAny(hoccF+str(rng)))
304  histDeadList.append(rootf.FindObjectAny(hdeadF+str(rng)))
305  for hist1, hist2 in zip(histOccList, histDeadList):
306  if hist1 != None or hist2 !=None:
307  hist1.Draw("colz")
308  match=re.search('(?<=PXRing_)[0-9]',hist1.GetName())
309  if match != None and "per_SignedDiskCoord_per_SignedBladePanelCoord" in hist1.GetName():
310  ring=int(match.group(0))
311  hist1.SetTitle("Digi Occupancy Ring {0}".format(ring))
312  boxList=[]
313  lineList=[]
314  renderPluginFPIX(lineList,ring)
315  lineWd=3
316  if ring==2 :
317  lineWd=2
318  tbmRoc=8
319  binTBM=[]
320  for biny in range(1,hist2.GetNbinsY()+1):
321  if len(binTBM)!=0:
322  x1=hist2.GetXaxis().GetBinLowEdge(binTBM[0])
323  x2=hist2.GetXaxis().GetBinUpEdge(binTBM[len(binTBM)-1])
324  y1=hist2.GetYaxis().GetBinLowEdge(biny-1)
325  y2=hist2.GetYaxis().GetBinUpEdge(biny-1)
326  if hist2.GetBinContent(binTBM[0],biny-1) >= 0.97*hist2.GetMaximum():
327  draw_box(boxList,x1,x2,y1,y2,0.2,1,0,1,lineWd)
328  else:
329  draw_box(boxList,x1,x2,y1,y2,0.2,633,0,1,lineWd)
330  binTBM=[]
331  for binx in range(1,hist2.GetNbinsX()+1):
332  if hist2.GetBinContent(binx,biny)!=0:
333  if len(binTBM)==0:
334  binTBM.append(binx)
335  else:
336  if len(binTBM)==tbmRoc:
337  x1=hist2.GetXaxis().GetBinLowEdge(binTBM[0])
338  x2=hist2.GetXaxis().GetBinUpEdge(binTBM[len(binTBM)-1])
339  y1=hist2.GetYaxis().GetBinLowEdge(biny)
340  y2=hist2.GetYaxis().GetBinUpEdge(biny)
341  if hist2.GetBinContent(binTBM[0],biny) >= 0.97*hist2.GetMaximum():
342  draw_box(boxList,x1,x2,y1,y2,0.2,1,0,1,lineWd)
343  else:
344  draw_box(boxList,x1,x2,y1,y2,0.2,633,0,1,lineWd)
345  binTBM=[]
346  binTBM.append(binx)
347  else:
348  binTBM.append(binx)
349  else:
350  if len(binTBM)!=0:
351  x1=hist2.GetXaxis().GetBinLowEdge(binTBM[0])
352  x2=hist2.GetXaxis().GetBinUpEdge(binTBM[len(binTBM)-1])
353  y1=hist2.GetYaxis().GetBinLowEdge(biny)
354  y2=hist2.GetYaxis().GetBinUpEdge(biny)
355  if hist2.GetBinContent(binTBM[0],biny) >= 0.97*hist2.GetMaximum():
356  draw_box(boxList,x1,x2,y1,y2,0.2,1,0,1,lineWd)
357  else:
358  draw_box(boxList,x1,x2,y1,y2,0.2,633,0,1,lineWd)
359  c.SaveAs('MergedOccupancyDeadROC_FPix_Ring{0}_TBM.pdf'.format(ring))
360  os.system('gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dUseCropBox -sOutputFile=MergedOccupancyDeadROC_FPix_Ring{0}_TBM.png -r144 -q MergedOccupancyDeadROC_FPix_Ring{0}_TBM.pdf'.format(ring))
361  os.system('rm -f MergedOccupancyDeadROC_FPix_Ring{0}_TBM.pdf'.format(ring))
362 
363  else :
364  print("Some Error in get the histograms for FPIX")
365 
366 
367 
368 
369 if __name__ == '__main__':
370  main()
def draw_box(boxList, xl, xr, yl, yr, opacity=1, color=1, style=1001, lstyle=1, lw=3)
def draw_line(lineList, x1, x2, y1, y2, width=1, style=1, color=1)
ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE constexpr float zip(ConstView const &tracks, int32_t i)
Definition: TracksSoA.h:90
def maskFPixROC(boxList, xsign, ysign, dsk, bld, pnl, roc)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def maskBPixROC(boxList, xsign, ysign, layer, lad, mod, roc)
def dqm_get_dataset(server, match, run, type="offline_data")
def renderPluginFPIX(lineList, ring)
Definition: main.py:1
def renderPluginBPIX(lineList, layer)
#define str(s)