Skip to content
This repository has been archived by the owner on Sep 2, 2024. It is now read-only.

Commit

Permalink
Merge pull request #1332 from DiamondLightSource/dodal_398_ophyd_asyn…
Browse files Browse the repository at this point in the history
…c_mirrors

Update mirrors to new ophyd_async device
  • Loading branch information
DominicOram authored May 7, 2024
2 parents b70731e + ae58181 commit 2be10ef
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 24 deletions.
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ install_requires =
xarray
doct
databroker
dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@daaf2de4e98dc0e12e88a70b85a1268c1861b48f
dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@890027c1bcd95f8fe35576630e320b97b7959006
pydantic<2.0 # See https://github.com/DiamondLightSource/hyperion/issues/774
scipy
pyzmq<25 # See https://github.com/DiamondLightSource/hyperion/issues/1103
Expand Down
18 changes: 11 additions & 7 deletions src/hyperion/device_setup_plans/dcm_pitch_roll_mirror_adjuster.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import bluesky.plan_stubs as bps
from dodal.devices.focusing_mirror import (
FocusingMirror,
FocusingMirrorWithStripes,
MirrorStripe,
VFMMirrorVoltages,
)
Expand All @@ -19,7 +19,9 @@


def _apply_and_wait_for_voltages_to_settle(
stripe: MirrorStripe, mirror: FocusingMirror, mirror_voltages: VFMMirrorVoltages
stripe: MirrorStripe,
mirror: FocusingMirrorWithStripes,
mirror_voltages: VFMMirrorVoltages,
):
with open(mirror_voltages.voltage_lookup_table_path) as lut_file:
json_obj = json.load(lut_file)
Expand Down Expand Up @@ -51,7 +53,7 @@ def _apply_and_wait_for_voltages_to_settle(


def adjust_mirror_stripe(
energy_kev, mirror: FocusingMirror, mirror_voltages: VFMMirrorVoltages
energy_kev, mirror: FocusingMirrorWithStripes, mirror_voltages: VFMMirrorVoltages
):
"""Feedback should be OFF prior to entry, in order to prevent
feedback from making unnecessary corrections while beam is being adjusted."""
Expand All @@ -60,7 +62,7 @@ def adjust_mirror_stripe(
LOGGER.info(
f"Adjusting mirror stripe for {energy_kev}keV selecting {stripe} stripe"
)
yield from bps.abs_set(mirror.stripe, stripe.value, wait=True)
yield from bps.abs_set(mirror.stripe, stripe, wait=True)
yield from bps.abs_set(mirror.apply_stripe, 1)

LOGGER.info("Adjusting mirror voltages...")
Expand All @@ -69,7 +71,7 @@ def adjust_mirror_stripe(

def adjust_dcm_pitch_roll_vfm_from_lut(
undulator_dcm: UndulatorDCM,
vfm: FocusingMirror,
vfm: FocusingMirrorWithStripes,
vfm_mirror_voltages: VFMMirrorVoltages,
energy_kev,
):
Expand Down Expand Up @@ -121,9 +123,11 @@ def adjust_dcm_pitch_roll_vfm_from_lut(
yield from bps.wait(DCM_GROUP)

# VFM Adjust - for I03 this table always returns the same value
vfm_lut = vfm.bragg_to_lat_lookup_table_path
assert vfm_lut is not None
vfm_x_adjuster = lookup_table_adjuster(
linear_interpolation_lut(vfm.bragg_to_lat_lookup_table_path),
vfm.lat_mm,
linear_interpolation_lut(vfm_lut),
vfm.x_mm,
bragg_deg,
)
LOGGER.info("Waiting for VFM Lat (Horizontal Translation) to complete...")
Expand Down
4 changes: 2 additions & 2 deletions src/hyperion/experiment_plans/robot_load_then_centre_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from dodal.devices.eiger import EigerDetector
from dodal.devices.fast_grid_scan import FastGridScan
from dodal.devices.flux import Flux
from dodal.devices.focusing_mirror import FocusingMirror, VFMMirrorVoltages
from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, VFMMirrorVoltages
from dodal.devices.oav.oav_detector import OAV
from dodal.devices.oav.pin_image_recognition import PinTipDetection
from dodal.devices.panda_fast_grid_scan import PandAFastGridScan
Expand Down Expand Up @@ -83,7 +83,7 @@ class RobotLoadThenCentreComposite:
panda_fast_grid_scan: PandAFastGridScan

# SetEnergyComposite fields
vfm: FocusingMirror
vfm: FocusingMirrorWithStripes
vfm_mirror_voltages: VFMMirrorVoltages
dcm: DCM
undulator_dcm: UndulatorDCM
Expand Down
4 changes: 2 additions & 2 deletions src/hyperion/experiment_plans/set_energy_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from bluesky.utils import Msg
from dodal.devices.attenuator import Attenuator
from dodal.devices.dcm import DCM
from dodal.devices.focusing_mirror import FocusingMirror, VFMMirrorVoltages
from dodal.devices.focusing_mirror import FocusingMirrorWithStripes, VFMMirrorVoltages
from dodal.devices.undulator_dcm import UndulatorDCM
from dodal.devices.xbpm_feedback import XBPMFeedback

Expand All @@ -28,7 +28,7 @@

@dataclasses.dataclass
class SetEnergyComposite:
vfm: FocusingMirror
vfm: FocusingMirrorWithStripes
vfm_mirror_voltages: VFMMirrorVoltages
dcm: DCM
undulator_dcm: UndulatorDCM
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ class RotationScanParams(AbstractExperimentWithBeamParams):
rotation_direction: RotationDirection = RotationDirection.NEGATIVE
shutter_opening_time_s: float = 0.6

@validator("rotation_direction", pre=True)
def _parse_validator(cls, rotation_direction: str):
return RotationDirection(rotation_direction)

@validator("rotation_direction", pre=True)
def _parse_direction(cls, rotation_direction: str):
return RotationDirection(rotation_direction)
Expand Down
2 changes: 1 addition & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ def qbpm1():


@pytest.fixture
def vfm():
def vfm(RE):
vfm = i03.vfm(fake_with_ophyd_sim=True)
vfm.bragg_to_lat_lookup_table_path = (
"tests/test_data/test_beamline_vfm_lat_converter.txt"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from bluesky.run_engine import RunEngine
from dodal.beamlines.beamline_parameters import GDABeamlineParameters
from dodal.devices.focusing_mirror import (
FocusingMirror,
FocusingMirrorWithStripes,
MirrorStripe,
MirrorVoltageDemand,
VFMMirrorVoltages,
Expand All @@ -23,7 +23,9 @@


def test_apply_and_wait_for_voltages_to_settle_happy_path(
vfm_mirror_voltages: VFMMirrorVoltages, vfm: FocusingMirror, RE: RunEngine
vfm_mirror_voltages: VFMMirrorVoltages,
vfm: FocusingMirrorWithStripes,
RE: RunEngine,
):
with patch(
"dodal.devices.focusing_mirror.VFMMirrorVoltages.voltage_channels",
Expand Down Expand Up @@ -80,7 +82,9 @@ def _one_demand_not_accepted(vfm_mirror_voltages):

@patch("dodal.devices.focusing_mirror.DEFAULT_SETTLE_TIME_S", 3)
def test_apply_and_wait_for_voltages_to_settle_timeout(
vfm_mirror_voltages: VFMMirrorVoltages, vfm: FocusingMirror, RE: RunEngine
vfm_mirror_voltages: VFMMirrorVoltages,
vfm: FocusingMirrorWithStripes,
RE: RunEngine,
):
with patch(
"dodal.devices.focusing_mirror.VFMMirrorVoltages.voltage_channels",
Expand Down Expand Up @@ -124,7 +128,7 @@ def set_demand_and_return_ok(_):
)
def test_adjust_mirror_stripe(
vfm_mirror_voltages: VFMMirrorVoltages,
vfm: FocusingMirror,
vfm: FocusingMirrorWithStripes,
RE: RunEngine,
energy_kev,
expected_stripe,
Expand All @@ -136,10 +140,10 @@ def test_adjust_mirror_stripe(
new_callable=_all_demands_accepted(vfm_mirror_voltages),
):
vfm.stripe.set = MagicMock(return_value=NullStatus())
vfm.apply_stripe.set = MagicMock()
vfm.apply_stripe.set = MagicMock() # type: ignore
parent = MagicMock()
parent.attach_mock(vfm.stripe.set, "stripe_set")
parent.attach_mock(vfm.apply_stripe.set, "apply_stripe")
parent.attach_mock(vfm.apply_stripe.set, "apply_stripe") # type: ignore

RE(adjust_mirror_stripe(energy_kev, vfm, vfm_mirror_voltages))

Expand All @@ -155,7 +159,7 @@ def test_adjust_mirror_stripe(

def test_adjust_dcm_pitch_roll_vfm_from_lut(
undulator_dcm: UndulatorDCM,
vfm: FocusingMirror,
vfm: FocusingMirrorWithStripes,
vfm_mirror_voltages: VFMMirrorVoltages,
beamline_parameters: GDABeamlineParameters,
sim_run_engine,
Expand Down Expand Up @@ -195,8 +199,8 @@ def test_adjust_dcm_pitch_roll_vfm_from_lut(
messages = sim_run_engine.assert_message_and_return_remaining(
messages[1:],
lambda msg: msg.command == "set"
and msg.obj.name == "vfm_stripe"
and msg.args == ("Rhodium",),
and msg.obj.name == "vfm-stripe"
and msg.args == (MirrorStripe.RHODIUM,),
)
messages = sim_run_engine.assert_message_and_return_remaining(
messages[1:],
Expand All @@ -205,7 +209,7 @@ def test_adjust_dcm_pitch_roll_vfm_from_lut(
messages = sim_run_engine.assert_message_and_return_remaining(
messages[1:],
lambda msg: msg.command == "set"
and msg.obj.name == "vfm_apply_stripe"
and msg.obj.name == "vfm-apply_stripe"
and msg.args == (1,),
)
for channel, expected_voltage in (
Expand All @@ -231,6 +235,6 @@ def test_adjust_dcm_pitch_roll_vfm_from_lut(
messages = sim_run_engine.assert_message_and_return_remaining(
messages[1:],
lambda msg: msg.command == "set"
and msg.obj.name == "vfm_lat_mm"
and msg.obj.name == "vfm-x_mm"
and msg.args == (10.0,),
)

0 comments on commit 2be10ef

Please sign in to comment.