-
Notifications
You must be signed in to change notification settings - Fork 25
Description
This is not a package issue per se; it’s a bluesky integration consideration that converges at the queueserver. I want to capture a discussion in progress, and we could move this to a more appropriate venue if someone prefers.
TL;DR: Bypassing the queueserver to control hardware should be discouraged OR an intentional, transparent decision that provide some safeguards.
—-
I’ve been discussing with @dylanmcreynolds and @danielballan the importance of having only one gateway for controlling the state of beamline/endstation during beamtimes. Queueserver naturally fills this role. I think we don’t have way to enforce this restriction currently. Rather than passing plans to queueserver, someone could concurrently access the RunEngine directly at a beamline terminal, or by commanding a movable ophyd device, or by setting an EPICS PV, etc. There are potentially valid reasons for having these multiple pathways, but if left unchecked this is a recipe for chaos for multi-user/multi-client interactions with the beamline.
I don’t propose we try to solve that larger problem here, but there are a few thoughts on the interplay between ophyd, RunEngine, and queueserver that I would like to share and get feedback on.
-
Even simple motor moves should be plans sent to queueserver.
a. This ensures that motor moves do not bypass the queue or preempt the intentions of the experimenters.
b. In the context of a bluesky run, ophyd is effectively a middle layer—an implementation detail that I think we would not want users to fiddle with directly.
c. This concern has particular relevance for controls GUIs where the designer of the client application might be tempted to run scans through queueserver and provide a motor widget that directly accesses ophyd objects. -
What if I intentionally want to jog motors while a plan is running?
a. @danielballan noted that it’s a common paradigm to set a detector in continuous capture mode while one or motors are jogged. If the detector is started as a bluesky run, then the motor must be moved by ophyd (or EPICS, or something outside of bluesky).
b. This mode should be supported. If it ends up being the only notable use case, then perhaps there should be a dedicated escape hatch built into the RunEngine (and the queueserver by extension) to handle this.
c. Maybe this is just a special case of a flyer plan? -
Auto-generated GUI (e.g. Typhos) instantiates ophyd objects
a. We should not destroy the functionality of packages that create GUI widgets for moving motors and setting signals, which do so by inspecting a database of ophyd objects and connecting to them.
b. We could consider a proxy object that supports this use, while still enqueuing the motor moves. Example An ophyd interface that delegates motor moves to an ophyd motor indirectly by adding that move as a queued plan, and perhaps inspects the queue as part of the readback status. -
Alignment/troubleshooting vs. data collection
a. There are times, where using a terminal that directly communicates with hardware or with the RunEngine is simply more convenient. This might be for troubleshooting or for rapid alignments before starting the collection of publication-quality data.
b. To enable this sensibly, there should probably some mechanism for putting the beamline in a “manual” state—pause the queueserver and pass control to an admin user.