{ "cells": [ { "cell_type": "markdown", "id": "2ee4064d", "metadata": {}, "source": [ "# Mixer correction\n", "In this tutorial we will demonstrate the ability to compensate for output mixer non-idealities and observe the changes using an oscilloscope.\n", "\n", "Mixer non-idealities can lead to unwanted spurs on the output (LO/RF/IF feedthrough and other spurious products) and they can be compensated by applying adjustments to the I/Q outputs: phase offset, gain ratio and DC offset. This solution applies to both baseband QCM/QRM products using external mixers as well as QCM-RF and QRM-RF products.\n", "\n", "The tutorial is designed for Cluster QRM/QCM baseband. We will adjust all the parameters listed above and observe the changes to the I/Q outputs directly on an oscilloscope.\n", "\n", "For QCM-RF and QRM-RF products, one can also refer to the 'mixer calibration' section of the tutorial on [RF-control](https://qblox-qblox-instruments.readthedocs-hosted.com/en/main/tutorials/q1asm_tutorials/basic/rf/rf_control.html#Mixer-calibration).\n", "\n", "To run this tutorial please make sure you have installed and enabled ipywidgets:\n", "```\n", "pip install ipywidgets\n", "jupyter nbextension enable --py widgetsnbextension\n", "```" ] }, { "cell_type": "markdown", "id": "8e49064b", "metadata": { "tags": [] }, "source": [ "Setup\n", "-----\n", "\n", "First, we are going to import the required packages." ] }, { "cell_type": "code", "execution_count": 1, "id": "69d2a8d9", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:34.032086Z", "iopub.status.busy": "2024-09-02T01:36:34.029837Z", "iopub.status.idle": "2024-09-02T01:36:34.701617Z", "shell.execute_reply": "2024-09-02T01:36:34.700379Z" } }, "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": "b0ba0244", "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://qblox-qblox-instruments.readthedocs-hosted.com/en/main/api_reference/tools.html#api-pnp) for more info)." ] }, { "cell_type": "code", "execution_count": 2, "id": "5e812cf4", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:34.707834Z", "iopub.status.busy": "2024-09-02T01:36:34.706801Z", "iopub.status.idle": "2024-09-02T01:36:37.174381Z", "shell.execute_reply": "2024-09-02T01:36:37.173067Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No devices found\r\n" ] } ], "source": [ "!qblox-pnp list" ] }, { "cell_type": "code", "execution_count": 3, "id": "68ec1f35", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:37.180508Z", "iopub.status.busy": "2024-09-02T01:36:37.179985Z", "iopub.status.idle": "2024-09-02T01:36:37.185846Z", "shell.execute_reply": "2024-09-02T01:36:37.184526Z" } }, "outputs": [], "source": [ "cluster_ip = \"10.10.200.42\"\n", "cluster_name = \"cluster0\"" ] }, { "cell_type": "markdown", "id": "bc48012a", "metadata": {}, "source": [ "### Connect to Cluster\n", "\n", "We now make a connection with the Cluster." ] }, { "cell_type": "code", "execution_count": 4, "id": "5e8a5a37", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:37.193292Z", "iopub.status.busy": "2024-09-02T01:36:37.192536Z", "iopub.status.idle": "2024-09-02T01:36:38.690877Z", "shell.execute_reply": "2024-09-02T01:36:38.689632Z" }, "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", " }\n", " if cluster_ip is None\n", " else None\n", " ),\n", ")" ] }, { "cell_type": "markdown", "id": "195cc0d1", "metadata": { "lines_to_next_cell": 2 }, "source": [ "#### Get connected modules" ] }, { "cell_type": "code", "execution_count": 5, "id": "7e059391", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:38.700573Z", "iopub.status.busy": "2024-09-02T01:36:38.699749Z", "iopub.status.idle": "2024-09-02T01:36:38.706681Z", "shell.execute_reply": "2024-09-02T01:36:38.705712Z" } }, "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": 6, "id": "a467df07", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:38.714129Z", "iopub.status.busy": "2024-09-02T01:36:38.713287Z", "iopub.status.idle": "2024-09-02T01:36:38.745409Z", "shell.execute_reply": "2024-09-02T01:36:38.744184Z" } }, "outputs": [ { "data": { "text/plain": [ "{6: ,\n", " 8: }" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# RF modules\n", "modules = get_connected_modules(cluster, lambda mod: mod.is_rf_type)\n", "modules" ] }, { "cell_type": "code", "execution_count": 7, "id": "ef3bb9e7", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:38.752276Z", "iopub.status.busy": "2024-09-02T01:36:38.751261Z", "iopub.status.idle": "2024-09-02T01:36:38.756324Z", "shell.execute_reply": "2024-09-02T01:36:38.755270Z" }, "lines_to_next_cell": 0 }, "outputs": [], "source": [ "module = modules[8]" ] }, { "cell_type": "markdown", "id": "649e4f55", "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": 8, "id": "d40cbdf1", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:38.773887Z", "iopub.status.busy": "2024-09-02T01:36:38.761810Z", "iopub.status.idle": "2024-09-02T01:36:41.071274Z", "shell.execute_reply": "2024-09-02T01:36:41.070352Z" } }, "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": "ab91b281", "metadata": {}, "source": [ "### Setup Sequencer \n", "\n", "\n", "The easiest way to view the influence of the mixer correction is to mix the NCO sin and cos with I and Q values of 1 (fullscale). The instrument output would be simple sinusoids with a 90[deg] phase offset and identical amplitude.\n", "\n", "We use sequencer 0 to set I and Q values of 1 (fullscale) using DC offset and we mix those with the NCO signals." ] }, { "cell_type": "code", "execution_count": 9, "id": "7496f1a9", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:41.076675Z", "iopub.status.busy": "2024-09-02T01:36:41.076001Z", "iopub.status.idle": "2024-09-02T01:36:41.135254Z", "shell.execute_reply": "2024-09-02T01:36:41.134322Z" }, "lines_to_next_cell": 2 }, "outputs": [], "source": [ "# Program sequence we will not use.\n", "sequence = {\"waveforms\": {}, \"weights\": {}, \"acquisitions\": {}, \"program\": \"stop\"}\n", "with open(\"sequence.json\", \"w\", encoding=\"utf-8\") as file:\n", " json.dump(sequence, file, indent=4)\n", " file.close()\n", "module.sequencer0.sequence(sequence)\n", "\n", "# Program fullscale DC offset on I & Q, turn on NCO and enable modulation.\n", "module.sequencer0.offset_awg_path0(1.0)\n", "module.sequencer0.offset_awg_path1(1.0)\n", "module.sequencer0.nco_freq(10e6)\n", "module.sequencer0.mod_en_awg(True)" ] }, { "cell_type": "markdown", "id": "d4bc7a96", "metadata": { "lines_to_next_cell": 2 }, "source": [ "Control sliders\n", "-----\n", "\n", "Create control sliders for the parameters described in the introduction. 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.\n", "\n", "The sliders cover the valid parameter range. If the code below is modified to input invalid values, the firmware will not program the values.\n", "\n", "Please connect the I/Q outputs ($\\text{O}^{[1-2]}$) to an oscilloscope and set to trigger continuously on the I channel at 0V. Execute the code below, move the sliders and observe the result on the oscilloscope." ] }, { "cell_type": "code", "execution_count": 10, "id": "0b31f5ad", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:41.140094Z", "iopub.status.busy": "2024-09-02T01:36:41.139376Z", "iopub.status.idle": "2024-09-02T01:36:41.265186Z", "shell.execute_reply": "2024-09-02T01:36:41.264078Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "85f3f5e79ec84de08929aa06476854c7", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='Offset I:', max=73.0, min=-84.0, step=0.01), Output(…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7bb6b5c6be864c5b914883671b2b1b5e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='Offset Q:', max=73.0, min=-84.0, step=0.01), Output(…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "486648388fa143c7b6a106d0cc7be36d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatLogSlider(value=1.0, base=2.0, description='Gain ratio:', max=1.0, min=-1.0), Outpu…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5339b37fe6dd4e63a963e7ffb2f44b11", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='Phase offset:', max=45.0, min=-45.0, step=1.0), Outp…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ " 'None'>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def set_offset_I(offset_I: float) -> None:\n", " module.out0_offset_path0(offset_I)\n", " module.arm_sequencer(0)\n", " module.start_sequencer(0)\n", "\n", "\n", "def set_offset_Q(offset_Q: float) -> None:\n", " module.out0_offset_path1(offset_Q)\n", " module.arm_sequencer(0)\n", " module.start_sequencer(0)\n", "\n", "\n", "def set_gain_ratio(gain_ratio: float) -> None:\n", " module.sequencer0.mixer_corr_gain_ratio(gain_ratio)\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", " module.arm_sequencer(0)\n", " module.start_sequencer(0)\n", "\n", "\n", "I_bounds = module.out0_offset_path0.vals.valid_values\n", "interact(\n", " set_offset_I,\n", " offset_I=widgets.FloatSlider(\n", " min=I_bounds[0], max=I_bounds[1], step=0.01, value=0.0, description=\"Offset I:\"\n", " ),\n", ")\n", "\n", "Q_bounds = module.out0_offset_path1.vals.valid_values\n", "interact(\n", " set_offset_Q,\n", " offset_Q=widgets.FloatSlider(\n", " min=Q_bounds[0], max=Q_bounds[1], step=0.01, value=0.0, description=\"Offset Q:\"\n", " ),\n", ")\n", "\n", "# The gain ratio correction is bounded between 1/2 and 2\n", "interact(\n", " set_gain_ratio,\n", " gain_ratio=widgets.FloatLogSlider(\n", " min=-1, max=1, step=0.1, value=1.0, base=2, description=\"Gain ratio:\"\n", " ),\n", ")\n", "\n", "ph_bounds = module.sequencer0.mixer_corr_phase_offset_degree.vals.valid_values\n", "interact(\n", " set_phase_offset,\n", " phase_offset=widgets.FloatSlider(\n", " min=ph_bounds[0], max=ph_bounds[1], step=1.0, value=0.0, description=\"Phase offset:\"\n", " ),\n", ")" ] }, { "cell_type": "markdown", "id": "7aaa5514", "metadata": {}, "source": [ "When tuning the DC offset you might notice that the signal starts \"clipping\". This is caused by the fact that we are already at full-scale, thus any offset takes our signal out of its dynamic range.\n", "\n", "When this happens, the output LEDs on the module turn orange. This, and other LEDs states, are explained in the [troubleshooting](https://qblox-qblox-instruments.readthedocs-hosted.com/en/main/cluster/troubleshooting.html) guide." ] }, { "cell_type": "markdown", "id": "35f56d63", "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": 11, "id": "7b6f86c7", "metadata": { "execution": { "iopub.execute_input": "2024-09-02T01:36:41.270103Z", "iopub.status.busy": "2024-09-02T01:36:41.269751Z", "iopub.status.idle": "2024-09-02T01:36:43.577816Z", "shell.execute_reply": "2024-09-02T01:36:43.576536Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Status: OKAY, Flags: NONE, Slot flags: NONE\n" ] } ], "source": [ "cluster.reset()\n", "print(cluster.get_system_status())" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "tags,-all", "main_language": "python", "notebook_metadata_filter": "-all" }, "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.19" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "00980556fad64a148c08fcd9e0d28d68": { "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 } }, "03ab6b7f76214a2ea93967dd3c51083e": { "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 } }, "06b9d79fa34948759fc9545d1ff6912c": { "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_745a9b3e8dcc4565a966c0c49110afab", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "0c96e383f50a47d5beaa56d5cf458dc0": { "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_ea9d80614838419d851f394c0862f844", "max": 45.0, "min": -45.0, "orientation": "horizontal", "readout": true, "readout_format": ".2f", "step": 1.0, "style": "IPY_MODEL_94de9e52ac9a4e4bb10a35591dc0a753", "tabbable": null, "tooltip": null, "value": 0.0 } }, "0d9235753391423fad7ec1002a2a489a": { "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 } }, "0d94d34f0cde4972a173c41b160e08ad": { "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 } }, "23906fd19e034c93b483ddc97e73d494": { "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_03ab6b7f76214a2ea93967dd3c51083e", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "2e179a9c8dd6415cb40bd5072396d215": { "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 } }, "486648388fa143c7b6a106d0cc7be36d": { "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_dea9b0e430c645a28a95f8b2bf122b3a", "IPY_MODEL_94c2682a16d440a5921661886f6c2b16" ], "layout": "IPY_MODEL_b14c893e9f644c1cb0233564ecbbfcb2", "tabbable": null, "tooltip": null } }, "4e3d6119785447c09d2c3a44e2b587b7": { "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_2e179a9c8dd6415cb40bd5072396d215", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "5339b37fe6dd4e63a963e7ffb2f44b11": { "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_0c96e383f50a47d5beaa56d5cf458dc0", "IPY_MODEL_06b9d79fa34948759fc9545d1ff6912c" ], "layout": "IPY_MODEL_00980556fad64a148c08fcd9e0d28d68", "tabbable": null, "tooltip": null } }, "745a9b3e8dcc4565a966c0c49110afab": { "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 } }, "7bb6b5c6be864c5b914883671b2b1b5e": { "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_9441d3b8be1a4288a863616e8949d2a1", "IPY_MODEL_4e3d6119785447c09d2c3a44e2b587b7" ], "layout": "IPY_MODEL_97d7038e1528407d99c70c859b6d903e", "tabbable": null, "tooltip": null } }, "85f3f5e79ec84de08929aa06476854c7": { "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_9f0a7bf2d8ff4e17b39e6ae742021348", "IPY_MODEL_23906fd19e034c93b483ddc97e73d494" ], "layout": "IPY_MODEL_9abbf09717974441accb335e694b03ac", "tabbable": null, "tooltip": null } }, "8f651766ca534b4d8fb687df415f6773": { "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 } }, "9441d3b8be1a4288a863616e8949d2a1": { "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": "Offset Q:", "description_allow_html": false, "disabled": false, "layout": "IPY_MODEL_d8debea1d4144378938820c8372c692c", "max": 73.0, "min": -84.0, "orientation": "horizontal", "readout": true, "readout_format": ".2f", "step": 0.01, "style": "IPY_MODEL_0d94d34f0cde4972a173c41b160e08ad", "tabbable": null, "tooltip": null, "value": 0.0 } }, "94c2682a16d440a5921661886f6c2b16": { "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_0d9235753391423fad7ec1002a2a489a", "msg_id": "", "outputs": [], "tabbable": null, "tooltip": null } }, "94de9e52ac9a4e4bb10a35591dc0a753": { "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 } }, "962561d92b944e87b9da950e4e0fbdfe": { "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 } }, "97d7038e1528407d99c70c859b6d903e": { "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 } }, "9abbf09717974441accb335e694b03ac": { "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 } }, "9f0a7bf2d8ff4e17b39e6ae742021348": { "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": "Offset I:", "description_allow_html": false, "disabled": false, "layout": "IPY_MODEL_dfd22f49ee10415baf71524f99948945", "max": 73.0, "min": -84.0, "orientation": "horizontal", "readout": true, "readout_format": ".2f", "step": 0.01, "style": "IPY_MODEL_962561d92b944e87b9da950e4e0fbdfe", "tabbable": null, "tooltip": null, "value": 0.0 } }, "b14c893e9f644c1cb0233564ecbbfcb2": { "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 } }, "d8debea1d4144378938820c8372c692c": { "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 } }, "dea9b0e430c645a28a95f8b2bf122b3a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "FloatLogSliderModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "2.0.0", "_model_name": "FloatLogSliderModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "2.0.0", "_view_name": "FloatLogSliderView", "base": 2.0, "behavior": "drag-tap", "continuous_update": true, "description": "Gain ratio:", "description_allow_html": false, "disabled": false, "layout": "IPY_MODEL_e6533ce95361449c87b5fe1dee3722e1", "max": 1.0, "min": -1.0, "orientation": "horizontal", "readout": true, "readout_format": ".3g", "step": 0.1, "style": "IPY_MODEL_8f651766ca534b4d8fb687df415f6773", "tabbable": null, "tooltip": null, "value": 1.0 } }, "dfd22f49ee10415baf71524f99948945": { "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 } }, "e6533ce95361449c87b5fe1dee3722e1": { "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 } }, "ea9d80614838419d851f394c0862f844": { "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 } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }