From d178fefac15476dd9e55318ad74d2f530be8a86b Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 09:31:36 +0000 Subject: [PATCH 01/17] added i11 dcm --- src/dodal/beamlines/i11.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/dodal/beamlines/i11.py b/src/dodal/beamlines/i11.py index c9446937ca..7428ecd4e2 100644 --- a/src/dodal/beamlines/i11.py +++ b/src/dodal/beamlines/i11.py @@ -13,6 +13,9 @@ AutotunedCyberstarBlower, CyberstarBlower, ) + +# from dodal.devices.common_dcm import BaseDCM, PitchAndRollCrystal, RollCrystal +from dodal.devices.i11.dcm import DCM from dodal.devices.i11.diff_stages import ( DiffractometerBase, DiffractometerStage, @@ -124,3 +127,11 @@ def slits_4() -> Slits: @device_factory() def slits_5() -> Slits: return Slits(prefix=f"{PREFIX.beamline_prefix}-AL-SLITS-05:") + + +@device_factory() +def dcm() -> DCM: + return DCM( + prefix=f"{PREFIX.beamline_prefix}-MO-DCM-01:", + xtal_prefix=f"{PREFIX.beamline_prefix}-DI-DCM-01:", + ) From b64df7c819137d3407a13f98c3a6f073d18c29c0 Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 09:33:27 +0000 Subject: [PATCH 02/17] added i11 dcm --- src/dodal/devices/i11/dcm.py | 102 +++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/dodal/devices/i11/dcm.py diff --git a/src/dodal/devices/i11/dcm.py b/src/dodal/devices/i11/dcm.py new file mode 100644 index 0000000000..19cd8e156a --- /dev/null +++ b/src/dodal/devices/i11/dcm.py @@ -0,0 +1,102 @@ +import time + +import numpy as np +from bluesky.protocols import Reading +from event_model.documents.event_descriptor import DataKey +from ophyd_async.core import Array1D, soft_signal_r_and_setter +from ophyd_async.epics.core import epics_signal_r +from ophyd_async.epics.motor import Motor + +from dodal.common.crystal_metadata import ( + CrystalMetadata, + MaterialsEnum, + make_crystal_metadata_from_material, +) +from dodal.devices.common_dcm import ( + BaseDCM, + PitchAndRollCrystal, + StationaryCrystal, +) + +# Conversion constant for energy and wavelength, taken from the X-Ray data booklet +# Converts between energy in KeV and wavelength in angstrom +_CONVERSION_CONSTANT = 12.3984 + + +class DCM(BaseDCM[PitchAndRollCrystal, StationaryCrystal]): + """ + A double crystal monochromator (DCM), used to select the energy of the beam. + + perp describes the gap between the 2 DCM crystals which has to change as you alter + the angle to select the requested energy. + + offset ensures that the beam exits the DCM at the same point, regardless of energy. + """ + + def __init__( + self, + prefix: str, + xtal_prefix: str, + name: str = "", + crystal_metadata: CrystalMetadata | None = None, + ) -> None: + cm = crystal_metadata or make_crystal_metadata_from_material( + MaterialsEnum.Si, (1, 1, 1) + ) + with self.add_children_as_readables(): + self.perp_in_mm = Motor(prefix + "PERP") + + # temperatures + self.xtal1_holder_temp = epics_signal_r(str, xtal_prefix + "PT100-1.SEVR") + self.xtal1_temp = epics_signal_r(str, xtal_prefix + "PT100-2.SEVR") + + self.xtal2_heater_temp = epics_signal_r(str, xtal_prefix + "PT100-3.SEVR") + self.xtal2_temp = epics_signal_r(str, xtal_prefix + "PT100-4.SEVR") + + self.xtal1_heater_temp = epics_signal_r( + float, xtal_prefix + "H1:TTEMP:CALC" + ) + self.xtal2_heater_temp = epics_signal_r( + float, xtal_prefix + "H2:TTEMP:CALC" + ) + + self.crystal_metadata_usage, _ = soft_signal_r_and_setter( + str, initial_value=cm.usage + ) + self.crystal_metadata_type, _ = soft_signal_r_and_setter( + str, initial_value=cm.type + ) + reflection_array = np.array(cm.reflection) + self.crystal_metadata_reflection, _ = soft_signal_r_and_setter( + Array1D[np.uint64], + initial_value=reflection_array, + ) + super().__init__(prefix, PitchAndRollCrystal, StationaryCrystal, name) + + async def describe(self) -> dict[str, DataKey]: + default_describe = await super().describe() + return { + f"{self.name}-wavelength_in_a": DataKey( + dtype="number", + shape=[], + source=self.name, + units="angstrom", + ), + **default_describe, + } + + async def read(self) -> dict[str, Reading]: + default_reading = await super().read() + energy: float = default_reading[f"{self.name}-energy_in_kev"]["value"] + if energy > 0.0: + wavelength = _CONVERSION_CONSTANT / energy + else: + wavelength = 0.0 + + return { + **default_reading, + f"{self.name}-wavelength_in_a": Reading( + value=wavelength, + timestamp=time.time(), + ), + } From 9876818ca2b626a7f59d488d4a9c322eee55c415 Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 14:46:56 +0000 Subject: [PATCH 03/17] added i11 dcm tests --- tests/devices/i11/test_dcm.py | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tests/devices/i11/test_dcm.py diff --git a/tests/devices/i11/test_dcm.py b/tests/devices/i11/test_dcm.py new file mode 100644 index 0000000000..f2697ecff3 --- /dev/null +++ b/tests/devices/i11/test_dcm.py @@ -0,0 +1,61 @@ +import bluesky.plans as bp +import pytest +from bluesky.run_engine import RunEngine +from ophyd_async.core import init_devices +from ophyd_async.testing import ( + assert_emitted, + set_mock_value, +) + +from dodal.devices.i11.dcm import DCM + + +@pytest.fixture +async def dcm() -> DCM: + return DCM( + prefix="x-MO-DCM-01:", + xtal_prefix="x-DI-DCM-01:", + ) + + +@pytest.fixture +async def dcm() -> DCM: + async with init_devices(mock=True): + dcm = DCM( + prefix="x-MO-DCM-01:", + xtal_prefix="x-DI-DCM-01:", + ) + return dcm + + +def test_count_dcm( + RE: RunEngine, + run_engine_documents: dict[str, list[dict]], + dcm: DCM, +): + RE(bp.count([dcm])) + assert_emitted( + run_engine_documents, + start=1, + descriptor=1, + event=1, + stop=1, + ) + + +@pytest.mark.parametrize( + "energy,wavelength", + [ + (0.0, 0.0), + (1.0, 12.3984), + (2.0, 6.1992), + ], +) +async def test_wavelength( + dcm: DCM, + energy: float, + wavelength: float, +): + set_mock_value(dcm.energy_in_kev.user_readback, energy) + reading = await dcm.read() + assert reading["dcm-wavelength_in_a"]["value"] == wavelength From 6dc9536b34ae8449fd99523fcd7a34257e1ed3db Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 14:54:49 +0000 Subject: [PATCH 04/17] remove useless fixture --- tests/devices/i11/test_dcm.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/devices/i11/test_dcm.py b/tests/devices/i11/test_dcm.py index f2697ecff3..b531cc9bdb 100644 --- a/tests/devices/i11/test_dcm.py +++ b/tests/devices/i11/test_dcm.py @@ -10,14 +10,6 @@ from dodal.devices.i11.dcm import DCM -@pytest.fixture -async def dcm() -> DCM: - return DCM( - prefix="x-MO-DCM-01:", - xtal_prefix="x-DI-DCM-01:", - ) - - @pytest.fixture async def dcm() -> DCM: async with init_devices(mock=True): From 4d79058fa995fd659b67ef8ace734a65ac1d4ac3 Mon Sep 17 00:00:00 2001 From: Richard Dixey <185198552+RJCD-Diamond@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:58:13 +0100 Subject: [PATCH 05/17] derived_signal_r for dcm Co-authored-by: Joseph Ware <53935796+DiamondJoseph@users.noreply.github.com> --- src/dodal/devices/i11/dcm.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/dodal/devices/i11/dcm.py b/src/dodal/devices/i11/dcm.py index 19cd8e156a..b57a567cb2 100644 --- a/src/dodal/devices/i11/dcm.py +++ b/src/dodal/devices/i11/dcm.py @@ -72,6 +72,8 @@ def __init__( initial_value=reflection_array, ) super().__init__(prefix, PitchAndRollCrystal, StationaryCrystal, name) + with self.add_children_as_readables(): + self.wavelength = derived_signal_r(self._wavelength_from_energy, energy= self.energy_in_kev, units="angstrom") async def describe(self) -> dict[str, DataKey]: default_describe = await super().describe() From 6fb223410f2f98c38a00ffe1d11189ca0fa13d8c Mon Sep 17 00:00:00 2001 From: Richard Dixey <185198552+RJCD-Diamond@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:59:20 +0100 Subject: [PATCH 06/17] get wavelength from derived signal Co-authored-by: Joseph Ware <53935796+DiamondJoseph@users.noreply.github.com> --- src/dodal/devices/i11/dcm.py | 31 ++++--------------------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/src/dodal/devices/i11/dcm.py b/src/dodal/devices/i11/dcm.py index b57a567cb2..9762d04b62 100644 --- a/src/dodal/devices/i11/dcm.py +++ b/src/dodal/devices/i11/dcm.py @@ -75,30 +75,7 @@ def __init__( with self.add_children_as_readables(): self.wavelength = derived_signal_r(self._wavelength_from_energy, energy= self.energy_in_kev, units="angstrom") - async def describe(self) -> dict[str, DataKey]: - default_describe = await super().describe() - return { - f"{self.name}-wavelength_in_a": DataKey( - dtype="number", - shape=[], - source=self.name, - units="angstrom", - ), - **default_describe, - } - - async def read(self) -> dict[str, Reading]: - default_reading = await super().read() - energy: float = default_reading[f"{self.name}-energy_in_kev"]["value"] - if energy > 0.0: - wavelength = _CONVERSION_CONSTANT / energy - else: - wavelength = 0.0 - - return { - **default_reading, - f"{self.name}-wavelength_in_a": Reading( - value=wavelength, - timestamp=time.time(), - ), - } + def _wavelength_from_energy(self, energy: float) -> float: + if energy > 0: + return _CONVERSION_CONSTANT / energy + return 0 From c3c896cc09d35ecec2b3029938bcdd0997fd0f03 Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:04:43 +0000 Subject: [PATCH 07/17] added missing imports and tidied up dcm class --- src/dodal/devices/i11/dcm.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/dodal/devices/i11/dcm.py b/src/dodal/devices/i11/dcm.py index 9762d04b62..7ab5aec627 100644 --- a/src/dodal/devices/i11/dcm.py +++ b/src/dodal/devices/i11/dcm.py @@ -1,9 +1,5 @@ -import time - import numpy as np -from bluesky.protocols import Reading -from event_model.documents.event_descriptor import DataKey -from ophyd_async.core import Array1D, soft_signal_r_and_setter +from ophyd_async.core import Array1D, derived_signal_r, soft_signal_r_and_setter from ophyd_async.epics.core import epics_signal_r from ophyd_async.epics.motor import Motor @@ -72,10 +68,15 @@ def __init__( initial_value=reflection_array, ) super().__init__(prefix, PitchAndRollCrystal, StationaryCrystal, name) + with self.add_children_as_readables(): - self.wavelength = derived_signal_r(self._wavelength_from_energy, energy= self.energy_in_kev, units="angstrom") + self.wavelength = derived_signal_r( + self._wavelength_from_energy, + energy=self.energy_in_kev, + units="angstrom", + ) - def _wavelength_from_energy(self, energy: float) -> float: - if energy > 0: - return _CONVERSION_CONSTANT / energy - return 0 + def _wavelength_from_energy(self, energy: float) -> float: + if energy > 0: + return _CONVERSION_CONSTANT / energy + return 0 From 9d0e4f337c716e1149c24ffb608cf770c5b9f18d Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:19:45 +0000 Subject: [PATCH 08/17] assert wavelength --- src/dodal/devices/i11/dcm.py | 1 - tests/devices/i11/test_dcm.py | 12 +++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/dodal/devices/i11/dcm.py b/src/dodal/devices/i11/dcm.py index 7ab5aec627..8e1779723b 100644 --- a/src/dodal/devices/i11/dcm.py +++ b/src/dodal/devices/i11/dcm.py @@ -73,7 +73,6 @@ def __init__( self.wavelength = derived_signal_r( self._wavelength_from_energy, energy=self.energy_in_kev, - units="angstrom", ) def _wavelength_from_energy(self, energy: float) -> float: diff --git a/tests/devices/i11/test_dcm.py b/tests/devices/i11/test_dcm.py index b531cc9bdb..f959a5d85e 100644 --- a/tests/devices/i11/test_dcm.py +++ b/tests/devices/i11/test_dcm.py @@ -36,18 +36,20 @@ def test_count_dcm( @pytest.mark.parametrize( - "energy,wavelength", + "energy,wavelength,units", [ - (0.0, 0.0), - (1.0, 12.3984), - (2.0, 6.1992), + (0.0, 0.0, "kev"), + (1.0, 12.3984, "kev"), + (2.0, 6.1992, "kev"), ], ) async def test_wavelength( dcm: DCM, energy: float, wavelength: float, + units: str, ): set_mock_value(dcm.energy_in_kev.user_readback, energy) reading = await dcm.read() - assert reading["dcm-wavelength_in_a"]["value"] == wavelength + + assert reading["dcm-wavelength"]["value"] == wavelength From 7196cecdce0970b7d44c3d1cd062ad7a9fe3e22e Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:26:47 +0000 Subject: [PATCH 09/17] tests fixture is valid --- tests/devices/i11/test_dcm.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/devices/i11/test_dcm.py b/tests/devices/i11/test_dcm.py index f959a5d85e..cc4a9da285 100644 --- a/tests/devices/i11/test_dcm.py +++ b/tests/devices/i11/test_dcm.py @@ -13,10 +13,7 @@ @pytest.fixture async def dcm() -> DCM: async with init_devices(mock=True): - dcm = DCM( - prefix="x-MO-DCM-01:", - xtal_prefix="x-DI-DCM-01:", - ) + dcm = DCM(prefix="x-MO-DCM-01:", xtal_prefix="x-DI-DCM-01:") return dcm From e259b748284c23f88260978e94649bb73637b58b Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:28:57 +0000 Subject: [PATCH 10/17] remove useless unit --- tests/devices/i11/test_dcm.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/devices/i11/test_dcm.py b/tests/devices/i11/test_dcm.py index cc4a9da285..58517b7454 100644 --- a/tests/devices/i11/test_dcm.py +++ b/tests/devices/i11/test_dcm.py @@ -35,16 +35,15 @@ def test_count_dcm( @pytest.mark.parametrize( "energy,wavelength,units", [ - (0.0, 0.0, "kev"), - (1.0, 12.3984, "kev"), - (2.0, 6.1992, "kev"), + (0.0, 0.0), + (1.0, 12.3984), + (2.0, 6.1992), ], ) async def test_wavelength( dcm: DCM, energy: float, wavelength: float, - units: str, ): set_mock_value(dcm.energy_in_kev.user_readback, energy) reading = await dcm.read() From 3a62786c43665f2f187ac7093d62b84aa57c0840 Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:32:15 +0000 Subject: [PATCH 11/17] remove useless unit --- tests/devices/i11/test_dcm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/devices/i11/test_dcm.py b/tests/devices/i11/test_dcm.py index 58517b7454..f23e1b5b40 100644 --- a/tests/devices/i11/test_dcm.py +++ b/tests/devices/i11/test_dcm.py @@ -33,7 +33,7 @@ def test_count_dcm( @pytest.mark.parametrize( - "energy,wavelength,units", + "energy,wavelength", [ (0.0, 0.0), (1.0, 12.3984), From 3271c007ce991c3078bc495d73640502203165ad Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:41:31 +0000 Subject: [PATCH 12/17] moved fixture to end --- tests/devices/i11/test_dcm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/devices/i11/test_dcm.py b/tests/devices/i11/test_dcm.py index f23e1b5b40..da975c6be8 100644 --- a/tests/devices/i11/test_dcm.py +++ b/tests/devices/i11/test_dcm.py @@ -41,9 +41,9 @@ def test_count_dcm( ], ) async def test_wavelength( - dcm: DCM, energy: float, wavelength: float, + dcm: DCM, ): set_mock_value(dcm.energy_in_kev.user_readback, energy) reading = await dcm.read() From b1d9acfc2da4414707244878c6e43b94439815b2 Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:46:58 +0000 Subject: [PATCH 13/17] renamed tests --- .../i11/{test_dcm.py => test_i11_dcm.py} | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) rename tests/devices/i11/{test_dcm.py => test_i11_dcm.py} (68%) diff --git a/tests/devices/i11/test_dcm.py b/tests/devices/i11/test_i11_dcm.py similarity index 68% rename from tests/devices/i11/test_dcm.py rename to tests/devices/i11/test_i11_dcm.py index da975c6be8..7825096e30 100644 --- a/tests/devices/i11/test_dcm.py +++ b/tests/devices/i11/test_i11_dcm.py @@ -11,18 +11,18 @@ @pytest.fixture -async def dcm() -> DCM: +async def i11_dcm() -> DCM: async with init_devices(mock=True): - dcm = DCM(prefix="x-MO-DCM-01:", xtal_prefix="x-DI-DCM-01:") - return dcm + i11_dcm = DCM(prefix="x-MO-DCM-01:", xtal_prefix="x-DI-DCM-01:") + return i11_dcm -def test_count_dcm( +def test_count_i11_dcm( RE: RunEngine, run_engine_documents: dict[str, list[dict]], - dcm: DCM, + i11_dcm: DCM, ): - RE(bp.count([dcm])) + RE(bp.count([i11_dcm])) assert_emitted( run_engine_documents, start=1, @@ -40,12 +40,12 @@ def test_count_dcm( (2.0, 6.1992), ], ) -async def test_wavelength( +async def test_i11_wavelength( energy: float, wavelength: float, - dcm: DCM, + i11_dcm: DCM, ): - set_mock_value(dcm.energy_in_kev.user_readback, energy) - reading = await dcm.read() + set_mock_value(i11_dcm.energy_in_kev.user_readback, energy) + reading = await i11_dcm.read() assert reading["dcm-wavelength"]["value"] == wavelength From ba622a30cde5f11710699e2dbca55b038898101d Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:48:57 +0000 Subject: [PATCH 14/17] add init to i11 devices --- tests/devices/i11/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/devices/i11/__init__.py diff --git a/tests/devices/i11/__init__.py b/tests/devices/i11/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From b9e6257b4b94710c3c6c8a60357ea92a31bb9587 Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 15:59:30 +0000 Subject: [PATCH 15/17] wavelength asserton added --- tests/devices/i11/test_i11_dcm.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/devices/i11/test_i11_dcm.py b/tests/devices/i11/test_i11_dcm.py index 7825096e30..f805c6a434 100644 --- a/tests/devices/i11/test_i11_dcm.py +++ b/tests/devices/i11/test_i11_dcm.py @@ -33,7 +33,7 @@ def test_count_i11_dcm( @pytest.mark.parametrize( - "energy,wavelength", + "wavelength,energy", [ (0.0, 0.0), (1.0, 12.3984), @@ -41,11 +41,14 @@ def test_count_i11_dcm( ], ) async def test_i11_wavelength( - energy: float, wavelength: float, + energy: float, i11_dcm: DCM, ): set_mock_value(i11_dcm.energy_in_kev.user_readback, energy) reading = await i11_dcm.read() - assert reading["dcm-wavelength"]["value"] == wavelength + print(reading) + + assert reading["i11_dcm-energy_in_kev"]["value"] == energy + assert reading["i11_dcm-wavelength"]["value"] == wavelength From ada2068d82ab7201ee85c73adf28ef806d5438db Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Fri, 26 Sep 2025 16:00:10 +0000 Subject: [PATCH 16/17] remove print --- tests/devices/i11/test_i11_dcm.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/devices/i11/test_i11_dcm.py b/tests/devices/i11/test_i11_dcm.py index f805c6a434..2e6040ed6b 100644 --- a/tests/devices/i11/test_i11_dcm.py +++ b/tests/devices/i11/test_i11_dcm.py @@ -48,7 +48,5 @@ async def test_i11_wavelength( set_mock_value(i11_dcm.energy_in_kev.user_readback, energy) reading = await i11_dcm.read() - print(reading) - assert reading["i11_dcm-energy_in_kev"]["value"] == energy assert reading["i11_dcm-wavelength"]["value"] == wavelength From 0e33d1cf25fa58b50746f7dee53e4ad8100936b0 Mon Sep 17 00:00:00 2001 From: Richard Dixey Date: Mon, 29 Sep 2025 11:51:33 +0000 Subject: [PATCH 17/17] added back unit and added to test --- src/dodal/devices/i11/dcm.py | 3 ++- tests/devices/i11/test_i11_dcm.py | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/dodal/devices/i11/dcm.py b/src/dodal/devices/i11/dcm.py index 8e1779723b..c2ffd24272 100644 --- a/src/dodal/devices/i11/dcm.py +++ b/src/dodal/devices/i11/dcm.py @@ -73,9 +73,10 @@ def __init__( self.wavelength = derived_signal_r( self._wavelength_from_energy, energy=self.energy_in_kev, + unit="angstrom", ) - def _wavelength_from_energy(self, energy: float) -> float: + def _wavelength_from_energy(self, energy: float, unit: str) -> float: if energy > 0: return _CONVERSION_CONSTANT / energy return 0 diff --git a/tests/devices/i11/test_i11_dcm.py b/tests/devices/i11/test_i11_dcm.py index 2e6040ed6b..0b0bb90c7c 100644 --- a/tests/devices/i11/test_i11_dcm.py +++ b/tests/devices/i11/test_i11_dcm.py @@ -33,20 +33,24 @@ def test_count_i11_dcm( @pytest.mark.parametrize( - "wavelength,energy", + "wavelength,energy,unit", [ - (0.0, 0.0), - (1.0, 12.3984), - (2.0, 6.1992), + (0.0, 0.0, "angstrom"), + (1.0, 12.3984, "angstrom"), + (2.0, 6.1992, "angstrom"), ], ) async def test_i11_wavelength( wavelength: float, energy: float, + unit: str, i11_dcm: DCM, ): set_mock_value(i11_dcm.energy_in_kev.user_readback, energy) + set_mock_value(i11_dcm.wavelength_in_a.user_readback, wavelength) + reading = await i11_dcm.read() assert reading["i11_dcm-energy_in_kev"]["value"] == energy + assert reading["i11_dcm-wavelength_in_a"]["value"] == wavelength assert reading["i11_dcm-wavelength"]["value"] == wavelength