Hardware TriggeringΒΆ
For simple devices, it is enough to let bluesky and ophyd handle triggering the detector. In our case, though, many detectors are to be triggered simultaneously using one piece of hardware.
An example is using the scaler to trigger multiple pieces of
hardware. The SIS3820 multi-channel scaler can measure multiple
channels of input with one trigger. If each detector is an ophyd
Device
object, then running a bluesky plan with multiple of these
devices on the same scaler will result in the scaler being triggered
multiple times (once for each device in the plan).
Additionally, the scaler presents the counting gate on one of its
control output lines. This can be fed into the Xspress3 electronics
that power many of our Vortex detectors. Bluesky by default will try
to trigger the Xspress3 directly. The Device
definition for the
Vortex detector could trigger the scaler itself, but this creates yet
another trigger signal to the scaler, as described above.
The solution is to use the
ScalerTriggered
mixin
class. This adds a scaler_prefix argument to __init__
that
expects a channel access PV path and points to the scaler that should
be used to trigger this device. If multiple instances of
ScalerTriggered
with
the same scaler_prefix are present in a bluesky plan, then the
scaler is only triggered once for all the devices.
scaler_prefix can be omitted, in which case the prefix argument will be used for the scaler prefix.
from haven.instrument.scaler_triggered import ScalerTriggered
from ophyd import Device
class VortexDetector(ScalerTriggered, Device):
...
vortex = VortexDetector(prefix="vortex1ioc:vortex", scaler_prefix="25idcVME:scaler1")