DRAG experiments#

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

DRAG [7, 15]: 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 [21]. 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.DragTuningParameters(beta_start: float, beta_end: float, beta_step: float, unrolling: bool = False, nflips: int = 1)[source]

DragTuning runcard inputs.

beta_start: float

DRAG pulse beta start sweep parameter.

beta_end: float

DRAG pulse beta end sweep parameter.

beta_step: float

DRAG pulse beta sweep step parameter.

unrolling: bool = False

If True it uses sequence unrolling to deploy multiple sequences in a single instrument call. Defaults to False.

nflips: int = 1

Repetitions of (Xpi - Xmpi).

hardware_average: bool = False

By default hardware average will be performed.

nshots: int

Number of executions on hardware.

relaxation_time: float

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

Example#

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

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 [19]. 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_simple.DragTuningSimpleParameters(beta_start: float, beta_end: float, beta_step: float, unrolling: bool = False, nflips: int = 1)[source]

DragTuningSimple runcard inputs.

hardware_average: bool = False

By default hardware average will be performed.

nflips: int = 1

Repetitions of (Xpi - Xmpi).

unrolling: bool = False

If True it uses sequence unrolling to deploy multiple sequences in a single instrument call. Defaults to False.

beta_start: float

DRAG pulse beta start sweep parameter.

beta_end: float

DRAG pulse beta end sweep parameter.

beta_step: float

DRAG pulse beta sweep step parameter.

nshots: int

Number of executions on hardware.

relaxation_time: float

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

Example#

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

Requirements#