Skip to content

Commit e2dd784

Browse files
Created common enums and updated devices to use (#1415)
* Created common enums and updated devices to use * Corrected backlight OnOff * Switched ordering of enums * Correct spelling * Updated remaining enums that have extra options * Renamed InOut to InState * Updated to use enums from ophyd-async * Renamed enums to Upper * test * Restore previous whitespace formatting * Updated enums reusing ones from ophyd-async to use .value, same as ophyd-async --------- Co-authored-by: Joseph Ware <53935796+DiamondJoseph@users.noreply.github.com>
1 parent 2ce15c8 commit e2dd784

22 files changed

+133
-158
lines changed

src/dodal/beamlines/i23.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from pathlib import Path
22

3-
from ophyd_async.core import StrictEnum
3+
from ophyd_async.core import InOut, StrictEnum
44
from ophyd_async.epics.adpilatus import PilatusDetector
55

66
from dodal.common.beamlines.beamline_utils import (
@@ -45,8 +45,8 @@
4545

4646

4747
class I23DetectorPositions(StrictEnum):
48-
IN = "In"
49-
OUT = "Out"
48+
IN = InOut.IN.value
49+
OUT = InOut.OUT.value
5050
SAMPLE_CHANGE = "sample change"
5151

5252

src/dodal/common/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
from .coordination import group_uuid, inject
2+
from .enums import EnabledDisabledUpper, InOutUpper, OnOffUpper
23
from .maths import in_micros, step_to_num
34
from .types import MsgGenerator, PlanGenerator
45

56
__all__ = [
67
"group_uuid",
78
"inject",
9+
"EnabledDisabledUpper",
10+
"InOutUpper",
11+
"OnOffUpper",
812
"in_micros",
913
"MsgGenerator",
1014
"PlanGenerator",

src/dodal/common/enums.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from ophyd_async.core import StrictEnum
2+
3+
# Any capitalised enums needs to be removed and replaced with ones from ophyd-async.core
4+
# https://github.com/DiamondLightSource/dodal/issues/1416
5+
6+
7+
class OnOffUpper(StrictEnum):
8+
ON = "ON"
9+
OFF = "OFF"
10+
11+
12+
class EnabledDisabledUpper(StrictEnum):
13+
ENABLED = "ENABLED"
14+
DISABLED = "DISABLED"
15+
16+
17+
class InOutUpper(StrictEnum):
18+
IN = "IN"
19+
OUT = "OUT"

src/dodal/devices/aithre_lasershaping/laser_robot.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,19 @@
1-
from ophyd_async.core import StrictEnum
1+
from ophyd_async.core import EnabledDisabled, OnOff, StrictEnum
22
from ophyd_async.epics.core import epics_signal_rw
33

44
from dodal.devices.robot import BartRobot
55

66

77
class ForceBit(StrictEnum):
8-
ON = "On"
8+
ON = OnOff.ON.value
99
NO = "No"
10-
OFF = "Off"
11-
12-
13-
class LidHeatEnable(StrictEnum):
14-
ENABLED = "Enabled"
15-
DISABLED = "Disabled"
10+
OFF = OnOff.OFF.value
1611

1712

1813
class LaserRobot(BartRobot):
1914
def __init__(self, prefix: str, name: str = "") -> None:
2015
self.dewar_lid_heater = epics_signal_rw(
21-
LidHeatEnable, prefix + "DW_1_ENABLED", prefix + "DW_1_CTRL"
16+
EnabledDisabled, prefix + "DW_1_ENABLED", prefix + "DW_1_CTRL"
2217
)
2318
self.cryojet_retract = epics_signal_rw(ForceBit, prefix + "OP_24_FORCE_OPTION")
2419
self.set_beamline_safe = epics_signal_rw(

src/dodal/devices/backlight.py

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,23 @@
11
from asyncio import sleep
22

33
from bluesky.protocols import Movable
4-
from ophyd_async.core import AsyncStatus, StandardReadable, StrictEnum
4+
from ophyd_async.core import AsyncStatus, InOut, OnOff, StandardReadable
55
from ophyd_async.epics.core import epics_signal_rw
66

77

8-
class BacklightPower(StrictEnum):
9-
ON = "On"
10-
OFF = "Off"
11-
12-
13-
class BacklightPosition(StrictEnum):
14-
IN = "In"
15-
OUT = "Out"
16-
17-
18-
class Backlight(StandardReadable, Movable[BacklightPosition]):
8+
class Backlight(StandardReadable, Movable[InOut]):
199
"""Simple device to trigger the pneumatic in/out."""
2010

2111
TIME_TO_MOVE_S = 1.0 # Tested using a stopwatch on the beamline 09/2024
2212

2313
def __init__(self, prefix: str, name: str = "") -> None:
2414
with self.add_children_as_readables():
25-
self.power = epics_signal_rw(BacklightPower, prefix + "-EA-BLIT-01:TOGGLE")
26-
self.position = epics_signal_rw(
27-
BacklightPosition, prefix + "-EA-BL-01:CTRL"
28-
)
15+
self.power = epics_signal_rw(OnOff, prefix + "-EA-BLIT-01:TOGGLE")
16+
self.position = epics_signal_rw(InOut, prefix + "-EA-BL-01:CTRL")
2917
super().__init__(name)
3018

3119
@AsyncStatus.wrap
32-
async def set(self, value: BacklightPosition):
20+
async def set(self, value: InOut):
3321
"""This setter will turn the backlight on when we move it in to the beam and off
3422
when we move it out.
3523
@@ -39,9 +27,9 @@ async def set(self, value: BacklightPosition):
3927
"""
4028
old_position = await self.position.get_value()
4129
await self.position.set(value)
42-
if value == BacklightPosition.OUT:
43-
await self.power.set(BacklightPower.OFF)
30+
if value == InOut.OUT:
31+
await self.power.set(OnOff.OFF)
4432
else:
45-
await self.power.set(BacklightPower.ON)
33+
await self.power.set(OnOff.ON)
4634
if old_position != value:
4735
await sleep(self.TIME_TO_MOVE_S)

src/dodal/devices/bimorph_mirror.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,9 @@
2222
epics_signal_x,
2323
)
2424

25-
DEFAULT_TIMEOUT = 60
26-
25+
from dodal.common.enums import OnOffUpper
2726

28-
class BimorphMirrorOnOff(StrictEnum):
29-
ON = "ON"
30-
OFF = "OFF"
27+
DEFAULT_TIMEOUT = 60
3128

3229

3330
class BimorphMirrorMode(StrictEnum):
@@ -54,7 +51,7 @@ class BimorphMirrorChannel(StandardReadable, EpicsDevice):
5451

5552
target_voltage: A[SignalRW[float], PvSuffix.rbv("VTRGT"), Format.CONFIG_SIGNAL]
5653
output_voltage: A[SignalRW[float], PvSuffix.rbv("VOUT"), Format.HINTED_SIGNAL]
57-
status: A[SignalR[BimorphMirrorOnOff], PvSuffix("STATUS"), Format.CONFIG_SIGNAL]
54+
status: A[SignalR[OnOffUpper], PvSuffix("STATUS"), Format.CONFIG_SIGNAL]
5855
shift: A[SignalW[float], PvSuffix("SHIFT")]
5956

6057

@@ -87,7 +84,7 @@ def __init__(self, prefix: str, number_of_channels: int, name=""):
8784
for i in range(1, number_of_channels + 1)
8885
}
8986
)
90-
self.enabled = epics_signal_w(BimorphMirrorOnOff, f"{prefix}ONOFF")
87+
self.enabled = epics_signal_w(OnOffUpper, f"{prefix}ONOFF")
9188
self.commit_target_voltages = epics_signal_x(f"{prefix}ALLTRGT.PROC")
9289
self.status = epics_signal_r(BimorphMirrorStatus, f"{prefix}STATUS")
9390
self.err = epics_signal_r(str, f"{prefix}ERR")

src/dodal/devices/cryostream.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
from ophyd_async.core import StandardReadable, StrictEnum
1+
from ophyd_async.core import InOut, StandardReadable
22
from ophyd_async.epics.core import epics_signal_r, epics_signal_rw
33

44

5-
class InOut(StrictEnum):
6-
IN = "In"
7-
OUT = "Out"
8-
9-
105
class CryoStream(StandardReadable):
116
MAX_TEMP_K = 110
127
MAX_PRESSURE_BAR = 0.1
@@ -18,5 +13,4 @@ def __init__(self, prefix: str, name: str = ""):
1813
self.back_pressure_bar = epics_signal_r(
1914
float, f"{prefix}-EA-CSTRM-01:BACKPRESS"
2015
)
21-
2216
super().__init__(name)

src/dodal/devices/fluorescence_detector_motion.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
from ophyd_async.core import StandardReadable, StrictEnum
1+
from ophyd_async.core import InOut, StandardReadable
22
from ophyd_async.epics.core import epics_signal_rw
33

44

5-
class InOut(StrictEnum):
6-
OUT = "Out"
7-
IN = "In"
8-
9-
105
class FluorescenceDetector(StandardReadable):
116
def __init__(self, prefix: str, name: str = ""):
127
with self.add_children_as_readables():

src/dodal/devices/i10/diagnostics.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ class D7Position(StrictEnum):
5454
SHUTTER = "Shutter"
5555

5656

57-
class InOutTable(StrictEnum):
57+
class InStateTable(StrictEnum):
5858
MOVE_IN = "Move In"
5959
MOVE_OUT = "Move Out"
6060
RESET = "Reset"
6161

6262

63-
class InOutReadBackTable(StrictEnum):
63+
class InStateReadBackTable(StrictEnum):
6464
MOVE_IN = "Moving In"
6565
MOVE_OUT = "Moving Out"
6666
IN_BEAM = "In Beam"
@@ -80,11 +80,11 @@ def __init__(
8080
) -> None:
8181
with self.add_children_as_readables(Format.HINTED_SIGNAL):
8282
self.stage_position_set = epics_signal_rw(
83-
InOutTable,
83+
InStateTable,
8484
read_pv=prefix + "CON",
8585
)
8686
self.stage_position_readback = epics_signal_r(
87-
InOutReadBackTable,
87+
InStateReadBackTable,
8888
read_pv=prefix + "STA",
8989
)
9090
super().__init__(name=name)

src/dodal/devices/i22/fswitch.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,11 @@
77
DeviceVector,
88
StandardReadable,
99
StandardReadableFormat,
10-
StrictEnum,
1110
soft_signal_r_and_setter,
1211
)
1312
from ophyd_async.epics.core import epics_signal_r
1413

