id3c.devices.omega_laser_interlock#
Set up the bidirectional sample_stage.omega <-> laser_optics interlock.
This module is specific to the one interlocked pair listed below.
Additional interlocks belong in their own <pair>_interlock.py
modules with their own setup_<pair>_interlock entry points.
Run once at startup, after make_devices() has populated the ophyd
registry, e.g.:
from .devices.omega_laser_interlock import setup_omega_laser_interlock
setup_omega_laser_interlock(oregistry)
Idempotent: safe to call again after re-loading devices.
Interlock relationships installed#
sample_stage.omegais blocked unlesslaser_optics.is_outis True. Mid-motion: subscribed tolaser_optics.us.user_readbackandlaser_optics.ds.user_readback; an excursion that takes the optics out of the OUT window will stop omega and fail the move withMotionInterlock.laser_optics.usandlaser_optics.dsare blocked wheneversample_stage.omegais moving. Mid-motion: subscribed toomega.motor_is_moving(the .MOVN field), so a laser-axis move in progress will be aborted if an omega motion starts. This is the conservative, position-free choice; angular danger-zone gating is appropriate for an EPICS-IOC interlock, not this Python layer.
Either device missing from the registry is logged and skipped; the other side’s wiring is still attempted.
Attributes#
Functions#
|
Install laser_optics <-> sample_stage.omega interlocks. |