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

Commit

Permalink
Merge branch 'main' into dodal_398_ophyd_async_mirrors
Browse files Browse the repository at this point in the history
  • Loading branch information
DominicOram committed May 1, 2024
2 parents 0567590 + ceebe9f commit eedf016
Show file tree
Hide file tree
Showing 61 changed files with 887 additions and 451 deletions.
1 change: 0 additions & 1 deletion src/hyperion/device_setup_plans/read_hardware_for_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ def read_hardware_for_ispyb_pre_collection(
yield from bps.read(s4_slit_gaps.xgap)
yield from bps.read(s4_slit_gaps.ygap)
yield from bps.read(aperture_scatterguard)
yield from bps.read(robot.barcode)
yield from bps.save()


Expand Down
15 changes: 9 additions & 6 deletions src/hyperion/device_setup_plans/setup_panda.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from dodal.devices.panda_fast_grid_scan import PandAGridScanParams
from ophyd_async.core import load_device
from ophyd_async.panda import (
PandA,
HDFPanda,
SeqTable,
SeqTableRow,
SeqTrigger,
Expand Down Expand Up @@ -109,7 +109,7 @@ def get_seq_table(


def setup_panda_for_flyscan(
panda: PandA,
panda: HDFPanda,
config_yaml_path: str,
parameters: PandAGridScanParams,
initial_x: float,
Expand All @@ -123,7 +123,7 @@ def setup_panda_for_flyscan(
created using ophyd_async.core.save_device()
Args:
panda (PandA): The PandA Ophyd device
panda (HDFPanda): The PandA Ophyd device
config_yaml_path (str): Path to the yaml file containing the desired PandA PVs
parameters (PandAGridScanParams): Grid parameters
initial_x (float): Motor positions at time of PandA setup
Expand Down Expand Up @@ -161,8 +161,6 @@ def setup_panda_for_flyscan(

table = get_seq_table(parameters, exposure_distance_mm)

LOGGER.info(f"Setting PandA sequencer values: {str(table)}")

yield from bps.abs_set(panda.seq[1].table, table, group="panda-config")

yield from bps.abs_set(
Expand All @@ -174,15 +172,20 @@ def setup_panda_for_flyscan(
# Values need to be set before blocks are enabled, so wait here
yield from bps.wait(group="panda-config", timeout=GENERAL_TIMEOUT)

LOGGER.info(f"PandA sequencer table has been set to: {str(table)}")
table_readback = yield from bps.rd(panda.seq[1].table)
LOGGER.debug(f"PandA sequencer table readback is: {str(table_readback)}")

yield from arm_panda_for_gridscan(panda)


def arm_panda_for_gridscan(panda: PandA, group="arm_panda_gridscan"):
def arm_panda_for_gridscan(panda: HDFPanda, group="arm_panda_gridscan"):
yield from bps.abs_set(panda.seq[1].enable, Enabled.ENABLED.value, group=group) # type: ignore
yield from bps.abs_set(panda.pulse[1].enable, Enabled.ENABLED.value, group=group) # type: ignore
yield from bps.abs_set(panda.counter[1].enable, Enabled.ENABLED.value, group=group) # type: ignore
yield from bps.abs_set(panda.pcap.arm, PcapArm.ARMED.value, group=group) # type: ignore
yield from bps.wait(group=group, timeout=GENERAL_TIMEOUT)
LOGGER.info("PandA has been armed")


def disarm_panda_for_gridscan(panda, group="disarm_panda_gridscan") -> MsgGenerator:
Expand Down
11 changes: 9 additions & 2 deletions src/hyperion/experiment_plans/flyscan_xray_centre_plan.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations

import dataclasses
from time import time
from typing import TYPE_CHECKING, Any, List, Union

import bluesky.plan_stubs as bps
Expand Down Expand Up @@ -33,7 +34,7 @@
get_processing_result,
)
from dodal.plans.check_topup import check_topup_and_wait_if_necessary
from ophyd_async.panda import PandA
from ophyd_async.panda import HDFPanda

from hyperion.device_setup_plans.manipulate_sample import move_x_y_z
from hyperion.device_setup_plans.read_hardware_for_setup import (
Expand Down Expand Up @@ -85,7 +86,7 @@ class FlyScanXRayCentreComposite:
xbpm_feedback: XBPMFeedback
zebra: Zebra
zocalo: ZocaloResults
panda: PandA
panda: HDFPanda
panda_fast_grid_scan: PandAFastGridScan
robot: BartRobot

Expand Down Expand Up @@ -196,13 +197,19 @@ def do_fgs():
yield from bps.wait()
LOGGER.info("kicking off FGS")
yield from bps.kickoff(gridscan, wait=True)
gridscan_start_time = time()
LOGGER.info("Waiting for Zocalo device queue to have been cleared...")
yield from bps.wait(
ZOCALO_STAGE_GROUP
) # Make sure ZocaloResults queue is clear and ready to accept our new data
LOGGER.info("completing FGS")
yield from bps.complete(gridscan, wait=True)

# Remove this logging statement once metrics have been added
LOGGER.info(
f"Gridscan motion program took {round(time()-gridscan_start_time,2)} to complete"
)

yield from do_fgs()


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import dataclasses
import json
from pathlib import Path

from blueapi.core import BlueskyContext, MsgGenerator
from bluesky import plan_stubs as bps
Expand All @@ -26,7 +27,7 @@
from dodal.devices.xbpm_feedback import XBPMFeedback
from dodal.devices.zebra import Zebra
from dodal.devices.zocalo import ZocaloResults
from ophyd_async.panda import PandA
from ophyd_async.panda import HDFPanda

from hyperion.device_setup_plans.utils import (
start_preparing_data_collection_then_do_plan,
Expand Down Expand Up @@ -87,7 +88,7 @@ class GridDetectThenXRayCentreComposite:
xbpm_feedback: XBPMFeedback
zebra: Zebra
zocalo: ZocaloResults
panda: PandA
panda: HDFPanda
panda_fast_grid_scan: PandAFastGridScan
robot: BartRobot

Expand Down Expand Up @@ -156,7 +157,7 @@ def _detect_grid_and_do_gridscan(
def run_grid_detection_plan(
oav_params,
snapshot_template,
snapshot_dir,
snapshot_dir: Path,
):
grid_detect_composite = OavGridDetectionComposite(
backlight=composite.backlight,
Expand All @@ -169,7 +170,7 @@ def run_grid_detection_plan(
grid_detect_composite,
oav_params,
snapshot_template,
snapshot_dir,
str(snapshot_dir),
grid_width_microns=parameters.grid_width_um,
)

Expand Down
1 change: 0 additions & 1 deletion src/hyperion/experiment_plans/oav_grid_detection_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,6 @@ def grid_detection_plan(
yield from bps.abs_set(oav.snapshot.filename, snapshot_filename)
yield from bps.abs_set(oav.snapshot.directory, snapshot_dir)
yield from bps.trigger(oav.snapshot, wait=True)

yield from bps.create(CONST.DESCRIPTORS.OAV_SNAPSHOT_TRIGGERED)

yield from bps.read(oav.snapshot)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from __future__ import annotations

from pathlib import Path
from typing import TYPE_CHECKING, Any, Union

import bluesky.plan_stubs as bps
import bluesky.preprocessors as bpp
import numpy as np
from blueapi.core import BlueskyContext, MsgGenerator
from dodal.common import udc_directory_provider
from dodal.devices.panda_fast_grid_scan import (
set_fast_grid_scan_params as set_flyscan_params,
)
Expand Down Expand Up @@ -57,7 +59,7 @@
)

PANDA_SETUP_PATH = (
"/dls_sw/i03/software/daq_configuration/panda_configs/flyscan_base.yaml"
"/dls_sw/i03/software/daq_configuration/panda_configs/flyscan_pcap_ignore_seq.yaml"
)


Expand Down Expand Up @@ -194,6 +196,9 @@ def run_gridscan_and_move(
time_between_x_steps_ms,
)

udc_directory_provider.set_directory(
Path(parameters.hyperion_params.detector_params.directory)
)
yield from setup_panda_for_flyscan(
fgs_composite.panda,
PANDA_SETUP_PATH,
Expand Down
25 changes: 23 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 @@ -2,6 +2,7 @@

import dataclasses
import json
from datetime import datetime
from typing import cast

import bluesky.plan_stubs as bps
Expand All @@ -26,10 +27,11 @@
from dodal.devices.synchrotron import Synchrotron
from dodal.devices.undulator import Undulator
from dodal.devices.undulator_dcm import UndulatorDCM
from dodal.devices.webcam import Webcam
from dodal.devices.xbpm_feedback import XBPMFeedback
from dodal.devices.zebra import Zebra
from dodal.devices.zocalo import ZocaloResults
from ophyd_async.panda import PandA
from ophyd_async.panda import HDFPanda

from hyperion.device_setup_plans.utils import (
start_preparing_data_collection_then_do_plan,
Expand Down Expand Up @@ -77,7 +79,7 @@ class RobotLoadThenCentreComposite:
undulator: Undulator
zebra: Zebra
zocalo: ZocaloResults
panda: PandA
panda: HDFPanda
panda_fast_grid_scan: PandAFastGridScan

# SetEnergyComposite fields
Expand All @@ -88,6 +90,7 @@ class RobotLoadThenCentreComposite:

# RobotLoad fields
robot: BartRobot
webcam: Webcam


def create_devices(context: BlueskyContext) -> RobotLoadThenCentreComposite:
Expand Down Expand Up @@ -115,6 +118,18 @@ def wait_for_smargon_not_disabled(smargon: Smargon, timeout=60):
)


def take_robot_snapshots(oav: OAV, webcam: Webcam, directory: str):
time_now = datetime.now()
snapshot_format = f"{time_now.strftime('%H%M%S')}_{{device}}_after_load"
for device in [oav.snapshot, webcam]:
yield from bps.abs_set(
device.filename, snapshot_format.format(device=device.name)
)
yield from bps.abs_set(device.directory, directory)
yield from bps.trigger(device, group="snapshots")
yield from bps.wait("snapshots")


def prepare_for_robot_load(composite: RobotLoadThenCentreComposite):
yield from bps.abs_set(
composite.aperture_scatterguard,
Expand Down Expand Up @@ -174,8 +189,14 @@ def robot_load():

yield from bps.wait("robot_load")

yield from take_robot_snapshots(
composite.oav, composite.webcam, parameters.experiment_params.snapshot_dir
)

yield from bps.create(name=CONST.DESCRIPTORS.ROBOT_LOAD)
yield from bps.read(composite.robot.barcode)
yield from bps.read(composite.oav.snapshot)
yield from bps.read(composite.webcam)
yield from bps.save()

yield from wait_for_smargon_not_disabled(composite.smargon)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,12 @@


def populate_data_collection_group(
experiment_type: str,
detector_params: DetectorParams,
ispyb_params: IspybParams,
sample_barcode: Optional[str] = None,
experiment_type: str, detector_params: DetectorParams, ispyb_params: IspybParams
):
dcg_info = DataCollectionGroupInfo(
visit_string=get_visit_string(ispyb_params, detector_params),
experiment_type=experiment_type,
sample_id=ispyb_params.sample_id,
sample_barcode=sample_barcode,
)
return dcg_info

Expand Down
Loading

0 comments on commit eedf016

Please sign in to comment.