diff --git a/README.rst b/README.rst
index 0a636754364..89a55d6cd64 100644
--- a/README.rst
+++ b/README.rst
@@ -52,6 +52,19 @@ Go to the directory ``docs`` and
This generate a webpage, index.html, in ``docs/_build/html`` with the
rendered html.
+QCoDeS Loop
+===========
+
+The modules ``qcodes.data``, ``qcodes.plots``, ``qcodes.actions``,
+``qcodes.loops``, ``qcodes.measure``, ``qcodes.extensions.slack``
+and ``qcodes.utils.magic`` that were part of QCoDeS until version 0.37.0.
+have been moved into an independent package called qcodes_loop.
+Please see it's `repository `_ for more information.
+
+For the time being it is possible to automatically install the qcodes_loop
+package when installing qcodes by executing ``pip install qcodes[loop]``.
+
Code of Conduct
===============
diff --git a/docs/api/actions.rst b/docs/api/actions.rst
deleted file mode 100644
index 61055b629bf..00000000000
--- a/docs/api/actions.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.actions
-==============
-
-.. automodule:: qcodes.actions
- :members:
diff --git a/docs/api/data/data_array.rst b/docs/api/data/data_array.rst
deleted file mode 100644
index 46289f96f8f..00000000000
--- a/docs/api/data/data_array.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.data.data_array
-----------------------
-
-.. automodule:: qcodes.data.data_array
- :members:
diff --git a/docs/api/data/data_set.rst b/docs/api/data/data_set.rst
deleted file mode 100644
index d1341abadce..00000000000
--- a/docs/api/data/data_set.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.data.data_set
---------------------
-
-.. automodule:: qcodes.data.data_set
- :members:
diff --git a/docs/api/data/format.rst b/docs/api/data/format.rst
deleted file mode 100644
index b73f5adf9df..00000000000
--- a/docs/api/data/format.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.data.format
-------------------
-
-.. automodule:: qcodes.data.format
- :members:
diff --git a/docs/api/data/gnuplot_format.rst b/docs/api/data/gnuplot_format.rst
deleted file mode 100644
index 455504ef0cf..00000000000
--- a/docs/api/data/gnuplot_format.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.data.gnuplot_format
---------------------------
-
-.. automodule:: qcodes.data.gnuplot_format
- :members:
diff --git a/docs/api/data/hdf5_format.rst b/docs/api/data/hdf5_format.rst
deleted file mode 100644
index 855925fc7ff..00000000000
--- a/docs/api/data/hdf5_format.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.data.hdf5_format
------------------------
-
-.. automodule:: qcodes.data.hdf5_format
- :members:
diff --git a/docs/api/data/hdf5_format_hickle.rst b/docs/api/data/hdf5_format_hickle.rst
deleted file mode 100644
index f2a0ce2bae1..00000000000
--- a/docs/api/data/hdf5_format_hickle.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.data.hdf5_format_hickle
-------------------------------
-
-.. automodule:: qcodes.data.hdf5_format_hickle
- :members:
diff --git a/docs/api/data/index.rst b/docs/api/data/index.rst
deleted file mode 100644
index e5e2436f523..00000000000
--- a/docs/api/data/index.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-.. _legacydata_api :
-
-qcodes.data
-===========
-
-.. autosummary::
-
- qcodes.data
- qcodes.data.data_array
- qcodes.data.data_set
- qcodes.data.format
- qcodes.data.gnuplot_format
- qcodes.data.hdf5_format
- qcodes.data.hdf5_format_hickle
- qcodes.data.io
- qcodes.data.location
-
-
-.. automodule:: qcodes.data
-
-
-.. toctree::
- :maxdepth: 4
- :hidden:
-
- data_array
- data_set
- format
- gnuplot_format
- hdf5_format
- hdf5_format_hickle
- io
- location
diff --git a/docs/api/data/io.rst b/docs/api/data/io.rst
deleted file mode 100644
index 1822267fa29..00000000000
--- a/docs/api/data/io.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.data.io
---------------
-
-.. automodule:: qcodes.data.io
- :members:
diff --git a/docs/api/data/location.rst b/docs/api/data/location.rst
deleted file mode 100644
index 8de6c283ae2..00000000000
--- a/docs/api/data/location.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.data.location
---------------------
-
-.. automodule:: qcodes.data.location
- :members:
diff --git a/docs/api/extensions/slack.rst b/docs/api/extensions/slack.rst
deleted file mode 100644
index 293478c64f6..00000000000
--- a/docs/api/extensions/slack.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-qcodes.extensions.slack
------------------------
-
-.. automodule:: qcodes.extensions.slack
- :no-inherited-members:
- :autosummary:
diff --git a/docs/api/index.rst b/docs/api/index.rst
index e9c68d175a6..e5f60b68a14 100644
--- a/docs/api/index.rst
+++ b/docs/api/index.rst
@@ -4,9 +4,6 @@ QCoDes API documentation
========================
This page documents the QCoDes API. This page contains documentation of all user facing modules.
-A few of our modules are considered legacy and documented separately below.
-This is split in roughly one page per QCoDeS submodule. A few of the submodules have been split for
-additional clarity.
QCoDeS API
@@ -31,18 +28,3 @@ QCoDeS API
station
utils/index
validators/index
-
-Legacy API
-----------
-
-.. toctree::
- :maxdepth: 2
- :includehidden:
-
- loops
- actions
- measure
- data/index
- extensions/slack
- plots/index
- utils/magic
diff --git a/docs/api/loops.rst b/docs/api/loops.rst
deleted file mode 100644
index 7522d1ad0aa..00000000000
--- a/docs/api/loops.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-.. _loops_api :
-
-qcodes.loops
-============
-
-.. automodule:: qcodes.loops
- :members:
diff --git a/docs/api/measure.rst b/docs/api/measure.rst
deleted file mode 100644
index 4f06b8f961f..00000000000
--- a/docs/api/measure.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.measure
-==============
-
-.. automodule:: qcodes.measure
- :members:
diff --git a/docs/api/plots/base.rst b/docs/api/plots/base.rst
deleted file mode 100644
index f62b35be0a8..00000000000
--- a/docs/api/plots/base.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.plots.base
------------------
-
-.. automodule:: qcodes.plots.base
- :members:
diff --git a/docs/api/plots/colors.rst b/docs/api/plots/colors.rst
deleted file mode 100644
index b6959d9f5ba..00000000000
--- a/docs/api/plots/colors.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.plots.colors
--------------------
-
-.. automodule:: qcodes.plots.colors
- :members:
diff --git a/docs/api/plots/index.rst b/docs/api/plots/index.rst
deleted file mode 100644
index 0942b318c4e..00000000000
--- a/docs/api/plots/index.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-.. _plots_api :
-
-qcodes.plots
-============
-
-
-.. autosummary::
-
- qcodes.plots
- qcodes.plots.base
- qcodes.plots.colors
- qcodes.plots.pyqtgraph
- qcodes.plots.qcmatplotlib
-
-.. automodule:: qcodes.plots
-
-
-.. toctree::
- :maxdepth: 4
- :hidden:
-
- base
- colors
- pyqtgraph
- qcmatplotlib
diff --git a/docs/api/plots/pyqtgraph.rst b/docs/api/plots/pyqtgraph.rst
deleted file mode 100644
index 6c44b0b5608..00000000000
--- a/docs/api/plots/pyqtgraph.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.plots.pyqtgraph
-----------------------
-
-.. automodule:: qcodes.plots.pyqtgraph
- :members:
diff --git a/docs/api/plots/qcmatplotlib.rst b/docs/api/plots/qcmatplotlib.rst
deleted file mode 100644
index 4f8798b6c85..00000000000
--- a/docs/api/plots/qcmatplotlib.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-qcodes.plots.qcmatplotlib
--------------------------
-
-.. automodule:: qcodes.plots.qcmatplotlib
- :members:
diff --git a/docs/api/utils/magic.rst b/docs/api/utils/magic.rst
deleted file mode 100644
index 714ac192896..00000000000
--- a/docs/api/utils/magic.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-qcodes.utils.magic
-------------------
-
-.. automodule:: qcodes.utils.magic
- :no-inherited-members:
- :autosummary:
diff --git a/docs/changes/newsfragments/4971.breaking b/docs/changes/newsfragments/4971.breaking
new file mode 100644
index 00000000000..fc91ec40800
--- /dev/null
+++ b/docs/changes/newsfragments/4971.breaking
@@ -0,0 +1,12 @@
+The modules ``qcodes_loop.data``, ``qcodes_loop.plots``, ``qcodes_loop.actions``, ``qcodes_loop.loops``,
+``qcodes_loop.measure``, ``qcodes_loop.extensions.slack`` and ``qcodes_loop.utils.magic``,
+``qcodes_loop.utils.qt_helpers`` have been split out into a separate package ``qcodes_loop``.
+The respective modules in QCoDeS do still exist as deprecated aliases to the new modules in ``qcodes_loop``
+but will be removed in a future release. To use the aliases QCoDeS must be installed with the ``loop`` extra e.g.
+you should install ``pip install qcodes[loop]``. If you make use of these modules we recommend updating imports
+to use ``qcodes_loop`` as soon as possible. See the `readme `_ of
+``qcodes_loop`` for more information.
+
+The functions ``qcodes.utils.helpers.tprint`` ``qcodes.utils.helpers.wait_secs`` and
+``qcodes.utils.helpers.foreground_qt_window`` have been removed.
+These helper functions are only used in ``qcodes_loop`` and were moved there.
diff --git a/docs/community/objects.rst b/docs/community/objects.rst
index 5982d693b31..ba9f7539db3 100644
--- a/docs/community/objects.rst
+++ b/docs/community/objects.rst
@@ -3,36 +3,6 @@ Object Hierarchy
.. todo:: make sure it is updated and easy to read.
-Rough linkages:
----------------
-
-In **bold** the containing class creates this object. In *italics* the
-container just holds this object (or class) as a default for derivatives
-to use. Normal text shows the container includes and uses of this object.
-
-- Station
-- Instrument: IPInstrument, VisaInstrument, MockInstrument
-
- - **Parameter**
- - Validator: Anything, Strings, Numbers, Ints, Enum, MultiType
- - **SweepValues**: SweepFixedValues, AdaptiveSweep
- - Function
- - Validator
-
-- **Monitor**
-- *actions*
-- DataManager
-- **DataServer**
-- :ref:`loops_api`
-- actions: Parameter, Task, Wait, (Active)Loop
-- **ActiveLoop**
-
- - **DataSet**
- - **DataArray**
- - **Formatter**: GNUPlotFormat
- - **DiskIO** (may become subclass of IOManager?)
- - **FormatLocation** (a location\_provider)
-
Station
-------
diff --git a/docs/examples/index.rst b/docs/examples/index.rst
index 917aeebb4f5..7d37cf4572a 100644
--- a/docs/examples/index.rst
+++ b/docs/examples/index.rst
@@ -68,14 +68,3 @@ Logging
:glob:
logging/*
-
-
-Legacy examples
----------------
-
-.. include:: legacy/readme.txt
-
-.. toctree::
- :glob:
-
- legacy/*
diff --git a/docs/examples/legacy/Combined Parameters.ipynb b/docs/examples/legacy/Combined Parameters.ipynb
deleted file mode 100644
index edf0f3a34eb..00000000000
--- a/docs/examples/legacy/Combined Parameters.ipynb
+++ /dev/null
@@ -1,452 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Combined Parameters"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Logging hadn't been started.\n",
- "Activating auto-logging. Current session state plus future input saved.\n",
- "Filename : C:\\Users\\a-halakh\\.qcodes\\logs\\command_history.log\n",
- "Mode : append\n",
- "Output logging : True\n",
- "Raw input log : False\n",
- "Timestamping : True\n",
- "State : active\n",
- "Qcodes Logfile : C:\\Users\\a-halakh\\.qcodes\\logs\\200324-28996-qcodes.log\n",
- "False\n"
- ]
- }
- ],
- "source": [
- "import numpy as np\n",
- "\n",
- "import qcodes as qc\n",
- "from qcodes.loops import Loop\n",
- "from qcodes.parameters import ManualParameter\n",
- "from qcodes.validators import Numbers"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "If you want to sweep multiple parameters at once qcodes offers the combine function.\n",
- "You can combine any number of any kind paramter. \n",
- "We'll use a ManualParameter for this example."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "p1 = ManualParameter('p1', vals=Numbers(-10, 10))\n",
- "p2 = ManualParameter('p2', vals=Numbers(-10, 10))\n",
- "p3 = ManualParameter('p3', vals=Numbers(-10, 10))\n",
- "p4 = ManualParameter('p4', vals=Numbers(-10, 10))\n",
- "# set to -1 so we get some data out\n",
- "p4.set(-1)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Simple combined parameters "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "combined = qc.combine(p1, p2, p3, name='combined')\n",
- "\n",
- "sweep_vals = np.array([[1, 1,1], [1, 1,1]])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 2d loop with a inner loop over a combined parameter\n",
- "loop = Loop(p1.sweep(0,10,1)).loop(combined.sweep(sweep_vals), delay=0.001).each(p4)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [],
- "source": [
- "data = loop.get_data_set(name='testsweep')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Started at 2020-03-24 18:35:07\n",
- "DataSet:\n",
- " location = 'data/2020-03-24/#004_testsweep_18-35-07'\n",
- " | | | \n",
- " Setpoint | p1_set | p1 | (11,)\n",
- " Setpoint | combined_set | combined | (11, 2)\n",
- " Measured | p4 | p4 | (11, 2)\n",
- " Measured | p1 | p1 | (11, 2)\n",
- " Measured | p2 | p2 | (11, 2)\n",
- " Measured | p3 | p3 | (11, 2)\n",
- "Finished at 2020-03-24 18:35:07\n"
- ]
- }
- ],
- "source": [
- "data = loop.run()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The combined_set just stores the indices "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "DataArray[11,2]: combined_set\n",
- "array([[0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.],\n",
- " [0., 1.]])\n"
- ]
- }
- ],
- "source": [
- "print(data.combined_set)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "But the acutal set values are saved, but labeled as \"measured\""
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "DataArray[11,2]: p3\n",
- "array([[1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.],\n",
- " [1., 1.]])"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "data.p3"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Combine and aggregate parameters\n",
- "\n",
- "If an aggregator function is given, the aggregated values are saved instead of the indices."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [],
- "source": [
- "# define an aggregator function that takes as arguments the parameters you whish to aggegate\n",
- "def linear(x,y,z):\n",
- " return x+y+z"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [],
- "source": [
- "combined = qc.combine(p1, p2, p3, name='combined', label=\"Sum\", unit=\"a.u\", aggregator=linear)\n",
- "\n",
- "x_vals = np.linspace(1, 2, 2)\n",
- "y_vals = np.linspace(1, 2, 2)\n",
- "z_vals = np.linspace(1, 2, 2)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [],
- "source": [
- "# 2d loop with a inner loop over a combined parameter\n",
- "loop = Loop(p1.sweep(0,10,1)).loop(combined.sweep(x_vals, y_vals, z_vals), delay=0.001).each(p4)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [],
- "source": [
- "data = loop.get_data_set(name='testsweep')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Started at 2020-03-24 18:35:07\n",
- "DataSet:\n",
- " location = 'data/2020-03-24/#005_testsweep_18-35-07'\n",
- " | | | \n",
- " Setpoint | p1_set | p1 | (11,)\n",
- " Setpoint | combined_set | combined | (11, 2)\n",
- " Measured | p4 | p4 | (11, 2)\n",
- " Measured | p1 | p1 | (11, 2)\n",
- " Measured | p2 | p2 | (11, 2)\n",
- " Measured | p3 | p3 | (11, 2)\n",
- "Finished at 2020-03-24 18:35:07\n"
- ]
- }
- ],
- "source": [
- "data = loop.run()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": true
- },
- "source": [
- "the combined_set now stores the aggregated values"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "DataArray[11,2]: combined_set\n",
- "array([[3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.],\n",
- " [3., 6.]])\n"
- ]
- }
- ],
- "source": [
- "print(data.combined_set)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "OrderedDict([('__class__', 'qcodes.instrument.parameter.CombinedParameter'),\n",
- " ('unit', 'a.u'),\n",
- " ('label', 'Sum'),\n",
- " ('full_name', 'combined'),\n",
- " ('aggregator', ''),\n",
- " ('p1',\n",
- " {'value': 2.0,\n",
- " 'raw_value': 2.0,\n",
- " 'ts': '2020-03-24 18:35:07',\n",
- " '__class__': 'qcodes.instrument.parameter.ManualParameter',\n",
- " 'full_name': 'p1',\n",
- " 'post_delay': 0,\n",
- " 'label': 'p1',\n",
- " 'inter_delay': 0,\n",
- " 'vals': '',\n",
- " 'unit': '',\n",
- " 'name': 'p1'}),\n",
- " ('p2',\n",
- " {'value': 2.0,\n",
- " 'raw_value': 2.0,\n",
- " 'ts': '2020-03-24 18:35:07',\n",
- " '__class__': 'qcodes.instrument.parameter.ManualParameter',\n",
- " 'full_name': 'p2',\n",
- " 'post_delay': 0,\n",
- " 'label': 'p2',\n",
- " 'inter_delay': 0,\n",
- " 'vals': '',\n",
- " 'unit': '',\n",
- " 'name': 'p2'}),\n",
- " ('p3',\n",
- " {'value': 2.0,\n",
- " 'raw_value': 2.0,\n",
- " 'ts': '2020-03-24 18:35:07',\n",
- " '__class__': 'qcodes.instrument.parameter.ManualParameter',\n",
- " 'full_name': 'p3',\n",
- " 'post_delay': 0,\n",
- " 'label': 'p3',\n",
- " 'inter_delay': 0,\n",
- " 'vals': '',\n",
- " 'unit': '',\n",
- " 'name': 'p3'})])"
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# snapshot of the combined parameter\n",
- "combined.snapshot()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "kernelspec": {
- "display_name": "Python 3",
- "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.7.5"
- },
- "toc": {
- "base_numbering": 1,
- "nav_menu": {},
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "title_cell": "Table of Contents",
- "title_sidebar": "Contents",
- "toc_cell": false,
- "toc_position": {},
- "toc_section_display": true,
- "toc_window_display": false
- },
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/docs/examples/legacy/Comprehensive Plotting How-To.ipynb b/docs/examples/legacy/Comprehensive Plotting How-To.ipynb
deleted file mode 100644
index 7d24808c5ff..00000000000
--- a/docs/examples/legacy/Comprehensive Plotting How-To.ipynb
+++ /dev/null
@@ -1,756 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Comprehensive Plotting How-To"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Logging hadn't been started.\n",
- "Activating auto-logging. Current session state plus future input saved.\n",
- "Filename : C:\\Users\\a-halakh\\.qcodes\\logs\\command_history.log\n",
- "Mode : append\n",
- "Output logging : True\n",
- "Raw input log : False\n",
- "Timestamping : True\n",
- "State : active\n",
- "Qcodes Logfile : C:\\Users\\a-halakh\\.qcodes\\logs\\200324-17004-qcodes.log\n",
- "False\n"
- ]
- }
- ],
- "source": [
- "import qcodes as qc\n",
- "from qcodes.loops import Loop\n",
- "from qcodes.plots.qcmatplotlib import MatPlot"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Plotting data in QCoDeS can be done using either MatPlot or QTPlot, with matplotlib and pyqtgraph as backends, respectively. \n",
- "MatPlot and QTPlot tailor these plotting backends to QCoDeS, providing many features.\n",
- "For example, when plotting a DataArray in a DataSet, the corresponding ticks, labels, etc. are automatically added to the plot.\n",
- "Both MatPlot and QTPlot support live plotting while a measurement is running.\n",
- "\n",
- "One of the main differences between the two backends is that matplotlib is more strongly integrated with Jupyter Notebook, while pyqtgraph uses the PyQT GUI.\n",
- "For matplotlib, this has the advantage that plots can be displayed within a notebook (though it also has a gui).\n",
- "The advantage of pyqtgraph is that it can be easily embedded in PyQT GUI's.\n",
- "\n",
- "This guide aims to provide a detailed guide on how to use each of the two plotting tools."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "loc_provider = qc.data.location.FormatLocation(fmt='data/{date}/#{counter}_{name}_{time}')\n",
- "qc.data.data_set.DataSet.location_provider = loc_provider"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## MatPlot"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The QCoDeS MatPlot relies on the matplotlib package, which is quite similar to Matlab's plotting tools.\n",
- "It integrates nicely with Jupyter notebook, and as a result, interactive plots can be displayed within a notebook using the following command:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "%matplotlib inline"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Simple 1D sweep"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "As a first example, we perform a simple 1D sweep.\n",
- "We create two trivial parameters, one for measuring a value, and the other for sweeping the value of the measured parameter."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "p_measure = qc.ManualParameter(name='measured_val')\n",
- "p_sweep = qc.Parameter(name='sweep_val', set_cmd=p_measure.set)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Next we perform a measurement, and attach the `update` method of the `plot` object to the loop, resulting in live plotting.\n",
- "Note that the resulting plot automatically has the correct x values and labels."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Started at 2020-03-24 18:39:35\n",
- "DataSet:\n",
- " location = 'data/2020-03-24/#006_test_plotting_1D_18-39-35'\n",
- " | | | \n",
- " Setpoint | sweep_val_set | sweep_val | (21,)\n",
- " Measured | measured_val | measured_val | (21,)\n",
- "Finished at 2020-03-24 18:39:37\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "DataSet:\n",
- " location = 'data/2020-03-24/#006_test_plotting_1D_18-39-35'\n",
- " | | | \n",
- " Setpoint | sweep_val_set | sweep_val | (21,)\n",
- " Measured | measured_val | measured_val | (21,)"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "