From 7c3dfda749ac9c8fb2216d183620fe23cd3a05b6 Mon Sep 17 00:00:00 2001 From: David Perl Date: Mon, 9 Sep 2024 15:34:35 +0100 Subject: [PATCH] update zebra stuff --- .../plans/rotation_scan_plans.py | 6 ++- .../plans/zebra_plans.py | 54 +++++-------------- .../i24/jungfrau_commissioning/utils/i24.py | 3 +- 3 files changed, 19 insertions(+), 44 deletions(-) diff --git a/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/plans/rotation_scan_plans.py b/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/plans/rotation_scan_plans.py index e546de892..83cd8b278 100755 --- a/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/plans/rotation_scan_plans.py +++ b/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/plans/rotation_scan_plans.py @@ -29,8 +29,6 @@ set_transmission, ) from mx_bluesky.beamlines.i24.jungfrau_commissioning.plans.zebra_plans import ( - arm_zebra, - disarm_zebra, setup_zebra_for_rotation, ) from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import i24 @@ -44,6 +42,10 @@ RotationScanParameters, ) from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils.utils import run_number +from mx_bluesky.beamlines.i24.serial.setup_beamline.setup_zebra_plans import ( + arm_zebra, + disarm_zebra, +) class JfDevices(TypedDict): diff --git a/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/plans/zebra_plans.py b/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/plans/zebra_plans.py index e1f166084..50b3a3670 100755 --- a/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/plans/zebra_plans.py +++ b/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/plans/zebra_plans.py @@ -2,13 +2,13 @@ from dodal.devices.zebra import ( DISCONNECT, OR1, - PC_GATE_SOURCE_POSITION, PC_PULSE, - PC_PULSE_SOURCE_POSITION, TTL_DETECTOR, TTL_XSPRESS3, + EncEnum, I24Axes, RotationDirection, + TrigSource, Zebra, ) @@ -17,35 +17,9 @@ TTL_SHUTTER = 4 -def arm_zebra(zebra: Zebra, timeout: float = 3): - """Send a demand to arm the Zebra, wait timeout seconds before failing""" - yield from bps.abs_set(zebra.pc.arm_demand, 1) - armed = yield from bps.rd(zebra.pc.armed) - time = 0.0 - while not armed and time < timeout: - armed = yield from bps.rd(zebra.pc.armed) - time += 0.1 - yield from bps.sleep(0.1) - if not armed: - raise TimeoutError("Zebra failed to arm!") - - -def disarm_zebra(zebra: Zebra, timeout: float = 3): - """Send a demand to disarm the Zebra, wait timeout seconds before failing""" - yield from bps.abs_set(zebra.pc.disarm_demand, 1) - armed = yield from bps.rd(zebra.pc.armed) - time = 0.0 - while armed and time < timeout: - armed = yield from bps.rd(zebra.pc.armed) - time += 0.1 - yield from bps.sleep(0.1) - if armed: - raise TimeoutError("Zebra failed to disarm!") - - def setup_zebra_for_rotation( zebra: Zebra, - axis: I24Axes = I24Axes.OMEGA, + axis: EncEnum = I24Axes.OMEGA, start_angle: float = 0, scan_width: float = 360, direction: RotationDirection = RotationDirection.POSITIVE, @@ -79,18 +53,18 @@ def setup_zebra_for_rotation( LOGGER.info("ZEBRA SETUP: START") LOGGER.info("ZEBRA SETUP: Enable PC") - yield from bps.abs_set(zebra.pc.gate_source, PC_GATE_SOURCE_POSITION, group=group) - yield from bps.abs_set(zebra.pc.pulse_source, 1, group=group) + yield from bps.abs_set(zebra.pc.gate_source, TrigSource.POSITION, group=group) + yield from bps.abs_set(zebra.pc.pulse_source, TrigSource.TIME, group=group) # must be on for shutter trigger to be enabled yield from bps.abs_set(zebra.inputs.soft_in_1, 1, group=group) # set rotation direction - yield from bps.abs_set( - zebra.pc.dir, ("Negative" if direction.value < 0 else "Positive"), group=group - ) + yield from bps.abs_set(zebra.pc.dir, direction.value, group=group) # Set gate start, adjust for shutter opening time if necessary LOGGER.info(f"ZEBRA SETUP: shutter_opening_deg = {shutter_opening_deg}") LOGGER.info(f"ZEBRA SETUP: start angle start: {start_angle}") - shutter_adjusted_start_angle = start_angle - (shutter_opening_deg * direction.value) + shutter_adjusted_start_angle = start_angle - ( + shutter_opening_deg * direction.multiplier + ) LOGGER.info(f"ZEBRA SETUP: {shutter_adjusted_start_angle=} for gate start") yield from bps.abs_set( zebra.pc.gate_start, @@ -115,7 +89,7 @@ def setup_zebra_for_rotation( yield from bps.abs_set(zebra.output.out_pvs[TTL_DETECTOR], PC_PULSE, group=group) # Don't use the fluorescence detector yield from bps.abs_set(zebra.output.out_pvs[TTL_XSPRESS3], DISCONNECT, group=group) - yield from bps.abs_set(zebra.output.pulse_1_input, DISCONNECT, group=group) + yield from bps.abs_set(zebra.output.pulse_1.input, DISCONNECT, group=group) LOGGER.info(f"ZEBRA SETUP: END - {'' if wait else 'not'} waiting for completion") if wait: yield from bps.wait(group) @@ -133,7 +107,7 @@ def set_zebra_shutter_to_manual( def setup_zebra_for_darks( zebra: Zebra, - axis: I24Axes = I24Axes.OMEGA, + axis: EncEnum = I24Axes.OMEGA, group: str = "setup_zebra_for_darks", wait: bool = False, ): @@ -142,8 +116,8 @@ def setup_zebra_for_darks( """ LOGGER.info("ZEBRA SETUP: START") LOGGER.info("ZEBRA SETUP: Enable PC") - yield from bps.abs_set(zebra.pc.gate_source, PC_GATE_SOURCE_POSITION, group=group) - yield from bps.abs_set(zebra.pc.pulse_source, PC_PULSE_SOURCE_POSITION, group=group) + yield from bps.abs_set(zebra.pc.gate_source, TrigSource.POSITION, group=group) + yield from bps.abs_set(zebra.pc.pulse_source, TrigSource.POSITION, group=group) # must be on for triggers to be enabled yield from bps.abs_set(zebra.inputs.soft_in_1, 1, group=group) yield from bps.abs_set(zebra.pc.gate_start, 0.5, group=group) @@ -159,7 +133,7 @@ def setup_zebra_for_darks( yield from bps.abs_set(zebra.output.out_pvs[TTL_DETECTOR], PC_PULSE, group=group) # Don't use the fluorescence detector yield from bps.abs_set(zebra.output.out_pvs[TTL_XSPRESS3], DISCONNECT, group=group) - yield from bps.abs_set(zebra.output.pulse_1_input, DISCONNECT, group=group) + yield from bps.abs_set(zebra.output.pulse_1.input, DISCONNECT, group=group) LOGGER.info(f"ZEBRA SETUP: END - {'' if wait else 'not'} waiting for completion") if wait: yield from bps.wait(group) diff --git a/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/utils/i24.py b/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/utils/i24.py index cdca24641..06d648df0 100755 --- a/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/utils/i24.py +++ b/src/mx_bluesky/beamlines/i24/jungfrau_commissioning/utils/i24.py @@ -8,7 +8,7 @@ from dodal.devices.oav.oav_detector import OAV from dodal.devices.zebra import Zebra from dodal.log import set_beamline -from dodal.utils import get_beamline_name, skip_device +from dodal.utils import skip_device from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils.jf_commissioning_devices import ( JungfrauM1, @@ -16,7 +16,6 @@ SetAttenuator, ) -BL = get_beamline_name("s24") set_beamline(BL) set_utils_beamline(BL)