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.