herosdevices.hardware.menlo.dds
===============================

.. py:module:: herosdevices.hardware.menlo.dds

.. autoapi-nested-parse::

   HERO driver for a DDS-based RF output of a Menlo Systems frequency comb.





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

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

   Bases: :py:obj:`herosdevices.hardware.menlo.functional_layer.FunctionalLayerModule`, :py:obj:`herosdevices.interfaces.atomiq.RFSource`


   Driver for a DDS-based RF output of a Menlo Systems frequency comb.

   Wraps one `functionalLayer.<funclayer_identifier>Settings` sub-tree of an already-running
   :py:class:`~herosdevices.hardware.menlo.ofc.OFC`.

   This covers only the bare DDS output. For a module that additionally has a closed feedback loop locking
   the DDS to a reference (a beat-note PLL), use :py:class:`~herosdevices.hardware.menlo.LaserLock`
   instead.

   Polls :py:attr:`DEFAULT_OBSERVABLES` for `observable_data` with live reads from the OFC, superseding the
   `RFSource` interface's own cached-value observable.

   :param ofc: The OFC HERO this DDS output belongs to.
   :param funclayer_identifier: Identifier of the module's functional-layer settings object, e.g. "cw1112_1"
                                for the sub-tree at `functionalLayer.cw1112_1Settings`. Use `ofc.explore("functionalLayer")` to
                                find the identifier for a given module.
   :param observables: Additional observables to poll, merged on top of `DEFAULT_OBSERVABLES`, see
                       :py:class:`~herosdevices.hardware.menlo.functional_layer.FunctionalLayerModule`.


   .. py:attribute:: amp_max
      :type:  float
      :value: 1.0



   .. py:attribute:: amp_min
      :type:  float
      :value: 0.0



   .. py:attribute:: freq_max
      :type:  float
      :value: 100000000.0



   .. py:attribute:: freq_min
      :type:  float
      :value: 0.0



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


   .. py:property:: output_enabled
      :type: bool


      Whether the DDS output is enabled.


   .. 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.



   .. py:attribute:: frequency
      :type:  float
      :value: 1000000.0



   .. py:attribute:: amplitude
      :type:  float
      :value: 0.1



   .. py:attribute:: phase
      :type:  float
      :value: 0.0



   .. py:attribute:: default_ramp_steps
      :type:  int
      :value: 30



   .. py:attribute:: blind
      :type:  bool
      :value: False



