DRAG experiments

In this section we show how to run DRAG experiments using Qibocal

DRAG [7, 19]: pulses can be used to lower both phase and leakage errors. It consists of adding a quadrature component to the pulse which is proportional to the time derivative of the in-phase component. Given a pulse with an in-phase component \(\Omega_x\) the quadrature component \(\Omega_y\) is evaluated as

\[\Omega_y (t) = \beta \frac{d\Omega_x}{dt} ,\]

where \(\beta\) is a scaling parameter.

Qibocal provides two separate protocols to calibrate \(\beta\).

Method 1

\(\beta\) can be extracted by playing the pulse sequence composed of \([R_X(\pi) - R_X(-\pi)]^N\) for different values of \(\beta\) as shown in [28]. The post-processing consists of measuring the probability of \(\ket{0}\) for every \(\beta\) and fitting the curve with a cosine. The correct \(\beta\) value is the one which maximizes the curve.

Parameters

class qibocal.protocols.drag.drag.DragTuningParameters(beta: tuple[float, float, float] | None = None, beta_start: float | None = None, beta_end: float | None = None, beta_step: float | None = None, nflips: int = 1)[source]

DragTuning runcard inputs.

beta: tuple[float, float, float] | None = None

(start, stop, step).

Type:

Tuple of the beta parameters in the form

beta_start: float | None = None

DRAG pulse beta start sweep parameter.

beta_end: float | None = None

DRAG pulse beta end sweep parameter.

beta_step: float | None = None

DRAG pulse beta sweep step parameter.

nflips: int = 1

Repetitions of (Xpi - Xmpi).

property beta_range: tuple[float, float, float]

Return a tuple with the beta sweep (start, end, step).

nshots: int

Number of executions on hardware.

relaxation_time: float

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

Example

- id: drag tuning
  operation: drag_tuning
  parameters:
      beta_start: -1
      beta_end: 1
      beta_step: 0.1
      nflips: 5

Running this protocol you should get something like this:

../../_images/drag_tuning.png

Method 2

The second method consists of playing two different sequences \(R_Y(\pi) R_X(\pi/2)\) and \(R_X(\pi) R_Y(\pi/2)\). These are two of the AllXY sequences which exhibit opposite sign of phase error as highlighted in [25]. The post-processing consists of measuring the probability of \(\ket{1}\) for every \(\beta\) and performing a linear fit for both sequences. The correct \(\beta\) value is the one where the two lines cross.

Parameters

class qibocal.protocols.drag.drag_simple.DragTuningSimpleParameters(beta: tuple[float, float, float] | None = None, beta_start: float | None = None, beta_end: float | None = None, beta_step: float | None = None, nflips: int = 1)[source]

DragTuningSimple runcard inputs.

beta: tuple[float, float, float] | None = None

(start, stop, step).

Type:

Tuple of the beta parameters in the form

beta_end: float | None = None

DRAG pulse beta end sweep parameter.

property beta_range: tuple[float, float, float]

Return a tuple with the beta sweep (start, end, step).

beta_start: float | None = None

DRAG pulse beta start sweep parameter.

beta_step: float | None = None

DRAG pulse beta sweep step parameter.

nflips: int = 1

Repetitions of (Xpi - Xmpi).

nshots: int

Number of executions on hardware.

relaxation_time: float

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

Example

- id: drag simple
  operation: drag_simple
  parameters:
      beta_start: -1
      beta_end: 1
      beta_step: 0.1
../../_images/drag_simple.png

Requirements