Shelved_Measure_CustomWaveforms#

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

Bases: Measure_CustomWaveforms, CompositeGate

Base class for shelved readout.

Shelved readout applies a prx_12(pi) gate before and after a standard dispersive readout on each qubit measured. The first prx_12(pi) swaps the amplitudes of the |1> and |2> states, and the second one swaps them back after the measurement has (roughly) collapsed the state. If the discriminator of the readout is calibrated such that the |0> state is on one side and the |1> and |2> states are on the other, the end result is equivalent to the standard readout operation but with the advantage that the population in the |2> state is less susceptible to \(T_1\) decay during the readout than the population in the |1> state.

Module: iqm.pulse.gates.measure

Attributes

customizable_gates

These member operations can be calibrated separately from their common calibration by adding OCalibrationData nodes for them under the OILCalibrationData node of the composite gate.

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

registered_gates

Names of the member operations used by the composite gate.

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

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

Parameters:
customizable_gates: tuple[str, ...] | None = ('prx_12',)#

These member operations can be calibrated separately from their common calibration by adding OCalibrationData nodes for them under the OILCalibrationData node of the composite gate. Must be a subset of registered_gates. By default all member operations are customizable.

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.

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=''), 'do_prx_12': Setting(parameter=Parameter(name='do_prx_12', label='Whether to do the prx_12 flips in the measure operation', unit='', data_type=<DataType.BOOLEAN: 4>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), value=True, 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), 'second_prx_12_offset': Setting(parameter=Parameter(name='second_prx_12_offset', label='Offset of the second PRX_12 pulse from the end the ReadoutTrigger', unit='s', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None), value=0.0, read_only=False, path='')}#

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

registered_gates: tuple[str, ...] = ('prx_12',)#

Names of the member operations used by the composite gate. There must be corresponding keys in builder.op_table.

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

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

This method can be used if the user wants to control the multiplexing explicitly. Supports adding together boxes of type ShelvedMeasureTimeBox and/or MultiplexedProbeTimeBox. See ShelvedMeasureTimeBox.__add__() for more information on the logic.

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:

ShelvedMeasureTimeBox containing the ReadoutTrigger instruction.

Return type:

TimeBox

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

Utility method that can be overridden in subclasses if they have a return type .probe_pulse.

The ShelvedMeasureTimeBox resulting from probe_timebox() is first scheduled to obtain an atomic MultiplexedProbeTimeBox which is wrapped into a TimeBox.

Parameters:
  • key (str)

  • feedback_key (str)

Return type:

TimeBox