19 import matplotlib.pyplot
as plt
20 import matplotlib.patches
as patches
22 from ROOT
import Belle2
25 sys.exit(
"No input .root file specified!")
27 inputroot = sys.argv[1]
28 file = ROOT.TFile(inputroot,
"OPEN")
29 vxd = file.Get(
"VXDAlignment")
31 fileName = inputroot +
'.txt'
33 text_file = open(fileName,
"w")
34 text_file.write(
"layer ladder sensor param value\n")
35 for entry
in vxd.getMap():
36 element_parameter = entry.first
38 element = element_parameter.first
39 param = element_parameter.second
41 layer = vxdid.getLayerNumber()
42 ladder = vxdid.getLadderNumber()
43 sensor = vxdid.getSensorNumber()
45 text_file.write(
"{0} {1} {2} {3} {4}\n".format(layer, ladder, sensor, param, value))
48 for parameter
in range(1, 7):
49 text_file.write(
"{0} {1} {2} {3} {4}\n".format(1, 0, 1, parameter, vxd.get(int(
Belle2.VxdID(1, 0, 0, 1)), parameter)))
50 text_file.write(
"{0} {1} {2} {3} {4}\n".format(1, 0, 2, parameter, vxd.get(int(
Belle2.VxdID(1, 0, 0, 2)), parameter)))
51 text_file.write(
"{0} {1} {2} {3} {4}\n".format(3, 0, 1, parameter, vxd.get(int(
Belle2.VxdID(3, 0, 0, 1)), parameter)))
52 text_file.write(
"{0} {1} {2} {3} {4}\n".format(3, 0, 2, parameter, vxd.get(int(
Belle2.VxdID(3, 0, 0, 2)), parameter)))
53 for layer
in range(1, 7):
54 text_file.write(
"{0} {1} {2} {3} {4}\n".format(layer, 1, 0, parameter, vxd.get(int(
Belle2.VxdID(layer, 1, 0)), parameter)))
62 (4, 1, 1), (4, 1, 2), (4, 1, 3),
63 (5, 1, 1), (5, 1, 2), (5, 1, 3), (5, 1, 4),
64 (6, 1, 1), (6, 1, 2), (6, 1, 3), (6, 1, 4), (6, 1, 5)
82 print(
'reading from file ' + fileName)
84 dataframe = pd.read_table(
87 skipinitialspace=
True,
96 scale = np.where(dataframe.parameter < 4, 1.0e4, 1.0e3)
97 for colname
in [
'value']:
98 dataframe[colname] *= scale
100 font = {
'family':
'normal',
'weight':
'bold',
'size': 22}
102 sensorCoordinates = (
103 [0.20, 0.00, 0.60, 0.10],
104 [0.60, 0.00, 0.99, 0.10],
105 [0.20, 0.12, 0.60, 0.22],
106 [0.60, 0.12, 0.99, 0.22],
107 [0.20, 0.25, 0.60, 0.35],
108 [0.60, 0.25, 0.99, 0.35],
109 [0.00, 0.38, 0.30, 0.52],
110 [0.30, 0.38, 0.60, 0.52],
111 [0.60, 0.38, 0.90, 0.52],
112 [0.00, 0.58, 0.25, 0.72],
113 [0.25, 0.58, 0.50, 0.72],
114 [0.50, 0.58, 0.75, 0.72],
115 [0.75, 0.58, 0.99, 0.72],
116 [0.00, 0.78, 0.20, 0.92],
117 [0.20, 0.78, 0.40, 0.92],
118 [0.40, 0.78, 0.60, 0.92],
119 [0.60, 0.78, 0.80, 0.92],
120 [0.80, 0.78, 0.99, 0.92])
122 excludedSensor = [
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True]
123 excludedLadder = [
True,
True,
True,
True,
True,
True]
124 excludedHalfShell = [
True,
True]
126 quantity = [
r'NAN',
r'$u$ = ',
r'$v$ = ',
r'$w$ = ',
r'$\alpha$ = ',
r'$\beta$ = ',
r'$\gamma$ = ']
127 unit = [
r'NAN',
' um',
' um',
' um',
' mrad',
' mrad',
' mrad']
128 line = [
'NAN',
r'$u$ = NAN',
r'$v$ = NAN',
r'$w$ = NAN',
r'$\alpha$ = NAN',
r'$\beta$ = NAN',
r'$\gamma$ = NAN']
130 fig = plt.figure(figsize=(8.27, 11.69))
131 ax = fig.add_subplot(111)
133 ax.text(0.00, 0.97,
'Experiment: 1002(Phase II), Run: XXXX, Date: 6/10/2017', color=
'black', size=
'14.5', weight=
'bold')
135 ax.text(0.05, 0.03,
' layer 1 \nladder 1', color=
'black', size=
'12', weight=
'bold')
136 ax.text(0.05, 0.15,
' layer 2 \nladder 1', color=
'black', size=
'12', weight=
'bold')
137 ax.text(0.05, 0.28,
' layer 3 \nladder 1', color=
'black', size=
'12', weight=
'bold')
138 ax.text(0.40, 0.53,
' layer 4 ladder 1', color=
'black', size=
'12', weight=
'bold')
139 ax.text(0.40, 0.73,
' layer 5 ladder 1', color=
'black', size=
'12', weight=
'bold')
140 ax.text(0.40, 0.93,
' layer 6 ladder 1', color=
'black', size=
'12', weight=
'bold')
144 for i
in range(0, 18):
145 layer_id, ladder_id, sensor_id = beast2_sensors[i]
146 print(
'Sensor: ', layer_id,
'.', ladder_id,
'.', sensor_id)
147 for j
in [1, 2, 3, 4, 5, 6]:
148 number = float(dataframe[
'value'][dataframe[
'layer'] == layer_id][dataframe[
'ladder'] == ladder_id]
149 [dataframe[
'sensor'] == sensor_id][dataframe[
'parameter'] == j])
151 excludedSensor[i] =
False
152 line[j] = quantity[j] + str(round(number, 5)) + unit[j]
155 print(
'Non calculated ladder!!')
158 if excludedSensor[i]:
159 if (i == 6
or i == 9
or i == 13):
160 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
161 sensorCoordinates[i][1] - 0.03],
162 [sensorCoordinates[i][2],
163 sensorCoordinates[i][1]],
164 [sensorCoordinates[i][2],
165 sensorCoordinates[i][3]],
166 [sensorCoordinates[i][0],
167 sensorCoordinates[i][3] + 0.03]],
171 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
172 sensorCoordinates[i][1] - 0.03],
173 [sensorCoordinates[i][2],
174 sensorCoordinates[i][1]],
175 [sensorCoordinates[i][2],
176 sensorCoordinates[i][3]],
177 [sensorCoordinates[i][0],
178 sensorCoordinates[i][3] + 0.03]],
181 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
182 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
183 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
184 [sensorCoordinates[i][0], sensorCoordinates[i][3]]],
185 facecolor=
'red', alpha=0.3, edgecolor=
'black'))
186 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
187 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
188 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
189 [sensorCoordinates[i][0], sensorCoordinates[i][3]]], fill=
None))
192 if (i == 6
or i == 9
or i == 13):
193 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
194 sensorCoordinates[i][1] - 0.03],
195 [sensorCoordinates[i][2],
196 sensorCoordinates[i][1]],
197 [sensorCoordinates[i][2],
198 sensorCoordinates[i][3]],
199 [sensorCoordinates[i][0],
200 sensorCoordinates[i][3] + 0.03]],
204 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
205 sensorCoordinates[i][1] - 0.03],
206 [sensorCoordinates[i][2],
207 sensorCoordinates[i][1]],
208 [sensorCoordinates[i][2],
209 sensorCoordinates[i][3]],
210 [sensorCoordinates[i][0],
211 sensorCoordinates[i][3] + 0.03]],
214 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
215 sensorCoordinates[i][1]],
216 [sensorCoordinates[i][2],
217 sensorCoordinates[i][1]],
218 [sensorCoordinates[i][2],
219 sensorCoordinates[i][3]],
220 [sensorCoordinates[i][0],
221 sensorCoordinates[i][3]]],
225 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
226 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
227 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
228 [sensorCoordinates[i][0], sensorCoordinates[i][3]]], fill=
None))
232 sensorCoordinates[i][0] + 0.02,
233 sensorCoordinates[i][1] + 0.080,
240 boxstyle=
'round,pad=0.15'))
242 sensorCoordinates[i][0] + 0.02,
243 sensorCoordinates[i][1] + 0.045,
250 boxstyle=
'round,pad=0.15'))
252 sensorCoordinates[i][0] + 0.02,
253 sensorCoordinates[i][1] + 0.010,
260 boxstyle=
'round,pad=0.15'))
262 sensorCoordinates[i][0] + 0.20,
263 sensorCoordinates[i][1] + 0.078,
270 boxstyle=
'round,pad=0.15'))
272 sensorCoordinates[i][0] + 0.20,
273 sensorCoordinates[i][1] + 0.045,
280 boxstyle=
'round,pad=0.15'))
282 sensorCoordinates[i][0] + 0.20,
283 sensorCoordinates[i][1] + 0.012,
290 boxstyle=
'round,pad=0.15'))
292 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.024,
293 sensorCoordinates[i][1] + 0.121,
297 bbox=dict(facecolor=
'white',
299 boxstyle=
'round,pad=0.15'))
300 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.024,
301 sensorCoordinates[i][1] + 0.099,
305 bbox=dict(facecolor=
'white',
307 boxstyle=
'round,pad=0.15'))
308 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.024,
309 sensorCoordinates[i][1] + 0.077,
313 bbox=dict(facecolor=
'white',
315 boxstyle=
'round,pad=0.15'))
316 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.030,
317 sensorCoordinates[i][1] + 0.055,
321 bbox=dict(facecolor=
'white',
323 boxstyle=
'round,pad=0.15'))
324 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.030,
325 sensorCoordinates[i][1] + 0.033,
329 bbox=dict(facecolor=
'white',
331 boxstyle=
'round,pad=0.15'))
332 ax.text(sensorCoordinates[i][0] + (sensorCoordinates[i][2] - sensorCoordinates[i][0]) / 4 - 0.030,
333 sensorCoordinates[i][1] + 0.011,
337 bbox=dict(facecolor=
'white',
339 boxstyle=
'round,pad=0.15'))
341 line = [
'NAN',
r'$u$ = NAN',
r'$v$ = NAN',
r'$w$ = NAN',
r'$\alpha$ = NAN',
r'$\beta$ = NAN',
r'$\gamma$ = NAN']
344 fig.savefig(
'outputSensors.png', dpi=300)
347 fig = plt.figure(figsize=(8.27, 11.69))
348 ax = fig.add_subplot(111)
352 ax.text(0.00, 0.97,
'Experiment: 1002(Phase II), Run: XXXX, Date: 6/10/2017', color=
'black', size=
'14.5', weight=
'bold')
354 ax.text(0.00, 0.325,
' layer 1 ladder 1', color=
'black', size=
'12', weight=
'bold')
355 ax.text(0.00, 0.405,
' layer 2 ladder 1', color=
'black', size=
'12', weight=
'bold')
356 ax.text(0.00, 0.485,
' layer 3 ladder 1', color=
'black', size=
'12', weight=
'bold')
357 ax.text(0.00, 0.59,
' layer 4 ladder 1', color=
'black', size=
'12', weight=
'bold')
358 ax.text(0.00, 0.73,
' layer 5 ladder 1', color=
'black', size=
'12', weight=
'bold')
359 ax.text(0.00, 0.88,
' layer 6 ladder 1', color=
'black', size=
'12', weight=
'bold')
361 sensorCoordinates = (
362 [0.20, 0.30, 0.60, 0.36],
363 [0.60, 0.30, 0.99, 0.36],
364 [0.20, 0.38, 0.60, 0.44],
365 [0.60, 0.38, 0.99, 0.44],
366 [0.20, 0.46, 0.60, 0.52],
367 [0.60, 0.46, 0.99, 0.52],
368 [0.00, 0.56, 0.30, 0.63],
369 [0.30, 0.56, 0.60, 0.63],
370 [0.60, 0.56, 0.90, 0.63],
371 [0.00, 0.70, 0.25, 0.78],
372 [0.25, 0.70, 0.50, 0.78],
373 [0.50, 0.70, 0.75, 0.78],
374 [0.75, 0.70, 0.99, 0.78],
375 [0.00, 0.85, 0.20, 0.92],
376 [0.20, 0.85, 0.40, 0.92],
377 [0.40, 0.85, 0.60, 0.92],
378 [0.60, 0.85, 0.80, 0.92],
379 [0.80, 0.85, 0.99, 0.92])
382 for i
in range(0, 6):
383 layer_id, ladder_id, sensor_id = beast2_ladders[i]
384 for j
in [1, 2, 3, 4, 5, 6]:
385 number = float(dataframe[
'value'][dataframe[
'layer'] == layer_id][dataframe[
'ladder'] == ladder_id]
386 [dataframe[
'sensor'] == sensor_id][dataframe[
'parameter'] == j])
388 excludedLadder[i] =
False
390 for i
in range(0, 18):
391 excludedSensor[i] =
False
393 if excludedLadder[0]:
394 excludedSensor[i] =
True
396 if excludedLadder[1]:
397 excludedSensor[i] =
True
399 if excludedLadder[2]:
400 excludedSensor[i] =
True
402 if excludedLadder[3]:
403 excludedSensor[i] =
True
404 if i
in range(9, 13):
405 if excludedLadder[4]:
406 excludedSensor[i] =
True
407 if i
in range(13, 18):
408 if excludedLadder[5]:
409 excludedSensor[i] =
True
411 if excludedSensor[i]:
412 if (i == 6
or i == 9
or i == 13):
413 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
414 sensorCoordinates[i][1] - 0.03],
415 [sensorCoordinates[i][2],
416 sensorCoordinates[i][1]],
417 [sensorCoordinates[i][2],
418 sensorCoordinates[i][3]],
419 [sensorCoordinates[i][0],
420 sensorCoordinates[i][3] + 0.03]],
424 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
425 sensorCoordinates[i][1] - 0.03],
426 [sensorCoordinates[i][2],
427 sensorCoordinates[i][1]],
428 [sensorCoordinates[i][2],
429 sensorCoordinates[i][3]],
430 [sensorCoordinates[i][0],
431 sensorCoordinates[i][3] + 0.03]],
434 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
435 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
436 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
437 [sensorCoordinates[i][0], sensorCoordinates[i][3]]],
438 facecolor=
'red', alpha=0.3, edgecolor=
'black'))
439 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0], sensorCoordinates[i][1]],
440 [sensorCoordinates[i][2], sensorCoordinates[i][1]],
441 [sensorCoordinates[i][2], sensorCoordinates[i][3]],
442 [sensorCoordinates[i][0], sensorCoordinates[i][3]]], fill=
None))
445 if (i == 6
or i == 9
or i == 13):
446 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
447 sensorCoordinates[i][1] - 0.03],
448 [sensorCoordinates[i][2],
449 sensorCoordinates[i][1]],
450 [sensorCoordinates[i][2],
451 sensorCoordinates[i][3]],
452 [sensorCoordinates[i][0],
453 sensorCoordinates[i][3] + 0.03]],
460 ax.add_patch(plt.Polygon([[sensorCoordinates[i][0],
461 sensorCoordinates[i][1]],
462 [sensorCoordinates[i][2],
463 sensorCoordinates[i][1]],
464 [sensorCoordinates[i][2],
465 sensorCoordinates[i][3]],
466 [sensorCoordinates[i][0],
467 sensorCoordinates[i][3]]],
472 ladderCoordinates = (
482 for i
in range(0, 6):
483 layer_id, ladder_id, sensor_id = beast2_ladders[i]
484 print(
'Sensor: ', layer_id,
'.', ladder_id,
'.', sensor_id)
485 for j
in [1, 2, 3, 4, 5, 6]:
486 number = float(dataframe[
'value'][dataframe[
'layer'] == layer_id][dataframe[
'ladder'] == ladder_id]
487 [dataframe[
'sensor'] == sensor_id][dataframe[
'parameter'] == j])
489 line[j] = quantity[j] + str(round(number, 5)) + unit[j]
492 print(
'Non calculated ladder!!')
495 if not excludedLadder[i]:
497 ladderCoordinates[i][0] + 0.000,
498 ladderCoordinates[i][1] + 0.011,
505 boxstyle=
'round,pad=0.15'))
508 ladderCoordinates[i][0] + 0.200,
509 ladderCoordinates[i][1] + 0.011,
516 boxstyle=
'round,pad=0.15'))
518 ladderCoordinates[i][0] + 0.400,
519 ladderCoordinates[i][1] + 0.011,
526 boxstyle=
'round,pad=0.15'))
528 ladderCoordinates[i][0] + 0.000,
529 ladderCoordinates[i][1] - 0.011,
536 boxstyle=
'round,pad=0.15'))
538 ladderCoordinates[i][0] + 0.200,
539 ladderCoordinates[i][1] - 0.011,
546 boxstyle=
'round,pad=0.15'))
548 ladderCoordinates[i][0] + 0.400,
549 ladderCoordinates[i][1] - 0.011,
556 boxstyle=
'round,pad=0.15'))
557 line = [
'NAN',
r'$u$ = NAN',
r'$v$ = NAN',
r'$w$ = NAN',
r'$\alpha$ = NAN',
r'$\beta$ = NAN',
r'$\gamma$ = NAN']
559 ax.text(0.10, 0.25,
' PXD half shell', color=
'black', size=
'12', weight=
'bold')
560 ax.text(0.70, 0.25,
' SVD half shell', color=
'black', size=
'12', weight=
'bold')
563 for i
in range(0, 2):
564 layer_id, ladder_id, sensor_id = beast2_halfshells[i]
565 print(
'Sensor: ', layer_id,
'.', ladder_id,
'.', sensor_id)
566 for j
in [1, 2, 3, 4, 5, 6]:
567 number = float(dataframe[
'value'][dataframe[
'layer'] == layer_id][dataframe[
'ladder'] == ladder_id]
568 [dataframe[
'sensor'] == sensor_id][dataframe[
'parameter'] == j])
570 excludedHalfShell[i] =
False
571 line[j] = quantity[j] + str(round(number, 5)) + unit[j]
574 print(
'Non calculated ladder!!')
577 if excludedHalfShell[i]:
578 ax.add_patch(patches.Arc(xy=[0.45, 0.15], width=0.10, height=0.07, angle=.0,
579 theta1=-90.0, theta2=90.0, color=
'red', alpha=0.1, linewidth=35.0))
580 ax.add_patch(patches.Arc(xy=[0.45, 0.15], width=0.28, height=0.20, angle=.0,
581 theta1=-90.0, theta2=90.0, color=
'red', alpha=0.1, linewidth=40.0))
583 ax.add_patch(patches.Arc(xy=[0.45, 0.15], width=0.10, height=0.07, angle=.0,
584 theta1=-90.0, theta2=90.0, color=
'green', alpha=0.1, linewidth=35.0))
585 ax.add_patch(patches.Arc(xy=[0.45, 0.15], width=0.28, height=0.20, angle=.0,
586 theta1=-90.0, theta2=90.0, color=
'green', alpha=0.1, linewidth=40.0))
588 ax.text(0.12 + 0.6 * i, 0.22,
595 boxstyle=
'round,pad=0.15'))
597 ax.text(0.12 + 0.6 * i, 0.19,
604 boxstyle=
'round,pad=0.15'))
605 ax.text(0.12 + 0.6 * i, 0.16,
612 boxstyle=
'round,pad=0.15'))
613 ax.text(0.12 + 0.6 * i, 0.13,
620 boxstyle=
'round,pad=0.15'))
621 ax.text(0.12 + 0.6 * i, 0.10,
628 boxstyle=
'round,pad=0.15'))
629 ax.text(0.12 + 0.6 * i, 0.07,
636 boxstyle=
'round,pad=0.15'))
637 line = [
'NAN',
r'$u$ = NAN',
r'$v$ = NAN',
r'$w$ = NAN',
r'$\alpha$ = NAN',
r'$\beta$ = NAN',
r'$\gamma$ = NAN']
640 fig.savefig(
'outputLadders.png', dpi=300)
Class to uniquely identify a any structure of the PXD and SVD.