Aom example#

Experiment

from artiq.experiment import kernel, delay, ms
from atomiq import AtomiqExperiment


class ATQExperiment(AtomiqExperiment):
    """Atomiq AOM Example

    This is an example experiment to demonstrate how to operate an AOM.
    """

    # define components needed in the step function. They will be built and attached to
    # the experiment object automatically. If components depend on others, these are also
    # built automatically but not attached to the experiment object.
    components = ["aom_cooler"]

    arguments = {
        "aom_detuning": {"default": 0, "unit": "MHz", "scale": 1e6, "ndecimals": 2},
    }

    @kernel
    def step(self, point):
        # emitting debug infomation from kernel functions is a easy as this:
        self.log.info("Testmessage from the core")

        # Add some slack
        delay(3*ms)

        # the components we listed above are initialized and readily available
        self.aom_cooler.detune(point.aom_detuning)
        self.aom_cooler.set_amplitude(0.3)

        # if we need to do something more specific we can also access the nested objects
        self.aom_cooler.rfsource.set(frequency=80e6, amplitude=0.3)

Components

components = {}

# Add core stuff
components.update({
    "log": {
        "classname": "atomiq.components.basics.log.KernelLogger"
    }
})
# Add low level Sinara hardware
components.update({
    "kasli0": {
        "classname": "atomiq.components.sinara.Kasli",
        "arguments": {}
    },
    "urukul0": {
        "classname": "atomiq.components.sinara.Urukul",
        "arguments": {
            "cpld": "@urukul0_cpld"
        }
    }
})

# Add low Sinara DIOs
components.update({
    "ttl_test": {
        "classname": "atomiq.components.sinara.DioOutput",
        "arguments": {
            "kasli": "&kasli0",
            "ttl": "@led0"
        }
    }
})

# Add DDS channels
components.update({
    "dds_cooler": {
        "classname": "atomiq.components.sinara.UrukulChannel",
        "arguments": {
            "urukul": "&urukul0",
            "device": "@urukul0_ch0",
            "ttl": "@ttl_urukul0_sw0"
        }
    }
})

# Add AOMs
components.update({
    "aom_cooler": {
        "classname": "atomiq.components.optoelectronics.lightmodulator.AOM",
        "arguments": {
            "rfsource": "&dds_cooler",
            "switch": "&dds_cooler",
            "center_freq": 80e6,
            "bandwidth": 40e6,
            "switching_delay": 30e-9,
            "order": 1,
            "passes": 2
        }
    }
})