Belle II Software  release-05-01-25
make_misalignment.py
1 # This builds an input to the Misalignment module.
2 
3 import random
4 from lxml import etree
5 from lxml.etree import Element
6 from lxml.etree import SubElement
7 
8 svd_layers = [3, 4, 5, 6]
9 svd_nsensors = {3: 2, 4: 3, 5: 4, 6: 5}
10 svd_nladders = {3: 7, 4: 10, 5: 12, 6: 16}
11 
12 misalignment_shifts = ['du', 'dv', 'dw']
13 sigma_shifts = 2.0 # microns
14 misalignment_rotations = ['dalpha', 'dbeta', 'dgamma']
15 sigma_rotations = 3.0 # mrad
16 
17 # <SVDMisalignment/>
18 svd_misalignment = Element('SVD', name='Random misalignment')
19 
20 
21 # <SVDMisalignment><layer/>
22 for i_layer in svd_layers:
23  layer_id = str(i_layer) + '.0.0'
24  layer = SubElement(svd_misalignment, 'layer', id=layer_id)
25  # <SVDMisalignment><layer><ladder/>
26  for i_ladder in range(svd_nladders[i_layer]):
27  ladder_id = str(i_layer) + '.' + str(i_ladder + 1) + '.0'
28  ladder = SubElement(layer, 'ladder', id=ladder_id)
29  # <SVDMisalignment><layer><ladder><sensor/>
30  for i_sensor in range(svd_nsensors[i_layer]):
31  sensor_id = str(i_layer) + '.' + str(i_ladder + 1) + '.' + str(i_sensor + 1)
32  sensor = SubElement(ladder, 'sensor', id=sensor_id)
33  # Add misalignment at this level
34  for param in misalignment_shifts:
35  dx = random.normalvariate(0.0, sigma_shifts)
36  p = SubElement(sensor, param, unit='um', sigma=str(sigma_shifts))
37  p.text = str(dx)
38  for param in misalignment_rotations:
39  dx = random.normalvariate(0.0, sigma_rotations)
40  p = SubElement(sensor, param, unit='mrad', sigma=str(sigma_rotations))
41  p.text = str(dx)
42 
43 tree = etree.ElementTree(svd_misalignment)
44 
45 tree.write('SVDMisalignment.xml', pretty_print=True, xml_declaration=True, encoding='utf-8', method='xml')