diff --git a/src/blueapi/core/context.py b/src/blueapi/core/context.py index f8a96b0d6..8c92a0952 100644 --- a/src/blueapi/core/context.py +++ b/src/blueapi/core/context.py @@ -132,6 +132,7 @@ class BlueskyContext: plan_functions: dict[str, PlanGenerator] = field(default_factory=dict) _reference_cache: dict[type, type] = field(default_factory=dict) + _warned_name_clash: bool = field(default=False, init=False, repr=False) def __post_init__(self, configuration: ApplicationConfig | None): if not configuration: @@ -341,6 +342,11 @@ def register_device(self, device: Device, name: str | None = None) -> None: `name` parameter here. If the device conforms to a different protocol then the parameter must be used to name it. + Children of ophyd-async devices, including signals, are also registered + under their own names, e.g. registering "stage" also registers "stage-x" + and "stage-x-velocity". If a name is already in use, the existing device + is kept and the new one and its children are not registered. + Args: device (Device): The device to register name (Optional[str], optional): A name for the device. Defaults to None. @@ -358,7 +364,39 @@ def register_device(self, device: Device, name: str | None = None) -> None: else: raise KeyError(f"Must supply a name for this device: {device}") - self.devices[name] = device + if self._add_device(name, device): + self._register_children(device) + + def _register_children(self, device: Device) -> None: + """Register the children of an ophyd-async device under their own names.""" + + if not isinstance(device, AsyncDevice): + return + + for _, child in device.children(): + if not child.name or self._add_device(child.name, child): + self._register_children(child) + + def _add_device(self, name: str, device: Device) -> bool: + """Add a device unless a different one is already registered as name.""" + + existing = self.devices.setdefault(name, device) + if existing is not device: + # Expected for e.g. a motor's user_readback, which has the motor's name. + # The caller skips its children too, as their names start with this one + if not self._warned_name_clash: + LOGGER.warning( + "Some devices were not registered as their names are in use, " + "e.g. motor readbacks. Enable debug logging to see which" + ) + self._warned_name_clash = True + LOGGER.debug( + "Not registering %s or its children, name '%s' is in use", + device, + name, + ) + return False + return True def unregister_all_devices(self): """Unregister all devices from the context.""" diff --git a/src/blueapi/service/interface.py b/src/blueapi/service/interface.py index 7df474557..0c1aca5f1 100644 --- a/src/blueapi/service/interface.py +++ b/src/blueapi/service/interface.py @@ -191,15 +191,22 @@ def get_plan(name: str) -> PlanModel: def get_devices() -> list[DeviceModel]: """Get all available devices in the BlueskyContext""" - return [DeviceModel.from_device(device) for device in context().devices.values()] + # Report each device under its registered name. A device registered under an + # override name would otherwise show its own name, which one of its children + # may be registered as, e.g. a motor's user_readback + return [ + DeviceModel.from_device(device, name) + for name, device in context().devices.items() + ] def get_device(name: str) -> DeviceModel: """Retrieve device by name from the BlueskyContext""" - if not (device := context().find_device(name)): + ctx = context() + if not (device := ctx.find_device(name)): raise KeyError(name) - return DeviceModel.from_device(device) + return DeviceModel.from_device(device, name if name in ctx.devices else None) def submit_task( diff --git a/src/blueapi/service/model.py b/src/blueapi/service/model.py index 1b690d5c0..ac5c26688 100644 --- a/src/blueapi/service/model.py +++ b/src/blueapi/service/model.py @@ -36,8 +36,9 @@ class DeviceModel(BlueapiBaseModel): ) @classmethod - def from_device(cls, device: Device) -> "DeviceModel": - name = device.name if isinstance(device, HasName) else _UNKNOWN_NAME + def from_device(cls, device: Device, name: str | None = None) -> "DeviceModel": + if name is None: + name = device.name if isinstance(device, HasName) else _UNKNOWN_NAME return cls(name=name, protocols=list(_protocol_info(device))) diff --git a/tests/system_tests/devices.json b/tests/system_tests/devices.json index ef75bf8ea..e9077067b 100644 --- a/tests/system_tests/devices.json +++ b/tests/system_tests/devices.json @@ -53,6 +53,2629 @@ "types": [] } ] + }, + { + "name": "det-driver", + "protocols": [ + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf", + "protocols": [ + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x", + "protocols": [ + { + "name": "Checkable", + "types": [] + }, + { + "name": "Flyable", + "types": [] + }, + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Stoppable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Configurable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta", + "protocols": [ + { + "name": "Checkable", + "types": [] + }, + { + "name": "Flyable", + "types": [] + }, + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Stoppable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Configurable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-motor_egu", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-motor_resolution", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-steps_per_revolution", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-units_per_revolution", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-encoder_resolution", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-velocity", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-offset", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-user_setpoint", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-max_velocity", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-acceleration_time", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-precision", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-deadband", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-motor_done_move", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-low_limit_travel", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-high_limit_travel", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-dial_low_limit_travel", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-dial_high_limit_travel", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-offset_freeze_switch", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-high_limit_switch", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-low_limit_switch", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-output_link", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-set_use_switch", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-x-motor_stop", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-motor_egu", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-motor_resolution", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-steps_per_revolution", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-units_per_revolution", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-encoder_resolution", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-velocity", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-offset", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-user_setpoint", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-max_velocity", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-acceleration_time", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-precision", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-deadband", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-motor_done_move", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-low_limit_travel", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-high_limit_travel", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-dial_low_limit_travel", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-dial_high_limit_travel", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-offset_freeze_switch", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-high_limit_switch", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-low_limit_switch", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-output_link", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-set_use_switch", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "stage-theta-motor_stop", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-port_name", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-unique_id", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-nd_attributes_file", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-array_size_x", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-array_size_y", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-array_size_z", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-array_size0", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-array_size1", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-array_size2", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-color_mode", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-data_type", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-array_counter", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-ad_core_version", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-driver_version", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-acquire_time", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-acquire_period", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-num_images", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-image_mode", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-detector_state", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-acquire", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-wait_for_plugins", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-manufacturer", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-model", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-serial_number", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-sdk_version", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-driver-firmware_version", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-port_name", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-unique_id", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-nd_attributes_file", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-array_size_x", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-array_size_y", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-array_size_z", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-array_size0", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-array_size1", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-array_size2", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-color_mode", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-data_type", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-array_counter", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-ad_core_version", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-driver_version", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-file_path", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-file_name", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-file_path_exists", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-file_template", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-full_file_name", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-file_number", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-auto_increment", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-file_write_mode", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-num_capture", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-num_captured", + "protocols": [ + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-capture", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-create_directory", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-nd_array_port", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-enable_callbacks", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-nd_array_address", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-queue_size", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-position_mode", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-compression", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-num_extra_dims", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-swmr_mode", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-flush_now", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-xml_file_name", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-num_frames_chunks", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-chunk_size_auto", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] + }, + { + "name": "det-hdf-lazy_open", + "protocols": [ + { + "name": "Movable", + "types": [] + }, + { + "name": "Readable", + "types": [] + }, + { + "name": "Stageable", + "types": [] + }, + { + "name": "Subscribable", + "types": [] + }, + { + "name": "Device", + "types": [] + } + ] } ] } diff --git a/tests/system_tests/plans.json b/tests/system_tests/plans.json index 6f84a9c38..7432b78f6 100644 --- a/tests/system_tests/plans.json +++ b/tests/system_tests/plans.json @@ -12,14 +12,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -73,14 +295,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -95,7 +539,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -148,14 +649,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -170,7 +893,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -223,14 +1003,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -245,7 +1247,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -293,14 +1352,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -315,7 +1596,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -363,14 +1701,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -385,7 +1945,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -446,14 +2063,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -468,7 +2307,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -529,14 +2425,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -551,7 +2669,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -603,14 +2778,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -625,7 +3022,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -749,7 +3203,64 @@ "properties": { "x_axis": { "description": "An identifier for what to move for x", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "X Axis", "type": "bluesky.protocols.Movable" }, @@ -771,7 +3282,64 @@ }, "y_axis": { "description": "An identifier for what to move for y", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "Y Axis", "type": "bluesky.protocols.Movable" }, @@ -848,7 +3416,64 @@ "properties": { "axis": { "description": "An identifier for what to move", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "Axis", "type": "bluesky.protocols.Movable" }, @@ -890,13 +3515,127 @@ "properties": { "x_axis": { "description": "An identifier for what to move for x", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "X Axis", "type": "bluesky.protocols.Movable" }, "y_axis": { "description": "An identifier for what to move for y", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "Y Axis", "type": "bluesky.protocols.Movable" }, @@ -1012,7 +3751,64 @@ "properties": { "axis": { "description": "An identifier for what to move", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "Axis", "type": "bluesky.protocols.Movable" }, @@ -1135,7 +3931,64 @@ "properties": { "x_axis": { "description": "An identifier for what to move for x", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "X Axis", "type": "bluesky.protocols.Movable" }, @@ -1156,7 +4009,64 @@ }, "y_axis": { "description": "An identifier for what to move for y", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "Y Axis", "type": "bluesky.protocols.Movable" }, @@ -1221,7 +4131,64 @@ "properties": { "axis": { "description": "An identifier for what to move", - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "Axis", "type": "bluesky.protocols.Movable" }, @@ -1284,7 +4251,118 @@ "items": { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, @@ -1321,14 +4399,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -1343,7 +4643,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -1396,14 +4753,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -1418,7 +4997,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -1471,14 +5107,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -1493,7 +5351,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -1541,14 +5456,236 @@ { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "bluesky.protocols.Readable" }, { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "type": "ophyd_async.core._protocol.AsyncReadable" } @@ -1563,7 +5700,64 @@ "minItems": 2, "prefixItems": [ { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "type": "bluesky.protocols.Movable" }, { @@ -1606,7 +5800,64 @@ "additionalProperties": false, "properties": { "movable": { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "Movable", "type": "bluesky.protocols.Movable", "types": [ @@ -1641,7 +5892,64 @@ "additionalProperties": false, "properties": { "movable": { - "enum": [], + "enum": [ + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-array_counter", + "det-driver-image_mode", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-wait_for_plugins", + "det-hdf-array_counter", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-xml_file_name", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_travel", + "stage-theta-motor_stop", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-set_use_switch", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-high_limit_travel", + "stage-x-low_limit_travel", + "stage-x-motor_stop", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-set_use_switch", + "stage-x-user_setpoint", + "stage-x-velocity" + ], "title": "Movable", "type": "bluesky.protocols.Movable", "types": [ @@ -1761,7 +6069,118 @@ "readable": { "enum": [ "det", - "stage" + "det-driver-acquire", + "det-driver-acquire_period", + "det-driver-acquire_time", + "det-driver-ad_core_version", + "det-driver-array_counter", + "det-driver-array_size0", + "det-driver-array_size1", + "det-driver-array_size2", + "det-driver-array_size_x", + "det-driver-array_size_y", + "det-driver-array_size_z", + "det-driver-color_mode", + "det-driver-data_type", + "det-driver-detector_state", + "det-driver-driver_version", + "det-driver-firmware_version", + "det-driver-image_mode", + "det-driver-manufacturer", + "det-driver-model", + "det-driver-nd_attributes_file", + "det-driver-num_images", + "det-driver-port_name", + "det-driver-sdk_version", + "det-driver-serial_number", + "det-driver-unique_id", + "det-driver-wait_for_plugins", + "det-hdf-ad_core_version", + "det-hdf-array_counter", + "det-hdf-array_size0", + "det-hdf-array_size1", + "det-hdf-array_size2", + "det-hdf-array_size_x", + "det-hdf-array_size_y", + "det-hdf-array_size_z", + "det-hdf-auto_increment", + "det-hdf-capture", + "det-hdf-chunk_size_auto", + "det-hdf-color_mode", + "det-hdf-compression", + "det-hdf-create_directory", + "det-hdf-data_type", + "det-hdf-driver_version", + "det-hdf-enable_callbacks", + "det-hdf-file_name", + "det-hdf-file_number", + "det-hdf-file_path", + "det-hdf-file_path_exists", + "det-hdf-file_template", + "det-hdf-file_write_mode", + "det-hdf-flush_now", + "det-hdf-full_file_name", + "det-hdf-lazy_open", + "det-hdf-nd_array_address", + "det-hdf-nd_array_port", + "det-hdf-nd_attributes_file", + "det-hdf-num_capture", + "det-hdf-num_captured", + "det-hdf-num_extra_dims", + "det-hdf-num_frames_chunks", + "det-hdf-port_name", + "det-hdf-position_mode", + "det-hdf-queue_size", + "det-hdf-swmr_mode", + "det-hdf-unique_id", + "det-hdf-xml_file_name", + "stage", + "stage-theta", + "stage-theta-acceleration_time", + "stage-theta-deadband", + "stage-theta-dial_high_limit_travel", + "stage-theta-dial_low_limit_travel", + "stage-theta-encoder_resolution", + "stage-theta-high_limit_switch", + "stage-theta-high_limit_travel", + "stage-theta-low_limit_switch", + "stage-theta-low_limit_travel", + "stage-theta-max_velocity", + "stage-theta-motor_done_move", + "stage-theta-motor_egu", + "stage-theta-motor_resolution", + "stage-theta-offset", + "stage-theta-offset_freeze_switch", + "stage-theta-output_link", + "stage-theta-precision", + "stage-theta-set_use_switch", + "stage-theta-steps_per_revolution", + "stage-theta-units_per_revolution", + "stage-theta-user_setpoint", + "stage-theta-velocity", + "stage-x", + "stage-x-acceleration_time", + "stage-x-deadband", + "stage-x-dial_high_limit_travel", + "stage-x-dial_low_limit_travel", + "stage-x-encoder_resolution", + "stage-x-high_limit_switch", + "stage-x-high_limit_travel", + "stage-x-low_limit_switch", + "stage-x-low_limit_travel", + "stage-x-max_velocity", + "stage-x-motor_done_move", + "stage-x-motor_egu", + "stage-x-motor_resolution", + "stage-x-offset", + "stage-x-offset_freeze_switch", + "stage-x-output_link", + "stage-x-precision", + "stage-x-set_use_switch", + "stage-x-steps_per_revolution", + "stage-x-units_per_revolution", + "stage-x-user_setpoint", + "stage-x-velocity" ], "title": "Readable", "type": "bluesky.protocols.Readable" @@ -1781,7 +6200,10 @@ "additionalProperties": false, "properties": { "stoppable": { - "enum": [], + "enum": [ + "stage-theta", + "stage-x" + ], "title": "Stoppable", "type": "bluesky.protocols.Stoppable" } diff --git a/tests/unit_tests/core/test_context.py b/tests/unit_tests/core/test_context.py index 06c3391c7..6fd53dd05 100644 --- a/tests/unit_tests/core/test_context.py +++ b/tests/unit_tests/core/test_context.py @@ -1,5 +1,6 @@ from __future__ import annotations +import logging from dataclasses import dataclass, field from inspect import Parameter from pathlib import Path @@ -22,15 +23,18 @@ from dodal.common import PlanGenerator, inject from ophyd_async.core import ( Device, + DeviceVector, PathProvider, StandardDetector, StaticPathProvider, UUIDFilenameProvider, init_devices, + soft_signal_rw, ) from ophyd_async.epics.adaravis import AravisDetector from ophyd_async.epics.adcore import ADWriterFactory from ophyd_async.epics.motor import Motor +from ophyd_async.sim import SimMotor from pydantic import TypeAdapter, ValidationError from pydantic.json_schema import SkipJsonSchema from pytest import LogCaptureFixture @@ -68,6 +72,23 @@ "plan_m", "plan_n", } +EXPECTED_FAKE_DEVICE_MODULE_DEVICES = { + "fake_motor_x", + "fake_motor_y", + "fake_motor_bundle_a", + "fake_motor_bundle_b", + "device_a", + "device_a-motor", +} + + +def assert_fake_device_module_registered(context: BlueskyContext) -> None: + # Which child signals exist depends on the upstream device classes + assert EXPECTED_FAKE_DEVICE_MODULE_DEVICES <= context.devices.keys() + assert all( + name.split("-")[0] in EXPECTED_FAKE_DEVICE_MODULE_DEVICES + for name in context.devices + ) # @@ -188,9 +209,21 @@ def demo_plan(foo: int, mov: Movable) -> MsgGenerator: devicey_context.register_plan(demo_plan) schema = devicey_context.plans["demo_plan"].model.model_json_schema() + + # Which child signals exist depends on the upstream Motor class + expected_movables = sorted( + name + for name, device in devicey_context.devices.items() + if isinstance(device, Movable) + ) + assert {"sim", "sim-velocity"} <= set(expected_movables) assert schema["properties"] == { "foo": {"title": "Foo", "type": "integer"}, - "mov": {"title": "Mov", "type": "bluesky.protocols.Movable", "enum": ["sim"]}, + "mov": { + "title": "Mov", + "type": "bluesky.protocols.Movable", + "enum": expected_movables, + }, } @@ -267,17 +300,169 @@ def test_override_device_name(empty_context: BlueskyContext, sim_motor: Motor): assert empty_context.devices["foo"] is sim_motor +class Axis(Device): + def __init__(self, name: str = "") -> None: + self.position = soft_signal_rw(float) + self.velocity = soft_signal_rw(float) + super().__init__(name=name) + + +class Stage(Device): + def __init__(self, name: str = "") -> None: + self.x = Axis() + self.y = Axis() + super().__init__(name=name) + + +class Table(Device): + def __init__(self, name: str = "") -> None: + self.mount = Stage() + super().__init__(name=name) + + +def test_register_device_registers_children_recursively( + empty_context: BlueskyContext, +): + table = Table(name="table") + empty_context.register_device(table) + + assert empty_context.devices.keys() == { + "table", + "table-mount", + "table-mount-x", + "table-mount-x-position", + "table-mount-x-velocity", + "table-mount-y", + "table-mount-y-position", + "table-mount-y-velocity", + } + assert empty_context.devices["table-mount"] is table.mount + assert empty_context.devices["table-mount-x"] is table.mount.x + assert empty_context.devices["table-mount-x-velocity"] is table.mount.x.velocity + + +def test_child_sharing_parent_name_is_skipped_and_warned_once( + empty_context: BlueskyContext, caplog: LogCaptureFixture +): + # SimMotor's readback signal has the same name as the motor + caplog.set_level(logging.DEBUG) + motor = SimMotor(name="motor") + empty_context.register_device(motor) + empty_context.register_device(SimMotor(name="other")) + + assert empty_context.devices["motor"] is motor + assert motor.user_readback not in empty_context.devices.values() + assert empty_context.find_device("motor.user_readback") is motor.user_readback + records = caplog.get_records("call") + assert [record.levelno for record in records] == [ + logging.WARNING, + logging.DEBUG, + logging.DEBUG, + ] + assert "'motor'" in records[1].message + assert "'other'" in records[2].message + + +class AxisBank(Device): + def __init__(self, name: str = "") -> None: + self.axes = DeviceVector({1: Axis(), 2: Axis()}) + super().__init__(name=name) + + +def test_device_vector_children_are_registered(empty_context: BlueskyContext): + bank = AxisBank(name="bank") + empty_context.register_device(bank) + + assert empty_context.devices["bank-axes"] is bank.axes + assert empty_context.devices["bank-axes-1"] is bank.axes[1] + assert empty_context.devices["bank-axes-2-velocity"] is bank.axes[2].velocity + + +def test_overridden_registration_name_does_not_rename_children( + empty_context: BlueskyContext, +): + # Children keep their own names when the parent is registered as "foo", so + # the motor's readback is registered as "motor", which is not in use + motor = SimMotor(name="motor") + empty_context.register_device(motor, name="foo") + + assert empty_context.devices["foo"] is motor + assert empty_context.devices["motor"] is motor.user_readback + assert empty_context.devices["motor-velocity"] is motor.velocity + + +def test_unrelated_name_collision_keeps_existing_device_and_logs( + empty_context: BlueskyContext, caplog: LogCaptureFixture +): + sentinel = SimMotor(name="sentinel") + empty_context.register_device(sentinel, name="stage-x") + + caplog.set_level(logging.DEBUG) + stage = Stage(name="stage") + empty_context.register_device(stage) + + assert empty_context.devices["stage-x"] is sentinel + assert "stage-x-position" not in empty_context.devices + assert empty_context.devices["stage-y"] is stage.y + assert any("stage-x" in record.message for record in caplog.get_records("call")) + + +def test_top_level_name_collision_keeps_existing_device_and_logs( + empty_context: BlueskyContext, caplog: LogCaptureFixture +): + stage = Stage(name="stage") + empty_context.register_device(stage) + + caplog.set_level(logging.DEBUG) + motor = SimMotor(name="stage-x") + empty_context.register_device(motor) + + assert empty_context.devices["stage-x"] is stage.x + assert motor.velocity not in empty_context.devices.values() + assert any("stage-x" in record.message for record in caplog.get_records("call")) + + +def test_register_device_is_idempotent( + empty_context: BlueskyContext, caplog: LogCaptureFixture +): + stage = Stage(name="stage") + empty_context.register_device(stage) + before = dict(empty_context.devices) + + caplog.set_level(logging.WARNING) + empty_context.register_device(stage) + + assert empty_context.devices == before + assert not caplog.get_records("call") + + +def test_register_device_skips_unnamed_children(empty_context: BlueskyContext): + stage = Stage() # unnamed, so its children are too + empty_context.register_device(stage, name="stage") + + assert empty_context.devices.keys() == {"stage"} + + +def test_child_device_usable_as_plan_argument(empty_context: BlueskyContext): + stage = Stage(name="stage") + empty_context.register_device(stage) + + def move_plan(mov: Movable) -> MsgGenerator: + yield from () + + empty_context.register_plan(move_plan) + model = empty_context.plans[move_plan.__name__].model + + position = stage.x.position + assert model.model_validate({"mov": "stage-x-position"}).mov is position # type: ignore + assert model.model_validate({"mov": "stage.x.position"}).mov is position # type: ignore + + def test_add_devices_from_module(empty_context: BlueskyContext): import tests.unit_tests.core.fake_device_module as device_module empty_context.with_device_manager(device_module.devices) # type: ignore - protocol uses Any to avoid dependency on dodal - assert { - "fake_motor_x", - "fake_motor_y", - "fake_motor_bundle_a", - "fake_motor_bundle_b", - "device_a", - } == empty_context.devices.keys() + assert_fake_device_module_registered(empty_context) def test_add_failing_devices_from_module( @@ -339,13 +524,7 @@ def test_add_devices_and_plans_from_modules_with_config( ] ) ) - assert { - "fake_motor_x", - "fake_motor_y", - "fake_motor_bundle_a", - "fake_motor_bundle_b", - "device_a", - } == empty_context.devices.keys() + assert_fake_device_module_registered(empty_context) assert EXPECTED_PLANS == empty_context.plans.keys() @@ -715,8 +894,7 @@ def test_empty_device_manager(empty_context: BlueskyContext): def test_single_device_manager(empty_context: BlueskyContext): - foo = Mock(spec=Device, name="foo") - foo.name = "foo" + foo = Device(name="foo") sdm = StaticDeviceManager(devices={"foo": foo}) empty_context.with_device_manager(sdm) @@ -780,8 +958,7 @@ def test_path_provider_passed_to_device_manager(empty_context: BlueskyContext): def test_device_manager_environment_source(empty_context: BlueskyContext): - foo = Mock(spec=Device, name="foo") - foo.name = "foo" + foo = Device(name="foo") stm = StaticDeviceManager(devices={"foo": foo}) dev_mod = Mock(spec=ModuleType) dev_mod.devices = stm diff --git a/tests/unit_tests/service/test_interface.py b/tests/unit_tests/service/test_interface.py index db4e68760..fc9afb7b9 100644 --- a/tests/unit_tests/service/test_interface.py +++ b/tests/unit_tests/service/test_interface.py @@ -12,6 +12,7 @@ from bluesky_stomp.messaging import StompClient from fastapi import status from ophyd_async.epics.motor import Motor +from ophyd_async.sim import SimMotor from pydantic import HttpUrl, SecretStr from pytest_httpx import HTTPXMock from stomp.connect import StompConnection11 as Connection @@ -157,7 +158,10 @@ def test_get_devices(context_mock: MagicMock): context.register_device(Motor("FOO:", name="my_axis")) context_mock.return_value = context - assert interface.get_devices() == [ + # Which child signals exist depends on the upstream Motor class + devices = interface.get_devices() + assert [d.name for d in devices] == list(context.devices) + assert devices[:2] == [ DeviceModel( name="my_device", protocols=[ @@ -181,6 +185,19 @@ def test_get_devices(context_mock: MagicMock): ] +@patch("blueapi.service.interface.context") +def test_get_devices_reports_registered_names(context_mock: MagicMock): + # The motor is registered as "foo", but its readback is named "motor" + context = BlueskyContext() + context.register_device(SimMotor(name="motor"), name="foo") + context_mock.return_value = context + + names = [device.name for device in interface.get_devices()] + assert names.count("foo") == 1 + assert names.count("motor") == 1 + assert interface.get_device("foo").name == "foo" + + @patch("blueapi.service.interface.context") def test_get_device(context_mock: MagicMock): context = BlueskyContext()