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
18 changes: 15 additions & 3 deletions src/mx_bluesky/beamlines/i02_1/i02_1_gridscan_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
from mx_bluesky.common.parameters.device_composites import (
FlyScanEssentialDevices,
)
from mx_bluesky.common.parameters.gridscan import PositiveFloat
from mx_bluesky.common.parameters.gridscan import GridScanParams, PositiveFloat
from mx_bluesky.common.utils.log import LOGGER

DEFAULT_BOX_SIZE_UM = 2
Expand Down Expand Up @@ -127,7 +127,7 @@ def construct_i02_1_specific_features(
)


def _zebra_triggering_setup(fgs_composite: I021FlyScanXRayCentreComposite, _):
def _zebra_triggering_setup(fgs_composite: I021FlyScanXRayCentreComposite, _, __):
yield from setup_zebra_for_gridscan(fgs_composite.zebra)


Expand Down Expand Up @@ -210,10 +210,22 @@ def i02_1_gridscan_plan(

beamline_specific = construct_i02_1_specific_features(composite, params)
callbacks = create_gridscan_callbacks(params)
grid_scan_params = GridScanParams(
omega_starts_deg=params.omega_starts_deg,
x_start_um=params.x_start_um,
y_starts_um=params.y_starts_um,
z_starts_um=params.z_starts_um,
x_steps=params.x_steps,
y_steps=params.y_steps,
x_step_size_um=params.x_step_size_um,
y_step_sizes_um=params.y_step_sizes_um,
)

@bpp.subs_decorator(callbacks)
@ispyb_activation_decorator(params)
def decorated_flyscan_plan():
yield from common_flyscan_xray_centre(composite, params, beamline_specific)
yield from common_flyscan_xray_centre(
composite, params, grid_scan_params, beamline_specific
)

yield from decorated_flyscan_plan()
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,9 @@
)
from mx_bluesky.common.parameters.gridscan import (
GenericGrid,
GridScanParams,
SpecifiedThreeDGridScan,
fast_gridscan_params,
)
from mx_bluesky.common.preprocessors.preprocessors import (
set_transmission_and_trigger_xbpm_feedback_before_collection_decorator,
Expand Down Expand Up @@ -224,7 +226,7 @@ def _inner_grid_detect_then_xrc():
PlanNameConstants.GRIDSCAN_OUTER,
)
def grid_detect_then_xray_centre_with_callbacks():
yield from grid_detect_then_xray_centre(
grid_scan_params = yield from grid_detect_then_xray_centre(
composite=composite,
parameters=grid_common_params,
xrc_params_type=SpecifiedThreeDGridScan,
Expand All @@ -239,6 +241,7 @@ def grid_detect_then_xray_centre_with_callbacks():
yield from get_results_and_move_to_xtal(
composite,
grid_common_params.specified_grid_params,
grid_scan_params,
flyscan_event_handler,
)
except CrystalNotFoundError:
Expand Down Expand Up @@ -297,6 +300,7 @@ def create_gridscan_callbacks() -> tuple[
def construct_i04_specific_features(
xrc_composite: GridDetectThenXRayCentreComposite,
xrc_parameters: SpecifiedThreeDGridScan,
grid_scan_params: GridScanParams,
) -> BeamlineSpecificFGSFeatures:
"""
Get all the information needed to do the i04 XRC flyscan.
Expand Down Expand Up @@ -327,10 +331,11 @@ def construct_i04_specific_features(
group="flyscan_zebra_tidy",
wait=True,
)
zebra_fgs_params = fast_gridscan_params(xrc_parameters, grid_scan_params)
set_flyscan_params_plan = partial(
set_fast_grid_scan_params,
xrc_composite.zebra_fast_grid_scan,
xrc_parameters.fast_gridscan_params,
zebra_fgs_params,
)
fgs_motors = xrc_composite.zebra_fast_grid_scan
return construct_beamline_specific_fast_gridscan_features(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
from mx_bluesky.common.parameters.device_composites import (
GridDetectThenXRayCentreComposite,
)
from mx_bluesky.common.parameters.gridscan import SpecifiedThreeDGridScan
from mx_bluesky.common.parameters.gridscan import (
GridScanParams,
SpecifiedThreeDGridScan,
)
from mx_bluesky.common.utils.log import LOGGER
from mx_bluesky.common.utils.tracing import TRACER
from mx_bluesky.common.utils.xrc_result import XRayCentreEventHandler, XRayCentreResult
Expand All @@ -24,9 +27,12 @@
def _get_xrc_results(
zocalo: ZocaloResults,
parameters: SpecifiedThreeDGridScan,
grid_scan_params: GridScanParams,
flyscan_event_handler: XRayCentreEventHandler,
) -> Generator[Any, Any, Sequence[XRayCentreResult]]:
yield from fetch_xrc_results_from_zocalo(zocalo, parameters)
yield from fetch_xrc_results_from_zocalo(
zocalo, grid_scan_params, parameters.sample_id
)
flyscan_results = flyscan_event_handler.xray_centre_results
assert flyscan_results, (
"Flyscan result event not received or no crystal found and exception not raised"
Expand All @@ -37,10 +43,11 @@ def _get_xrc_results(
def get_results_and_move_to_xtal(
composite: GridDetectThenXRayCentreComposite,
parameters: SpecifiedThreeDGridScan,
grid_scan_params: GridScanParams,
flyscan_event_handler: XRayCentreEventHandler,
):
flyscan_results = yield from _get_xrc_results(
composite.zocalo, parameters, flyscan_event_handler
composite.zocalo, parameters, grid_scan_params, flyscan_event_handler
)
yield from move_to_xtal(flyscan_results[0], composite.gonio)

Expand All @@ -49,10 +56,11 @@ def get_results_and_move_to_xtal(
def get_results_then_change_aperture_and_move_to_xtal(
composite: GridDetectThenXRayCentreComposite,
parameters: SpecifiedThreeDGridScan,
grid_scan_params: GridScanParams,
flyscan_event_handler: XRayCentreEventHandler,
):
flyscan_results = yield from _get_xrc_results(
composite.zocalo, parameters, flyscan_event_handler
composite.zocalo, parameters, grid_scan_params, flyscan_event_handler
)
yield from change_aperture(flyscan_results[0], composite.aperture_scatterguard)
yield from move_to_xtal(flyscan_results[0], composite.gonio)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
GonioWithOmegaType,
)
from mx_bluesky.common.parameters.gridscan import (
GridScanParams,
SpecifiedGrids,
)
from mx_bluesky.common.utils.exceptions import (
Expand Down Expand Up @@ -117,6 +118,7 @@ def construct_beamline_specific_fast_gridscan_features(
def common_flyscan_xray_centre(
composite: FlyScanEssentialDevices[GonioWithOmegaType],
parameters: SpecifiedGrids,
grid_scan_parameters: GridScanParams,
beamline_specific: BeamlineSpecificFGSFeatures,
) -> MsgGenerator:
"""Main entry point of the MX-Bluesky x-ray centering flyscan
Expand All @@ -125,6 +127,7 @@ def common_flyscan_xray_centre(
composite (FlyScanEssentialDevices): Devices required to perform this plan.

parameters (SpecifiedThreeDGridScan): Parameters required to perform this plan.
grid_scan_parameters (GridScanParams): Parameters defining the grid scan(s) to be carried out.

beamline_specific (BeamlineSpecificFGSFeatures): Configure the beamline-specific version
of this plan: For example triggering setup and tidy up plans, as well as what to do with the
Expand All @@ -150,6 +153,7 @@ def _decorated_flyscan():
md={
"subplan_name": PlanNameConstants.GRIDSCAN_OUTER,
"mx_bluesky_parameters": parameters.model_dump_json(),
"grid_scan_parameters": grid_scan_parameters,
"activate_callbacks": [
"GridscanNexusFileCallback",
],
Expand All @@ -161,10 +165,14 @@ def run_gridscan_and_tidy(
params: SpecifiedGrids,
beamline_specific: BeamlineSpecificFGSFeatures,
) -> MsgGenerator:
yield from beamline_specific.setup_trigger_plan(fgs_composite, parameters)
yield from beamline_specific.setup_trigger_plan(
fgs_composite, parameters, grid_scan_parameters
)

LOGGER.info("Starting grid scan")
yield from run_gridscan(fgs_composite, params, beamline_specific)
yield from run_gridscan(
fgs_composite, params, grid_scan_parameters, beamline_specific
)

LOGGER.info("Grid scan finished")

Expand All @@ -177,12 +185,13 @@ def run_gridscan_and_tidy(
def run_gridscan(
fgs_composite: FlyScanEssentialDevices[GonioWithOmegaType],
parameters: SpecifiedGrids,
grid_scan_params: GridScanParams,
beamline_specific: BeamlineSpecificFGSFeatures,
):
with TRACER.start_span("moving_omega_to_0"):
yield from bps.abs_set(
fgs_composite.gonio.wrapped_omega.phase,
parameters.omega_starts_deg[0],
grid_scan_params.omega_starts_deg[0],
wait=True,
)

Expand All @@ -209,7 +218,7 @@ def run_gridscan(
beamline_specific.fgs_motors,
fgs_composite.eiger,
fgs_composite.synchrotron,
parameters.scan_points,
grid_scan_params.scan_points,
parameters.omega_starts_deg,
plan_during_collection=beamline_specific.read_during_collection_plan,
)
Expand Down
Loading
Loading