Ule lock mirnyΒΆ
Experiment
from atomiq import AtomiqExperiment
from artiq.experiment import kernel
class LockExperiment(AtomiqExperiment):
"""ULE Sideband lock example using a Mirny RF generator for sideband generation.
This simple example shows how to use a Mirny source as an RF generator for generating the sidebands of
a sideband laser lock.
Note, that Mirny does switch of its output during frequency change and the laser needs to be relocked.
"""
components = ["laser_source"]
arguments = {
"frequency": {"default": 5e-6, "unit": "us", "scale": 1e-6, "ndecimals": 3},
# If true, set the absolute frequency, otherwise set the sideband frequency
"set_absolute": {"default": True},
}
@kernel
def step(self, point):
# Set the amplitude of the Mirny channel
self.laser_source.lock.rf_source.on()
self.laser_source.lock.rf_source.set_amplitude(1.0) # maximum amplitude
if point.set_absolute:
self.log.info("Setting lock to detuning: %f Hz", (point.frequency,))
self.laser_source.set_frequency(point.frequency)
else:
self.log.info("Setting lock to absolute frequency: %f Hz", (point.frequency,))
self.laser_source.lock.set_detuning(point.frequency)
Components
components = {"type": None}
# Add core stuff
components.update(
{
"log": {
"classname": "atomiq.components.basics.log.KernelLogger",
}
}
)
# Add locks
components.update(
{
"lock": {
"classname": "atomiq.components.lock.SidebandLock",
"arguments": {
"reference_frequency": 384.22811520342896e12, # Frequency where the carrier appears
"lock_offset": 34e6, # Frequency of the sideband
"rf_source": "&rf_lock",
"sideband_order": -1,
"settle_time": 200e3,
},
}
}
)
# Add laser sources
components.update(
{
"laser_source": {
"classname": "atomiq.components.laser.LockedLaserSource",
"arguments": {
"lock": "&lock",
},
}
}
)
# Add low level Sinara hardware
components.update(
{
"kasli0": {
"classname": "atomiq.components.sinara.Kasli",
"arguments": {},
},
"mirny0": {
"classname": "atomiq.components.sinara.Mirny",
"arguments": {
"cpld": "@mirny0_cpld",
},
},
}
)
# Add Mirny channels
components.update(
{
"rf_lock": {
"classname": "atomiq.components.sinara.MirnyChannel",
"arguments": {
"mirny": "&mirny0",
"device": "@mirny0_ch0",
"ttl": "@ttl_mirny0_sw0",
},
}
}
)