herosdevices.hardware.menlo.dual_laser_lock¶
HERO driver for a dual-wavelength laser-lock channel of a Menlo Systems frequency comb.
Module Contents¶
- class herosdevices.hardware.menlo.dual_laser_lock.DualLaserLock(ofc: herosdevices.hardware.menlo.ofc.OFC, funclayer_identifier: str, primary_frequency_distribution_node: str, secondary_frequency_distribution_node: str, tec_node: str, amp_node: str | None = None, observables: dict[str, dict[str, str]] | None = None)[source]¶
Bases:
herosdevices.hardware.menlo.laser_lock.LaserLockDriver for a dual-wavelength laser-lock channel of a Menlo Systems frequency comb.
Some CW channels (e.g. “CW 507 / 1014 / 1542”, “CW 578 / 1157 / 1542” in Menlo’s vendor software) lock two wavelengths through one shared dds/mainControls/frequencyControl/amp* node set, but have two separate frequencyDistribution<wavelength> blocks (one per wavelength) instead of a single plain frequencyDistribution, plus a single-wavelength thermo-electric-cooler node. Deploying plain
LaserLockagainst one of these channels fails, since its frequencyDistribution.* properties hardcode a node name these channels don’t have - use DualLaserLock instead, which composes both wavelength-suffixed nodes plus the TEC node explicitly.- Parameters:
ofc – The OFC HERO this dual-wavelength channel belongs to.
funclayer_identifier – Identifier of the module’s functional-layer settings object, e.g. “cw507_1014” for the sub-tree at functionalLayer.cw507_1014Settings.
primary_frequency_distribution_node – Relative node name of the first wavelength’s frequency-distribution block (mapped to
frequency_distribution, inherited from LaserLock), e.g. “frequencyDistribution507”.secondary_frequency_distribution_node – Relative node name of the second wavelength’s frequency-distribution block (mapped to
secondary_frequency_distribution), e.g. “frequencyDistribution1014”.tec_node – Relative node name of the channel’s thermo-electric-cooler block, e.g. “spt1014Tec”.
amp_node – Relative node name of the channel’s shared laser-diode current-control block (amp*), see
LaserLock.observables – Additional observables to poll, merged on top of DEFAULT_OBSERVABLES, see
FunctionalLayerModule.
- secondary_frequency_distribution¶
- tec¶
- DEFAULT_OBSERVABLES: dict[str, dict[str, str]]¶
- locked¶
- fast_output_setpoint¶
- fast_output_locked¶
- fast_output_monitor¶
- unlock_here¶
- frequency_control¶
- frequency_distribution¶
- select_monitor¶
- current_control¶
- property amplifier_enabled: bool¶
Whether the loop’s actuator amplifier (e.g. piezo/current driver) is enabled.
- property slow_branch_setpoint: float¶
Setpoint of the loop’s slow feedback branch.
- property slow_branch_locked: bool¶
Whether the loop’s slow feedback branch is currently locked. Read-only status.
- property slow_branch_monitor: float¶
Monitor voltage of the loop’s slow feedback branch. Read-only.
- 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¶