Fast_Measure_CustomWaveforms#

class iqm.pulse.gates.measure.Fast_Measure_CustomWaveforms(parent, name, locus, calibration_data, builder)#

Bases: Measure_CustomWaveforms

Measure implementation that blocks locus qubits for a shorter duration than the probes.

The locus qubits are blocked only for the physical probe pulse duration plus (calibratable) extra dead time that can be used to take into account e.g. ring down delay of waiting the readout resonator to empty itself. The probe channels are still blocked as in Measure_CustomWaveforms, i.e. for the duration of acquisition_delay + integration_length + integration_dead_time.

Module: iqm.pulse.gates.measure

Attributes

dependent_waves

If set True, the Q channel waveform is considered to depend on the I channel's waveform so that they share the waveform parameters, (e.g. a DRAG PRX implementation).

root_parameters

Parameters independent of the of Waveforms.

wave_i

Waveform for the I channel.

wave_q

Waveform for the Q channel.

id

Unique str identifier, needed for certain caching properties.

sub_implementations

Single-component sub-implementations for factorizable gates with len(locus) > 1, otherwise empty.

Methods

probe_timebox

Otherwise the same as Measure_CustomWaveforms.probe_timebox, but returns two TimeBoxes, the actual MultiplexedProbeTimeBox and the rest of the probe-blocking wait time in its own TimeBox.

Parameters:
root_parameters: dict[str, Parameter | Setting] = {'acquisition_delay': Parameter(name='', label='Acquisition delay', unit='s', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), 'acquisition_type': Setting(parameter=Parameter(name='', label='Acquisition type', unit='', data_type=<DataType.STRING: 3>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), value='threshold', read_only=False, path=''), 'amplitude_i': Parameter(name='', label='Readout channel I amplitude', unit='', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), 'amplitude_q': Setting(parameter=Parameter(name='', label='Readout channel Q amplitude', unit='', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), value=0.0, read_only=False, path=''), 'duration': Parameter(name='', label='Readout pulse duration', unit='s', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), 'frequency': Parameter(name='', label='Readout pulse frequency', unit='Hz', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), 'integration_length': Parameter(name='', label='Integration length', unit='s', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), 'integration_threshold': Parameter(name='', label='Integration threshold', unit='', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), 'integration_weights_I': Setting(parameter=Parameter(name='', label='Integration weights for channel I', unit='', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.NDARRAY: 2>, element_indices=None), value=array([], dtype=float64), read_only=False, path=''), 'integration_weights_Q': Setting(parameter=Parameter(name='', label='Integration weights for channel Q', unit='', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.NDARRAY: 2>, element_indices=None), value=array([], dtype=float64), read_only=False, path=''), 'locus_deadtime': Setting(parameter=Parameter(name='locus_deadtime', label='Locus dead time after the probe pulse', unit='s', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), value=0.0, read_only=False, path=''), 'phase': Parameter(name='', label='Readout pulse phase', unit='rad', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None)}#

Parameters independent of the of Waveforms. Inheriting classes may override this to include parameters common to all such implementations.

dependent_waves: bool = True#

If set True, the Q channel waveform is considered to depend on the I channel’s waveform so that they share the waveform parameters, (e.g. a DRAG PRX implementation). If not provided, will be initialised as True.

probe_timebox(key='', feedback_key='', do_acquisition=True, **kwargs)#

Otherwise the same as Measure_CustomWaveforms.probe_timebox, but returns two TimeBoxes, the actual MultiplexedProbeTimeBox and the rest of the probe-blocking wait time in its own TimeBox. This allows the “tetris logic” in scheduling to block the locus qubits for a shorter duration.

Parameters:
  • key (str)

  • feedback_key (str)

  • do_acquisition (bool)

Return type:

ProbeTimeBoxes

_call(key='', feedback_key='')#

The same as Measure_CustomWaveforms._call, i.e. wrap the “naked” multiplexable probe_timeboxes into a composite TimeBox.

Parameters:
  • key (str)

  • feedback_key (str)

Return type:

list[TimeBox]

_get_probe_timebox_for_time_trace(key='', feedback_key='')#

Get the probe TimeBox for TimeTrace. This is just a single MultiplexedProbeTimeBox which has the full probe duration (including integration). The faster logic wrt. qubit blocking is not important in the context of TimeTraces.

Parameters:
  • key (str)

  • feedback_key (str)

Return type:

TimeBox