Skip to content
Snippets Groups Projects

Draft: Add simple assembler and manual geometry devices using extra_geom

Closed David Hammer requested to merge add-simple-assembler-geometry into add-agipd-device
Files
8
@@ -82,14 +82,6 @@ class ClassIdsNode(Configurable):
accessMode=AccessMode.INITONLY,
assignment=Assignment.MANDATORY)
previewMatcherClass = String(
displayedName='Preview matcher class',
description='Device class to use for matching the output of a preview '
'layer.',
defaultValue='ModuleStacker',
accessMode=AccessMode.INITONLY,
assignment=Assignment.MANDATORY)
assemblerClass = String(
displayedName='Assembler class',
description='Device class to use for assembling the matched output of '
@@ -125,14 +117,6 @@ class DeviceIdsNode(Configurable):
accessMode=AccessMode.INITONLY,
assignment=Assignment.MANDATORY)
previewMatcherSuffix = String(
displayedName='Preview matcher suffix',
description='Suffix for preview layer matching device IDs. The '
'formatting placeholder \'layer\' may be used.',
defaultValue='MATCH_{layer}',
accessMode=AccessMode.INITONLY,
assignment=Assignment.MANDATORY)
assemblerSuffix = String(
displayedName='Assembler suffix',
description='Suffix for assembler device IDs. The formatting '
@@ -408,6 +392,13 @@ class CalibrationManager(DeviceClientBase, Device):
self.deviceServers = value
self._servers_changed = True
imageDataPath = String(
displayedName='Image data path',
description='Path in DAQ hash to actual image data, used for preview',
accessMode=AccessMode.RECONFIGURABLE,
assignment=Assignment.OPTIONAL,
defaultValue='image.data')
geometryDevice = String(
displayedName='Geometry device',
description='[NYI] Device ID for a geometry device defining the '
@@ -1055,7 +1046,7 @@ class CalibrationManager(DeviceClientBase, Device):
device_id_templates = {}
class_args = (self.detectorType.value.lower().capitalize(),)
for role in ['correction', 'groupMatcher', 'bridge', 'previewMatcher',
for role in ['correction', 'groupMatcher', 'bridge',
'assembler']:
class_ids[role] = getattr(
self.classIds, f'{role}Class').value.format(*class_args)
@@ -1194,78 +1185,26 @@ class CalibrationManager(DeviceClientBase, Device):
background(_activate_bridge(bridge_device_id))
# Instantiate preview layer matchers and assemblers.
# Instantiate preview layer assemblers.
geometry_device_id = self.geometryDevice.value
for layer, output_pipeline, server in self.previewLayers.value:
# Preview matcher.
matcher_device_id = device_id_templates['previewMatcher'].format(
assembler_device_id = device_id_templates['assembler'].format(
layer=layer)
config = Hash()
config['channels'] = [
f'{device_id}:{output_pipeline}'
for device_id in correct_device_id_by_module.values()]
# TODO: put _image_data_path in corr dev schema, get from there
config['pathToStack'] = self.imageDataPath.value
config['fastSources'] = [
Hash('fsSelect', True,
'fsSource',
f'{input_source_by_module[virtual_id]}')
for (virtual_id, device_id)
in correct_device_id_by_module.items()]
config['pathToStack'] = 'data.adc'
if not await self._instantiate_device(
server, class_ids['previewMatcher'], matcher_device_id, config
):
return
# Preview assembler.
assembler_device_id = device_id_templates['assembler'].format(
layer=layer)
config = Hash()
config['input.connectedOutputChannels'] = [
f'{matcher_device_id}:output']
config['modules'] = [
Hash('source', input_source_by_module.get('Q1M1', ''),
'offX', 474, 'offY', 612, 'rot', 90),
Hash('source', input_source_by_module.get('Q1M2', ''),
'offX', 316, 'offY', 612, 'rot', 90),
Hash('source', input_source_by_module.get('Q1M3', ''),
'offX', 158, 'offY', 612, 'rot', 90),
Hash('source', input_source_by_module.get('Q1M4', ''),
'offX', 0, 'offY', 612, 'rot', 90),
Hash('source', input_source_by_module.get('Q2M1', ''),
'offX', 1136, 'offY', 612, 'rot', 90),
Hash('source', input_source_by_module.get('Q2M2', ''),
'offX', 978, 'offY', 612, 'rot', 90),
Hash('source', input_source_by_module.get('Q2M3', ''),
'offX', 820, 'offY', 612, 'rot', 90),
Hash('source', input_source_by_module.get('Q2M4', ''),
'offX', 662, 'offY', 612, 'rot', 90),
Hash('source', input_source_by_module.get('Q3M1', ''),
'offX', 712, 'offY', 0, 'rot', 270),
Hash('source', input_source_by_module.get('Q3M2', ''),
'offX', 870, 'offY', 0, 'rot', 270),
Hash('source', input_source_by_module.get('Q3M3', ''),
'offX', 1028, 'offY', 0, 'rot', 270),
Hash('source', input_source_by_module.get('Q3M4', ''),
'offX', 1186, 'offY', 0, 'rot', 270),
Hash('source', input_source_by_module.get('Q4M1', ''),
'offX', 50, 'offY', 0, 'rot', 270),
Hash('source', input_source_by_module.get('Q4M2', ''),
'offX', 208, 'offY', 0, 'rot', 270),
Hash('source', input_source_by_module.get('Q4M3', ''),
'offX', 366, 'offY', 0, 'rot', 270),
Hash('source', input_source_by_module.get('Q4M4', ''),
'offX', 524, 'offY', 0, 'rot', 270),
]
config['pathsToCombine'] = ['data.adc']
config['trainIdPath'] = 'image.trainId'
config['pulseIdPath'] = 'image.pulseId'
config['preview.enablePreview'] = True
config['preview.pathToPreview'] = 'data.adc'
config['preview.downSample'] = 2
config['badpixelPath'] = 'image.bad_pixels'
config['rotated90Grad'] = True
config['channels'] = [
f'{device_id}:{output_pipeline}'
for device_id in correct_device_id_by_module.values()]
config['geometryInput.connectedOutputChannels'] = [
f'{geometry_device_id}:geometryOutput']
if not await self._instantiate_device(
server, class_ids['assembler'], assembler_device_id, config
Loading