5 Created on Sun Feb 8 12:39:00 2015
6 Plot (mis)alignment of PXD and SVD
13 from pylab
import savefig, subplot
14 import matplotlib.pyplot
as plt
15 from matplotlib
import ticker
16 import matplotlib
as mpl
21 from ROOT
import Belle2
23 sys.exit(
"No input .root file specified!")
25 inputroot = sys.argv[1]
26 file = ROOT.TFile(inputroot,
"OPEN")
27 vxd = file.Get(
"VXDAlignment")
29 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))
49 components = {
'value'}
50 comp_map = {
'value': 0}
51 parameters = {
'du',
'dv',
'dw',
'alpha',
'beta',
'gamma',
'P_20',
'P_11',
'P_02',
'P_30',
'P_21',
'P_12',
'P_03'}
52 param_map = {1:
'du', 2:
'dv', 3:
'dw', 4:
'alpha', 5:
'beta', 6:
'gamma',
53 31:
'P_20', 32:
'P_11', 33:
'P_02',
54 41:
'P_30', 42:
'P_21', 43:
'P_12', 44:
'P_03'}
55 param_nums = dict([(u, v)
for (v, u)
in param_map.items()])
56 layers = {1, 2, 3, 4, 5, 6}
64 3: 33.624 * np.pi / 180,
87 unit_scale = {
'value': {
'shift': (-10.0,
101 print(
'reading from file ' + fileName)
103 dataframe = pd.read_table(
106 skipinitialspace=
True,
116 scale = np.where((dataframe.parameter < 4) | (dataframe.parameter > 6), 1.0e4, 1.0e3)
117 for colname
in [
'value']:
118 dataframe[colname] *= scale
125 data_columns = [
'value']
126 min_shift = dataframe[data_columns][dataframe.parameter < 4].min().min()
127 max_shift = dataframe[data_columns][dataframe.parameter < 4].max().max()
128 min_shift = min(min_shift, -max_shift)
129 max_shift = max(-min_shift, max_shift)
130 min_rot = dataframe[data_columns][(3 < dataframe.parameter) & (dataframe.parameter < 7)].min().min()
131 max_rot = dataframe[data_columns][(3 < dataframe.parameter) & (dataframe.parameter < 7)].max().max()
132 min_rot = min(min_rot, -max_rot)
133 max_rot = max(-min_rot, max_rot)
134 min_sur2 = dataframe[data_columns][(30 < dataframe.parameter) & (dataframe.parameter < 34)].min().min()
135 max_sur2 = dataframe[data_columns][(30 < dataframe.parameter) & (dataframe.parameter < 34)].max().max()
136 min_sur2 = min(min_sur2, -max_sur2)
137 max_sur2 = max(-min_sur2, max_sur2)
138 min_sur3 = dataframe[data_columns][(40 < dataframe.parameter) & (dataframe.parameter < 45)].min().min()
139 max_sur3 = dataframe[data_columns][(40 < dataframe.parameter) & (dataframe.parameter < 45)].max().max()
140 min_sur3 = min(min_sur3, -max_sur3)
141 max_sur3 = max(-min_sur3, max_sur3)
143 if math.isnan(min_rot):
145 if math.isnan(max_rot):
147 if math.isnan(min_shift):
149 if math.isnan(max_shift):
151 if math.isnan(min_sur2):
153 if math.isnan(max_sur2):
155 if math.isnan(min_sur3):
157 if math.isnan(max_sur3):
160 print(
'Symmetrized scales for value: ')
161 print(
'Shifts: ' + str(min_shift) +
' to ' + str(max_shift))
162 print(
'Rotations: ' + str(min_rot) +
' to ' + str(max_rot))
163 print(
'Surface^2 ' + str(min_sur2) +
' to ' + str(max_sur2))
164 print(
'Surface^3 ' + str(min_sur3) +
' to ' + str(max_sur3))
167 unit_scale[
'value'][
'shift'] = (min_shift, max_shift, plt.cm.bwr,
' [um]')
168 unit_scale[
'value'][
'rotation'] = (min_rot, max_rot, plt.cm.bwr,
' [mrad]')
169 unit_scale[
'value'][
'surface2'] = (min_sur2, max_sur2, plt.cm.bwr,
' [um]')
170 unit_scale[
'value'][
'surface3'] = (min_sur3, max_sur3, plt.cm.bwr,
' [um]')
172 fig = plt.figure(figsize=(10, 6.5))
173 for value
in components:
174 for shiftrot, i_params
in zip([
'shift',
'rotation'], [[1, 2, 3], [4, 5, 6]]):
175 cmin, cmax, cmap, unit = unit_scale[value][shiftrot]
176 for i_param
in i_params:
177 parameter = param_map[i_param]
179 val_param = dataframe[[
'layer',
'ladder',
'sensor', value]][dataframe[
'parameter'] == i_param]
180 val_param[value] = val_param[value]
182 ax = subplot(2, 3, i_param, projection=
'polar')
186 ladder_width = 2 * np.pi / layer_nladders[layer]
187 ladder_angles = np.linspace(layer_phi0[layer], layer_phi0[layer] + 2 * np.pi, layer_nladders[layer], endpoint=
False)
189 for sensor
in range(1, 1 + layer_nsensors[layer]):
190 height = (layer > 3
and sensor == 1) * 10.0 + 28.0 / (1.0 + 0.3 * layer + 0.5 * sensor)
191 content = height * np.ones(layer_nladders[layer])
197 label=str(sensor + 1),
202 for (ladder, bar)
in zip(range(1, 1 + layer_nladders[layer]), bars):
203 cond = (val_param.layer == layer) & (val_param.ladder == ladder) & (val_param.sensor == sensor)
205 c = float(val_param[value][cond])
206 except BaseException:
208 if (cmax - cmin) > 0.:
209 color_value = (c - cmin) / (cmax - cmin)
212 bar.set_facecolor(cmap(color_value))
213 bar.set_linewidth(0.2)
216 for i
in range(layer_nladders[layer]):
226 bottom += layer_gap * (1 + 0.5 * (layer == 2))
235 if shiftrot ==
'shift':
236 par_shifts = (cmap, cmin, cmax, unit)
237 elif shiftrot ==
'rotation':
238 par_rots = (cmap, cmin, cmax, unit)
241 axb1 = fig.add_axes([0.01, 0.55, 0.02, 0.33])
242 cmap, cmin, cmax, unit = par_shifts
243 norm1 = mpl.colors.Normalize(vmin=cmin, vmax=cmax)
244 cb1 = mpl.colorbar.ColorbarBase(axb1, cmap=cmap, norm=norm1, orientation=
'vertical')
245 cb1.set_label(
'Shifts ' + unit)
246 cb1.locator = ticker.MaxNLocator(nbins=11)
249 axb2 = fig.add_axes([0.01, 0.11, 0.02, 0.33])
250 cmap, cmin, cmax, unit = par_rots
251 norm2 = mpl.colors.Normalize(vmin=cmin, vmax=cmax)
252 cb2 = mpl.colorbar.ColorbarBase(axb2, cmap=cmap, norm=norm2, orientation=
'vertical')
253 cb2.set_label(
'Rotations ' + unit)
254 cb2.locator = ticker.MaxNLocator(nbins=11)
257 fig.suptitle(value, fontsize=20, x=0.01, y=0.95, horizontalalignment=
'left')
258 figname = inputroot +
'.rigid.png'
260 print(
'Saved figure ' + figname)
262 fig = plt.figure(figsize=(14, 6.5))
263 for value
in components:
264 for shiftrot, i_params
in zip([
'surface2',
'surface3'], [[31, 32, 33], [41, 42, 43, 44]]):
265 cmin, cmax, cmap, unit = unit_scale[value][shiftrot]
266 for i_param
in i_params:
267 parameter = param_map[i_param]
269 val_param = dataframe[[
'layer',
'ladder',
'sensor', value]][dataframe[
'parameter'] == i_param]
270 val_param[value] = val_param[value]
272 if shiftrot ==
'surface2':
273 ax = subplot(2, 4, i_param-30, projection=
'polar')
274 if shiftrot ==
'surface3':
275 ax = subplot(2, 4, i_param-36, projection=
'polar')
279 ladder_width = 2 * np.pi / layer_nladders[layer]
280 ladder_angles = np.linspace(layer_phi0[layer], layer_phi0[layer] + 2 * np.pi, layer_nladders[layer], endpoint=
False)
282 for sensor
in range(1, 1 + layer_nsensors[layer]):
283 height = (layer > 3
and sensor == 1) * 10.0 + 28.0 / (1.0 + 0.3 * layer + 0.5 * sensor)
284 content = height * np.ones(layer_nladders[layer])
290 label=str(sensor + 1),
295 for (ladder, bar)
in zip(range(1, 1 + layer_nladders[layer]), bars):
296 cond = (val_param.layer == layer) & (val_param.ladder == ladder) & (val_param.sensor == sensor)
298 c = float(val_param[value][cond])
299 except BaseException:
301 if (cmax - cmin) > 0.:
302 color_value = (c - cmin) / (cmax - cmin)
305 bar.set_facecolor(cmap(color_value))
306 bar.set_linewidth(0.2)
309 for i
in range(layer_nladders[layer]):
319 bottom += layer_gap * (1 + 0.5 * (layer == 2))
328 if shiftrot ==
'surface2':
329 par_sur2 = (cmap, cmin, cmax, unit)
330 elif shiftrot ==
'surface3':
331 par_sur3 = (cmap, cmin, cmax, unit)
334 axb1 = fig.add_axes([0.01, 0.55, 0.02, 0.33])
335 cmap, cmin, cmax, unit = par_sur2
336 norm1 = mpl.colors.Normalize(vmin=cmin, vmax=cmax)
337 cb1 = mpl.colorbar.ColorbarBase(axb1, cmap=cmap, norm=norm1, orientation=
'vertical')
338 cb1.set_label(
'Quadratic parameters ' + unit)
339 cb1.locator = ticker.MaxNLocator(nbins=11)
342 axb2 = fig.add_axes([0.01, 0.11, 0.02, 0.33])
343 cmap, cmin, cmax, unit = par_sur3
344 norm2 = mpl.colors.Normalize(vmin=cmin, vmax=cmax)
345 cb2 = mpl.colorbar.ColorbarBase(axb2, cmap=cmap, norm=norm2, orientation=
'vertical')
346 cb2.set_label(
'Cubic parameters ' + unit)
347 cb2.locator = ticker.MaxNLocator(nbins=11)
350 fig.suptitle(value, fontsize=20, x=0.01, y=0.95, horizontalalignment=
'left')
352 figname = inputroot +
'.surface.png'
354 print(
'Saved figure ' + figname)