16 import matplotlib.pyplot
as plt
17 import matplotlib.patches
as patches
19 from ROOT
import Belle2
22 sys.exit(
"No input .root file specified!")
24 inputroot = sys.argv[1]
25 file = ROOT.TFile(inputroot,
"OPEN")
26 vxd = file.Get(
"VXDAlignment")
28 fileName = inputroot +
'.txt'
30 text_file = open(fileName,
"w")
31 text_file.write(
"layer ladder sensor param value\n")
32 for entry
in vxd.getMap():
33 element_parameter = entry.first
35 element = element_parameter.first
36 param = element_parameter.second
38 layer = vxdid.getLayerNumber()
39 ladder = vxdid.getLadderNumber()
40 sensor = vxdid.getSensorNumber()
42 text_file.write(
"{0} {1} {2} {3} {4}\n".format(layer, ladder, sensor, param, value))
45 for parameter
in range(1, 7):
46 text_file.write(
"{0} {1} {2} {3} {4}\n".format(1, 0, 1, parameter, vxd.get(int(
Belle2.VxdID(1, 0, 0, 1)), parameter)))
47 text_file.write(
"{0} {1} {2} {3} {4}\n".format(1, 0, 2, parameter, vxd.get(int(
Belle2.VxdID(1, 0, 0, 2)), parameter)))
48 text_file.write(
"{0} {1} {2} {3} {4}\n".format(3, 0, 1, parameter, vxd.get(int(
Belle2.VxdID(3, 0, 0, 1)), parameter)))
49 text_file.write(
"{0} {1} {2} {3} {4}\n".format(3, 0, 2, parameter, vxd.get(int(
Belle2.VxdID(3, 0, 0, 2)), parameter)))
50 for layer
in range(1, 7):
51 text_file.write(
"{0} {1} {2} {3} {4}\n".format(layer, 1, 0, parameter, vxd.get(int(
Belle2.VxdID(layer, 1, 0)), parameter)))
59 (4, 1, 1), (4, 1, 2), (4, 1, 3),
60 (5, 1, 1), (5, 1, 2), (5, 1, 3), (5, 1, 4),
61 (6, 1, 1), (6, 1, 2), (6, 1, 3), (6, 1, 4), (6, 1, 5)
79 print(
'reading from file ' + fileName)
81 dataframe = pd.read_table(
84 skipinitialspace=
True,
93 scale = np.where(dataframe.parameter < 4, 1.0e4, 1.0e3)
94 for colname
in [
'value']:
95 dataframe[colname] *= scale
97 font = {
'family':
'normal',
'weight':
'bold',
'size': 22}
100 [0.20, 0.00, 0.60, 0.10],
101 [0.60, 0.00, 0.99, 0.10],
102 [0.20, 0.12, 0.60, 0.22],
103 [0.60, 0.12, 0.99, 0.22],
104 [0.20, 0.25, 0.60, 0.35],
105 [0.60, 0.25, 0.99, 0.35],
106 [0.00, 0.38, 0.30, 0.52],
107 [0.30, 0.38, 0.60, 0.52],
108 [0.60, 0.38, 0.90, 0.52],
109 [0.00, 0.58, 0.25, 0.72],
110 [0.25, 0.58, 0.50, 0.72],
111 [0.50, 0.58, 0.75, 0.72],
112 [0.75, 0.58, 0.99, 0.72],
113 [0.00, 0.78, 0.20, 0.92],
114 [0.20, 0.78, 0.40, 0.92],
115 [0.40, 0.78, 0.60, 0.92],
116 [0.60, 0.78, 0.80, 0.92],
117 [0.80, 0.78, 0.99, 0.92])
119 excludedSensor = [
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True]
120 excludedLadder = [
True,
True,
True,
True,
True,
True]
121 excludedHalfShell = [
True,
True]
123 quantity = [
r'NAN',
r'$u$ = ',
r'$v$ = ',
r'$w$ = ',
r'$\alpha$ = ',
r'$\beta$ = ',
r'$\gamma$ = ']
124 unit = [
r'NAN',
' um',
' um',
' um',
' mrad',
' mrad',
' mrad']
125 line = [
'NAN',
r'$u$ = NAN',
r'$v$ = NAN',
r'$w$ = NAN',
r'$\alpha$ = NAN',
r'$\beta$ = NAN',
r'$\gamma$ = NAN']
127 fig = plt.figure(figsize=(8.27, 11.69))
128 ax = fig.add_subplot(111)
130 ax.text(0.00, 0.97,
'Experiment: 1002(Phase II), Run: XXXX, Date: 6/10/2017', color=
'black', size=
'14.5', weight=
'bold')
132 ax.text(0.05, 0.03,
' layer 1 \nladder 1', color=
'black', size=
'12', weight=
'bold')
133 ax.text(0.05, 0.15,
' layer 2 \nladder 1', color=
'black', size=
'12', weight=
'bold')
134 ax.text(0.05, 0.28,
' layer 3 \nladder 1', color=
'black', size=
'12', weight=
'bold')
135 ax.text(0.40, 0.53,
' layer 4 ladder 1', color=
'black', size=
'12', weight=
'bold')
136 ax.text(0.40, 0.73,
' layer 5 ladder 1', color=
'black', size=
'12', weight=
'bold')
137 ax.text(0.40, 0.93,
' layer 6 ladder 1', color=
'black', size=
'12', weight=
'bold')
141 for i
in range(0, 18):
142 layer_id, ladder_id, sensor_id = beast2_sensors[i]
143 print(
'Sensor: ', layer_id,
'.', ladder_id,
'.', sensor_id)
144 for j
in [1, 2, 3, 4, 5, 6]:
145 number = float(dataframe[
'value'][dataframe[
'layer'] == layer_id][dataframe[
'ladder'] == ladder_id]
146 [dataframe[
'sensor'] == sensor_id][dataframe[
'parameter'] == j])
148 excludedSensor[i] =
False
149 line[j] = quantity[j] + str(round(number, 5)) + unit[j]
152 print(
'Non calculated ladder!!')
155 if excludedSensor[i]:
156 if (i == 6
or i == 9
or i == 13):
157 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
158 sensorCoordinates[i][1] - 0.03],
159 [sensorCoordinates[i][2],
160 sensorCoordinates[i][1]],
161 [sensorCoordinates[i][2],
162 sensorCoordinates[i][3]],
163 [sensorCoordinates[i][0],
164 sensorCoordinates[i][3] + 0.03]],
168 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
169 sensorCoordinates[i][1] - 0.03],
170 [sensorCoordinates[i][2],
171 sensorCoordinates[i][1]],
172 [sensorCoordinates[i][2],
173 sensorCoordinates[i][3]],
174 [sensorCoordinates[i][0],
175 sensorCoordinates[i][3] + 0.03]],
178 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
179 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
180 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
181 [sensorCoordinates[i][0], sensorCoordinates[i][3]]],
182 facecolor=
'red', alpha=0.3, edgecolor=
'black'))
183 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
184 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
185 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
186 [sensorCoordinates[i][0], sensorCoordinates[i][3]]], fill=
None))
189 if (i == 6
or i == 9
or i == 13):
190 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
191 sensorCoordinates[i][1] - 0.03],
192 [sensorCoordinates[i][2],
193 sensorCoordinates[i][1]],
194 [sensorCoordinates[i][2],
195 sensorCoordinates[i][3]],
196 [sensorCoordinates[i][0],
197 sensorCoordinates[i][3] + 0.03]],
201 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
202 sensorCoordinates[i][1] - 0.03],
203 [sensorCoordinates[i][2],
204 sensorCoordinates[i][1]],
205 [sensorCoordinates[i][2],
206 sensorCoordinates[i][3]],
207 [sensorCoordinates[i][0],
208 sensorCoordinates[i][3] + 0.03]],
211 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
212 sensorCoordinates[i][1]],
213 [sensorCoordinates[i][2],
214 sensorCoordinates[i][1]],
215 [sensorCoordinates[i][2],
216 sensorCoordinates[i][3]],
217 [sensorCoordinates[i][0],
218 sensorCoordinates[i][3]]],
222 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
223 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
224 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
225 [sensorCoordinates[i][0], sensorCoordinates[i][3]]], fill=
None))
229 sensorCoordinates[i][0] + 0.02,
230 sensorCoordinates[i][1] + 0.080,
237 boxstyle=
'round,pad=0.15'))
239 sensorCoordinates[i][0] + 0.02,
240 sensorCoordinates[i][1] + 0.045,
247 boxstyle=
'round,pad=0.15'))
249 sensorCoordinates[i][0] + 0.02,
250 sensorCoordinates[i][1] + 0.010,
257 boxstyle=
'round,pad=0.15'))
259 sensorCoordinates[i][0] + 0.20,
260 sensorCoordinates[i][1] + 0.078,
267 boxstyle=
'round,pad=0.15'))
269 sensorCoordinates[i][0] + 0.20,
270 sensorCoordinates[i][1] + 0.045,
277 boxstyle=
'round,pad=0.15'))
279 sensorCoordinates[i][0] + 0.20,
280 sensorCoordinates[i][1] + 0.012,
287 boxstyle=
'round,pad=0.15'))
289 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.024,
290 sensorCoordinates[i][1] + 0.121,
294 bbox=dict(facecolor=
'white',
296 boxstyle=
'round,pad=0.15'))
297 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.024,
298 sensorCoordinates[i][1] + 0.099,
302 bbox=dict(facecolor=
'white',
304 boxstyle=
'round,pad=0.15'))
305 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.024,
306 sensorCoordinates[i][1] + 0.077,
310 bbox=dict(facecolor=
'white',
312 boxstyle=
'round,pad=0.15'))
313 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.030,
314 sensorCoordinates[i][1] + 0.055,
318 bbox=dict(facecolor=
'white',
320 boxstyle=
'round,pad=0.15'))
321 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.030,
322 sensorCoordinates[i][1] + 0.033,
326 bbox=dict(facecolor=
'white',
328 boxstyle=
'round,pad=0.15'))
329 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.030,
330 sensorCoordinates[i][1] + 0.011,
334 bbox=dict(facecolor=
'white',
336 boxstyle=
'round,pad=0.15'))
338 line = [
'NAN',
r'$u$ = NAN',
r'$v$ = NAN',
r'$w$ = NAN',
r'$\alpha$ = NAN',
r'$\beta$ = NAN',
r'$\gamma$ = NAN']
341 fig.savefig(
'outputSensors.png', dpi=300)
344 fig = plt.figure(figsize=(8.27, 11.69))
345 ax = fig.add_subplot(111)
349 ax.text(0.00, 0.97,
'Experiment: 1002(Phase II), Run: XXXX, Date: 6/10/2017', color=
'black', size=
'14.5', weight=
'bold')
351 ax.text(0.00, 0.325,
' layer 1 ladder 1', color=
'black', size=
'12', weight=
'bold')
352 ax.text(0.00, 0.405,
' layer 2 ladder 1', color=
'black', size=
'12', weight=
'bold')
353 ax.text(0.00, 0.485,
' layer 3 ladder 1', color=
'black', size=
'12', weight=
'bold')
354 ax.text(0.00, 0.59,
' layer 4 ladder 1', color=
'black', size=
'12', weight=
'bold')
355 ax.text(0.00, 0.73,
' layer 5 ladder 1', color=
'black', size=
'12', weight=
'bold')
356 ax.text(0.00, 0.88,
' layer 6 ladder 1', color=
'black', size=
'12', weight=
'bold')
358 sensorCoordinates = (
359 [0.20, 0.30, 0.60, 0.36],
360 [0.60, 0.30, 0.99, 0.36],
361 [0.20, 0.38, 0.60, 0.44],
362 [0.60, 0.38, 0.99, 0.44],
363 [0.20, 0.46, 0.60, 0.52],
364 [0.60, 0.46, 0.99, 0.52],
365 [0.00, 0.56, 0.30, 0.63],
366 [0.30, 0.56, 0.60, 0.63],
367 [0.60, 0.56, 0.90, 0.63],
368 [0.00, 0.70, 0.25, 0.78],
369 [0.25, 0.70, 0.50, 0.78],
370 [0.50, 0.70, 0.75, 0.78],
371 [0.75, 0.70, 0.99, 0.78],
372 [0.00, 0.85, 0.20, 0.92],
373 [0.20, 0.85, 0.40, 0.92],
374 [0.40, 0.85, 0.60, 0.92],
375 [0.60, 0.85, 0.80, 0.92],
376 [0.80, 0.85, 0.99, 0.92])
379 for i
in range(0, 6):
380 layer_id, ladder_id, sensor_id = beast2_ladders[i]
381 for j
in [1, 2, 3, 4, 5, 6]:
382 number = float(dataframe[
'value'][dataframe[
'layer'] == layer_id][dataframe[
'ladder'] == ladder_id]
383 [dataframe[
'sensor'] == sensor_id][dataframe[
'parameter'] == j])
385 excludedLadder[i] =
False
387 for i
in range(0, 18):
388 excludedSensor[i] =
False
390 if excludedLadder[0]:
391 excludedSensor[i] =
True
393 if excludedLadder[1]:
394 excludedSensor[i] =
True
396 if excludedLadder[2]:
397 excludedSensor[i] =
True
399 if excludedLadder[3]:
400 excludedSensor[i] =
True
401 if i
in range(9, 13):
402 if excludedLadder[4]:
403 excludedSensor[i] =
True
404 if i
in range(13, 18):
405 if excludedLadder[5]:
406 excludedSensor[i] =
True
408 if excludedSensor[i]:
409 if (i == 6
or i == 9
or i == 13):
410 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
411 sensorCoordinates[i][1] - 0.03],
412 [sensorCoordinates[i][2],
413 sensorCoordinates[i][1]],
414 [sensorCoordinates[i][2],
415 sensorCoordinates[i][3]],
416 [sensorCoordinates[i][0],
417 sensorCoordinates[i][3] + 0.03]],
421 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
422 sensorCoordinates[i][1] - 0.03],
423 [sensorCoordinates[i][2],
424 sensorCoordinates[i][1]],
425 [sensorCoordinates[i][2],
426 sensorCoordinates[i][3]],
427 [sensorCoordinates[i][0],
428 sensorCoordinates[i][3] + 0.03]],
431 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
432 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
433 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
434 [sensorCoordinates[i][0], sensorCoordinates[i][3]]],
435 facecolor=
'red', alpha=0.3, edgecolor=
'black'))
436 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
437 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
438 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
439 [sensorCoordinates[i][0], sensorCoordinates[i][3]]], fill=
None))
442 if (i == 6
or i == 9
or i == 13):
443 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
444 sensorCoordinates[i][1] - 0.03],
445 [sensorCoordinates[i][2],
446 sensorCoordinates[i][1]],
447 [sensorCoordinates[i][2],
448 sensorCoordinates[i][3]],
449 [sensorCoordinates[i][0],
450 sensorCoordinates[i][3] + 0.03]],
457 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
458 sensorCoordinates[i][1]],
459 [sensorCoordinates[i][2],
460 sensorCoordinates[i][1]],
461 [sensorCoordinates[i][2],
462 sensorCoordinates[i][3]],
463 [sensorCoordinates[i][0],
464 sensorCoordinates[i][3]]],
469 ladderCoordinates = (
479 for i
in range(0, 6):
480 layer_id, ladder_id, sensor_id = beast2_ladders[i]
481 print(
'Sensor: ', layer_id,
'.', ladder_id,
'.', sensor_id)
482 for j
in [1, 2, 3, 4, 5, 6]:
483 number = float(dataframe[
'value'][dataframe[
'layer'] == layer_id][dataframe[
'ladder'] == ladder_id]
484 [dataframe[
'sensor'] == sensor_id][dataframe[
'parameter'] == j])
486 line[j] = quantity[j] + str(round(number, 5)) + unit[j]
489 print(
'Non calculated ladder!!')
492 if not excludedLadder[i]:
494 ladderCoordinates[i][0] + 0.000,
495 ladderCoordinates[i][1] + 0.011,
502 boxstyle=
'round,pad=0.15'))
505 ladderCoordinates[i][0] + 0.200,
506 ladderCoordinates[i][1] + 0.011,
513 boxstyle=
'round,pad=0.15'))
515 ladderCoordinates[i][0] + 0.400,
516 ladderCoordinates[i][1] + 0.011,
523 boxstyle=
'round,pad=0.15'))
525 ladderCoordinates[i][0] + 0.000,
526 ladderCoordinates[i][1] - 0.011,
533 boxstyle=
'round,pad=0.15'))
535 ladderCoordinates[i][0] + 0.200,
536 ladderCoordinates[i][1] - 0.011,
543 boxstyle=
'round,pad=0.15'))
545 ladderCoordinates[i][0] + 0.400,
546 ladderCoordinates[i][1] - 0.011,
553 boxstyle=
'round,pad=0.15'))
554 line = [
'NAN',
r'$u$ = NAN',
r'$v$ = NAN',
r'$w$ = NAN',
r'$\alpha$ = NAN',
r'$\beta$ = NAN',
r'$\gamma$ = NAN']
556 ax.text(0.10, 0.25,
' PXD half shell', color=
'black', size=
'12', weight=
'bold')
557 ax.text(0.70, 0.25,
' SVD half shell', color=
'black', size=
'12', weight=
'bold')
560 for i
in range(0, 2):
561 layer_id, ladder_id, sensor_id = beast2_halfshells[i]
562 print(
'Sensor: ', layer_id,
'.', ladder_id,
'.', sensor_id)
563 for j
in [1, 2, 3, 4, 5, 6]:
564 number = float(dataframe[
'value'][dataframe[
'layer'] == layer_id][dataframe[
'ladder'] == ladder_id]
565 [dataframe[
'sensor'] == sensor_id][dataframe[
'parameter'] == j])
567 excludedHalfShell[i] =
False
568 line[j] = quantity[j] + str(round(number, 5)) + unit[j]
571 print(
'Non calculated ladder!!')
574 if excludedHalfShell[i]:
575 ax.add_patch(patches.Arc(xy=[0.45, 0.15], width=0.10, height=0.07, angle=.0,
576 theta1=-90.0, theta2=90.0, color=
'red', alpha=0.1, linewidth=35.0))
577 ax.add_patch(patches.Arc(xy=[0.45, 0.15], width=0.28, height=0.20, angle=.0,
578 theta1=-90.0, theta2=90.0, color=
'red', alpha=0.1, linewidth=40.0))
580 ax.add_patch(patches.Arc(xy=[0.45, 0.15], width=0.10, height=0.07, angle=.0,
581 theta1=-90.0, theta2=90.0, color=
'green', alpha=0.1, linewidth=35.0))
582 ax.add_patch(patches.Arc(xy=[0.45, 0.15], width=0.28, height=0.20, angle=.0,
583 theta1=-90.0, theta2=90.0, color=
'green', alpha=0.1, linewidth=40.0))
585 ax.text(0.12 + 0.6 * i, 0.22,
592 boxstyle=
'round,pad=0.15'))
594 ax.text(0.12 + 0.6 * i, 0.19,
601 boxstyle=
'round,pad=0.15'))
602 ax.text(0.12 + 0.6 * i, 0.16,
609 boxstyle=
'round,pad=0.15'))
610 ax.text(0.12 + 0.6 * i, 0.13,
617 boxstyle=
'round,pad=0.15'))
618 ax.text(0.12 + 0.6 * i, 0.10,
625 boxstyle=
'round,pad=0.15'))
626 ax.text(0.12 + 0.6 * i, 0.07,
633 boxstyle=
'round,pad=0.15'))
634 line = [
'NAN',
r'$u$ = NAN',
r'$v$ = NAN',
r'$w$ = NAN',
r'$\alpha$ = NAN',
r'$\beta$ = NAN',
r'$\gamma$ = NAN']
637 fig.savefig(
'outputLadders.png', dpi=300)