Analysis helpers#

Calibration points autodetection#

In this ideal scenario, if the datapoints indicated by the indices correspond to the calibration points, then these points will be located on the extremities of a “segment” on the IQ plane.

import matplotlib.pyplot as plt
import numpy as np

from quantify_core.analysis.calibration import has_calibration_points
from quantify_core.utilities.examples_support import mk_iq_shots


def _with_cal(data_):
    return np.concatenate((data_, (center_0, center_1)))


def _print(ax_, data_):
    ax_.set_title(
        f"W/out cal.: {has_calibration_points(data_)}\n"
        f"With cal.: {has_calibration_points(_with_cal(data_))}"
    )


fig, ((ax0, ax1), (ax2, ax3)) = plt.subplots(
    2, 2, figsize=(10, 10 / 1.6), sharex=True, sharey=True
)

center_0, center_1, center_2 = 0.6 + 1.2j, -0.2 + 0.5j, 0 + 1.5j
NUM_SHOTS = 50

data = mk_iq_shots(
    NUM_SHOTS,
    sigmas=[0.1] * 2,
    centers=(center_0, center_1),
    probabilities=[0.3, 1 - 0.3],
)

ax0.plot(data.real, data.imag, "o", label="Shots")
_print(ax0, data)

data = mk_iq_shots(
    NUM_SHOTS,
    sigmas=[0.1] * 3,
    centers=(center_0, center_1, center_2),
    probabilities=[0.35, 0.35, 1 - 0.35 - 0.35],
)
ax1.plot(data.real, data.imag, "o", label="Shots")
_print(ax1, data)

data = mk_iq_shots(
    NUM_SHOTS,
    sigmas=[0.1],
    centers=(center_0,),
    probabilities=[1],
)
ax2.plot(data.real, data.imag, "o", label="Shots")
_print(ax2, data)

data = np.fromiter(
    (
        mk_iq_shots(
            NUM_SHOTS * 2,
            sigmas=[0.5] * 2,
            centers=(center_0, center_1),
            probabilities=[prob, 1 - prob],
        ).mean()
        for prob in np.linspace(0, 1, 35)
    ),
    dtype=complex,
)
ax3.plot(data.real, data.imag, "o", label="Shots")
_print(ax3, data)

for i, ax in enumerate(fig.axes):
    ax.plot(center_0.real, center_0.imag, "^", label="|0>", markersize=10)
    ax.plot(center_1.real, center_1.imag, "d", label="|1>", markersize=10)
    if i == 1:
        ax.plot(
            center_2.real, center_2.imag, "*", label="|2>", markersize=10
        )
    ax.legend()
../_images/52cf5731f039a517f311dc561b8c2f13c1025d54c9b1fc28e6d93fdee20b5d9a.png