Closed coretl closed 2 weeks ago
@callumforrester @abbiemery @evalott100 @DiamondJoseph thoughts?
I think there is a use case for keeping the detector to minimum deadtime while the system as a whole has a longer deadtime, which is what this diagram covers. Do any your permutations cover that?
Yes, as this is a property of the trigger generation system, rather than the detector. In the case above the TriggerInfo.deadtime
(which the docstring describes as the minimum deadtime) will be the output of get_deadtime(exposure)
, while the trigger system will actually provide a bigger gap between triggers as shown by your diagram
Need a discussion with @jwlodek and @tomtrafford
After future discussion,
We have decide to have
StandardDetector.prepare() -> DetectorController.prepare()
StandardDetector.kickoff() -> DetectorController.arm()
StandardDetector.trigger() -> DetectorController.arm()
As mentioned in https://github.com/bluesky/ophyd-async/pull/401#discussion_r1644527435 and https://github.com/bluesky/ophyd-async/pull/401#discussion_r1644506670, we need to decide what
StandardDetector
does with theTriggerInfo
passed down toprepare
. We should also consider #162 and #357 while we're at it. I propose:async def DetectorController.arm(num, trigger, exposure) -> Status
->async def DetectorController.arm(trigger_info) -> None
, where the return value foracquire.set(True)
is stored locally rather than returnedasync def DetectorController.wait_for_disarmed(timeout=DEFAULT_TIMEOUT)
that waits for aquire to be False and does the successful completion check that will fail if the detector did anything apart from normal completion or manual disarmingasync def DetectorController.disarm()
->async def DetectorController.start_disarm()
as it doesn't wait for completionWe should also document the various permutations of
TriggerInfo
and provide any common helpers like the one defined in #401. The cases we need to document:trigger()
ifprepare()
not calledget_deadtime(livetime)
We still need to work out if we should provide things like min_exposure and max_framerate as well as
get_deadtime(exposure)
, but this will we tackled in a different issue