From 5f7290bce294b454b7dfa5261f1da502eac539a7 Mon Sep 17 00:00:00 2001 From: Oli Wenman Date: Tue, 17 Feb 2026 17:07:13 +0000 Subject: [PATCH 1/2] Add Psu pv override so VGScienta connect works --- .../electron_analyser/base/base_driver_io.py | 8 +++++--- .../electron_analyser/specs/specs_driver_io.py | 3 +++ .../vgscienta/vgscienta_driver_io.py | 14 ++++++++------ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/dodal/devices/electron_analyser/base/base_driver_io.py b/src/dodal/devices/electron_analyser/base/base_driver_io.py index b266709aa8..f255e96c76 100644 --- a/src/dodal/devices/electron_analyser/base/base_driver_io.py +++ b/src/dodal/devices/electron_analyser/base/base_driver_io.py @@ -33,6 +33,8 @@ AnyPsuMode: TypeAlias = SupersetEnum | StrictEnum TPsuMode = TypeVar("TPsuMode", bound=AnyPsuMode) +_PSU = "PSU_MODE" + class AbstractAnalyserDriverIO( ABC, @@ -56,8 +58,7 @@ class AbstractAnalyserDriverIO( pass_energy_type (type[TPassEnergy]): Can be enum or float, depending on electron analyser model. If enum, it determines the available pass energies for this device. - energy_source: Device that can give us the correct excitation energy (in eV) - and switch sources if applicable. + psu_infix (str, optional): The psu infix to connect to EPICS. Defaults to PSU_MODE. name (str, optional): Name of the device. """ @@ -68,6 +69,7 @@ def __init__( lens_mode_type: type[TLensMode], psu_mode_type: type[TPsuMode], pass_energy_type: type[TPassEnergy], + psu_infix: str = _PSU, name: str = "", ) -> None: self.acquisition_mode_type = acquisition_mode_type @@ -108,7 +110,7 @@ def __init__( ) # This is used by each electron analyser, however it depends on the electron # analyser type to know if is moved with region settings. - self.psu_mode = epics_signal_rw(psu_mode_type, prefix + "PSU_MODE") + self.psu_mode = epics_signal_rw(psu_mode_type, prefix + psu_infix) # This is defined in the parent class, add it as readable configuration. self.add_readables([self.acquire_time], StandardReadableFormat.CONFIG_SIGNAL) diff --git a/src/dodal/devices/electron_analyser/specs/specs_driver_io.py b/src/dodal/devices/electron_analyser/specs/specs_driver_io.py index 7c16a39983..a6b0dd7ca9 100644 --- a/src/dodal/devices/electron_analyser/specs/specs_driver_io.py +++ b/src/dodal/devices/electron_analyser/specs/specs_driver_io.py @@ -12,6 +12,7 @@ from ophyd_async.epics.core import epics_signal_r, epics_signal_rw from dodal.devices.electron_analyser.base.base_driver_io import ( + _PSU, AbstractAnalyserDriverIO, ) from dodal.devices.electron_analyser.base.base_region import TLensMode, TPsuMode @@ -34,6 +35,7 @@ def __init__( prefix: str, lens_mode_type: type[TLensMode], psu_mode_type: type[TPsuMode], + psu_infix: str = _PSU, name: str = "", ) -> None: with self.add_children_as_readables(StandardReadableFormat.CONFIG_SIGNAL): @@ -55,6 +57,7 @@ def __init__( lens_mode_type=lens_mode_type, psu_mode_type=psu_mode_type, pass_energy_type=float, + psu_infix=psu_infix, name=name, ) diff --git a/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py b/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py index 3d7db84aa9..5c5b8e7551 100644 --- a/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py +++ b/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py @@ -40,6 +40,7 @@ def __init__( lens_mode_type: type[TLensMode], psu_mode_type: type[TPsuMode], pass_energy_type: type[TPassEnergyEnum], + psu_infix: str = "ELEMENT_SET", name: str = "", ) -> None: with self.add_children_as_readables(StandardReadableFormat.CONFIG_SIGNAL): @@ -55,12 +56,13 @@ def __init__( self.sensor_max_size_y = epics_signal_r(int, prefix + "MaxSizeY_RBV") super().__init__( - prefix, - AcquisitionMode, - lens_mode_type, - psu_mode_type, - pass_energy_type, - name, + prefix=prefix, + acquisition_mode_type=AcquisitionMode, + lens_mode_type=lens_mode_type, + psu_mode_type=psu_mode_type, + pass_energy_type=pass_energy_type, + psu_infix=psu_infix, + name=name, ) @AsyncStatus.wrap From 69f5856e4e8eb4514d7c4a2c7c658097a4734d6d Mon Sep 17 00:00:00 2001 From: Oli Wenman Date: Thu, 19 Feb 2026 10:41:51 +0000 Subject: [PATCH 2/2] Update to suffix --- src/dodal/devices/electron_analyser/base/base_driver_io.py | 6 +++--- .../devices/electron_analyser/specs/specs_driver_io.py | 4 ++-- .../electron_analyser/vgscienta/vgscienta_driver_io.py | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/dodal/devices/electron_analyser/base/base_driver_io.py b/src/dodal/devices/electron_analyser/base/base_driver_io.py index f255e96c76..8bc55e7ddf 100644 --- a/src/dodal/devices/electron_analyser/base/base_driver_io.py +++ b/src/dodal/devices/electron_analyser/base/base_driver_io.py @@ -58,7 +58,7 @@ class AbstractAnalyserDriverIO( pass_energy_type (type[TPassEnergy]): Can be enum or float, depending on electron analyser model. If enum, it determines the available pass energies for this device. - psu_infix (str, optional): The psu infix to connect to EPICS. Defaults to PSU_MODE. + psu_suffix (str, optional): The psu infix to connect to EPICS. Defaults to PSU_MODE. name (str, optional): Name of the device. """ @@ -69,7 +69,7 @@ def __init__( lens_mode_type: type[TLensMode], psu_mode_type: type[TPsuMode], pass_energy_type: type[TPassEnergy], - psu_infix: str = _PSU, + psu_suffix: str = _PSU, name: str = "", ) -> None: self.acquisition_mode_type = acquisition_mode_type @@ -110,7 +110,7 @@ def __init__( ) # This is used by each electron analyser, however it depends on the electron # analyser type to know if is moved with region settings. - self.psu_mode = epics_signal_rw(psu_mode_type, prefix + psu_infix) + self.psu_mode = epics_signal_rw(psu_mode_type, prefix + psu_suffix) # This is defined in the parent class, add it as readable configuration. self.add_readables([self.acquire_time], StandardReadableFormat.CONFIG_SIGNAL) diff --git a/src/dodal/devices/electron_analyser/specs/specs_driver_io.py b/src/dodal/devices/electron_analyser/specs/specs_driver_io.py index a6b0dd7ca9..6911cf6535 100644 --- a/src/dodal/devices/electron_analyser/specs/specs_driver_io.py +++ b/src/dodal/devices/electron_analyser/specs/specs_driver_io.py @@ -35,7 +35,7 @@ def __init__( prefix: str, lens_mode_type: type[TLensMode], psu_mode_type: type[TPsuMode], - psu_infix: str = _PSU, + psu_suffix: str = _PSU, name: str = "", ) -> None: with self.add_children_as_readables(StandardReadableFormat.CONFIG_SIGNAL): @@ -57,7 +57,7 @@ def __init__( lens_mode_type=lens_mode_type, psu_mode_type=psu_mode_type, pass_energy_type=float, - psu_infix=psu_infix, + psu_suffix=psu_suffix, name=name, ) diff --git a/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py b/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py index 5c5b8e7551..4756baec46 100644 --- a/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py +++ b/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py @@ -40,7 +40,7 @@ def __init__( lens_mode_type: type[TLensMode], psu_mode_type: type[TPsuMode], pass_energy_type: type[TPassEnergyEnum], - psu_infix: str = "ELEMENT_SET", + psu_suffix: str = "ELEMENT_SET", name: str = "", ) -> None: with self.add_children_as_readables(StandardReadableFormat.CONFIG_SIGNAL): @@ -61,7 +61,7 @@ def __init__( lens_mode_type=lens_mode_type, psu_mode_type=psu_mode_type, pass_energy_type=pass_energy_type, - psu_infix=psu_infix, + psu_suffix=psu_suffix, name=name, )