17 from ROOT
import Belle2
18 from ROOT.Belle2
import KLMChannelIndex, KLMElementNumbers
20 from alignment
import MillepedeCalibration
22 basf2.set_log_level(basf2.LogLevel.INFO)
24 basf2.conditions.append_testing_payloads(
'localdb/database.txt')
27 millepede = MillepedeCalibration([
'BKLMAlignment',
'EKLMAlignment',
'EKLMSegmentAlignment'])
30 index = KLMChannelIndex(KLMChannelIndex.c_IndexLevelLayer)
31 index2 = KLMChannelIndex(KLMChannelIndex.c_IndexLevelLayer)
32 while (index != index2.end()):
33 module = index.getKLMModuleNumber()
34 if (index.getSubdetector() == KLMElementNumbers.c_BKLM):
35 for ipar
in [1, 2, 3, 4, 5, 6]:
42 for ipar
in [1, 2, 6]:
50 index.setIndexLevel(KLMChannelIndex.c_IndexLevelStrip)
51 index2.setIndexLevel(KLMChannelIndex.c_IndexLevelStrip)
52 index = index2.beginEKLM()
53 index.useEKLMSegments()
54 while (index != index2.endEKLM()):
55 segment = index.getEKLMSegmentNumber()
57 millepede.fixGlobalParam(
63 input_files = sys.argv[1:]
64 calibration = millepede.create(
'klm_alignment', input_files)
65 millepede.algo.setInputFileNames(input_files)
66 millepede.algo.ignoreUndeterminedParams(
True)
67 millepede.algo.invertSign()
68 millepede.algo.execute()
69 millepede.algo.commit()
72 payloads = list(millepede.algo.getPayloads())
75 eklm_segment_alignment =
None
76 for payload
in payloads:
77 if payload.name ==
'BKLMAlignment':
78 bklm_alignment = payload.object.IsA().DynamicCast(
Belle2.BKLMAlignment().IsA(), payload.object,
False)
79 elif payload.name ==
'EKLMAlignment':
80 eklm_alignment = payload.object.IsA().DynamicCast(
Belle2.EKLMAlignment().IsA(), payload.object,
False)
81 elif payload.name ==
'EKLMAlignment':
87 "correction & errors",
88 millepede.algo.result().getNoDeterminedParameters(),
90 millepede.algo.result().getNoDeterminedParameters())
93 param = np.zeros(1, dtype=int)
94 value = np.zeros(1, dtype=np.float32)
95 correction = np.zeros(1, dtype=np.float32)
96 error = np.zeros(1, dtype=np.float32)
97 section = np.zeros(1, dtype=int)
98 sector = np.zeros(1, dtype=int)
99 layer = np.zeros(1, dtype=int)
100 sensor = np.zeros(1, dtype=int)
101 plane = np.zeros(1, dtype=int)
102 segment = np.zeros(1, dtype=int)
104 alignment_file = ROOT.TFile(
'alignment.root',
'recreate')
106 bklm_module_tree = ROOT.TTree(
'bklm_module',
'BKLM module alignment data')
107 bklm_module_tree.Branch(
'section', section,
'section/I')
108 bklm_module_tree.Branch(
'sector', sector,
'sector/I')
109 bklm_module_tree.Branch(
'layer', layer,
'layer/I')
110 bklm_module_tree.Branch(
'param', param,
'param/I')
111 bklm_module_tree.Branch(
'value', value,
'value/F')
112 bklm_module_tree.Branch(
'correction', correction,
'correction/F')
113 bklm_module_tree.Branch(
'error', error,
'error/F')
115 eklm_module_tree = ROOT.TTree(
'eklm_module',
'EKLM module alignment data')
116 eklm_module_tree.Branch(
'section', section,
'section/I')
117 eklm_module_tree.Branch(
'sector', sector,
'sector/I')
118 eklm_module_tree.Branch(
'layer', layer,
'layer/I')
119 eklm_module_tree.Branch(
'param', param,
'param/I')
120 eklm_module_tree.Branch(
'value', value,
'value/F')
121 eklm_module_tree.Branch(
'correction', correction,
'correction/F')
122 eklm_module_tree.Branch(
'error', error,
'error/F')
124 eklm_segment_tree = ROOT.TTree(
'eklm_segment',
'EKLM segment alignment data')
125 eklm_segment_tree.Branch(
'section', section,
'section/I')
126 eklm_segment_tree.Branch(
'sector', sector,
'sector/I')
127 eklm_segment_tree.Branch(
'layer', layer,
'layer/I')
128 eklm_segment_tree.Branch(
'plane', plane,
'plane/I')
129 eklm_segment_tree.Branch(
'segment', segment,
'segment/I')
130 eklm_segment_tree.Branch(
'param', param,
'param/I')
131 eklm_segment_tree.Branch(
'value', value,
'value/F')
132 eklm_segment_tree.Branch(
'correction', correction,
'correction/F')
133 eklm_segment_tree.Branch(
'error', error,
'error/F')
138 for ipar
in range(0, millepede.algo.result().getNoParameters()):
140 param[0] = label.getParameterId()
143 if millepede.algo.result().isParameterDetermined(ipar):
144 correction[0] = millepede.algo.result().getParameterCorrection(ipar)
145 error[0] = millepede.algo.result().getParameterError(ipar)
153 module = label.getElementId()
154 index.setKLMModule(module)
155 section[0] = index.getSection()
156 sector[0] = index.getSector()
157 layer[0] = index.getLayer()
158 if (index.getSubdetector() == KLMElementNumbers.c_BKLM):
159 if (bklm_alignment
is not None):
160 value[0] = bklm_alignment.getGlobalParam(module, int(param[0]))
161 bklm_module_tree.Fill()
163 if (eklm_alignment
is not None):
164 value[0] = eklm_alignment.getGlobalParam(module, int(param[0]))
165 eklm_module_tree.Fill()
168 elif (label.getUniqueId() ==
170 segment_global = label.getElementId()
171 index.setEKLMSegment(segment_global)
172 section[0] = index.getSection()
173 sector[0] = index.getSector()
174 layer[0] = index.getLayer()
175 plane[0] = index.getPlane()
176 segment[0] = index.getStrip()
177 if (eklm_segment_alignment
is not None):
178 value[0] = eklm_segment_alignment.getGlobalParam(segment, int(param[0]))
179 eklm_segment_tree.Fill()
181 if not millepede.algo.result().isParameterDetermined(ipar):
185 profile.SetBinContent(ibin, value[0])
186 profile.SetBinError(ibin, error[0])
190 bklm_module_tree.Write()
191 eklm_module_tree.Write()
192 eklm_segment_tree.Write()
193 alignment_file.Close()
Class to store BKLM alignment data in the database.
static unsigned short getGlobalUniqueID()
Get global unique identifier.
Class to store EKLM alignment data in the database.
static unsigned short getGlobalUniqueID()
Get global unique identifier.
Class to store EKLM alignment data in the database.
static unsigned short getGlobalUniqueID()
Get global unique identifier.
Class to convert to/from global labels for Millepede II to/from detector & parameter identificators.