From 844c73a75f91007feffc8551605e861d0889246d Mon Sep 17 00:00:00 2001 From: Xiaoqiang Wang Date: Sat, 9 May 2026 11:28:55 +0200 Subject: [PATCH] hkl scan fix --- addams_bec/scans/fly_scan.py | 38 +++++++++++++++++++++--------------- addams_bec/scans/hkl_scan.py | 27 +++++++++++++------------ 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/addams_bec/scans/fly_scan.py b/addams_bec/scans/fly_scan.py index cd8623f..be4ec8b 100644 --- a/addams_bec/scans/fly_scan.py +++ b/addams_bec/scans/fly_scan.py @@ -16,22 +16,12 @@ logger = bec_logger.logger class HklFlyScan(AsyncFlyScanBase): scan_name = 'hkl_flyscan' scan_type = 'fly' - arg_input = { - 'diffractometer': ScanArgType.DEVICE, - 'controller': ScanArgType.DEVICE, - 'start': ScanArgType.LIST, - 'stop': ScanArgType.LIST, - 'points': ScanArgType.INT - } - arg_bundle_size = {"bundle": len(arg_input), "min": 1, "max": None} - required_kwargs = [] + required_kwargs = ['exp_time'] use_scan_progress_report = False - def __init__(self, diffract:Positioner, controller:DeviceBase, start:list[float], stop:list[float], points:int, optimize_profile=True, **kwargs): - self.diffract = diffract - self.controller = controller - self.start = start - self.stop = stop + def __init__(self, hstart, hstop, kstart, kstop, lstart, lstop, points, optimize_profile=True, **kwargs): + self.start = [hstart, kstart, lstart] + self.stop = [hstop, kstop, lstop] self.points = points self.optimize_profile = optimize_profile super().__init__(**kwargs) @@ -43,7 +33,23 @@ class HklFlyScan(AsyncFlyScanBase): return self.diffract def update_scan_motors(self): - self.scan_motors = self.device_manager.devices[self.diffract].real_axes.get() + #self.scan_motors = self.device_manager.devices[self.diffract].real_axes.get() + if 'x04v' in self.device_manager.devices: + self.diffract = 'x04v' + elif 'x04h' in self.device_manager.devices: + self.diffract = 'x04h' + else: + raise ValueError('Neither x04v nor x04h found in devices') + + if 'profileMove' in self.device_manager.devices: + self.controller = 'profileMove' + else: + raise ValueError('profileMove controller not found in devices') + + self.scan_motors = { + 'x04v': ['ov', 'alp', 'delta', 'gam', 'nu'], + 'x04h': ['oh', 'phi', 'delta', 'gam', 'nu'] + }[self.diffract] def prepare_positions(self): """ @@ -136,7 +142,7 @@ class HklFlyScan(AsyncFlyScanBase): logger.success(f'{self.scan_name} finished') def _publish_readbacks(self, device, readbacks): - metadata = {"async_update": "append", "num_lines": len(readbacks)} + metadata = {"async_update": {"type": "add", "max_shape": [len(readbacks)]}} msg = messages.DeviceMessage( signals={device: {'value': readbacks} }, metadata=metadata ) diff --git a/addams_bec/scans/hkl_scan.py b/addams_bec/scans/hkl_scan.py index 7e4c85c..0b4b523 100644 --- a/addams_bec/scans/hkl_scan.py +++ b/addams_bec/scans/hkl_scan.py @@ -37,25 +37,28 @@ logger = bec_logger.logger class HklScan(ScanBase): scan_name = 'hkl_scan' required_kwargs = ['exp_time'] - arg_input = { - 'diffractometer': ScanArgType.DEVICE, - 'start': ScanArgType.LIST, - 'stop': ScanArgType.LIST, - 'points': ScanArgType.INT - } - arg_bundle_size = {"bundle": len(arg_input), "min": 1, "max": None} - def __init__(self, diffract, start, stop, points, **kwargs): - self.diffract = diffract - self.start = start - self.stop = stop + def __init__(self, hstart, hstop, kstart, kstop, lstart, lstop, points, **kwargs): + self.start = [hstart, kstart, lstart] + self.stop = [hstop, kstop, lstop] self.points = points super().__init__(**kwargs) self.scan_report_devices = ['h', 'k', 'l'] + self.scan_motors + self.readout_priority['monitored'] def update_scan_motors(self): - self.scan_motors = self.device_manager.devices[self.diffract].real_axes.get() + #self.scan_motors = self.device_manager.devices[self.diffract].real_axes.get() + if 'x04v' in self.device_manager.devices: + self.diffract = 'x04v' + elif 'x04h' in self.device_manager.devices: + self.diffract = 'x04h' + else: + raise ValueError('Neither x04v nor x04h found in devices') + + self.scan_motors = { + 'x04v': ['ov', 'alp', 'delta', 'gam', 'nu'], + 'x04h': ['oh', 'phi', 'delta', 'gam', 'nu'] + }[self.diffract] def prepare_positions(self): """