herosdevices.hardware.menlo.ceo¶
HERO driver for the carrier-envelope-offset (CEO) stabilization loop of a Menlo Systems frequency comb.
Module Contents¶
- class herosdevices.hardware.menlo.ceo.CEO(ofc: herosdevices.hardware.menlo.ofc.OFC, observables: dict[str, dict[str, str]] | None = None)[source]¶
Bases:
herosdevices.hardware.menlo.dds.DDS,herosdevices.hardware.menlo.beat_loop.BeatLoopDriver for the carrier-envelope-offset (CEO) stabilization loop of a Menlo Systems frequency comb.
Wraps the OFC’s functionalLayer.ceoSettings sub-tree, a fixed, singleton module (there is only one CEO loop per OFC, so unlike
DDS/LaserLockthere is no funclayer_identifier to select).Combines
DDSwithBeatLoop. This means CEO implements atomiq’s RFSource interface via the DDS: _set_frequency tunes the DDS directly, not the loop’s beat-frequency setpoint (seebeat_frequency_setpointfor that).Also polls xpsTec, the temperature-controlled actuator’s own TEC loop, and exposes frequency_distribution/select_monitor.
- Parameters:
ofc – The OFC HERO this loop belongs to.
observables – Additional observables to poll, merged on top of DEFAULT_OBSERVABLES, see
FunctionalLayerModule.
- DEFAULT_OBSERVABLES: dict[str, dict[str, str]]¶
- frequency_distribution¶
- select_monitor¶
- property beat_frequency: float¶
The currently measured CEO beat frequency. Read-only.
- property beat_frequency_setpoint: float¶
Target CEO beat frequency.
- property amp_enabled: bool¶
Whether the CEO loop’s actuator amplifier is enabled.
- amp_max: float = 1.0¶
- amp_min: float = 0.0¶
- freq_max: float = 100000000.0¶
- freq_min: float = 0.0¶
- property output_enabled: bool¶
Whether the DDS output is enabled.
- ofc¶
- base_path¶
- observables¶
- 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
explore()to find the available relative paths, e.g. ofc.explore(module.base_path, depth=2).- Parameters:
relative_path – Dotted path relative to base_path.
- Returns:
The current value of the node.
- set(relative_path: str, value: Any) None¶
Set the value of a node relative to this module’s settings object.
- Parameters:
relative_path – Dotted path relative to base_path, see
get().value – Value to set.
- frequency: float = 1000000.0¶
- amplitude: float = 0.1¶
- phase: float = 0.0¶
- default_ramp_steps: int = 30¶
- blind: bool = False¶
- property locked: bool¶
Whether the loop is currently locked.
- property fast_output_locked: bool¶
Whether the loop’s fast feedback branch is currently locked. Read-only status.
- property fast_output_monitor: float¶
Monitor voltage of the loop’s fast feedback branch. Read-only.
- property fast_output_setpoint: float¶
Setpoint of the loop’s fast feedback branch.
- property slow_output_locked: bool¶
Whether the loop’s slow feedback branch is currently locked. Read-only status.
- property slow_output_monitor: float¶
Monitor voltage of the loop’s slow feedback branch. Read-only.
- property slow_output_setpoint: float¶
Setpoint of the loop’s slow feedback branch.
- unlock_here() None¶
Unlock the loop and immediately re-engage it at the current beat frequency.
Shared with
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.