# convert_dds_to_driven_control

`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.

### Parameters

**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.

### Returns

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

### Return type

DrivenControls

### Raises

**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.

## Notes

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
$\tau_0=0$ and $\tau_{n+1}=\tau`(duration of the sequence), there will be segments outside the boundary (segments starting before :math:`

t<0$or finishing after the sequence duration$t>\tau$). In these cases, the segments
on either of the extreme ends are shifted appropriately so that their start/end time
falls entirely within the duration of the sequence.

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.