Skip to content

Commit a58c05d

Browse files
committed
PR comments
1 parent 2a57c7b commit a58c05d

File tree

9 files changed

+59
-62
lines changed

9 files changed

+59
-62
lines changed

src/dodal/beamlines/i03.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ def collimation_table() -> CollimationTable:
461461

462462
@device_factory()
463463
def beamsize() -> Beamsize:
464-
"""Get the i03 beamstop device, instantiate it if it hasn't already been.
464+
"""Get the i03 beamsize device, instantiate it if it hasn't already been.
465465
If this is called when already instantiated in i03, it will return the existing object.
466466
"""
467467
return Beamsize(

src/dodal/beamlines/i04.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ def scintillator() -> Scintillator:
382382

383383
@device_factory()
384384
def beamsize() -> Beamsize:
385-
"""Get the i04 beamstop device, instantiate it if it hasn't already been.
385+
"""Get the i04 beamsize device, instantiate it if it hasn't already been.
386386
If this is called when already instantiated in i04, it will return the existing object.
387387
"""
388388
return Beamsize(

src/dodal/devices/aperturescatterguard.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import asyncio
4+
from math import inf
45

56
from bluesky.protocols import Preparable
67
from ophyd_async.core import (
@@ -112,7 +113,7 @@ def load_positions_from_beamline_parameters(
112113
) -> dict[ApertureValue, AperturePosition]:
113114
return {
114115
ApertureValue.OUT_OF_BEAM: AperturePosition.from_gda_params(
115-
_GDAParamApertureValue.ROBOT_LOAD, 0, params
116+
_GDAParamApertureValue.ROBOT_LOAD, inf, params
116117
),
117118
ApertureValue.SMALL: AperturePosition.from_gda_params(
118119
_GDAParamApertureValue.SMALL, 20, params
@@ -124,7 +125,7 @@ def load_positions_from_beamline_parameters(
124125
_GDAParamApertureValue.LARGE, 100, params
125126
),
126127
ApertureValue.PARKED: AperturePosition.from_gda_params(
127-
_GDAParamApertureValue.MANUAL_LOAD, 0, params
128+
_GDAParamApertureValue.MANUAL_LOAD, inf, params
128129
),
129130
}
130131

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
from typing import Annotated
2+
13
from ophyd_async.core import SignalR, StandardReadable
4+
from ophyd_async.core import StandardReadableFormat as Format
25

36

47
class BeamsizeBase(StandardReadable):
5-
x_um: SignalR[float]
6-
y_um: SignalR[float]
7-
8-
def __init__(self, name="beamsize"):
9-
super().__init__(name=name)
8+
x_um: Annotated[SignalR[float], Format.HINTED_SIGNAL]
9+
y_um: Annotated[SignalR[float], Format.HINTED_SIGNAL]

src/dodal/devices/i03/beamsize.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77

88
class Beamsize(BeamsizeBase):
9-
def __init__(self, aperture_scatterguard: ApertureScatterguard, name="beamsize"):
9+
def __init__(self, aperture_scatterguard: ApertureScatterguard, name=""):
1010
super().__init__(name=name)
1111
self._aperture_scatterguard_ref = Reference(aperture_scatterguard)
1212

src/dodal/devices/i04/beamsize.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def __init__(
1010
self,
1111
transfocator: Transfocator,
1212
aperture_scatterguard: ApertureScatterguard,
13-
name="beamsize",
13+
name="",
1414
):
1515
super().__init__(name=name)
1616
self._transfocator_ref = Reference(transfocator)

tests/devices/i03/test_beamsize.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,43 @@
1+
from math import inf
2+
from unittest.mock import AsyncMock
3+
14
import pytest
25
from ophyd_async.testing import set_mock_value
36

47
from dodal.devices.aperturescatterguard import (
5-
AperturePosition,
68
ApertureScatterguard,
7-
ApertureValue,
89
)
910
from dodal.devices.i03.beamsize import Beamsize
10-
from tests.devices.conftest import set_to_position
1111

1212

1313
@pytest.mark.parametrize(
14-
"selected_aperture, aperture_signal_values, expected_beamsize",
14+
"aperture_radius, expected_beamsize",
1515
[
16-
(ApertureValue.SMALL, (1, 0, 0), (20.0, 20.0)),
17-
(ApertureValue.MEDIUM, (0, 1, 0), (50.0, 20.0)),
18-
(ApertureValue.LARGE, (0, 0, 1), (80.0, 20.0)),
19-
(ApertureValue.OUT_OF_BEAM, (0, 0, 0), (0.0, 0.0)),
20-
(ApertureValue.PARKED, (0, 0, 0), (0.0, 0.0)),
16+
(10.0, (10.0, 10.0)),
17+
(50, (50.0, 20.0)),
18+
(90, (80.0, 20.0)),
19+
(inf, (80.0, 20.0)),
2120
],
2221
)
2322
async def test_beamsize_gives_min_of_aperture_and_beam_width_and_height(
24-
selected_aperture: ApertureValue,
25-
aperture_signal_values: tuple[int, int, int],
23+
aperture_radius: float,
2624
expected_beamsize: tuple[float, float],
2725
ap_sg: ApertureScatterguard,
28-
aperture_positions: dict[ApertureValue, AperturePosition],
2926
):
30-
await set_to_position(ap_sg, aperture_positions[selected_aperture])
27+
set_mock_value(ap_sg.aperture.medium, 1)
3128

32-
for i, signal in enumerate(
33-
(ap_sg.aperture.small, ap_sg.aperture.medium, ap_sg.aperture.large)
34-
):
35-
set_mock_value(signal, aperture_signal_values[i])
29+
ap_sg.radius.read = AsyncMock(
30+
return_value={
31+
"test_ap_sg-radius": {
32+
"value": aperture_radius,
33+
"timestamp": 1763051436.7372239,
34+
"alarm_severity": 0,
35+
}
36+
}
37+
) # see https://github.com/bluesky/ophyd-async/issues/1132
3638

3739
beamsize = Beamsize(aperture_scatterguard=ap_sg)
40+
3841
beamsize_x = await beamsize.x_um.get_value()
3942
beamsize_y = await beamsize.y_um.get_value()
40-
assert beamsize_x == expected_beamsize[0]
41-
assert beamsize_y == expected_beamsize[1]
43+
assert (beamsize_x, beamsize_y) == expected_beamsize

tests/devices/i04/test_beamsize.py

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,45 @@
1+
from math import inf
2+
from unittest.mock import AsyncMock
3+
14
import pytest
25
from ophyd_async.testing import set_mock_value
36

47
from dodal.devices.aperturescatterguard import (
5-
AperturePosition,
68
ApertureScatterguard,
7-
ApertureValue,
89
)
910
from dodal.devices.i04.beamsize import Beamsize
1011
from dodal.devices.i04.transfocator import Transfocator
11-
from tests.devices.conftest import set_to_position
1212

1313

1414
@pytest.mark.parametrize(
15-
"selected_aperture, aperture_signal_values, transfocator_sizes, expected_beamsize",
15+
"aperture_radius, transfocator_sizes, expected_beamsize",
1616
[
17-
(ApertureValue.SMALL, (1, 0, 0), (10.0, 10.0), (10.0, 10.0)),
18-
(ApertureValue.SMALL, (1, 0, 0), (30.0, 10.0), (20.0, 10.0)),
19-
(ApertureValue.SMALL, (1, 0, 0), (10.0, 30.0), (10.0, 20.0)),
20-
(ApertureValue.SMALL, (1, 0, 0), (55.0, 30.0), (20.0, 20.0)),
21-
(ApertureValue.MEDIUM, (0, 1, 0), (10.0, 10.0), (10.0, 10.0)),
22-
(ApertureValue.MEDIUM, (0, 1, 0), (30.0, 70.0), (30.0, 50.0)),
23-
(ApertureValue.MEDIUM, (0, 1, 0), (70.0, 30.0), (50.0, 30.0)),
24-
(ApertureValue.MEDIUM, (0, 1, 0), (90.0, 90.0), (50.0, 50.0)),
25-
(ApertureValue.LARGE, (0, 0, 1), (90.0, 55.0), (90.0, 55.0)),
26-
(ApertureValue.LARGE, (0, 0, 1), (110.0, 55.0), (100.0, 55.0)),
27-
(ApertureValue.LARGE, (0, 0, 1), (90.0, 110.0), (90.0, 100.0)),
28-
(ApertureValue.LARGE, (0, 0, 1), (120.0, 120.0), (100.0, 100.0)),
29-
(ApertureValue.OUT_OF_BEAM, (0, 0, 0), (120.0, 10.0), (0.0, 0.0)),
30-
(ApertureValue.OUT_OF_BEAM, (0, 0, 0), (10.0, 120.0), (0.0, 0.0)),
31-
(ApertureValue.PARKED, (0, 0, 0), (10.0, 10.0), (0.0, 0.0)),
32-
(ApertureValue.PARKED, (0, 0, 0), (120.0, 120.0), (0.0, 0.0)),
17+
(10.0, (50.0, 60.0), (10.0, 10.0)),
18+
(20.0, (10.0, 30.0), (10.0, 20.0)),
19+
(20.0, (30.0, 10.0), (20.0, 10.0)),
20+
(100.0, (50.0, 60.0), (50.0, 60.0)),
21+
(inf, (50.0, 60.0), (50.0, 60.0)),
3322
],
3423
)
3524
async def test_beamsize_gives_min_of_aperture_and_transfocator_width_and_height(
36-
selected_aperture: ApertureValue,
37-
aperture_signal_values: tuple[int, int, int],
25+
aperture_radius: float,
3826
transfocator_sizes: tuple[float, float],
3927
expected_beamsize: tuple[float, float],
4028
fake_transfocator: Transfocator,
4129
ap_sg: ApertureScatterguard,
42-
aperture_positions: dict[ApertureValue, AperturePosition],
4330
):
44-
await set_to_position(ap_sg, aperture_positions[selected_aperture])
31+
set_mock_value(ap_sg.aperture.medium, 1)
32+
33+
ap_sg.radius.read = AsyncMock(
34+
return_value={
35+
"test_ap_sg-radius": {
36+
"value": aperture_radius,
37+
"timestamp": 1763051436.7372239,
38+
"alarm_severity": 0,
39+
}
40+
}
41+
) # see https://github.com/bluesky/ophyd-async/issues/1132
4542

46-
for i, signal in enumerate(
47-
(ap_sg.aperture.small, ap_sg.aperture.medium, ap_sg.aperture.large)
48-
):
49-
set_mock_value(signal, aperture_signal_values[i])
5043
set_mock_value(fake_transfocator.current_horizontal_size_rbv, transfocator_sizes[0])
5144
set_mock_value(fake_transfocator.current_vertical_size_rbv, transfocator_sizes[1])
5245

tests/devices/test_aperture_scatterguard.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from collections.abc import AsyncGenerator
2+
from math import inf
23
from typing import Any
34
from unittest.mock import AsyncMock, call
45

@@ -218,7 +219,7 @@ async def test_aperture_positions_robot_load(
218219
await ap_sg.aperture.z.set(robot_load.aperture_z)
219220
reading = await ap_sg.read()
220221
assert isinstance(reading, dict)
221-
assert reading[f"{ap_sg.name}-radius"]["value"] == 0.0
222+
assert reading[f"{ap_sg.name}-radius"]["value"] == inf
222223
assert (
223224
reading[f"{ap_sg.name}-selected_aperture"]["value"] == ApertureValue.OUT_OF_BEAM
224225
)
@@ -238,7 +239,7 @@ async def test_aperture_positions_robot_load_within_tolerance(
238239
await ap_sg.aperture.z.set(robot_load.aperture_z)
239240
reading = await ap_sg.read()
240241
assert isinstance(reading, dict)
241-
assert reading[f"{ap_sg.name}-radius"]["value"] == 0.0
242+
assert reading[f"{ap_sg.name}-radius"]["value"] == inf
242243
assert (
243244
reading[f"{ap_sg.name}-selected_aperture"]["value"] == ApertureValue.OUT_OF_BEAM
244245
)
@@ -272,7 +273,7 @@ async def test_aperture_positions_parked(
272273
await ap_sg.aperture.z.set(parked.aperture_z)
273274
reading = await ap_sg.read()
274275
assert isinstance(reading, dict)
275-
assert reading[f"{ap_sg.name}-radius"]["value"] == 0.0
276+
assert reading[f"{ap_sg.name}-radius"]["value"] == inf
276277
assert reading[f"{ap_sg.name}-selected_aperture"]["value"] == ApertureValue.PARKED
277278

278279

@@ -290,7 +291,7 @@ async def test_aperture_positions_parked_within_tolerance(
290291
await ap_sg.aperture.z.set(parked_z + tolerance)
291292
reading = await ap_sg.read()
292293
assert isinstance(reading, dict)
293-
assert reading[f"{ap_sg.name}-radius"]["value"] == 0.0
294+
assert reading[f"{ap_sg.name}-radius"]["value"] == inf
294295
assert reading[f"{ap_sg.name}-selected_aperture"]["value"] == ApertureValue.PARKED
295296

296297

0 commit comments

Comments
 (0)