qctrlopencontrols.convert_dds_to_driven_control(dynamic_decoupling_sequence, maximum_rabi_rate, maximum_detuning_rate, minimum_segment_duration=0.0, name=None)

Creates a Driven Control based on the supplied DDS and other relevant information.

Currently, pulses that simultaneously contain Rabi and detuning rotations are not supported.


  • dynamic_decoupling_sequence (DynamicDecouplingSequence) – The base DDS. Its offsets should be sorted in ascending order in time.
  • maximum_rabi_rate (float) – Maximum Rabi rate.
  • maximum_detuning_rate (float) – Maximum detuning rate.
  • minimum_segment_duration (float , optional) – If set, further restricts the duration of every segment of the Driven Controls. Defaults to 0, in which case it does not affect the duration of the pulses. Must be greater than or equal to 0, if set.
  • name (str , optional) – Name of the sequence. Defaults to None.


The Driven Control that contains the segments corresponding to the Dynamic Decoupling Sequence operation.

Return type



ArgumentsValueError – Raised when an argument is invalid or a valid driven control cannot be created from the sequence parameters, maximum Rabi rate and maximum detuning rate provided.


Driven pulse is defined as a sequence of control segments. Each segment performs an operation (rotation around one or more axes). While the dynamic decoupling sequence operation contains ideal instant operations, the maximum Rabi (detuning) rate defines a minimum time required to perform a given rotation operation. Therefore, each operation in sequence is converted to a flat-topped control segment with a finite duration. Each offset is taken as the mid-point of the control segment and the width of the segment is determined by (rotation/max_rabi(detuning)_rate).

If the sequence contains operations at either of the extreme ends τ0=0\tau_0=0(duration of the sequence), there will be segments outside the boundary (segments starting before :math:t<0orfinishingafterthesequenceduration or finishing after the sequence duration

Moreover, a check is made to make sure the resulting control segments are non-overlapping.

If appropriate control segments cannot be created, the conversion process raises an ArgumentsValueError.

Was this useful?