herosdevices.hardware.menlo.mixins
==================================

.. py:module:: herosdevices.hardware.menlo.mixins

.. autoapi-nested-parse::

   Reusable node-shape mixins shared across Menlo Systems functional-layer modules.

   Menlo's device tree repeats several node shapes (current-controlled laser diodes, frequency-distribution
   blocks, PID control loops, ...) under different node names in different modules. Each mixin here models one
   such shape, taking the owning module and the shape's relative node path, so a module can compose as many
   instances as its own tree needs - e.g. :py:class:`~herosdevices.hardware.menlo.dual_laser_lock.DualLaserLock` needs two
   :py:class:`FrequencyDistribution` instances, one per wavelength.





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

.. py:class:: CurrentControl(module: herosdevices.hardware.menlo.functional_layer.FunctionalLayerModule, relative_path: str)

   Bases: :py:obj:`_NodeGroup`


   Laser-diode current control (`setCurrentD1/D2/D3`), e.g. an `amp*` node on a CW channel.


   .. py:property:: set_current_d1
      :type: float


      Current setpoint of the first diode stage.


   .. py:property:: set_current_d2
      :type: float


      Current setpoint of the second diode stage.


   .. py:property:: set_current_d3
      :type: float


      Current setpoint of the third diode stage.


.. py:class:: FrequencyDistribution(module: herosdevices.hardware.menlo.functional_layer.FunctionalLayerModule, relative_path: str)

   Bases: :py:obj:`_NodeGroup`


   Frequency-distribution block (`attenuation`/`counterInputFilter`/`ofdOutputFilter`).

   Shared shape across a CW channel's `frequencyDistribution`, CEO's `frequencyDistributionCeoBeat`, RR's
   `frequencyDistributionOpticalBeat`/`frequencyDistributionRfBeat`, and the per-wavelength
   `frequencyDistribution<wavelength>` nodes on combo CW channels.


   .. py:property:: attenuation
      :type: int


      Attenuation applied to the beat signal before it reaches the loop electronics.


   .. py:property:: counter_input_filter_enabled
      :type: bool


      Whether the beat-frequency counter's input filter is enabled.


   .. py:property:: ofd_output_filter_enabled
      :type: bool


      Whether the optical frequency divider output filter is enabled.


.. py:class:: SelectMonitor(module: herosdevices.hardware.menlo.functional_layer.FunctionalLayerModule, relative_path: str)

   Bases: :py:obj:`_NodeGroup`


   Channel-select monitor.

   CW channels and `CEO` expose a single `hfsChannelSelected`; `RepetitionRate` exposes two
   (`hfs1ChannelSelected`/`hfs2ChannelSelected`) instead. All three properties are always defined here;
   which ones actually resolve on the device depends on which module composes this mixin.


   .. py:property:: hfs_channel_selected
      :type: int


      Selected HFS reference channel.


   .. py:property:: hfs1_channel_selected
      :type: int


      Selected HFS reference channel for the first sub-channel.


   .. py:property:: hfs2_channel_selected
      :type: int


      Selected HFS reference channel for the second sub-channel.


.. py:class:: FrequencyControl(module: herosdevices.hardware.menlo.functional_layer.FunctionalLayerModule, relative_path: str)

   Bases: :py:obj:`_NodeGroup`


   Frequency-control loop shape (gain/setpoint/slope/corner-frequency/handover/slow-branch-enable knobs).

   Shared by a CW channel's `frequencyControl` and RR's `controlSettingsDualLock`/`controlSettingsSingleLock`.


   .. py:property:: p_gain
      :type: float


      Proportional gain of the loop.


   .. py:property:: set_point
      :type: float


      Setpoint of the loop.


   .. py:property:: signal_slope
      :type: int


      Sign/slope of the error signal used by the loop, i.e. the loop's polarity convention.

      Inferred name and semantics from context; verify against vendor documentation before relying on the
      exact meaning of the value.


   .. py:property:: fs_corner_frequencies
      :type: Any


      Corner frequencies of the loop's feed-forward stage.


   .. py:property:: int3_handover_freq
      :type: float


      Handover frequency between the loop's integrator stages.


   .. py:property:: slow_branch_enabled
      :type: bool


      Whether the loop's slow feedback branch is enabled.


.. py:class:: Tec(module: herosdevices.hardware.menlo.functional_layer.FunctionalLayerModule, relative_path: str)

   Bases: :py:obj:`_NodeGroup`


   Thermo-electric cooler status/control (`i_actual`/`t_actual_il`/`t_actual_ool`/`t_set`/`tecOn`).


   .. py:property:: i_actual
      :type: float


      Actual TEC current. Read-only.


   .. py:property:: t_actual_il
      :type: float


      Actual temperature, in-loop sensor. Read-only.


   .. py:property:: t_actual_ool
      :type: float


      Actual temperature, out-of-loop sensor. Read-only.


   .. py:property:: t_set
      :type: float


      Target temperature.


   .. py:property:: tec_on
      :type: bool


      Whether the TEC is enabled.


