Skip to main contentIBM Quantum Documentation
This page is from an old version of Qiskit SDK. Go to the latest version

Drag

class Drag(duration, amp, sigma, beta, name=None, limit_amplitude=None)

GitHub

Bases: qiskit.pulse.library.symbolic_pulses.SymbolicPulse

The Derivative Removal by Adiabatic Gate (DRAG) pulse is a standard Gaussian pulse with an additional Gaussian derivative component and lifting applied.

It can be calibrated either to reduce the phase error due to virtual population of the 2|2\rangle state during the pulse or to reduce the frequency spectrum of a standard Gaussian pulse near the 12|1\rangle\leftrightarrow|2\rangle transition, reducing the chance of leakage to the 2|2\rangle state.

g(x)=exp(12(xduration/2)2sigma2)g(x)=amp×g(x)g(1)1g(1)f(x)=g(x)×(1+1j×beta×(xduration/2sigma2)),0x<duration\begin{split}g(x) &= \exp\Bigl(-\frac12 \frac{(x - \text{duration}/2)^2}{\text{sigma}^2}\Bigr)\\ g'(x) &= \text{amp}\times\frac{g(x)-g(-1)}{1-g(-1)}\\ f(x) &= g'(x) \times \Bigl(1 + 1j \times \text{beta} \times \Bigl(-\frac{x - \text{duration}/2}{\text{sigma}^2}\Bigr) \Bigr), \quad 0 \le x < \text{duration}\end{split}

where g(x)g(x) is a standard unlifted Gaussian waveform and g(x)g'(x) is the lifted Gaussian waveform.

References

  1. Gambetta, J. M., Motzoi, F., Merkel, S. T. & Wilhelm, F. K. Analytic control methods for high-fidelity unitary operations in a weakly nonlinear oscillator. Phys. Rev. A 83, 012308 (2011).

  2. F. Motzoi, J. M. Gambetta, P. Rebentrost, and F. K. Wilhelm Phys. Rev. Lett. 103, 110501 – Published 8 September 2009.

Create new pulse instance.

Parameters

  • duration (Union[int, ParameterExpression]) – Pulse length in terms of the sampling period dt.
  • amp (Union[complex, ParameterExpression]) – The amplitude of the Drag envelope.
  • sigma (Union[float, ParameterExpression]) – A measure of how wide or narrow the Gaussian peak is; described mathematically in the class docstring.
  • beta (Union[float, ParameterExpression]) – The correction amplitude.
  • name (Optional[str]) – Display name for this pulse envelope.
  • limit_amplitude (Optional[bool]) – If True, then limit the amplitude of the waveform to 1. The default is True and the amplitude is constrained to 1.

Methods

draw

Drag.draw(style=None, backend=None, time_range=None, time_unit='dt', show_waveform_info=True, plotter='mpl2d', axis=None)

Plot the interpolated envelope of pulse.

Parameters

  • style (Optional[Dict[str, Any]]) – Stylesheet options. This can be dictionary or preset stylesheet classes. See IQXStandard, IQXSimple, and IQXDebugging for details of preset stylesheets.

  • backend (Optional[BaseBackend]) – Backend object to play the input pulse program. If provided, the plotter may use to make the visualization hardware aware.

  • time_range (Optional[Tuple[int, int]]) – Set horizontal axis limit. Tuple (tmin, tmax).

  • time_unit (str) – The unit of specified time range either dt or ns. The unit of ns is available only when backend object is provided.

  • show_waveform_info (bool) – Show waveform annotations, i.e. name, of waveforms. Set True to show additional information about waveforms.

  • plotter (str) –

    Name of plotter API to generate an output image. One of following APIs should be specified:

    mpl2d: Matplotlib API for 2D image generation.
        Matplotlib API to generate 2D image. Charts are placed along y axis with
        vertical offset. This API takes matplotlib.axes.Axes as `axis` input.

    axis and style kwargs may depend on the plotter.

  • axis (Optional[Any]) – Arbitrary object passed to the plotter. If this object is provided, the plotters use a given axis instead of internally initializing a figure object. This object format depends on the plotter. See plotter argument for details.

Returns

Visualization output data. The returned data type depends on the plotter. If matplotlib family is specified, this will be a matplotlib.pyplot.Figure data.

get_waveform

Drag.get_waveform()

Return a Waveform with samples filled according to the formula that the pulse represents and the parameter values it contains.

Since the returned array is a discretized time series of the continuous function, this method uses a midpoint sampler. For duration, return:

{f(t+0.5)CtZ0<=t<duration}\{f(t+0.5) \in \mathbb{C} | t \in \mathbb{Z} \wedge 0<=t<\texttt{duration}\}

Return type

Waveform

Returns

A waveform representation of this pulse.

Raises

  • PulseError – When parameters are not assigned.
  • PulseError – When expression for pulse envelope is not assigned.

is_parameterized

Drag.is_parameterized()

Return True iff the instruction is parameterized.

Return type

bool

validate_parameters

Drag.validate_parameters()

Validate parameters.

Raises

PulseError – If the parameters passed are not valid.

Return type

None


Attributes

constraints

Return symbolic expression for the pulse parameter constraints.

Return type

Expr

duration

envelope

Return symbolic expression for the pulse envelope.

Return type

Expr

id

Unique identifier for this pulse.

Return type

int

limit_amplitude

Default value: True

name

parameters

Return type

Dict[str, Any]

pulse_type

Return display name of the pulse shape.

Return type

str

valid_amp_conditions

Return symbolic expression for the pulse amplitude constraints.

Return type

Expr

Was this page helpful?
Report a bug or request content on GitHub.