Belle II Software development
polar_plot_stacked.py
1#!/usr/bin/env python3
2
3
10
11"""
12Alternative version with stacked bars
13"""
14
15import numpy as np
16from ROOT import TFile
17from pylab import plt, savefig, show, subplot
18
19components = {'Touschek_LER', 'Touschek_HER'}
20layers = {3, 4, 5, 6}
21
22dose_data = {'Touschek_HER': {
23 3: np.zeros((7, 2)),
24 4: np.zeros((10, 3)),
25 5: np.zeros((12, 4)),
26 6: np.zeros((16, 5)),
27}, 'Touschek_LER': {
28 3: np.zeros((7, 2)),
29 4: np.zeros((10, 3)),
30 5: np.zeros((12, 4)),
31 6: np.zeros((16, 5)),
32}}
33
34layer_phi0 = {
35 3: 33.624 * np.pi / 180,
36 4: 8 * np.pi / 180,
37 5: -8 * np.pi / 180,
38 6: -4 * np.pi / 180,
39}
40layer_nladders = {
41 3: 7,
42 4: 10,
43 5: 12,
44 6: 16,
45}
46layer_nsensors = {
47 3: 2,
48 4: 3,
49 5: 4,
50 6: 5,
51}
52
53fileName = '/data/belle2/BG/Feb2015/output/base_kekcc/base_touschek_histo.root'
54print('reading from file ', fileName)
55
56rootfile = TFile(fileName)
57tree = rootfile.Get('bSummary')
58
59nev = tree.GetEntries()
60for iev in range(0, nev):
61 tree.GetEntry(iev)
62
63 dose_data[str(tree.component)][tree.layer][tree.ladder - 1, tree.sensor - 1] = 100 * tree.dose
64
65overlap_factor = 0.0 # Overlap of neighbour bars relative to bar width
66
67component = 'Touschek_LER'
68
69for layer in layers:
70 ladder_width = 2 * np.pi / layer_nladders[layer]
71 ladder_angles = np.linspace(layer_phi0[layer], layer_phi0[layer] + 2 * np.pi,
72 layer_nladders[layer], endpoint=False)
73 bottoms = np.zeros(layer_nladders[layer])
74 ax = subplot(2, 2, layer - 2, polar=True)
75 for sensor in range(layer_nsensors[layer]):
76 bars = ax.bar(
77 ladder_angles,
78 dose_data[component][layer][:, sensor],
79 width=ladder_width,
80 bottom=bottoms,
81 label=str(sensor + 1),
82 align='center',
83 )
84 bottoms += dose_data[component][layer][:, sensor]
85 for bar in bars:
86 bar.set_facecolor(plt.cm.Paired(0.1 + 0.15 * sensor))
87 bar.set_alpha(0.5)
88
89 r_shift = 0.1 * max(bottoms)
90 for (i, r) in zip(range(layer_nladders[layer]), bottoms):
91 ax.text(
92 ladder_angles[i],
93 r + r_shift,
94 str(i + 1),
95 ha='center',
96 va='center',
97 fontsize=7,
98 color='b',
99 )
100
101 for tick in ax.yaxis.get_major_ticks():
102 tick.label.set_fontsize(7)
103
104 for tick in ax.xaxis.get_major_ticks():
105 tick.label.set_fontsize(9)
106
107 fullscale = np.max(bottoms)
108 ax.set_ylim(-0.25 * fullscale, 1.2 * fullscale)
109 ax.text(
110 1.1 * np.pi / 8,
111 1.35 * np.max(bottoms),
112 'Dose [Gy/smy]',
113 ha='left',
114 va='center',
115 fontsize=7,
116 )
117
118 ax.legend(title='Sensor', fontsize=9, bbox_to_anchor=(1.4, 0.5))
119 ax.set_title('Layer ' + str(layer), x=0.0, y=0.97)
120 show()
121savefig('layers.png')