Aom exampleΒΆ

Experiment

from artiq.experiment import kernel, delay, ms, us
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 information 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)

        # Do a laser pulse
        self.aom_cooler.on()
        delay(10 * us)
        self.aom_cooler.off()

        # 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 = {"type": None}

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