{ "cells": [ { "cell_type": "markdown", "id": "11ac9bd9", "metadata": {}, "source": [ "Manual Mixer calibration\n", "------------------------\n", "\n", "The Cluster RF Modules (QCM-RF and QRM-RF) have integrated IQ mixers that handle both upconversion and downconversion of RF signals.\n", "These mixers use a local oscillator (LO) with a frequency of $\\omega_{LO}$.\n", "During upconversion, they combine signals from the I and Q paths, which have a frequency of $\\omega_{NCO}$, resulting in an output signal at $\\omega_{LO} + \\omega_{NCO}$.\n", "However, due to the inherent mathematical imperfections of IQ mixers, the output also includes an unwanted signal at $\\omega_{LO}$ (known as leakage) and another at $\\omega_{LO} - \\omega_{NCO}$ (called the undesired sideband).\n", "Cluster baseband modules (QCM and QRM) can be used with external mixers, which have similar imperfections.\n", "\n", "\n", "In this tutorial, we are going to look at ways to suppress the LO leakage and undesired sideband. This process is called mixer calibration.\n", "\n", "To run this tutorial optimally, you will need:\n", "\n", "* Spectrum analyzer\n", "\n", "* SMA-cables\n", "\n", "* Installation and enabling of ipywidgets:\n", "\n", "```\n", " pip install ipywidgets\n", " jupyter nbextension enable --py widgetsnbextension\n", "```" ] }, { "cell_type": "markdown", "id": "c8626a50", "metadata": { "tags": [] }, "source": [ "Setup\n", "-----\n", "\n", "First, we are going to import the required packages." ] }, { "cell_type": "code", "execution_count": 1, "id": "29aa9cbb", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:23.085275Z", "iopub.status.busy": "2025-05-16T13:36:23.084891Z", "iopub.status.idle": "2025-05-16T13:36:23.437847Z", "shell.execute_reply": "2025-05-16T13:36:23.436825Z" }, "tags": [ "imports" ] }, "outputs": [], "source": [ "from __future__ import annotations\n", "\n", "import json\n", "from typing import TYPE_CHECKING, Callable\n", "\n", "import ipywidgets as widgets\n", "from ipywidgets import interact\n", "from qcodes.instrument import find_or_create_instrument\n", "\n", "from qblox_instruments import Cluster, ClusterType\n", "\n", "if TYPE_CHECKING:\n", " from qblox_instruments.qcodes_drivers.module import Module" ] }, { "cell_type": "markdown", "id": "1b638be0", "metadata": {}, "source": [ "### Scan For Clusters\n", "\n", "We scan for the available devices connected via ethernet using the Plug & Play functionality of the Qblox Instruments package (see [Plug & Play](https://docs.qblox.com/en/main/api_reference/tools.html#api-pnp) for more info)." ] }, { "cell_type": "markdown", "id": "1e07dc25", "metadata": {}, "source": [ "`!qblox-pnp list`" ] }, { "cell_type": "code", "execution_count": 2, "id": "e15c462b", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:23.440708Z", "iopub.status.busy": "2025-05-16T13:36:23.440404Z", "iopub.status.idle": "2025-05-16T13:36:23.443888Z", "shell.execute_reply": "2025-05-16T13:36:23.443161Z" } }, "outputs": [], "source": [ "cluster_ip = \"10.10.200.42\"\n", "cluster_name = \"cluster0\"" ] }, { "cell_type": "markdown", "id": "666d9454", "metadata": {}, "source": [ "### Connect to Cluster\n", "\n", "We now make a connection with the Cluster." ] }, { "cell_type": "code", "execution_count": 3, "id": "ed1118dc", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:23.445481Z", "iopub.status.busy": "2025-05-16T13:36:23.445188Z", "iopub.status.idle": "2025-05-16T13:36:24.252137Z", "shell.execute_reply": "2025-05-16T13:36:24.251544Z" }, "lines_to_next_cell": 2 }, "outputs": [], "source": [ "cluster = find_or_create_instrument(\n", " Cluster,\n", " recreate=True,\n", " name=cluster_name,\n", " identifier=cluster_ip,\n", " dummy_cfg=(\n", " {\n", " 2: ClusterType.CLUSTER_QCM,\n", " 4: ClusterType.CLUSTER_QRM,\n", " 6: ClusterType.CLUSTER_QCM_RF,\n", " 8: ClusterType.CLUSTER_QRM_RF,\n", " 10: ClusterType.CLUSTER_QTM,\n", " }\n", " if cluster_ip is None\n", " else None\n", " ),\n", ")" ] }, { "cell_type": "markdown", "id": "f86a8712", "metadata": { "lines_to_next_cell": 2 }, "source": [ "#### Get connected modules" ] }, { "cell_type": "code", "execution_count": 4, "id": "82c6049c", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:24.255655Z", "iopub.status.busy": "2025-05-16T13:36:24.255376Z", "iopub.status.idle": "2025-05-16T13:36:24.259008Z", "shell.execute_reply": "2025-05-16T13:36:24.258602Z" } }, "outputs": [], "source": [ "def get_connected_modules(cluster: Cluster, filter_fn: Callable | None = None) -> dict[int, Module]:\n", " def checked_filter_fn(mod: ClusterType) -> bool:\n", " if filter_fn is not None:\n", " return filter_fn(mod)\n", " return True\n", "\n", " return {\n", " mod.slot_idx: mod for mod in cluster.modules if mod.present() and checked_filter_fn(mod)\n", " }" ] }, { "cell_type": "code", "execution_count": 5, "id": "0200f657", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:24.262019Z", "iopub.status.busy": "2025-05-16T13:36:24.261838Z", "iopub.status.idle": "2025-05-16T13:36:24.279029Z", "shell.execute_reply": "2025-05-16T13:36:24.278633Z" }, "tags": [ "module_select" ] }, "outputs": [], "source": [ "# QCM baseband modules\n", "modules = get_connected_modules(cluster, lambda mod: not mod.is_qrm_type and not mod.is_rf_type)" ] }, { "cell_type": "code", "execution_count": 6, "id": "731c7cda", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:24.281824Z", "iopub.status.busy": "2025-05-16T13:36:24.281683Z", "iopub.status.idle": "2025-05-16T13:36:24.283923Z", "shell.execute_reply": "2025-05-16T13:36:24.283529Z" } }, "outputs": [], "source": [ "# This uses the module of the correct type with the lowest slot index\n", "module = list(modules.values())[0]" ] }, { "cell_type": "markdown", "id": "37da85b9", "metadata": {}, "source": [ "### Reset the Cluster\n", "\n", "We reset the Cluster to enter a well-defined state. Note that resetting will clear all stored parameters, so resetting between experiments is usually not desirable." ] }, { "cell_type": "code", "execution_count": 7, "id": "d59e27ce", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:24.286596Z", "iopub.status.busy": "2025-05-16T13:36:24.286459Z", "iopub.status.idle": "2025-05-16T13:36:26.859576Z", "shell.execute_reply": "2025-05-16T13:36:26.858427Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Status: OKAY, Flags: NONE, Slot flags: NONE\n" ] } ], "source": [ "cluster.reset()\n", "print(cluster.get_system_status())" ] }, { "cell_type": "markdown", "id": "8b7ae27d", "metadata": {}, "source": [ "We upload a simple sequence program that keeps playing the DC waveform at 30 percent IF power (waveform amplitude = 0.3). This will be modulated and upconverted within the QRM-RF before outputting." ] }, { "cell_type": "code", "execution_count": 8, "id": "c9858cec", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:26.863488Z", "iopub.status.busy": "2025-05-16T13:36:26.863123Z", "iopub.status.idle": "2025-05-16T13:36:26.893499Z", "shell.execute_reply": "2025-05-16T13:36:26.892477Z" } }, "outputs": [], "source": [ "# Sequence program.\n", "seq_prog = \"\"\"\n", " wait_sync 4\n", "\n", "loop: play 0,0,1200\n", " jmp @loop\n", "\"\"\"\n", "waveforms = {\"dc\": {\"data\": [0.3 for i in range(0, 1200)], \"index\": 0}}\n", "\n", "# Add sequence to single dictionary and write to JSON file.\n", "sequence = {\n", " \"waveforms\": waveforms,\n", " \"weights\": {},\n", " \"acquisitions\": {},\n", " \"program\": seq_prog,\n", "}\n", "with open(\"sequence.json\", \"w\", encoding=\"utf-8\") as file:\n", " json.dump(sequence, file, indent=4)\n", " file.close()\n", "\n", "module.sequencer0.sequence(\"sequence.json\")" ] }, { "cell_type": "markdown", "id": "8a2506ef", "metadata": {}, "source": [ "Let's configure the sequencer to generate an IF frequency of $100$ MHz. To get an output frequency of $5.0$ GHz, we then have to configure the LO to run at $4.9$ GHz." ] }, { "cell_type": "markdown", "id": "a89d1004", "metadata": { "tags": [ "set_lo" ] }, "source": [ "For baseband modules, use an external LO" ] }, { "cell_type": "code", "execution_count": 9, "id": "6d5091ea", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:26.897326Z", "iopub.status.busy": "2025-05-16T13:36:26.896951Z", "iopub.status.idle": "2025-05-16T13:36:26.950764Z", "shell.execute_reply": "2025-05-16T13:36:26.949661Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Status: OKAY, State: RUNNING, Info Flags: NONE, Warning Flags: NONE, Error Flags: NONE, Log: []\n" ] } ], "source": [ "nco_freq = 100e6\n", "module.sequencer0.marker_ovr_en(True)\n", "module.sequencer0.marker_ovr_value(3) # Enables output on QRM-RF\n", "\n", "# Configure the sequencer\n", "module.sequencer0.mod_en_awg(True)\n", "module.sequencer0.nco_freq(nco_freq)\n", "module.sequencer0.sync_en(True)\n", "\n", "module.arm_sequencer(0)\n", "module.start_sequencer(0)\n", "\n", "print(module.get_sequencer_status(0))" ] }, { "cell_type": "markdown", "id": "9f048f98", "metadata": {}, "source": [ "Connect the output of the QRM-RF (O1) to the spectrum analyzer. This is what the output looks like on the spectrum analyzer (center frequency at 4.85 GHz with 600 MHz bandwidth). We see three peaks which correspond to (from the right) 5 GHz (desired signal), 4.9 GHz (LO Leakage) and 4.8 GHz (unwanted sideband)." ] }, { "cell_type": "markdown", "id": "1de8a8e9", "metadata": {}, "source": [ "![IQ_Mixer_Calib_before.png](figures/IQ_Mixer_Calib_before.png)" ] }, { "cell_type": "markdown", "id": "e343e19f", "metadata": { "lines_to_next_cell": 2 }, "source": [ "To get better spurious free dynamic range (SFDR) and better suppression, we can manually calibrate the mixer by:\n", "\n", "* Using DC offsets we can lower the LO leakage.\n", "* By changing the gain ratio and phase of the IF signal we can cancel the unwanted sideband." ] }, { "cell_type": "markdown", "id": "9d34bcf3", "metadata": { "lines_to_next_cell": 2 }, "source": [ "Create control sliders for these parameters. Each time the value of a parameter is updated, the sequencer is automatically stopped from the embedded firmware for safety reasons and has to be manually restarted. The sliders cover the valid parameter range. If the code below is modified to input invalid values, the Cluster QRM-RF firmware will not program the values.\n", "\n", "Execute the code below, move the sliders and observe the result on the spectrum analyzer." ] }, { "cell_type": "code", "execution_count": 10, "id": "805c01b1", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:26.954771Z", "iopub.status.busy": "2025-05-16T13:36:26.954352Z", "iopub.status.idle": "2025-05-16T13:36:26.959479Z", "shell.execute_reply": "2025-05-16T13:36:26.958463Z" }, "tags": [ "set_offsets" ] }, "outputs": [], "source": [ "def set_offset0(offset0: float) -> None:\n", " module.out0_offset(offset0)" ] }, { "cell_type": "code", "execution_count": 11, "id": "09e95695", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:26.963181Z", "iopub.status.busy": "2025-05-16T13:36:26.962801Z", "iopub.status.idle": "2025-05-16T13:36:26.967843Z", "shell.execute_reply": "2025-05-16T13:36:26.966838Z" }, "tags": [ "set_offsets" ] }, "outputs": [], "source": [ "def set_offset1(offset1: float) -> None:\n", " module.out1_offset(offset1)" ] }, { "cell_type": "code", "execution_count": 12, "id": "02836530", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:26.971315Z", "iopub.status.busy": "2025-05-16T13:36:26.970938Z", "iopub.status.idle": "2025-05-16T13:36:27.072306Z", "shell.execute_reply": "2025-05-16T13:36:27.071328Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8f1adc3bce2541888f27eeb38d4e3062", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='offset0', layout=Layout(width='1200px'), max=14.0, m…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "06c82428551a4fe5b4d3373654714f1d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='offset1', layout=Layout(width='1200px'), max=14.0, m…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "14c4a418753e4955a136cc5c4dc25a12", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.9, description='gain_ratio', layout=Layout(width='1200px'), max=1.1,…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b33005b0c7264eaebf0e3ff82b9d36e9", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='phase_offset', layout=Layout(width='1200px'), max=45…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ " 'None'>" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def set_gain_ratio(gain_ratio: float) -> None:\n", " module.sequencer0.mixer_corr_gain_ratio(gain_ratio)\n", " # Start\n", " module.arm_sequencer(0)\n", " module.start_sequencer(0)\n", "\n", "\n", "def set_phase_offset(phase_offset: float) -> None:\n", " module.sequencer0.mixer_corr_phase_offset_degree(phase_offset)\n", " # Start\n", " module.arm_sequencer(0)\n", " module.start_sequencer(0)\n", "\n", "\n", "interact(\n", " set_offset0,\n", " offset0=widgets.FloatSlider(\n", " min=-14.0,\n", " max=14.0,\n", " step=0.001,\n", " start=0.0,\n", " layout=widgets.Layout(width=\"1200px\"),\n", " ),\n", ")\n", "interact(\n", " set_offset1,\n", " offset1=widgets.FloatSlider(\n", " min=-14.0,\n", " max=14.0,\n", " step=0.001,\n", " start=0.0,\n", " layout=widgets.Layout(width=\"1200px\"),\n", " ),\n", ")\n", "interact(\n", " set_gain_ratio,\n", " gain_ratio=widgets.FloatSlider(\n", " min=0.9, max=1.1, step=0.001, start=1.0, layout=widgets.Layout(width=\"1200px\")\n", " ),\n", ")\n", "interact(\n", " set_phase_offset,\n", " phase_offset=widgets.FloatSlider(\n", " min=-45.0,\n", " max=45.0,\n", " step=0.001,\n", " start=0.0,\n", " layout=widgets.Layout(width=\"1200px\"),\n", " ),\n", ")" ] }, { "cell_type": "markdown", "id": "bad3dff7", "metadata": {}, "source": [ "![IQ_Mixer_Calib_after.png](figures/IQ_Mixer_Calib_after.png)" ] }, { "cell_type": "markdown", "id": "9c5cb12a", "metadata": {}, "source": [ "Stop\n", "----\n", "\n", "Finally, let's stop the sequencers if they haven't already and close the instrument connection." ] }, { "cell_type": "code", "execution_count": 13, "id": "215cc52b", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:27.076079Z", "iopub.status.busy": "2025-05-16T13:36:27.075682Z", "iopub.status.idle": "2025-05-16T13:36:27.086015Z", "shell.execute_reply": "2025-05-16T13:36:27.085025Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Status: OKAY, State: STOPPED, Info Flags: FORCED_STOP, Warning Flags: NONE, Error Flags: NONE, Log: []\n" ] } ], "source": [ "# Stop sequencer.\n", "module.stop_sequencer()\n", "\n", "# Print status of sequencer.\n", "print(module.get_sequencer_status(0))" ] }, { "cell_type": "markdown", "id": "e248777f", "metadata": {}, "source": [ "Stop\n", "----\n", "\n", "Finally, let's stop the sequencers if they haven't already and close the instrument connection. One can also display a detailed snapshot containing the instrument parameters before\n", "closing the connection by uncommenting the corresponding lines." ] }, { "cell_type": "code", "execution_count": 14, "id": "07c67a56", "metadata": { "execution": { "iopub.execute_input": "2025-05-16T13:36:27.089509Z", "iopub.status.busy": "2025-05-16T13:36:27.089135Z", "iopub.status.idle": "2025-05-16T13:36:32.495987Z", "shell.execute_reply": "2025-05-16T13:36:32.494796Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Status: OKAY, State: STOPPED, Info Flags: FORCED_STOP, Warning Flags: NONE, Error Flags: NONE, Log: []\n", "Status: OKAY, State: STOPPED, Info Flags: NONE, Warning Flags: NONE, Error Flags: NONE, Log: []\n", "\n", "Snapshot:\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "cluster0_module2:\n", "\tparameter value\n", "--------------------------------------------------------------------------------\n", "connected :\tTrue \n", "marker0_exp0_config :\tbypassed \n", "marker0_exp1_config :\tbypassed \n", "marker0_exp2_config :\tbypassed \n", "marker0_exp3_config :\tbypassed \n", "marker0_fir_config :\tbypassed \n", "marker0_inv_en :\tFalse \n", "marker1_exp0_config :\tbypassed \n", "marker1_exp1_config :\tbypassed \n", "marker1_exp2_config :\tbypassed \n", "marker1_exp3_config :\tbypassed \n", "marker1_fir_config :\tbypassed \n", "marker1_inv_en :\tFalse \n", "marker2_exp0_config :\tbypassed \n", "marker2_exp1_config :\tbypassed \n", "marker2_exp2_config :\tbypassed \n", "marker2_exp3_config :\tbypassed \n", "marker2_fir_config :\tbypassed \n", "marker2_inv_en :\tFalse \n", "marker3_exp0_config :\tbypassed \n", "marker3_exp1_config :\tbypassed \n", "marker3_exp2_config :\tbypassed \n", "marker3_exp3_config :\tbypassed \n", "marker3_fir_config :\tbypassed \n", "marker3_inv_en :\tFalse \n", "out0_exp0_amplitude :\t0 \n", "out0_exp0_config :\tbypassed \n", "out0_exp0_time_constant :\t0 \n", "out0_exp1_amplitude :\t0 \n", "out0_exp1_config :\tbypassed \n", "out0_exp1_time_constant :\t0 \n", "out0_exp2_amplitude :\t0 \n", "out0_exp2_config :\tbypassed \n", "out0_exp2_time_constant :\t0 \n", "out0_exp3_amplitude :\t0 \n", "out0_exp3_config :\tbypassed \n", "out0_exp3_time_constant :\t0 \n", "out0_fir_coeffs :\t[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...\n", "out0_fir_config :\tbypassed \n", "out0_latency :\t0 (s)\n", "out0_offset :\t0 (V)\n", "out1_exp0_amplitude :\t0 \n", "out1_exp0_config :\tbypassed \n", "out1_exp0_time_constant :\t0 \n", "out1_exp1_amplitude :\t0 \n", "out1_exp1_config :\tbypassed \n", "out1_exp1_time_constant :\t0 \n", "out1_exp2_amplitude :\t0 \n", "out1_exp2_config :\tbypassed \n", "out1_exp2_time_constant :\t0 \n", "out1_exp3_amplitude :\t0 \n", "out1_exp3_config :\tbypassed \n", "out1_exp3_time_constant :\t0 \n", "out1_fir_coeffs :\t[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...\n", "out1_fir_config :\tbypassed \n", "out1_latency :\t0 (s)\n", "out1_offset :\t0 (V)\n", "out2_exp0_amplitude :\t0 \n", "out2_exp0_config :\tbypassed \n", "out2_exp0_time_constant :\t0 \n", "out2_exp1_amplitude :\t0 \n", "out2_exp1_config :\tbypassed \n", "out2_exp1_time_constant :\t0 \n", "out2_exp2_amplitude :\t0 \n", "out2_exp2_config :\tbypassed \n", "out2_exp2_time_constant :\t0 \n", "out2_exp3_amplitude :\t0 \n", "out2_exp3_config :\tbypassed \n", "out2_exp3_time_constant :\t0 \n", "out2_fir_coeffs :\t[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...\n", "out2_fir_config :\tbypassed \n", "out2_latency :\t0 (s)\n", "out2_offset :\t0 (V)\n", "out3_exp0_amplitude :\t0 \n", "out3_exp0_config :\tbypassed \n", "out3_exp0_time_constant :\t0 \n", "out3_exp1_amplitude :\t0 \n", "out3_exp1_config :\tbypassed \n", "out3_exp1_time_constant :\t0 \n", "out3_exp2_amplitude :\t0 \n", "out3_exp2_config :\tbypassed \n", "out3_exp2_time_constant :\t0 \n", "out3_exp3_amplitude :\t0 \n", "out3_exp3_config :\tbypassed \n", "out3_exp3_time_constant :\t0 \n", "out3_fir_coeffs :\t[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...\n", "out3_fir_config :\tbypassed \n", "out3_latency :\t0 (s)\n", "out3_offset :\t0 (V)\n", "present :\tTrue \n", "cluster0_module2_sequencer0:\n", "\tparameter value\n", "--------------------------------------------------------------------------------\n", "connect_out0 :\tI \n", "connect_out1 :\tQ \n", "connect_out2 :\tI \n", "connect_out3 :\tQ \n", "cont_mode_en_awg_path0 :\tFalse \n", "cont_mode_en_awg_path1 :\tFalse \n", "cont_mode_waveform_idx_awg_path0 :\t0 \n", "cont_mode_waveform_idx_awg_path1 :\t0 \n", "gain_awg_path0 :\t1 \n", "gain_awg_path1 :\t1 \n", "marker_ovr_en :\tTrue \n", "marker_ovr_value :\t3 \n", "mixer_corr_gain_ratio :\t0.89999 \n", "mixer_corr_phase_offset_degree :\t-0 \n", "mod_en_awg :\tTrue \n", "nco_freq :\t1e+08 (Hz)\n", "nco_freq_cal_type_default :\toff (Hz)\n", "nco_phase_offs :\t0 (Degrees)\n", "nco_prop_delay_comp :\t0 (ns)\n", "nco_prop_delay_comp_en :\tFalse (ns)\n", "offset_awg_path0 :\t0 \n", "offset_awg_path1 :\t0 \n", "sync_en :\tTrue \n", "trigger10_count_threshold :\t1 \n", "trigger10_threshold_invert :\tFalse \n", "trigger11_count_threshold :\t1 \n", "trigger11_threshold_invert :\tFalse \n", "trigger12_count_threshold :\t1 \n", "trigger12_threshold_invert :\tFalse \n", "trigger13_count_threshold :\t1 \n", "trigger13_threshold_invert :\tFalse \n", "trigger14_count_threshold :\t1 \n", "trigger14_threshold_invert :\tFalse \n", "trigger15_count_threshold :\t1 \n", "trigger15_threshold_invert :\tFalse \n", "trigger1_count_threshold :\t1 \n", "trigger1_threshold_invert :\tFalse \n", "trigger2_count_threshold :\t1 \n", "trigger2_threshold_invert :\tFalse \n", "trigger3_count_threshold :\t1 \n", "trigger3_threshold_invert :\tFalse \n", "trigger4_count_threshold :\t1 \n", "trigger4_threshold_invert :\tFalse \n", "trigger5_count_threshold :\t1 \n", "trigger5_threshold_invert :\tFalse \n", "trigger6_count_threshold :\t1 \n", "trigger6_threshold_invert :\tFalse \n", "trigger7_count_threshold :\t1 \n", "trigger7_threshold_invert :\tFalse \n", "trigger8_count_threshold :\t1 \n", "trigger8_threshold_invert :\tFalse \n", "trigger9_count_threshold :\t1 \n", "trigger9_threshold_invert :\tFalse \n", "upsample_rate_awg_path0 :\t0 \n", "upsample_rate_awg_path1 :\t0 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "cluster0_module2_sequencer1:\n", "\tparameter value\n", "--------------------------------------------------------------------------------\n", "connect_out0 :\tI \n", "connect_out1 :\tQ \n", "connect_out2 :\tI \n", "connect_out3 :\tQ \n", "cont_mode_en_awg_path0 :\tFalse \n", "cont_mode_en_awg_path1 :\tFalse \n", "cont_mode_waveform_idx_awg_path0 :\t0 \n", "cont_mode_waveform_idx_awg_path1 :\t0 \n", "gain_awg_path0 :\t1 \n", "gain_awg_path1 :\t1 \n", "marker_ovr_en :\tFalse \n", "marker_ovr_value :\t0 \n", "mixer_corr_gain_ratio :\t1 \n", "mixer_corr_phase_offset_degree :\t-0 \n", "mod_en_awg :\tFalse \n", "nco_freq :\t0 (Hz)\n", "nco_freq_cal_type_default :\toff (Hz)\n", "nco_phase_offs :\t0 (Degrees)\n", "nco_prop_delay_comp :\t0 (ns)\n", "nco_prop_delay_comp_en :\tFalse (ns)\n", "offset_awg_path0 :\t0 \n", "offset_awg_path1 :\t0 \n", "sync_en :\tFalse \n", "trigger10_count_threshold :\t1 \n", "trigger10_threshold_invert :\tFalse \n", "trigger11_count_threshold :\t1 \n", "trigger11_threshold_invert :\tFalse \n", "trigger12_count_threshold :\t1 \n", "trigger12_threshold_invert :\tFalse \n", "trigger13_count_threshold :\t1 \n", "trigger13_threshold_invert :\tFalse \n", "trigger14_count_threshold :\t1 \n", "trigger14_threshold_invert :\tFalse \n", "trigger15_count_threshold :\t1 \n", "trigger15_threshold_invert :\tFalse \n", "trigger1_count_threshold :\t1 \n", "trigger1_threshold_invert :\tFalse \n", "trigger2_count_threshold :\t1 \n", "trigger2_threshold_invert :\tFalse \n", "trigger3_count_threshold :\t1 \n", "trigger3_threshold_invert :\tFalse \n", "trigger4_count_threshold :\t1 \n", "trigger4_threshold_invert :\tFalse \n", "trigger5_count_threshold :\t1 \n", "trigger5_threshold_invert :\tFalse \n", "trigger6_count_threshold :\t1 \n", "trigger6_threshold_invert :\tFalse \n", "trigger7_count_threshold :\t1 \n", "trigger7_threshold_invert :\tFalse \n", "trigger8_count_threshold :\t1 \n", "trigger8_threshold_invert :\tFalse \n", "trigger9_count_threshold :\t1 \n", "trigger9_threshold_invert :\tFalse \n", "upsample_rate_awg_path0 :\t0 \n", "upsample_rate_awg_path1 :\t0 \n", "cluster0_module2_sequencer2:\n", "\tparameter value\n", "--------------------------------------------------------------------------------\n", "connect_out0 :\tI \n", "connect_out1 :\tQ \n", "connect_out2 :\tI \n", "connect_out3 :\tQ \n", "cont_mode_en_awg_path0 :\tFalse \n", "cont_mode_en_awg_path1 :\tFalse \n", "cont_mode_waveform_idx_awg_path0 :\t0 \n", "cont_mode_waveform_idx_awg_path1 :\t0 \n", "gain_awg_path0 :\t1 \n", "gain_awg_path1 :\t1 \n", "marker_ovr_en :\tFalse \n", "marker_ovr_value :\t0 \n", "mixer_corr_gain_ratio :\t1 \n", "mixer_corr_phase_offset_degree :\t-0 \n", "mod_en_awg :\tFalse \n", "nco_freq :\t0 (Hz)\n", "nco_freq_cal_type_default :\toff (Hz)\n", "nco_phase_offs :\t0 (Degrees)\n", "nco_prop_delay_comp :\t0 (ns)\n", "nco_prop_delay_comp_en :\tFalse (ns)\n", "offset_awg_path0 :\t0 \n", "offset_awg_path1 :\t0 \n", "sync_en :\tFalse \n", "trigger10_count_threshold :\t1 \n", "trigger10_threshold_invert :\tFalse \n", "trigger11_count_threshold :\t1 \n", "trigger11_threshold_invert :\tFalse \n", "trigger12_count_threshold :\t1 \n", "trigger12_threshold_invert :\tFalse \n", "trigger13_count_threshold :\t1 \n", "trigger13_threshold_invert :\tFalse \n", "trigger14_count_threshold :\t1 \n", "trigger14_threshold_invert :\tFalse \n", "trigger15_count_threshold :\t1 \n", "trigger15_threshold_invert :\tFalse \n", "trigger1_count_threshold :\t1 \n", "trigger1_threshold_invert :\tFalse \n", "trigger2_count_threshold :\t1 \n", "trigger2_threshold_invert :\tFalse \n", "trigger3_count_threshold :\t1 \n", "trigger3_threshold_invert :\tFalse \n", "trigger4_count_threshold :\t1 \n", "trigger4_threshold_invert :\tFalse \n", "trigger5_count_threshold :\t1 \n", "trigger5_threshold_invert :\tFalse \n", "trigger6_count_threshold :\t1 \n", "trigger6_threshold_invert :\tFalse \n", "trigger7_count_threshold :\t1 \n", "trigger7_threshold_invert :\tFalse \n", "trigger8_count_threshold :\t1 \n", "trigger8_threshold_invert :\tFalse \n", "trigger9_count_threshold :\t1 \n", "trigger9_threshold_invert :\tFalse \n", "upsample_rate_awg_path0 :\t0 \n", "upsample_rate_awg_path1 :\t0 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "cluster0_module2_sequencer3:\n", "\tparameter value\n", "--------------------------------------------------------------------------------\n", "connect_out0 :\tI \n", "connect_out1 :\tQ \n", "connect_out2 :\tI \n", "connect_out3 :\tQ \n", "cont_mode_en_awg_path0 :\tFalse \n", "cont_mode_en_awg_path1 :\tFalse \n", "cont_mode_waveform_idx_awg_path0 :\t0 \n", "cont_mode_waveform_idx_awg_path1 :\t0 \n", "gain_awg_path0 :\t1 \n", "gain_awg_path1 :\t1 \n", "marker_ovr_en :\tFalse \n", "marker_ovr_value :\t0 \n", "mixer_corr_gain_ratio :\t1 \n", "mixer_corr_phase_offset_degree :\t-0 \n", "mod_en_awg :\tFalse \n", "nco_freq :\t0 (Hz)\n", "nco_freq_cal_type_default :\toff (Hz)\n", "nco_phase_offs :\t0 (Degrees)\n", "nco_prop_delay_comp :\t0 (ns)\n", "nco_prop_delay_comp_en :\tFalse (ns)\n", "offset_awg_path0 :\t0 \n", "offset_awg_path1 :\t0 \n", "sync_en :\tFalse \n", "trigger10_count_threshold :\t1 \n", "trigger10_threshold_invert :\tFalse \n", "trigger11_count_threshold :\t1 \n", "trigger11_threshold_invert :\tFalse \n", "trigger12_count_threshold :\t1 \n", "trigger12_threshold_invert :\tFalse \n", "trigger13_count_threshold :\t1 \n", "trigger13_threshold_invert :\tFalse \n", "trigger14_count_threshold :\t1 \n", "trigger14_threshold_invert :\tFalse \n", "trigger15_count_threshold :\t1 \n", "trigger15_threshold_invert :\tFalse \n", "trigger1_count_threshold :\t1 \n", "trigger1_threshold_invert :\tFalse \n", "trigger2_count_threshold :\t1 \n", "trigger2_threshold_invert :\tFalse \n", "trigger3_count_threshold :\t1 \n", "trigger3_threshold_invert :\tFalse \n", "trigger4_count_threshold :\t1 \n", "trigger4_threshold_invert :\tFalse \n", "trigger5_count_threshold :\t1 \n", "trigger5_threshold_invert :\tFalse \n", "trigger6_count_threshold :\t1 \n", "trigger6_threshold_invert :\tFalse \n", "trigger7_count_threshold :\t1 \n", "trigger7_threshold_invert :\tFalse \n", "trigger8_count_threshold :\t1 \n", "trigger8_threshold_invert :\tFalse \n", "trigger9_count_threshold :\t1 \n", "trigger9_threshold_invert :\tFalse \n", "upsample_rate_awg_path0 :\t0 \n", "upsample_rate_awg_path1 :\t0 \n", "cluster0_module2_sequencer4:\n", "\tparameter value\n", "--------------------------------------------------------------------------------\n", "connect_out0 :\tI \n", "connect_out1 :\tQ \n", "connect_out2 :\tI \n", "connect_out3 :\tQ \n", "cont_mode_en_awg_path0 :\tFalse \n", "cont_mode_en_awg_path1 :\tFalse \n", "cont_mode_waveform_idx_awg_path0 :\t0 \n", "cont_mode_waveform_idx_awg_path1 :\t0 \n", "gain_awg_path0 :\t1 \n", "gain_awg_path1 :\t1 \n", "marker_ovr_en :\tFalse \n", "marker_ovr_value :\t0 \n", "mixer_corr_gain_ratio :\t1 \n", "mixer_corr_phase_offset_degree :\t-0 \n", "mod_en_awg :\tFalse \n", "nco_freq :\t0 (Hz)\n", "nco_freq_cal_type_default :\toff (Hz)\n", "nco_phase_offs :\t0 (Degrees)\n", "nco_prop_delay_comp :\t0 (ns)\n", "nco_prop_delay_comp_en :\tFalse (ns)\n", "offset_awg_path0 :\t0 \n", "offset_awg_path1 :\t0 \n", "sync_en :\tFalse \n", "trigger10_count_threshold :\t1 \n", "trigger10_threshold_invert :\tFalse \n", "trigger11_count_threshold :\t1 \n", "trigger11_threshold_invert :\tFalse \n", "trigger12_count_threshold :\t1 \n", "trigger12_threshold_invert :\tFalse \n", "trigger13_count_threshold :\t1 \n", "trigger13_threshold_invert :\tFalse \n", "trigger14_count_threshold :\t1 \n", "trigger14_threshold_invert :\tFalse \n", "trigger15_count_threshold :\t1 \n", "trigger15_threshold_invert :\tFalse \n", "trigger1_count_threshold :\t1 \n", "trigger1_threshold_invert :\tFalse \n", "trigger2_count_threshold :\t1 \n", "trigger2_threshold_invert :\tFalse \n", "trigger3_count_threshold :\t1 \n", "trigger3_threshold_invert :\tFalse \n", "trigger4_count_threshold :\t1 \n", "trigger4_threshold_invert :\tFalse \n", "trigger5_count_threshold :\t1 \n", "trigger5_threshold_invert :\tFalse \n", "trigger6_count_threshold :\t1 \n", "trigger6_threshold_invert :\tFalse \n", "trigger7_count_threshold :\t1 \n", "trigger7_threshold_invert :\tFalse \n", "trigger8_count_threshold :\t1 \n", "trigger8_threshold_invert :\tFalse \n", "trigger9_count_threshold :\t1 \n", "trigger9_threshold_invert :\tFalse \n", "upsample_rate_awg_path0 :\t0 \n", "upsample_rate_awg_path1 :\t0 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "cluster0_module2_sequencer5:\n", "\tparameter value\n", "--------------------------------------------------------------------------------\n", "connect_out0 :\tI \n", "connect_out1 :\tQ \n", "connect_out2 :\tI \n", "connect_out3 :\tQ \n", "cont_mode_en_awg_path0 :\tFalse \n", "cont_mode_en_awg_path1 :\tFalse \n", "cont_mode_waveform_idx_awg_path0 :\t0 \n", "cont_mode_waveform_idx_awg_path1 :\t0 \n", "gain_awg_path0 :\t1 \n", "gain_awg_path1 :\t1 \n", "marker_ovr_en :\tFalse \n", "marker_ovr_value :\t0 \n", "mixer_corr_gain_ratio :\t1 \n", "mixer_corr_phase_offset_degree :\t-0 \n", "mod_en_awg :\tFalse \n", "nco_freq :\t0 (Hz)\n", "nco_freq_cal_type_default :\toff (Hz)\n", "nco_phase_offs :\t0 (Degrees)\n", "nco_prop_delay_comp :\t0 (ns)\n", "nco_prop_delay_comp_en :\tFalse (ns)\n", "offset_awg_path0 :\t0 \n", "offset_awg_path1 :\t0 \n", "sync_en :\tFalse \n", "trigger10_count_threshold :\t1 \n", "trigger10_threshold_invert :\tFalse \n", "trigger11_count_threshold :\t1 \n", "trigger11_threshold_invert :\tFalse \n", "trigger12_count_threshold :\t1 \n", "trigger12_threshold_invert :\tFalse \n", "trigger13_count_threshold :\t1 \n", "trigger13_threshold_invert :\tFalse \n", "trigger14_count_threshold :\t1 \n", "trigger14_threshold_invert :\tFalse \n", "trigger15_count_threshold :\t1 \n", "trigger15_threshold_invert :\tFalse \n", "trigger1_count_threshold :\t1 \n", "trigger1_threshold_invert :\tFalse \n", "trigger2_count_threshold :\t1 \n", "trigger2_threshold_invert :\tFalse \n", "trigger3_count_threshold :\t1 \n", "trigger3_threshold_invert :\tFalse \n", "trigger4_count_threshold :\t1 \n", "trigger4_threshold_invert :\tFalse \n", "trigger5_count_threshold :\t1 \n", "trigger5_threshold_invert :\tFalse \n", "trigger6_count_threshold :\t1 \n", "trigger6_threshold_invert :\tFalse \n", "trigger7_count_threshold :\t1 \n", "trigger7_threshold_invert :\tFalse \n", "trigger8_count_threshold :\t1 \n", "trigger8_threshold_invert :\tFalse \n", "trigger9_count_threshold :\t1 \n", "trigger9_threshold_invert :\tFalse \n", "upsample_rate_awg_path0 :\t0 \n", "upsample_rate_awg_path1 :\t0 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Status: OKAY, Flags: NONE, Slot flags: NONE\n" ] } ], "source": [ "# Stop both sequencers.\n", "module.stop_sequencer()\n", "\n", "# Print status of both sequencers (should now say it is stopped).\n", "print(module.get_sequencer_status(0))\n", "print(module.get_sequencer_status(1))\n", "print()\n", "\n", "# Print an overview of the instrument parameters.\n", "print(\"Snapshot:\")\n", "module.print_readable_snapshot(update=True)\n", "\n", "# Reset the cluster\n", "cluster.reset()\n", "print(cluster.get_system_status())" ] } ], "metadata": { "files_to_bundle_in_zip_file": [ "figures/IQ_Mixer_Calib_before.png", "figures/IQ_Mixer_Calib_after.png" ], "jupytext": { "cell_metadata_filter": "all", "notebook_metadata_filter": "files_to_bundle_in_zip_file,is_demo,execute" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.22" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "001a27467a3040efa6a8783f78fff77d": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_c440bc0655224188b5c4990d8d19e4d5", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "00e65e977e594fca9fe7547f2b7d7881": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "FloatSliderView", "behavior": "drag-tap", "continuous_update": true, "description": "offset0", "description_allow_html": false, "disabled": false, "layout": "IPY_MODEL_ec2903d56f6e4a0a84ded12877fcce2d", "max": 14.0, "min": -14.0, "orientation": "horizontal", "readout": true, "readout_format": ".2f", "step": 0.001, "style": "IPY_MODEL_5300146768e0498d9ab6aa182647e5d7", "tabbable": null, "tooltip": null, "value": 0.0 } }, "046b60f025b740fa8ec97c453385982b": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_70463f40a574464299046f000cf50494", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "06c82428551a4fe5b4d3373654714f1d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "VBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "VBoxView", "box_style": "", "children": [ "IPY_MODEL_11a06b4b9bb649efb8796f95bc0f317b", "IPY_MODEL_94c4c55e88454b899071064be0b901dd" ], "layout": "IPY_MODEL_99a7b8dd209141edb278086d15bbec59", "tabbable": null, "tooltip": null } }, "0cd8270595d94a2ba0bb55a527f4d758": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "FloatSliderView", "behavior": "drag-tap", "continuous_update": true, "description": "gain_ratio", "description_allow_html": false, "disabled": false, "layout": "IPY_MODEL_ac57519a35f3491a87f120fa2c48f004", "max": 1.1, "min": 0.9, "orientation": "horizontal", "readout": true, "readout_format": ".2f", "step": 0.001, "style": "IPY_MODEL_cf5550d05fad4160865dbd676a0de901", "tabbable": null, "tooltip": null, "value": 0.9 } }, "11a06b4b9bb649efb8796f95bc0f317b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "FloatSliderView", "behavior": "drag-tap", "continuous_update": true, "description": "offset1", "description_allow_html": false, "disabled": false, "layout": "IPY_MODEL_2427ebb8d4b14bcdaf036ce50b8d7629", "max": 14.0, "min": -14.0, "orientation": "horizontal", "readout": true, "readout_format": ".2f", "step": 0.001, "style": "IPY_MODEL_cf54590660d84aa59ea1b37661d7e5eb", "tabbable": null, "tooltip": null, "value": 0.0 } }, "13195b21d132487d98f21113c873b28a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "SliderStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "SliderStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "description_width": "", "handle_color": null } }, "14c4a418753e4955a136cc5c4dc25a12": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "VBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "VBoxView", "box_style": "", "children": [ "IPY_MODEL_0cd8270595d94a2ba0bb55a527f4d758", "IPY_MODEL_001a27467a3040efa6a8783f78fff77d" ], "layout": "IPY_MODEL_af3051ee56204ef9b96bdfeb14c7578f", "tabbable": null, "tooltip": null } }, "1b6c01288d094684af739ecde40f191d": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_8f555a89002e4b2e9c3a1ff90bc86e73", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "2427ebb8d4b14bcdaf036ce50b8d7629": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "1200px" } }, "251e2cbb6b9e456abe3b72726430f93d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4cdfa993941d40eaa6d6cff1adb77fc7": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "5300146768e0498d9ab6aa182647e5d7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "SliderStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "SliderStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "description_width": "", "handle_color": null } }, "70463f40a574464299046f000cf50494": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7431aef8109c47b4b8732102dcafc36b": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "81c654a78490404da48c2e8b2059148d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "1200px" } }, "8f1adc3bce2541888f27eeb38d4e3062": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "VBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "VBoxView", "box_style": "", "children": [ "IPY_MODEL_00e65e977e594fca9fe7547f2b7d7881", "IPY_MODEL_1b6c01288d094684af739ecde40f191d" ], "layout": "IPY_MODEL_4cdfa993941d40eaa6d6cff1adb77fc7", "tabbable": null, "tooltip": null } }, "8f555a89002e4b2e9c3a1ff90bc86e73": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "94c4c55e88454b899071064be0b901dd": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_251e2cbb6b9e456abe3b72726430f93d", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "99a7b8dd209141edb278086d15bbec59": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "ac57519a35f3491a87f120fa2c48f004": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "1200px" } }, "af3051ee56204ef9b96bdfeb14c7578f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b33005b0c7264eaebf0e3ff82b9d36e9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "VBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "VBoxView", "box_style": "", "children": [ "IPY_MODEL_f1d2ab2d9f2447e08562f2ecfc79974e", "IPY_MODEL_046b60f025b740fa8ec97c453385982b" ], "layout": "IPY_MODEL_7431aef8109c47b4b8732102dcafc36b", "tabbable": null, "tooltip": null } }, "c440bc0655224188b5c4990d8d19e4d5": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "cf54590660d84aa59ea1b37661d7e5eb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "SliderStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "SliderStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "description_width": "", "handle_color": null } }, "cf5550d05fad4160865dbd676a0de901": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "SliderStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "SliderStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "StyleView", "description_width": "", "handle_color": null } }, "ec2903d56f6e4a0a84ded12877fcce2d": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "2.0.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "2.0.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border_bottom": null, "border_left": null, "border_right": null, "border_top": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "1200px" } }, "f1d2ab2d9f2447e08562f2ecfc79974e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "FloatSliderView", "behavior": "drag-tap", "continuous_update": true, "description": "phase_offset", "description_allow_html": false, "disabled": false, "layout": "IPY_MODEL_81c654a78490404da48c2e8b2059148d", "max": 45.0, "min": -45.0, "orientation": "horizontal", "readout": true, "readout_format": ".2f", "step": 0.001, "style": "IPY_MODEL_13195b21d132487d98f21113c873b28a", "tabbable": null, "tooltip": null, "value": 0.0 } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }