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",
            },
        }
    }
)