15-
16-
class FilterState(StrictEnum):
17-
"""
18-
Note that the in/out here refers to the internal rocker
19-
position so a PV value of IN implies a filter OUT of beam
20-
"""
21-
22-
IN_BEAM = "OUT"
23-
OUT_BEAM = "IN"
14+
from dodal.common.enums import InOutUpper
2415

2516

2617
class FSwitch(StandardReadable):
@@ -50,7 +41,7 @@ def __init__(
5041
) -> None:
5142
self.filters = DeviceVector(
5243
{
53-
i: epics_signal_r(FilterState, f"{prefix}FILTER-{i:03}:STATUS_RBV")
44+
i: epics_signal_r(InOutUpper, f"{prefix}FILTER-{i:03}:STATUS_RBV")
5445
for i in range(FSwitch.NUM_FILTERS)
5546
}
5647
)
@@ -91,7 +82,7 @@ async def read(self) -> dict[str, Reading]:
9182
result = await asyncio.gather(
9283
*(filter.get_value() for filter in self.filters.values())
9384
)
94-
num_in = sum(r.value == FilterState.IN_BEAM for r in result)
85+
num_in = sum(r.value == InOutUpper.IN for r in result)
9586
default_reading = await super().read()
9687
return {
9788
FSwitch.NUM_LENSES_FIELD_NAME: Reading(value=num_in, timestamp=time.time()),

0 commit comments

Comments
 (0)