plot_controls

qctrlvisualizer.plot_controls(controls, polar=True, smooth=False, unit_symbol='Hz', two_pi_factor=True, *, figure=None)

Create a plot of the specified controls.

Parameters:
  • controls (dict) – The dictionary of controls to plot. The keys should be the names of the controls, and the values represent the pulse by either (1) a dictionary with the ‘durations’ and ‘values’ for that control, or (2) a list of segments, each a dictionary with ‘duration’ and ‘value’ keys. The durations must be in seconds and the values (possibly complex) in the units specified by unit_symbol.

  • polar (bool, optional) – The mode of the plot when the values appear to be complex numbers. Plot magnitude and angle in two figures if set to True, otherwise plot I and Q in two figures. Defaults to True.

  • smooth (bool, optional) – Whether to plot the controls as samples joined by straight lines, rather than as piecewise-constant segments. Defaults to False.

  • unit_symbol (str, optional) – The symbol of the unit to which the controls values correspond. Defaults to “Hz”.

  • two_pi_factor (bool, optional) – Whether the values of the controls should be divided by 2π in the plots. Defaults to True.

  • figure (matplotlib.figure.Figure, optional) – A matplotlib Figure in which to place the plots. If passed, its dimensions and axes will be overridden.

Notes

As an example, the following are valid (and equivalent) control inputs

controls = {
    "Clock": {"durations": [1.0, 1.0, 2.0], "values": [-0.5, 0.5, -1.5]},
    "Microwave": {"durations": [0.5, 1.0], "values": [0.5 + 1.5j, 0.2 - 0.3j]},
}

controls = {
    "Clock": [
        {"duration": 1.0, "value": -0.5},
        {"duration": 1.0, "value": 0.5},
        {"duration": 2.0, "value": -1.5},
    ],
    "Microwave": [
        {"duration": 0.5, "value": 0.5 + 1.5j},
        {"duration": 1.0, "value": 0.2 - 0.3j},
    ],
}

Examples

Plot a linear ramp and a Gaussian pulse.

import numpy as np
from qctrl import Qctrl
from qctrlvisualizer import plot_controls

qctrl = Qctrl()

duration = 10e-6  # s
time_step = 0.01e-6  # s

amplitude = 2 * np.pi * 10e6  # Hz
drag_gaussian = 0.2

linear_ramp = qctrl.signals.linear_ramp(duration=duration, end_value=amplitude / 2)
gaussian_pulse = qctrl.signals.gaussian_pulse(
    duration=duration, amplitude=amplitude, drag=drag_gaussian
)

controls = {
    "Linear ramp": {
        "durations": np.full(int(duration / time_step), time_step),
        "values": linear_ramp.export_with_time_step(time_step),
    },
    "Gaussian": {
        "durations": np.full(int(duration / time_step), time_step),
        "values": gaussian_pulse.export_with_time_step(time_step),
    },
}

plot_controls(controls, polar=False)
../_images/plot_controls-1.png