acquisition_library =================== .. py:module:: quantify_scheduler.operations.acquisition_library .. autoapi-nested-parse:: Standard acquisition protocols for use with the quantify_scheduler. Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: quantify_scheduler.operations.acquisition_library.AcquisitionOperation quantify_scheduler.operations.acquisition_library.Trace quantify_scheduler.operations.acquisition_library.WeightedIntegratedComplex quantify_scheduler.operations.acquisition_library.SSBIntegrationComplex quantify_scheduler.operations.acquisition_library.ThresholdedAcquisition quantify_scheduler.operations.acquisition_library.NumericalWeightedIntegrationComplex quantify_scheduler.operations.acquisition_library.TriggerCount Functions ~~~~~~~~~ .. autoapisummary:: quantify_scheduler.operations.acquisition_library._is_increasing_at_constant_rate .. py:class:: AcquisitionOperation(name: str) Bases: :py:obj:`quantify_scheduler.Operation` This class is used to help differentiate an acquisition operation from the regular operations. This enables us to use :func:`~.quantify_scheduler.schedules._visualization.pulse_diagram.plot_acquisition_operations` to highlight acquisition pulses in the pulse diagrams. .. py:class:: Trace(duration: float, port: str, clock: str, acq_channel: int = 0, acq_index: int = 0, bin_mode: Union[quantify_scheduler.enums.BinMode, str] = BinMode.AVERAGE, t0: float = 0) Bases: :py:obj:`AcquisitionOperation` The Trace acquisition protocol measures a signal s(t). Creates a new instance of Trace. The Trace acquisition protocol measures a signal s(t). Only processing performed is rescaling and adding units based on a calibrated scale. Values are returned as a raw trace (numpy array of float datatype). Length of this array depends on the sampling rate of the acquisition device. :param port: The acquisition port. :param clock: The clock used to demodulate the acquisition. :param duration: The acquisition duration in seconds. :param acq_channel: The data channel in which the acquisition is stored, is by default 0. Describes the "where" information of the measurement, which typically corresponds to a qubit idx. :param acq_index: The data register in which the acquisition is stored, by default 0. Describes the "when" information of the measurement, used to label or tag individual measurements in a large circuit. Typically corresponds to the setpoints of a schedule (e.g., tau in a T1 experiment). :param bin_mode: Describes what is done when data is written to a register that already contains a value. Options are "append" which appends the result to the list or "average" which stores the weighted average value of the new result and the old register value, by default BinMode.APPEND :param t0: The acquisition start time in seconds, by default 0 .. py:class:: WeightedIntegratedComplex(waveform_a: Dict[str, Any], waveform_b: Dict[str, Any], port: str, clock: str, duration: float, acq_channel: int = 0, acq_index: int = 0, bin_mode: Union[quantify_scheduler.enums.BinMode, str] = BinMode.APPEND, phase: float = 0, t0: float = 0) Bases: :py:obj:`AcquisitionOperation` Weighted integration acquisition protocol on a complex signal in a custom complex window. Creates a new instance of WeightedIntegratedComplex. Weighted integration acquisition protocol on a complex signal in a custom complex window. A weighted integrated acquisition on a complex signal using custom complex windows. Weights are applied as: .. math:: \widetilde{A} = \int ( \mathrm{Re}(S(t))\cdot \mathrm{Re}(W_A(t)) + \mathrm{Im}(S(t))\cdot \mathrm{Im}(W_A(t)) ) \mathrm{d}t .. math:: \widetilde{B} = \int ( \mathrm{Re}(S(t))\cdot \mathrm{Re}(W_B(t)) + \mathrm{Im}(S(t))\cdot \mathrm{Im}(W_B(t)) ) \mathrm{d}t :param waveform_a: The complex waveform used as integration weights :math:`A(t)`. :param waveform_b: The complex waveform used as integration weights :math:`B(t)`. :param port: The acquisition port. :param clock: The clock used to demodulate the acquisition. :param duration: The acquisition duration in seconds. :param acq_channel: The data channel in which the acquisition is stored, by default 0. Describes the "where" information of the measurement, which typically corresponds to a qubit idx. :param acq_index: The data register in which the acquisition is stored, by default 0. Describes the "when" information of the measurement, used to label or tag individual measurements in a large circuit. Typically corresponds to the setpoints of a schedule (e.g., tau in a T1 experiment). :param bin_mode: Describes what is done when data is written to a register that already contains a value. Options are "append" which appends the result to the list or "average" which stores the weighted average value of the new result and the old register value, by default BinMode.APPEND :param phase: The phase of the pulse and acquisition in degrees, by default 0 :param t0: The acquisition start time in seconds, by default 0 :raises NotImplementedError: .. py:class:: SSBIntegrationComplex(port: str, clock: str, duration: float, acq_channel: int = 0, acq_index: int = 0, bin_mode: Union[quantify_scheduler.enums.BinMode, str] = BinMode.AVERAGE, phase: float = 0, t0: float = 0) Bases: :py:obj:`AcquisitionOperation` This class implements a SingleSideBand Integration acquisition protocol with complex results. Creates a new instance of SSBIntegrationComplex. Single Sideband Integration acquisition protocol with complex results. A weighted integrated acquisition on a complex signal using a square window for the acquisition weights. The signal is demodulated using the specified clock, and the square window then effectively specifies an integration window. :param port: The acquisition port. :param clock: The clock used to demodulate the acquisition. :param duration: The acquisition duration in seconds. :param acq_channel: The data channel in which the acquisition is stored, by default 0. Describes the "where" information of the measurement, which typically corresponds to a qubit idx. :param acq_index: The data register in which the acquisition is stored, by default 0. Describes the "when" information of the measurement, used to label or tag individual measurements in a large circuit. Typically corresponds to the setpoints of a schedule (e.g., tau in a T1 experiment). :param bin_mode: Describes what is done when data is written to a register that already contains a value. Options are "append" which appends the result to the list or "average" which stores the weighted average value of the new result and the old register value, by default BinMode.AVERAGE :param phase: The phase of the pulse and acquisition in degrees, by default 0 :param t0: The acquisition start time in seconds, by default 0 .. py:function:: _is_increasing_at_constant_rate(array: Sequence[float]) -> bool Checks whether the array is increasing at a constant rate. An array with size 2 is assumed to be increasing at a constant rate. .. admonition:: Examples .. jupyter-execute:: :hide-code: from quantify_scheduler.operations.acquisition_library import ( _is_increasing_at_constant_rate ) .. jupyter-execute:: assert _is_increasing_at_constant_rate([1,2,3,4]) is True assert _is_increasing_at_constant_rate([1,2,4]) is False assert _is_increasing_at_constant_rate([4,3,2,1]) is False assert _is_increasing_at_constant_rate([1,1,1]) is False assert _is_increasing_at_constant_rate([2,1]) is False assert _is_increasing_at_constant_rate([1]) is False .. py:class:: ThresholdedAcquisition(port: str, clock: str, duration: float, acq_channel: int = 0, acq_index: int = 0, bin_mode: Union[quantify_scheduler.enums.BinMode, str] = BinMode.AVERAGE, phase: float = 0, t0: float = 0) Bases: :py:obj:`AcquisitionOperation` Create a new instance of ThresholdedAcquisition. This acquisition protocol is similar to the :class:`~.SSBIntegrationComplex` acquisition protocol, but the complex result is now rotated and thresholded to produce a "0" or a "1", as controlled by the parameters for rotation angle `.measure.acq_rotation` and threshold value `.measure.acq_threshold` in the device configuration (see example below). The rotation angle and threshold value for each qubit can be set through the device configuration .. admonition:: Note Thresholded acquisition is currently only supported by the Qblox backend. .. admonition:: Examples .. jupyter-execute:: from quantify_scheduler import Schedule from quantify_scheduler.device_under_test.transmon_element import BasicTransmonElement from quantify_scheduler.operations.acquisition_library import ThresholdedAcquisition # set up qubit qubit = BasicTransmonElement("q0") qubit.clock_freqs.readout(8.0e9) # set rotation and threshold value rotation, threshold = 20, -0.1 qubit.measure.acq_rotation(rotation) qubit.measure.acq_threshold(threshold) # basic schedule schedule = Schedule("thresholded acquisition") schedule.add(ThresholdedAcquisition(port="q0:res", clock="q0.ro", duration=1e-6)) :param port: The acquisition port. :type port: str :param clock: The clock used to demodulate the acquisition. :type clock: str :param duration: The acquisition duration in seconds. :type duration: float :param acq_channel: The data channel in which the acquisition is stored, by default 0. Describes the "where" information of the measurement, which typically corresponds to a qubit idx. :type acq_channel: int :param acq_index: The data register in which the acquisition is stored, by default 0. Describes the "when" information of the measurement, used to label or tag individual measurements in a large circuit. Typically corresponds to the setpoints of a schedule (e.g., tau in a T1 experiment). :type acq_index: int :param bin_mode: Describes what is done when data is written to a register that already contains a value. Options are "append" which appends the result to the list or "average" which stores the weighted average value of the new result and the old register value, by default BinMode.AVERAGE. :type bin_mode: BinMode or str :param phase: The phase of the pulse and acquisition in degrees, by default 0. :type phase: float :param t0: The acquisition start time in seconds, by default 0. :type t0: float .. py:class:: NumericalWeightedIntegrationComplex(port: str, clock: str, weights_a: Union[List[complex], numpy.ndarray], weights_b: Union[List[complex], numpy.ndarray], weights_sampling_rate: float = qblox_constants.SAMPLING_RATE, t: Optional[Union[List[float], numpy.ndarray]] = None, interpolation: str = 'linear', acq_channel: int = 0, acq_index: int = 0, bin_mode: Union[quantify_scheduler.enums.BinMode, str] = BinMode.APPEND, phase: float = 0, t0: float = 0) Bases: :py:obj:`WeightedIntegratedComplex` Implements a WeightedIntegratedComplex class using parameterized waveforms and interpolation as the integration weights. Creates a new instance of NumericalWeightedIntegrationComplex. NumericalWeightedIntegrationComplex inherits from :class:`WeightedIntegratedComplex` that uses parameterized waveforms and interpolation as integration weights. Weights are applied as: .. math:: \widetilde{A} = \int ( \mathrm{Re}(S(t))\cdot \mathrm{Re}(W_A(t)) + \mathrm{Im}(S(t))\cdot \mathrm{Im}(W_A(t)) ) \mathrm{d}t .. math:: \widetilde{B} = \int ( \mathrm{Re}(S(t))\cdot \mathrm{Re}(W_B(t)) + \mathrm{Im}(S(t))\cdot \mathrm{Im}(W_B(t)) ) \mathrm{d}t :param port: The acquisition port. :param clock: The clock used to demodulate the acquisition. :param weights_a: The list of complex values used as weights :math:`A(t)` on the incoming complex signal. :param weights_b: The list of complex values used as weights :math:`B(t)` on the incoming complex signal. :param weights_sampling_rate: The rate with which the weights have been sampled, in Hz. By default equal to the Qblox backend sampling rate. Note that during hardware compilation, the weights will be resampled with the sampling rate supported by the target hardware. :param t: The time values of each weight. This parameter is deprecated in favor of ``weights_sampling_rate``. If a value is provided for ``t``, the ``weights_sampling_rate`` parameter will be ignored. :param interpolation: The type of interpolation to use, by default "linear". This argument is passed to :obj:`~scipy.interpolate.interp1d`. :param acq_channel: The data channel in which the acquisition is stored, by default 0. Describes the "where" information of the measurement, which typically corresponds to a qubit idx. :param acq_index: The data register in which the acquisition is stored, by default 0. Describes the "when" information of the measurement, used to label or tag individual measurements in a large circuit. Typically corresponds to the setpoints of a schedule (e.g., tau in a T1 experiment). :param bin_mode: Describes what is done when data is written to a register that already contains a value. Options are "append" which appends the result to the list or "average" which stores the weighted average value of the new result and the old register value, by default BinMode.APPEND :param phase: The phase of the pulse and acquisition in degrees, by default 0 :param t0: The acquisition start time in seconds, by default 0 .. py:class:: TriggerCount(port: str, clock: str, duration: float, acq_channel: int = 0, acq_index: int = 0, bin_mode: Union[quantify_scheduler.enums.BinMode, str] = BinMode.APPEND, t0: float = 0) Bases: :py:obj:`AcquisitionOperation` Trigger counting acquisition protocol returning an integer. Creates a new instance of TriggerCount, trigger counting acquisition protocol, returning an integer. The trigger acquisition mode is used to measure how many times the trigger level is surpassed. The level is set in the hardware configuration. :param port: The acquisition port. :param clock: The clock used to demodulate the acquisition. :param duration: The acquisition duration in seconds. :param acq_channel: The data channel in which the acquisition is stored, by default 0. Describes the "where" information of the measurement, which typically corresponds to a qubit idx. :param acq_index: The data register in which the acquisition is stored, by default 0. Describes the "when" information of the measurement, used to label or tag individual measurements in a large circuit. Typically corresponds to the setpoints of a schedule (e.g., tau in a T1 experiment). :param bin_mode: Describes what is done when data is written to a register that already contains a value. Options are "append" which appends the result to the list or "average" which stores the count value of the new result and the old register value, by default BinMode.APPEND :param t0: The acquisition start time in seconds, by default 0