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.omega is blocked unless laser_optics.is_out is True. Mid-motion: subscribed to laser_optics.us.user_readback and laser_optics.ds.user_readback; an excursion that takes the optics out of the OUT window will stop omega and fail the move with MotionInterlock.

  • laser_optics.us and laser_optics.ds are blocked whenever sample_stage.omega is moving. Mid-motion: subscribed to omega.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#

setup_omega_laser_interlock(→ None)

Install laser_optics <-> sample_stage.omega interlocks.

Module Contents#

id3c.devices.omega_laser_interlock.logger[source]#
id3c.devices.omega_laser_interlock.setup_omega_laser_interlock(oregistry) None[source]#

Install laser_optics <-> sample_stage.omega interlocks.