Source code for sm_bluesky.common.plan_stubs.detection
from collections.abc import Sequence
import bluesky.plan_stubs as bps
from bluesky.plan_stubs import abs_set
from bluesky.protocols import Flyable, Readable
from bluesky.utils import MsgGenerator, plan, short_uid
from dodal.devices.single_trigger_detector import SingleTriggerDetector
from ophyd_async.epics.adcore import AreaDetector
[docs]
@plan
def set_area_detector_acquire_time(
det: AreaDetector | SingleTriggerDetector, acquire_time: float, wait: bool = True
) -> MsgGenerator:
"""
Set the acquire time on an area detector.
Parameters
----------
det : AreaDetector | SingleTriggerDetector
The detector whose acquire time is to be set.
acquire_time : float
The desired acquire time.
wait : bool, optional
Whether to wait for the operation to complete, by default True.
Returns
-------
MsgGenerator
A Bluesky generator for setting the acquire time.
"""
drv = det.drv if isinstance(det, SingleTriggerDetector) else det.driver
yield from abs_set(drv.acquire_time, acquire_time, wait=wait)
@plan
def fly_kickoff_complete(
flyable: Flyable,
dets: Sequence[Readable],
trigger_and_read: bps.TakeReading | None = None,
) -> MsgGenerator:
if trigger_and_read is None:
trigger_and_read = bps.trigger_and_read
grp = short_uid("kickoff")
yield from bps.kickoff(flyable, group=grp, wait=True)
status = yield from bps.complete(flyable)
yield from trigger_and_read(dets)
while not status.done:
yield from trigger_and_read(dets)
yield from bps.checkpoint()