herosdevices.hardware.menlo.beat_loop
=====================================

.. py:module:: herosdevices.hardware.menlo.beat_loop

.. autoapi-nested-parse::

   Base class for a Menlo Systems OFC-stabilization beat-note loop (repetition rate, CEO).





Module Contents
---------------

.. py:class:: BeatLoop(ofc: herosdevices.hardware.menlo.ofc.OFC, base_path: str, observables: dict[str, dict[str, str]] | None = None)

   Bases: :py:obj:`herosdevices.hardware.menlo.functional_layer.FunctionalLayerModule`


   Base for an OFC-stabilization loop that locks a beat note to a target frequency.

   Covers the `mainControls` shape shared by the OFC's repetition-rate and CEO loops (see
   :py:class:`~herosdevices.hardware.menlo.RepetitionRate` and
   :py:class:`~herosdevices.hardware.menlo.CEO`). Both loops also expose a `dds` sub-tree identical in
   shape to :py:class:`~herosdevices.hardware.menlo.DDS`'s, therefore concrete subclasses mix that in directly
   (`class RepetitionRate(DDS, BeatLoop)`).


   .. py:attribute:: DEFAULT_OBSERVABLES
      :type:  dict[str, dict[str, str]]


   .. py:property:: locked
      :type: bool


      Whether the loop is currently locked.


   .. py:property:: fast_output_locked
      :type: bool


      Whether the loop's fast feedback branch is currently locked. Read-only status.


   .. py:property:: fast_output_monitor
      :type: float


      Monitor voltage of the loop's fast feedback branch. Read-only.


   .. py:property:: fast_output_setpoint
      :type: float


      Setpoint of the loop's fast feedback branch.


   .. py:property:: slow_output_locked
      :type: bool


      Whether the loop's slow feedback branch is currently locked. Read-only status.


   .. py:property:: slow_output_monitor
      :type: float


      Monitor voltage of the loop's slow feedback branch. Read-only.


   .. py:property:: slow_output_setpoint
      :type: float


      Setpoint of the loop's slow feedback branch.


   .. py:method:: unlock_here() -> None

      Unlock the loop and immediately re-engage it at the current beat frequency.

      Shared with :py:class:`~herosdevices.hardware.menlo.LaserLock`, which uses the same
      `mainControls.unlockHere` node name.

      Inferred from context (Menlo's own naming and the sibling `lock`/setpoint nodes) rather than verified
      against vendor documentation: releases the lock if engaged, then re-engages it using the beat note as
      it currently stands as the new setpoint, instead of servoing to a previously configured setpoint.



   .. py:attribute:: ofc


   .. py:attribute:: base_path


   .. py:attribute:: observables


   .. py:method:: get(relative_path: str) -> Any

      Read the current value of a node relative to this module's settings object.

      Use this for module properties not already exposed as a named attribute. See
      :py:meth:`~herosdevices.hardware.menlo.ofc.OFC.explore` to find the available relative paths,
      e.g. `ofc.explore(module.base_path, depth=2)`.

      :param relative_path: Dotted path relative to `base_path`.

      :returns: The current value of the node.



   .. py:method:: set(relative_path: str, value: Any) -> None

      Set the value of a node relative to this module's settings object.

      :param relative_path: Dotted path relative to `base_path`, see :py:meth:`get`.
      :param value: Value to set.



