Measure_CustomWaveforms#

Module: iqm.pulse.gates.measure

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

Bases: CustomIQWaveforms

Base class for implementing dispersive measurement operations with custom probe pulse waveforms.

You may define a measurement implementation that uses the Waveform instances Something and SomethingElse as the probe pulse waveforms in the I and Q channels as follows: class MyGate(Measure_CustomWaveforms, i_wave=Something, q_wave=SomethingElse).

The measure operation is factorizable, and its arity is 0, which together mean that it can operate on loci of any length, but is calibrated only on single component loci. When the gate is constructed in the len(locus) > 1 case (e.g. builder.get_implementation('measure', ('QB1', 'QB2', 'QB3'))()), the resulting TimeBox is constructed from the calibrated single-component implementations.

For each measured component, the readout IQPulse will be modulated with the intermediate frequency (IF), computed as the difference between the readout frequency of that component and the probe line center frequency, and offset in phase by the readout phase of the component.

The measurement is implemented using a ReadoutTrigger instruction, with a duration set by the requirements of the acquisition(s). Note that this is typically different from gates.measure.constant.{locus}.duration, which is the probe pulse duration.

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

duration_in_seconds

Duration of the Schedule of the gate implementation (in seconds).

get_locus_mapping_name

Get the name of the locus mapping stored in ScheduleBuilder.ChipTopology for this implementation.

probe_timebox

Returns a "naked" probe timebox that supports convenient multiplexing through MultiplexedProbeTimeBox.__add__.

time_trace

Returns a multiplexed simultaneous measurement with an additional time trace acquisition.

Parameters:
root_parameters = {'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=''), '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.

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

Returns a “naked” probe timebox that supports convenient multiplexing through MultiplexedProbeTimeBox.__add__.

This method can be used if the user wants to control the multiplexing explicitly. With two MultiplexedProbeTimeBox``es ``A and B the result A + B has all the ReadoutTrigger instructions on each probe channel of A and B multiplexed together and played simultaneously.

Parameters:
  • key (str) – The readout results generated on this trigger will be assigned to f"{qubit}__{key}", where qubit goes over the component names in self.locus. If empty, the key “readout.result” will be used to maintain backwards compatibility.

  • feedback_key (str) – The signals generated by this measure operation are routed using this key for fast feedback purposes. See __call__().

  • do_acquisition (bool) – if False, no acquisitions are added.

Returns:

MultiplexedProbeTimeBox containing the ReadoutTrigger instruction.

Return type:

TimeBox

time_trace(key='', acquisition_delay=None, acquisition_duration=None, feedback_key='')#

Returns a multiplexed simultaneous measurement with an additional time trace acquisition.

The returned TimeBox is the same as the one returned by __call__() except the time trace acquisition is appended to the acquisitions of each probe line’s ReadoutTrigger instruction.

Parameters:
  • key (str) – Readout results generated on this trigger will be used to assigned to f"{qubit}__{key}", where qubit goes over the component names in self.locus, whereas the recorded time traces will be assigned to f"{probe_line}__{key}" where probe_line goes through all the probe lines associated with self.locus. If empty, the key "readout.result" will be used for integrated results and the key "readout.time_trace" for the recorded time traces.

  • acquisition_delay (float | None) – optionally override the time trace acquisition delay with this value (given in seconds). Does not affect the acqusition delays of the integrated measurements.

  • acquisition_duration (float | None) – optionally override the time trace acquisition duration with this value (given in seconds). Does not affect the integration lengths of the integrated measurements.

  • feedback_key (str) – The signals generated by the integration are routed using this label, prefixed by the component. See __call__().

Returns:

TimeBox containing the ReadoutTrigger instruction.

Return type:

TimeBox

duration_in_seconds()#

Duration of the Schedule of the gate implementation (in seconds).

Can be left unimplemented if the duration e.g. depends on the gate arguments. Subclasses can reimplement this method in case it makes sense in their context.

Return type:

float

classmethod get_locus_mapping_name(operation_name, implementation_name)#

Get the name of the locus mapping stored in ScheduleBuilder.ChipTopology for this implementation.

By default, it is "<operation_name>.<implementation_name>". Inheriting classes may override this for different behaviour.

Parameters:
  • operation_name (str) – name of the quantum operation.

  • implementation_name (str) – name of the implementation

Returns:

name of the locus mapping

Return type:

str

dependent_waves = 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.

Inheritance

Inheritance diagram of iqm.pulse.gates.measure.Measure_CustomWaveforms