Cryoscope experiment

In this section we show how to run a cryoscope experiment using Qibocal.

The goal of the Cryoscope experiment is to reconstruct the shape of the flux pulse sent to the qubit in order to determine correction for signal distortions. To do this we exploit the dependence of the transition frequency of a transmon qubit on the magnetic flux

(1)\[f_Q(\Phi_Q)\approx \frac{1}{h} \left( \sqrt{8E_J E_C \left| \cos\left(\pi\frac{\Phi_Q}{\Phi_0}\right) \right|} - E_C \right)\]

where \(E_C\) is the charging energy, \(E_J\) is the sum of the Jospehson energies and \(\Phi_0\) is the flux quantum. The routine implementation follows the description given in [26]:

Cryoscope

The cryoscope experiment consists of a Ramsey-like experiment where a flux pulse is embedded between the two \(\pi/2\) pulses separated by a fixed time interval \(T\). The first \(\pi /2\) rotation around the \(Y\) axis change the qubit state from \(\ket{0}\) to \(\frac{\ket{0}+\ket{1}}{\sqrt{2}}\); then the flux pulse transforms the qubit state to \(\frac{\ket{0}+e^{i\phi_\tau}\ket{1}}{\sqrt{2}}\) where

(2)\[\frac{\phi_\tau}{2\pi} = \int_0^T \Delta f_Q(\Phi_{Q,\tau}(t))dt\]

Then the experiment is completed with a \(\pi/2\) rotation either around the \(y\) axis or around the \(x\) axis in order to obtain, respectively the \(\langle Y \rangle\) or \(\langle X \rangle\) component of the Bloch vector. From the \(\langle X \rangle\) and \(\langle Y \rangle\) components of the Bloch vector we can derive the relative phase \(\phi_\tau\) which in turn can be used to computed

\[\Delta f_R \equiv \frac{\phi{\tau+\Delta\tau} - \phi_{\tau}}{2\pi \Delta\tau}\]

and then we can extract an estimate of the effective flux pulse \(\Phi_Q(t)\) on the qubit by inverting (1).

Parameters

class qibocal.protocols.flux_dependence.cryoscope.CryoscopeParameters(duration_max: float, flux_pulse_amplitude: float, fir: int, iir: bool, padding_duration: float = 0)[source]

Cryoscope user inputs.

duration_max: float

Maximum flux pulse duration [ns].

flux_pulse_amplitude: float

Flux pulse amplitude.

fir: int

Number of feedforward taps to be optimized after IIR.

iir: bool

Whether an IIR filter should be determined. If False only an FIR filter is determined.

padding_duration: float = 0

Duration in ns of the leading zeros in the flux pulse.

Padding is fixed during the duration sweep and added before the pulse. The waveform consists of padding_duration ns of zeros followed by duration ns of rectangular samples, for a total length of padding_duration + duration.

Useful when hardware enforces a minimum pulse length.

nshots: int

Number of executions on hardware.

relaxation_time: float

Wait time for the qubit to decohere back to the ground state.

Example

A possible runcard to launch a Cryoscope experiment could be the following:

- id: cryoscope

  operation: cryoscope
  parameters:
    duration_max: 80
    flux_pulse_amplitude: 0.7
    fir: 32
    iir: true
    relaxation_time: 50000

The expected output is the following:

../../_images/cryoscope.png

Note

The flux pulse duration is swept one sample at a time, from a single sample up to duration_max. Set iir: false to determine only an FIR filter. On instruments that enforce a minimum pulse duration (e.g. Qblox), use padding_duration to prepend leading zeros to the flux pulse, so that also flux pulses below that limit can be executed.

If no filters are configured, the protocol computes the FIR and IIR filters and updates the platform. If filters are already present, they are left untouched and only the reconstructed waveform is shown. This makes it possible to run the protocol a second time to validate the previously determined filters.

Requirements