-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move trigger logic into dedicated plan stub (#175)
This streamlines the preparation of the flyer and any detectors by delegating the responsibility for making TriggerInfo (required by detectors) and sequence tables (required by the TriggerLogic in the flyer to a plan stub. This can be called within a plan to prepare a flyer and many detectors. This is a specific use case and more will need to be made for different situations.
- Loading branch information
1 parent
ec67ecf
commit f189363
Showing
14 changed files
with
484 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import asyncio | ||
from dataclasses import dataclass | ||
|
||
from ophyd_async.core import TriggerLogic, wait_for_value | ||
from ophyd_async.panda import SeqBlock, SeqTable, TimeUnits | ||
|
||
|
||
@dataclass | ||
class SeqTableInfo: | ||
sequence_table: SeqTable | ||
repeats: int | ||
prescale_as_us: float = 1 # microseconds | ||
|
||
|
||
class StaticSeqTableTriggerLogic(TriggerLogic[SeqTableInfo]): | ||
|
||
def __init__(self, seq: SeqBlock) -> None: | ||
self.seq = seq | ||
|
||
async def prepare(self, value: SeqTableInfo): | ||
await asyncio.gather( | ||
self.seq.prescale_units.set(TimeUnits.us), | ||
self.seq.enable.set("ZERO"), | ||
) | ||
await asyncio.gather( | ||
self.seq.prescale.set(value.prescale_as_us), | ||
self.seq.repeats.set(value.repeats), | ||
self.seq.table.set(value.sequence_table), | ||
) | ||
|
||
async def kickoff(self) -> None: | ||
await self.seq.enable.set("ONE") | ||
await wait_for_value(self.seq.active, True, timeout=1) | ||
|
||
async def complete(self) -> None: | ||
await wait_for_value(self.seq.active, False, timeout=None) | ||
|
||
async def stop(self): | ||
await self.seq.enable.set("ZERO") | ||
await wait_for_value(self.seq.active, False, timeout=1) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
from .prepare_trigger_and_dets import ( | ||
prepare_static_seq_table_flyer_and_detectors_with_same_trigger, | ||
) | ||
|
||
__all__ = ["prepare_static_seq_table_flyer_and_detectors_with_same_trigger"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
from typing import List | ||
|
||
import bluesky.plan_stubs as bps | ||
|
||
from ophyd_async.core.detector import DetectorTrigger, StandardDetector, TriggerInfo | ||
from ophyd_async.core.flyer import HardwareTriggeredFlyable | ||
from ophyd_async.core.utils import in_micros | ||
from ophyd_async.panda.table import SeqTable, SeqTableRow, seq_table_from_rows | ||
from ophyd_async.panda.trigger import SeqTableInfo | ||
|
||
|
||
def prepare_static_seq_table_flyer_and_detectors_with_same_trigger( | ||
flyer: HardwareTriggeredFlyable[SeqTableInfo], | ||
detectors: List[StandardDetector], | ||
num: int, | ||
width: float, | ||
deadtime: float, | ||
shutter_time: float, | ||
repeats: int = 1, | ||
period: float = 0.0, | ||
): | ||
|
||
trigger_info = TriggerInfo( | ||
num=num * repeats, | ||
trigger=DetectorTrigger.constant_gate, | ||
deadtime=deadtime, | ||
livetime=width, | ||
) | ||
|
||
trigger_time = num * (width + deadtime) | ||
pre_delay = max(period - 2 * shutter_time - trigger_time, 0) | ||
|
||
table: SeqTable = seq_table_from_rows( | ||
# Wait for pre-delay then open shutter | ||
SeqTableRow( | ||
time1=in_micros(pre_delay), | ||
time2=in_micros(shutter_time), | ||
outa2=True, | ||
), | ||
# Keeping shutter open, do N triggers | ||
SeqTableRow( | ||
repeats=num, | ||
time1=in_micros(width), | ||
outa1=True, | ||
outb1=True, | ||
time2=in_micros(deadtime), | ||
outa2=True, | ||
), | ||
# Add the shutter close | ||
SeqTableRow(time2=in_micros(shutter_time)), | ||
) | ||
|
||
table_info = SeqTableInfo(table, repeats) | ||
|
||
for det in detectors: | ||
yield from bps.prepare(det, trigger_info, wait=False, group="prep") | ||
yield from bps.prepare(flyer, table_info, wait=False, group="prep") | ||
yield from bps.wait(group="prep") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.