-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into mx_bluesky_521_expand_voltages
- Loading branch information
Showing
34 changed files
with
1,121 additions
and
322 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# 3. Add device factory decorator with lazy connect support | ||
|
||
Date: 2024-04-26 | ||
|
||
## Status | ||
|
||
Accepted | ||
|
||
## Context | ||
|
||
Device instances should be capable of being created without necessarily connecting, so long as they are connected prior to being utilised to collect data. The current method puts requirements on the init method of device classes, and does not expose all options for connecting to ophyd-async devices. | ||
|
||
## Decision | ||
|
||
DAQ members led us to this proposal: | ||
|
||
- ophyd-async: make Device.connect(mock, timeout, force=False) idempotent | ||
- ophyd-async: make ensure_connected(\*devices) plan stub | ||
- dodal: make device_factory() decorator that may construct, name, cache and connect a device | ||
- dodal: collect_factories() returns all device factories | ||
- blueapi: call collect_factories(), instantiate and connect Devices appropriately, log those that fail | ||
- blueapi: when plan is called, run ensure_connected on all plan args and defaults that are Devices | ||
|
||
We can then iterate on this if the parallel connect causes a broadcast storm. We could also in future add a monitor to a heartbeat PV per device in Device.connect so that it would reconnect next time it was called. | ||
|
||
## Consequences | ||
|
||
Beamlines will be converted to use the decorator, and default arguments to plans should be replaced with a non-eagerly connecting call to the initializer controlling device. |
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,37 @@ | ||
# Include Devices in Plans | ||
|
||
There are two main ways to include dodal devices in plans | ||
|
||
## 1. Pass as Argument | ||
|
||
```python | ||
import bluesky.plans as bp | ||
|
||
from bluesky.protocols import Readable | ||
from bluesky.utils import MsgGenerator | ||
from dodal.beamlines import i22 | ||
|
||
def my_plan(detector: Readable) -> MsgGenerator: | ||
yield from bp.count([detector]) | ||
|
||
RE(my_plan(i22.saxs())) | ||
``` | ||
|
||
This is useful for generic plans that can run on a variety of devices and are not designed with any specific device in mind. | ||
|
||
## 2. Pass as Default Argument | ||
|
||
```python | ||
import bluesky.plans as bp | ||
|
||
from bluesky.protocols import Readable | ||
from bluesky.utils import MsgGenerator | ||
from dodal.beamlines import i22 | ||
|
||
def my_plan(detector: Readable = i22.saxs(connect_immediately=False)) -> MsgGenerator: | ||
yield from bp.count([detector]) | ||
|
||
RE(my_plan())) | ||
``` | ||
|
||
This is useful for plans that will usually, but not exclusively, use the same device or that are designed to only ever work with a specific device. |
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.