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