DrivenControl

class qctrlopencontrols.DrivenControl(durations: numpy.ndarray, rabi_rates: Optional[numpy.ndarray] = None, azimuthal_angles: Optional[numpy.ndarray] = None, detunings: Optional[numpy.ndarray] = None, name: Optional[str] = None)[source]

A piecewise-constant driven control for a single qubit.

Parameters
  • durations (np.ndarray) – The durations \(\{\delta t_n\}\) for each segment, in units of seconds. Every element must be positive. Represented as a 1D array of length \(N\), where \(N\) is number of segments.

  • rabi_rates (np.ndarray, optional) – The Rabi rates \(\{\Omega_n\}\) for each segment, in units of radians per second. Every element must be non-negative. Represented as a 1D array of length \(N\), where \(N\) is number of segments. You can omit this field if the Rabi rate is zero on all segments.

  • azimuthal_angles (np.ndarray, optional) – The azimuthal angles \(\{\phi_n\}\) for each segment. Represented as a 1D array of length \(N\), where \(N\) is number of segments. You can omit this field if the azimuthal angle is zero on all segments.

  • detunings (np.ndarray, optional) – The detunings \(\{\Delta_n\}\) for each segment, in units of radians per second. Represented as a 1D array of length \(N\), where \(N\) is number of segments. You can omit this field if the detuning is zero on all segments.

  • name (string, optional) – An optional string to name the control. Defaults to None.

Notes

This class represents a control for a single driven qubit with Hamiltonian:

\[H(t) = \frac{1}{2}\left(\Omega(t) e^{i\phi(t)} \sigma_- + \Omega(t) e^{-i\phi(t)}\sigma_+\right) + \frac{1}{2}\Delta(t)\sigma_z,\]

where \(\Omega(t)\) is the Rabi rate, \(\phi(t)\) is the azimuthal angle (or drive phase), \(\Delta(t)\) is the detuning, \(\sigma_\pm = (\sigma_x \mp \sigma_y)/2\), and \(\sigma_k\) are the Pauli matrices.

The controls are piecewise-constant, meaning \(\Omega(t)=\Omega_n\) for \(t_{n-1}\leq t<t_n\), where \(t_0=0\) and \(t_n=t_{n-1}+\delta t_n\) (and similarly for \(\phi(t)\) and \(\Delta(t)\)).

For each segment of the control, the constant Hamiltonian effects unitary time evolution of the form:

\[U_n = \exp\left[-i\frac{\theta_n}{2} (\mathbf u_n\cdot\boldsymbol \sigma)\right],\]

where \(\theta_n = \sqrt{\Omega_n^2+\Delta_n^2}\delta t_n\), \(\mathbf u_n\) is the unit vector in the direction \((\Omega_n\cos\phi_n, \Omega_n\sin\phi_n, \Delta_n)\), and \(\boldsymbol\sigma=(\sigma_x, \sigma_y, \sigma_z)\). This unitary time evolution corresponds to a rotation of the Bloch sphere of an angle \(\theta_n\) about the axis \(\mathbf u_n\).

Methods

export

Returns a dictionary formatted for plotting using the qctrl-visualizer package.

export_to_file

Prepares and saves the driven control in a file.

Attributes

amplitude_x

Returns the x-amplitude.

amplitude_y

Returns the y-amplitude.

angles

Returns the Bloch sphere rotation angles.

directions

Returns the Bloch sphere rotation directions.

duration

Returns the total duration of the control.

maximum_detuning

Returns the maximum detuning of the control.

maximum_duration

Returns the duration of the longest control segment.

maximum_rabi_rate

Returns the maximum Rabi rate of the control.

minimum_duration

Returns the duration of the shortest control segment.

number_of_segments

Returns the number of segments.

times

Returns the boundary times of the control segments.