Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions src/dodal/beamlines/i10_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
from dodal.devices.beamlines.i10_1 import (
ElectromagnetMagnetField,
ElectromagnetStage,
HighFieldMagnet,
I10JScalerCard,
)
from dodal.devices.current_amplifiers import SR570, CurrentAmpDet
from dodal.devices.motors import XYPitchStage
from dodal.devices.temperture_controller.lakeshore.lakeshore import Lakeshore336
from dodal.log import set_beamline as set_log_beamline
from dodal.utils import BeamlinePrefix, get_beamline_name
Expand Down Expand Up @@ -122,3 +124,23 @@ def em_temperature_controller() -> Lakeshore336:
return Lakeshore336(
prefix=f"{PREFIX.beamline_prefix}-EA-TCTRL-41:",
)


"""I10J Hight Field Magnet Devices"""


@devices.factory()
def high_field_magnet_stage() -> XYPitchStage:
return XYPitchStage(
prefix=f"{PREFIX.beamline_prefix}-EA-MAG-01:",
x_infix="X",
y_infix="INSERT:Y",
pitch_infix="INSERT:ROTY",
)


@devices.factory()
def high_field_magnet() -> HighFieldMagnet:
return HighFieldMagnet(
prefix=f"{PREFIX.beamline_prefix}-EA-SMC-01:",
)
2 changes: 2 additions & 0 deletions src/dodal/devices/beamlines/i10_1/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from .electromagnet.magnet import ElectromagnetMagnetField
from .electromagnet.stages import ElectromagnetStage
from .high_field_magnet.high_field_magnet import HighFieldMagnet
from .scaler_cards import I10JScalerCard

__all__ = [
"ElectromagnetMagnetField",
"I10JScalerCard",
"ElectromagnetStage",
"HighFieldMagnet",
]
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
from ophyd_async.core import (
FlyMotorInfo,
StandardReadable,
StandardReadableFormat,
StrictEnum,
SubsetEnum,
WatchableAsyncStatus,
)
from ophyd_async.epics.core import epics_signal_r, epics_signal_rw, epics_signal_w


class HighFieldMangetSweepTypes(StrictEnum):
FAST = "Fast"
SLOW = "Slow"


class HighFieldMagnetStatus(SubsetEnum):
HOLD = "Hold"
TO_SETPOINT = "To Setpoint"
TO_ZERO = "To Zero"
CLAMP = "Clamp"


class HighFieldMagnetStatusRBV(SubsetEnum):
HOLD = "Hold"
TO_SETPOINT = "To Setpoint"
TO_ZERO = "To Zero"
CLAMPED = "Clamped"


class HighFieldMagnet(
StandardReadable,
# Locatable[float],
# Stoppable,
# Flyable,
# Preparable,
# Subscribable[float],
):
def __init__(self, prefix: str, name: str = "") -> None:
with self.add_children_as_readables(StandardReadableFormat.CONFIG_SIGNAL):
self.sweeprate = epics_signal_rw(
float,
read_pv=prefix + "RBV:FIELDSWEEPRATE",
write_pv=prefix + "SET:FIELDSWEEPRATE",
)
self.sweep_type = epics_signal_rw(
HighFieldMangetSweepTypes,
read_pv=prefix + "STS:SWEEPMODE:TYPE",
write_pv=prefix + "SET:SWEEPMODE:TYPE",
)
self.set_move_readback = epics_signal_r(
HighFieldMagnetStatusRBV,
read_pv=prefix + "STS:ACTIVITY",
)
with self.add_children_as_readables(StandardReadableFormat.HINTED_SIGNAL):
self.user_readback = epics_signal_r(float, prefix + "RBV:DEMANDFIELD")

self.set_move = epics_signal_w(
HighFieldMagnetStatus,
write_pv=prefix + "SET:ACTIVITY",
)
self.user_setpoint = epics_signal_rw(
float,
read_pv=prefix + "RBV:SETPOINTFIELD",
write_pv=prefix + "SET:SETPOINTFIELD",
)

self._set_success = True

self._fly_info: FlyMotorInfo | None = None

self._fly_status: WatchableAsyncStatus | None = None

super().__init__(name=name)

def set_name(self, name: str, *, child_name_separator: str | None = None) -> None:
super().set_name(name, child_name_separator=child_name_separator)
# Readback should be named the same as its parent in read()
self.user_readback.set_name(name)