{ "cells": [ { "cell_type": "markdown", "id": "72122014-6c4c-4601-983d-80d8c76fe040", "metadata": {}, "source": [ "(howto-measurement-control)=\n", "# Measurement Control" ] }, { "cell_type": "markdown", "id": "6b2e8468-e728-4b11-80b4-1c28996f6e28", "metadata": {}, "source": [ "We first prepare some utilities necessarily for the examples." ] }, { "cell_type": "code", "execution_count": null, "id": "65323c9f-9091-4072-a131-0a4d53378325", "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import xarray as xr\n", "from qcodes import ManualParameter, Parameter\n", "\n", "import quantify_core.data.handling as dh\n", "from quantify_core.measurement import MeasurementControl\n", "\n", "dh.set_datadir(Path.home() / \"quantify-data\")\n", "meas_ctrl = MeasurementControl(\"meas_ctrl\")\n", "\n", "par0 = ManualParameter(name=\"x0\", label=\"X0\", unit=\"s\")\n", "par1 = ManualParameter(name=\"x1\", label=\"X1\", unit=\"s\")\n", "par2 = ManualParameter(name=\"x2\", label=\"X2\", unit=\"s\")\n", "par3 = ManualParameter(name=\"x3\", label=\"X3\", unit=\"s\")\n", "sig = Parameter(name=\"sig\", label=\"Signal\", unit=\"V\", get_cmd=lambda: np.exp(par0()))" ] }, { "cell_type": "markdown", "id": "510fc568-e50e-41d0-9f2e-c123d709ad68", "metadata": {}, "source": [ "## Comparing iterative and batched execution loop" ] }, { "cell_type": "markdown", "id": "e3c18895-ff87-4966-bb07-834a81877a46", "metadata": {}, "source": [ "### Iterative settables only" ] }, { "cell_type": "code", "execution_count": null, "id": "47e22edf-598f-47f0-a10a-0329ce520174", "metadata": {}, "outputs": [], "source": [ "par0.batched = False\n", "par1.batched = False\n", "par2.batched = False\n", "\n", "sig.batched = False\n", "\n", "meas_ctrl.settables([par0, par1, par2])\n", "meas_ctrl.setpoints_grid(\n", " [\n", " np.linspace(0, 1, 4),\n", " np.linspace(1, 2, 5),\n", " np.linspace(2, 3, 6),\n", " ]\n", ")\n", "meas_ctrl.gettables(sig)\n", "dset = meas_ctrl.run(\"demo\")\n", "list(xr.plot.line(xi, label=name) for name, xi in dset.coords.items())\n", "plt.gca().legend()" ] }, { "cell_type": "markdown", "id": "6deac28e-9f1b-43ca-bfe2-39c82c343caa", "metadata": {}, "source": [ "### Batched settables only\n", "\n", "Note that the settable with lowest `.batch_size` will be correspond to the innermost loop." ] }, { "cell_type": "code", "execution_count": null, "id": "b6f46886-545d-4073-8199-8de065834071", "metadata": {}, "outputs": [], "source": [ "par0.batched = True\n", "par1.batch_size = 8\n", "par1.batched = True\n", "par1.batch_size = 8\n", "par2.batched = True\n", "par2.batch_size = 4\n", "\n", "sig = Parameter(name=\"sig\", label=\"Signal\", unit=\"V\", get_cmd=lambda: np.exp(par2()))\n", "sig.batched = True\n", "sig.batch_size = 32\n", "\n", "meas_ctrl.settables([par0, par1, par2])\n", "meas_ctrl.setpoints_grid(\n", " [\n", " np.linspace(0, 1, 3),\n", " np.linspace(1, 2, 5),\n", " np.linspace(2, 3, 4),\n", " ]\n", ")\n", "meas_ctrl.gettables(sig)\n", "dset = meas_ctrl.run(\"demo\")\n", "list(xr.plot.line(xi, label=name) for name, xi in dset.coords.items())\n", "plt.gca().legend()" ] }, { "cell_type": "markdown", "id": "f5c4d10c-2875-4bd4-a5b4-fe2fe9d8e37b", "metadata": {}, "source": [ "### Mixed batched and iterative settables\n", "\n", "Note that the settable with lowest `.batch_size` will be correspond to the innermost loop.\n", "Furthermore, the iterative settables will be the outermost loops." ] }, { "cell_type": "code", "execution_count": null, "id": "b86b1bbf-d17c-49d2-8995-3f1c12412df5", "metadata": {}, "outputs": [], "source": [ "par0.batched = False\n", "par1.batched = True\n", "par1.batch_size = 8\n", "par2.batched = False\n", "par3.batched = True\n", "par3.batch_size = 4\n", "\n", "sig = Parameter(name=\"sig\", label=\"Signal\", unit=\"V\", get_cmd=lambda: np.exp(par3()))\n", "sig.batched = True\n", "sig.batch_size = 32\n", "\n", "meas_ctrl.settables([par0, par1, par2, par3])\n", "meas_ctrl.setpoints_grid(\n", " [\n", " np.linspace(0, 1, 3),\n", " np.linspace(1, 2, 5),\n", " np.linspace(2, 3, 4),\n", " np.linspace(3, 4, 6),\n", " ]\n", ")\n", "meas_ctrl.gettables(sig)\n", "dset = meas_ctrl.run(\"demo\")\n", "list(xr.plot.line(xi, label=name) for name, xi in dset.coords.items())\n", "plt.gca().legend()" ] }, { "cell_type": "markdown", "id": "cdc49b08-6f1a-4a69-98bc-5def597987dc", "metadata": {}, "source": [ "(howto-measurement-control-insmon)=\n", "## Instrument Monitor\n", "\n", "You can instantiate an instrument monitor in the following way:" ] }, { "cell_type": "code", "execution_count": null, "id": "b3a74661-0723-4393-babf-064828c831a2", "metadata": {}, "outputs": [], "source": [ "from quantify_core.measurement import MeasurementControl\n", "from quantify_core.visualization import InstrumentMonitor\n", "\n", "instrument_monitor = InstrumentMonitor(\"instrument_monitor\")\n", "# Set True if you want to query the instruments about each parameter\n", "# before updating the window. Can be slow due to communication overhead.\n", "instrument_monitor.update_snapshot(False)" ] } ], "metadata": { "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.16" } }, "nbformat": 4, "nbformat_minor": 5 }