Skip to content

laboneq_applications.experiments.dispersive_shift

This module defines the dispersive shift experiment.

In this experiment, we prepare the qubit at defined states and then perform resonator spectroscopy to characterize the dispersive shift. Note that the qubits states to be prepared are defined in 'cal_states' of the option.

The dispersive shift experiment has the following pulse sequence:

qb --- [ prep state ] --- [ measure (swept frequency) ]

This experiment only supports 1 qubit at the time, and involves only its coupled resonator.

The Acquisition mode is restricted to SPECTROSCOPY mode, utilizing Hardware modulation. Once LRT option becomes more generally available, this example can be improved to support a multiplexed version for multiple qubits.

DispersiveShiftExperimentOptions

Options for the dispersive-shift experiment.

This class is needed only to change the default value of acquisition_type compared to the one in BaseExperimentOptions.

Attributes:

Name Type Description
acquisition_type AcquisitionType

Acquisition type to use for the experiment. Default: AcquisitionType.SPECTROSCOPY.

acquisition_type: AcquisitionType = workflow.option_field(AcquisitionType.SPECTROSCOPY, description='Acquisition type to use.') class-attribute instance-attribute

create_experiment(qpu, qubit, frequencies, states, options=None)

Creates a Dispersive Shift Experiment.

Parameters:

Name Type Description Default
qpu QPU

The qpu consisting of the original qubits and quantum operations.

required
qubit QuantumElement

The qubit to run the experiments on. It can be only a single qubit coupled to a resonator.

required
frequencies ArrayLike

The resonator frequencies to sweep over for the readout pulse sent to the resonator. Must be a list of numbers or an array.

required
states Sequence[str]

The basis states the qubits should be prepared in. May be either a string, e.g. "gef", or a list of letters, e.g. ["g","e","f"].

required
options DispersiveShiftExperimentOptions | None

The options for building the experiment as an instance of [BaseExperimentOptions]. See docstring of this class for more details.

None

Returns:

Name Type Description
experiment Experiment

The generated LabOne Q experiment instance to be compiled and executed.

Raises:

Type Description
ValueError

If Acquisition type is not set to SPECTROSCOPY.

ValueError

If frequencies is not a list of lists of numbers.

Example
options = ResonatorSpectroscopyExperimentOptions()
options.count(10)
options.acquisition_type(AcquisitionType.SPECTROSCOPY)
qpu = QPU(
    qubits=[TunableTransmonQubit("q0"), TunableTransmonQubit("q1")],
    quantum_operations=TunableTransmonOperations(),
)
temp_qubits = qpu.copy_qubits()
create_experiment(
    qpu=qpu,
    qubits=temp_qubits[0],
    frequencies=np.linspace(1.8e9, 2.2e9, 101),
    states="ge"
    options=options,
)

experiment_workflow(session, qpu, qubit, frequencies, states, temporary_parameters=None, options=None)

The Dispersive Shift Workflow.

The workflow consists of the following steps:

Parameters:

Name Type Description Default
session Session

The connected session to use for running the experiment.

required
qpu QPU

The qpu consisting of the original qubits and quantum operations.

required
qubit QuantumElement

The qubit to run the experiments on. It can be only a single qubit coupled to a resonator.

required
frequencies QubitSweepPoints

The resonator frequencies to sweep over for the readout pulse (or CW) sent to the resonator. Must be a list of numbers or an array.

required
states Sequence[str]

The basis states the qubits should be prepared in. May be either a string, e.g. "gef", or a list of letters, e.g. ["g","e","f"].

required
temporary_parameters dict[str, dict | TransmonParameters] | None

The temporary parameters to update the qubits with.

None
options TuneUpWorkflowOptions | None

The options for building the workflow as an instance of [TuneUpWorkflowOptions]. See the docstring of this class for more details.

None

Returns:

Name Type Description
WorkflowBuilder None

The builder for the experiment workflow.

Example
options = experiment_workflow.options()
options.count(10)
options.acquisition_type(AcquisitionType.SPECTROSCOPY)
qpu = QPU(
    qubits=[TunableTransmonQubit("q0"), TunableTransmonQubit("q1")],
    quantum_operations=SpectroscopyExperimentOptions(),
)
temp_qubits = qpu.copy_qubits()
result = experiment_workflow(
    session=session,
    qpu=qpu,
    qubits=temp_qubits[0],
    frequencies=np.linspace(1.8e9, 2.2e9, 101),
    states="ge"
    options=options,
).run()