3 from ROOT
import Belle2
14 """This module creates a DQMCommonUtils object and tests sensor
15 and chip numbering schemes."""
22 """ Initialize the DQMCommonUtils class here. It builds
23 its lookup arrrays, so we want to do it only once."""
27 basf2.B2FATAL(
"GeoTools not available!")
30 """ We test sensor and chip numbering by going from ID to
36 if (self.
gTools.getNumberOfLayers() != 6):
37 basf2.B2ERROR(
'Layer count failure: \n {0} layers reported, 6 actually.'.format(self.
gTools.getNumberOfLayers()))
38 if (self.
gTools.getNumberOfPXDLayers() != 2):
39 basf2.B2ERROR(
'PXD layer count failure: \n {0} layers reported, 2 actually.'.format(self.
gTools.getNumberOfPXDLayers()))
40 if (self.
gTools.getNumberOfSVDLayers() != 4):
41 basf2.B2ERROR(
'SVD layer count failure: \n {0} layers reported, 4 actually.'.format(self.
gTools.getNumberOfSVDLayers()))
43 layers = self.
gTools.getLayers()
44 expected_layers = [1, 2, 3, 4, 5, 6]
46 for l1, l2
in zip(layers, expected_layers):
51 l1_string =
' '.join([str(x)
for x
in layers])
52 l2_string =
' '.join([str(x)
for x
in expected_layers])
53 basf2.B2ERROR(
'Layer numbers do not match, expected {0}, got {1}!'.format(l2_string, l1_string))
55 layers = self.
gTools.getPXDLayers()
56 expected_layers = [1, 2]
58 for l1, l2
in zip(layers, expected_layers):
63 l1_string =
' '.join([str(x)
for x
in layers])
64 l2_string =
' '.join([str(x)
for x
in expected_layers])
65 basf2.B2ERROR(
'PXD layer numbers do not match, expected {0}, got {1}!'.format(l2_string, l1_string))
67 layers = self.
gTools.getSVDLayers()
68 expected_layers = [3, 4, 5, 6]
70 for l1, l2
in zip(layers, expected_layers):
75 l1_string =
' '.join([str(x)
for x
in layers])
76 l2_string =
' '.join([str(x)
for x
in expected_layers])
77 basf2.B2ERROR(
'SVD layer numbers do not match, expected {0}, got {1}!'.format(l2_string, l1_string))
80 if (self.
gTools.getFirstLayer() != 1):
81 basf2.B2ERROR(
'First layer number is 1, reported {0}.'.format(self.
gTools.getFirstLayer()))
82 if (self.
gTools.getLastLayer() != 6):
83 basf2.B2ERROR(
'Last layer number is 6, reported {0}.'.format(self.
gTools.getLastLayer()))
84 if (self.
gTools.getFirstPXDLayer() != 1):
85 basf2.B2ERROR(
'First PXD layer number is 1, reported {0}.'.format(self.
gTools.getFirstPXDLayer()))
86 if (self.
gTools.getLastPXDLayer() != 2):
87 basf2.B2ERROR(
'Last PXD layer number is 2, reported {0}.'.format(self.
gTools.getLastPXDLayer()))
88 if (self.
gTools.getFirstSVDLayer() != 3):
89 basf2.B2ERROR(
'First SVD layer number is 3, reported {0}.'.format(self.
gTools.getFirstSVDLayer()))
90 if (self.
gTools.getLastSVDLayer() != 6):
91 basf2.B2ERROR(
'Last SVD layer number is 6, reported {0}.'.format(self.
gTools.getLastSVDLayer()))
95 idOfFirstPXDSensor = self.
gTools.getSensorIDFromPXDIndex(0)
96 layer = idOfFirstPXDSensor.getLayerNumber()
97 ladder = idOfFirstPXDSensor.getLadderNumber()
98 sensor = idOfFirstPXDSensor.getSensorNumber()
99 if layer != self.
gTools.getFirstPXDLayer()
or ladder != 1
or sensor != 1:
100 basf2.B2ERROR(
'Mismatch in first PXD sensor placement:\n' +
101 'Expected {0}/{1}/{2}\nGot: {3|/{4}/{5}'.format(
102 layer, ladder, sensor,
103 self.
gTools.getFirstPXDLayer(), 1, 1))
104 idOfLastPXDSensor = self.
gTools.getSensorIDFromPXDIndex(self.
gTools.getNumberOfPXDSensors() - 1)
105 layer = idOfLastPXDSensor.getLayerNumber()
106 if layer != self.
gTools.getLastPXDLayer():
107 basf2.B2ERROR(
'Mismatch in last PXD sensor placement:\n' +
108 'Expected layer {0} got layer {1|'.format(
109 layer, self.
gTools.getLastPXDLayer()))
112 idOfFirstSVDSensor = self.
gTools.getSensorIDFromSVDIndex(0)
113 layer = idOfFirstSVDSensor.getLayerNumber()
114 ladder = idOfFirstSVDSensor.getLadderNumber()
115 sensor = idOfFirstSVDSensor.getSensorNumber()
116 if layer != self.
gTools.getFirstSVDLayer()
or ladder != 1
or sensor != 1:
117 basf2.B2ERROR(
'Mismatch in first SVD sensor placement:\n' +
118 'Expected {0}/{1}/{2}\nGot: {3}/{4}/{5}'.format(
119 layer, ladder, sensor,
120 self.
gTools.getFirstSVDLayer(), 1, 1))
121 idOfLastSVDSensor = self.
gTools.getSensorIDFromSVDIndex(self.
gTools.getNumberOfSVDSensors() - 1)
122 layer = idOfLastSVDSensor.getLayerNumber()
123 if layer != self.
gTools.getLastSVDLayer():
124 basf2.B2ERROR(
'Mismatch in last SVD sensor placement:\n' +
125 'Expected layer {0} got layer {1}'.format(
126 layer, self.
gTools.getLastSVDLayer()))
132 init_sensor_index = self.
gTools.getSensorIndex(init_sensorID)
133 ret_sensorID = self.
gTools.getSensorIDFromIndex(init_sensor_index)
134 if init_sensorID.getID() != ret_sensorID.getID():
136 "Sensor index failure: \n Initial id: {0} \n VXD index: {1} \n Retrieved id: {2}.".format(
137 init_sensorID, init_sensor_index, ret_sensorID))
139 next_sensorID = self.
gTools.getSensorIDFromIndex(init_sensor_index + 1)
141 next_expected_sensorID.setSensorNumber(init_sensorID.getSensorNumber() + 1)
142 if next_expected_sensorID.getID() != next_sensorID.getID():
143 basf2.B2ERROR(
'Sensor index neighbourhood test failure: \n' +
144 'Initial id: {0} \n Expected id: {1} \n Actaul id: {2} \n Index: {3}.'.format(
145 init_sensorID, next_expected_sensorID,
146 next_sensorID, init_sensor_index + 1
150 num_sensors_expected = 212
151 if (self.
gTools.getNumberOfSensors() != num_sensors_expected):
152 basf2.B2ERROR(
'Number of sensors mismatch: \n' +
153 'Expected: {0}, got {1}.'.format(
154 num_sensors_expected, self.
gTools.getNumberOfSensors()
161 init_sensor_index = self.
gTools.getPXDSensorIndex(
162 init_sensorID.getLayerNumber(),
163 init_sensorID.getLadderNumber(),
164 init_sensorID.getSensorNumber())
165 ret_sensorID = self.
gTools.getSensorIDFromPXDIndex(init_sensor_index)
166 if init_sensorID.getID() != ret_sensorID.getID():
168 "PXD sensor index failure: \n Initial id: {0} \n VXD index: {1} \n Retrieved id: {2}.".format(
169 init_sensorID, init_sensor_index, ret_sensorID))
171 next_sensorID = self.
gTools.getSensorIDFromPXDIndex(init_sensor_index + 1)
173 next_expected_sensorID.setSensorNumber(init_sensorID.getSensorNumber() + 1)
174 if next_expected_sensorID.getID() != next_sensorID.getID():
176 'PXD sensor index neighbourhood test failure: \n' +
177 'Initial id: {0} \n Expected id: {1} \n Actaul id: {2} \n ' +
178 'Index: {3}.'.format(init_sensorID, next_expected_sensorID,
179 next_sensorID, init_sensor_index + 1))
181 num_sensors_expected = 40
182 if (self.
gTools.getNumberOfPXDSensors() != num_sensors_expected):
183 basf2.B2ERROR(
'Number of PXD sensors mismatch: \n' +
184 'Expected: {0}, got {1}.'.format(
185 num_sensors_expected, self.
gTools.getNumberOfPXDSensors()
192 init_sensor_index = self.
gTools.getSVDSensorIndex(
193 init_sensorID.getLayerNumber(),
194 init_sensorID.getLadderNumber(),
195 init_sensorID.getSensorNumber())
196 ret_sensorID = self.
gTools.getSensorIDFromSVDIndex(init_sensor_index)
197 if init_sensorID.getID() != ret_sensorID.getID():
199 "SVD sensor index failure: \n Initial id: {0} \n VXD index: {1} \n Retrieved id: {2}.".format(
200 init_sensorID, init_sensor_index, ret_sensorID))
202 next_sensorID = self.
gTools.getSensorIDFromSVDIndex(init_sensor_index + 1)
204 next_expected_sensorID.setSensorNumber(init_sensorID.getSensorNumber() + 1)
205 if next_expected_sensorID.getID() != next_sensorID.getID():
207 'SVD sensor index neighbourhood test failure: \n' +
208 'Initial id: {0} \n Expected id: {1} \n Actaul id: {2} \n ' +
209 'Index: {3}.'.format(init_sensorID, next_expected_sensorID,
210 next_sensorID, init_sensor_index + 1))
212 num_sensors_expected = 172
213 if (self.
gTools.getNumberOfSVDSensors() != num_sensors_expected):
214 basf2.B2ERROR(
'Number of SVD sensors mismatch: \n' +
215 'Expected: {0}, got {1}.'.format(
216 num_sensors_expected, self.
gTools.getNumberOfSVDSensors()
223 init_layer_index = self.
gTools.getLayerIndex(init_layer)
224 ret_layer = self.
gTools.getLayerNumberFromLayerIndex(init_layer_index)
225 if init_layer != ret_layer:
227 "Layer index failure: \n Initial: {0} \n Index: {1} \n Retrieved: {2}.".format(
228 init_layer, init_layer_index, ret_layer))
230 next_layer = self.
gTools.getLayerNumberFromLayerIndex(init_layer_index + 1)
231 next_expected_layer = init_layer + 1
232 if next_layer != next_expected_layer:
234 "Layer index neighbourhood test failure: \n Initial id: {0} \n Expected: {1} \n Actaul: {2} \n Index: {3}.".format(
244 if self.
gTools.getTotalPXDChips() != 400:
245 basf2.B2ERROR(
'PXD chip count mismatch: \n' +
246 'Expected: {0}, got {1}.'.format(
247 2120, self.
gTools.getTotalPXDChips())
249 if self.
gTools.getNumberOfPXDUSideChips() != 4:
250 basf2.B2ERROR(
'PXD u-side chip count mismatch: \n' +
251 'Expected: {0}, got {1}.'.format(
252 4, self.
gTools.getNumberOfPXDUSideChips())
254 if self.
gTools.getNumberOfPXDVSideChips() != 6:
255 basf2.B2ERROR(
'PXD v-side chip count mismatch: \n' +
256 'Expected: {0}, got {1}.'.format(
257 6, self.
gTools.getNumberOfPXDVSideChips())
259 if self.
gTools.getTotalSVDChips() != 1748:
260 basf2.B2ERROR(
'SVD chip count mismatch: \n' +
261 'Expected: {0}, got {1}.'.format(
262 2148, self.
gTools.getTotalSVDChips())
264 if self.
gTools.getNumberOfSVDUSideChips() != 6:
265 basf2.B2ERROR(
'SVD u-side chip count mismatch: \n' +
266 'Expected: {0}, got {1}.'.format(
267 6, self.
gTools.getNumberOfSVDUSideChips())
269 if self.
gTools.getNumberOfSVDVSideChips(3) != 6:
270 basf2.B2ERROR(
'SVD v-side chip count mismatch: \n' +
271 'Expected: {0}, got {1}.'.format(
272 6, self.
gTools.getNumberOfSVDVSideChips(3))
274 if self.
gTools.getNumberOfSVDVSideChips(4) != 4:
275 basf2.B2ERROR(
'SVD v-side chip count mismatch: \n' +
276 'Expected: {0}, got {1}.'.format(
277 4, self.
gTools.getNumberOfSVDVSideChips(4))
285 index_with_vxdid = self.
gTools.getPXDChipIndex(
Belle2.VxdID(init_layer, init_ladder, init_sensor), init_uSide, init_chipNo)
286 index_with_llss = self.
gTools.getPXDChipIndex(init_layer, init_ladder, init_sensor, init_uSide, init_chipNo)
287 if index_with_vxdid != index_with_llss:
288 basf2.B2ERROR(
'Mismatch between VxdID-based and layer-ladder-sensor based index:\n' +
289 'VxdID-based: {0}\nlayer-ladder-sensor: {1}'.format(
290 index_with_vxdid, index_with_llss)
292 returned_chipID = self.
gTools.getChipIDFromPXDIndex(index_with_vxdid)
293 returned_layer = returned_chipID.getLayerNumber()
294 returned_ladder = returned_chipID.getLadderNumber()
295 returned_sensor = returned_chipID.getSensorNumber()
296 returned_uSide = self.
gTools.isPXDSideU(returned_chipID)
297 returned_chipNo = self.
gTools.getPXDChipNumber(returned_chipID)
298 match = (init_layer == returned_layer)
and \
299 (init_ladder == returned_ladder)
and \
300 (init_sensor == returned_sensor)
and \
301 (init_uSide == returned_uSide)
and \
302 (init_chipNo == returned_chipNo)
304 basf2.B2ERROR(
'Mismatch in PXD chip indexing:\n' +
305 'Initial: {0} {1} {2} {3} {4}\n'.format(
306 init_layer, init_ladder, init_sensor, init_uSide, init_chipNo) +
307 'Final: {0} {1} {2} {3} {4}.'.format(
308 returned_layer, returned_ladder, returned_sensor, returned_uSide, returned_chipNo)
312 expected_layer = init_layer
313 expected_ladder = init_ladder
314 expected_sensor = init_sensor
315 expected_uSide =
False
317 neighbour_chipID = self.
gTools.getChipIDFromPXDIndex(index_with_vxdid + 1)
318 neighbour_layer = neighbour_chipID.getLayerNumber()
319 neighbour_ladder = neighbour_chipID.getLadderNumber()
320 neighbour_sensor = neighbour_chipID.getSensorNumber()
321 neighbour_uSide = self.
gTools.isPXDSideU(neighbour_chipID)
322 neighbour_chipNo = self.
gTools.getPXDChipNumber(neighbour_chipID)
323 match = (expected_layer == neighbour_layer)
and \
324 (expected_ladder == neighbour_ladder)
and \
325 (expected_sensor == neighbour_sensor)
and \
326 (expected_uSide == neighbour_uSide)
and \
327 (expected_chipNo == neighbour_chipNo)
329 basf2.B2ERROR(
'Mismatch in PXD chip index neighbourship:\n' +
330 'Expected: {0} {1} {2} {3} {4}\n'.format(
331 expected_layer, expected_ladder, expected_sensor, expected_uSide, expected_chipNo) +
332 'Obtained: {0} {1} {2} {3} {4}.'.format(
333 neighbour_layer, neighbour_ladder, neighbour_sensor, neighbour_uSide, neighbour_chipNo)
342 index_with_vxdid = self.
gTools.getSVDChipIndex(
Belle2.VxdID(init_layer, init_ladder, init_sensor), init_uSide, init_chipNo)
343 index_with_llss = self.
gTools.getSVDChipIndex(init_layer, init_ladder, init_sensor, init_uSide, init_chipNo)
344 if index_with_vxdid != index_with_llss:
345 basf2.B2ERROR(
'Mismatch between VxdID-based and layer-ladder-sensor based index:\n' +
346 'VxdID-based: {0}\nlayer-ladder-sensor: {1}'.format(
347 index_with_vxdid, index_with_llss)
349 returned_chipID = self.
gTools.getChipIDFromSVDIndex(index_with_vxdid)
350 returned_layer = returned_chipID.getLayerNumber()
351 returned_ladder = returned_chipID.getLadderNumber()
352 returned_sensor = returned_chipID.getSensorNumber()
353 returned_uSide = self.
gTools.isSVDSideU(returned_chipID)
354 returned_chipNo = self.
gTools.getSVDChipNumber(returned_chipID)
355 match = (init_layer == returned_layer)
and \
356 (init_ladder == returned_ladder)
and \
357 (init_sensor == returned_sensor)
and \
358 (init_uSide == returned_uSide)
and \
359 (init_chipNo == returned_chipNo)
361 basf2.B2ERROR(
'Mismatch in SVD chip indexing:\n' +
362 'Initial: {0} {1} {2} {3} {4}\n'.format(
363 init_layer, init_ladder, init_sensor, init_uSide, init_chipNo) +
364 'Final: {0} {1} {2} {3} {4}.'.format(
365 returned_layer, returned_ladder, returned_sensor, returned_uSide, returned_chipNo)
369 expected_layer = init_layer
370 expected_ladder = init_ladder
371 expected_sensor = init_sensor
372 expected_uSide =
False
374 neighbour_chipID = self.
gTools.getChipIDFromSVDIndex(index_with_vxdid + 1)
375 neighbour_layer = neighbour_chipID.getLayerNumber()
376 neighbour_ladder = neighbour_chipID.getLadderNumber()
377 neighbour_sensor = neighbour_chipID.getSensorNumber()
378 neighbour_uSide = self.
gTools.isSVDSideU(neighbour_chipID)
379 neighbour_chipNo = self.
gTools.getSVDChipNumber(neighbour_chipID)
380 match = (expected_layer == neighbour_layer)
and \
381 (expected_ladder == neighbour_ladder)
and \
382 (expected_sensor == neighbour_sensor)
and \
383 (expected_uSide == neighbour_uSide)
and \
384 (expected_chipNo == neighbour_chipNo)
386 basf2.B2ERROR(
'Mismatch in SVD chip index neighbourship:\n' +
387 'Expected: {0} {1} {2} {3} {4}\n'.format(
388 expected_layer, expected_ladder, expected_sensor, expected_uSide, expected_chipNo) +
389 'Obtained: {0} {1} {2} {3} {4}.'.format(
390 neighbour_layer, neighbour_ladder, neighbour_sensor, neighbour_uSide, neighbour_chipNo)
394 indexOfFirstPXDChip = 0
397 idOfFirstPXDChip = self.
gTools.getChipIDFromPXDIndex(indexOfFirstPXDChip)
398 firstChipLayer = idOfFirstPXDChip.getLayerNumber()
399 firstChipLadder = idOfFirstPXDChip.getLadderNumber()
400 firstChipSensor = idOfFirstPXDChip.getSensorNumber()
401 firstChipUSide = self.
gTools.isPXDSideU(idOfFirstPXDChip)
402 firstChipNo = self.
gTools.getPXDChipNumber(idOfFirstPXDChip)
403 if (firstChipLayer != self.
gTools.getFirstPXDLayer()
or
404 firstChipLadder != 1
or
405 firstChipSensor != 1
or
406 not firstChipUSide
or
409 'Wrong 1st PXD chip assignment:\nExpected {0}/{1}/{2} side {3} chip {4},\nGot {5}/{6}/{7} side {8} chip {9}'.format(
410 self.
gTools.getFirstPXDLayer(),
418 'u' if firstChipUSide
else 'v',
420 indexOfLastPXDChip = self.
gTools.getTotalPXDChips() - 1
422 idOfLastPXDChip = self.
gTools.getChipIDFromPXDIndex(indexOfLastPXDChip)
423 lastChipLayer = idOfLastPXDChip.getLayerNumber()
424 lastChipUSide = self.
gTools.isPXDSideU(idOfLastPXDChip)
425 lastChipNo = self.
gTools.getPXDChipNumber(idOfLastPXDChip)
426 expectedLastChipNo = self.
gTools.getNumberOfPXDVSideChips(self.
gTools.getLastPXDLayer())
427 if (lastChipLayer != self.
gTools.getLastPXDLayer()
or
429 lastChipNo != expectedLastChipNo):
431 'Wrong last PXD chip assignment:\n' +
432 'Expected layer {0} side {1} chip {2},\nGot layer {3} side {4} chip {5}'.format(
433 self.
gTools.getLastPXDLayer(),
437 'u' if lastChipUSide
else 'v',
441 indexOfFirstSVDChip = 0
444 idOfFirstSVDChip = self.
gTools.getChipIDFromSVDIndex(indexOfFirstSVDChip)
445 firstChipLayer = idOfFirstSVDChip.getLayerNumber()
446 firstChipLadder = idOfFirstSVDChip.getLadderNumber()
447 firstChipSensor = idOfFirstSVDChip.getSensorNumber()
448 firstChipUSide = self.
gTools.isSVDSideU(idOfFirstSVDChip)
449 firstChipNo = self.
gTools.getSVDChipNumber(idOfFirstSVDChip)
450 if (firstChipLayer != self.
gTools.getFirstSVDLayer()
or
451 firstChipLadder != 1
or
452 firstChipSensor != 1
or
453 not firstChipUSide
or
456 'Wrong 1st SVD chip assignment:\nExpected {0}/{1}/{2} side {3} chip {4},\nGot {5}/{6}/{7} side {8} chip {9}'.format(
457 self.
gTools.getFirstSVDLayer(),
465 'u' if firstChipUSide
else 'v',
467 indexOfLastSVDChip = self.
gTools.getTotalSVDChips() - 1
469 idOfLastSVDChip = self.
gTools.getChipIDFromSVDIndex(indexOfLastSVDChip)
470 lastChipLayer = idOfLastSVDChip.getLayerNumber()
471 lastChipUSide = self.
gTools.isSVDSideU(idOfLastSVDChip)
472 lastChipNo = self.
gTools.getSVDChipNumber(idOfLastSVDChip)
473 expectedLastChipNo = self.
gTools.getNumberOfSVDVSideChips(self.
gTools.getLastSVDLayer())
474 if (lastChipLayer != self.
gTools.getLastSVDLayer()
or
476 lastChipNo != expectedLastChipNo):
478 'Wrong last SVD chip assignment:\n' +
479 'Expected layer {0} side {1} chip {2},\nGot layer {3} side {4} chip {5}'.format(
480 self.
gTools.getLastSVDLayer(),
484 'u' if lastChipUSide
else 'v',
490 if __name__ ==
"__main__":
494 basf2.B2INFO(
'Setting up a basf2 run...')
496 check_numbering = basf2.create_path()
497 check_numbering.add_module(
'EventInfoSetter', expList=[0], runList=[0], evtNumList=[1])
498 check_numbering.add_module(
'Gearbox')
499 check_numbering.add_module(
'Geometry', components=[
'MagneticField',
'PXD',
'SVD'])
504 basf2.B2INFO(
'Test complete.')