Skip to content

laboneq_applications.analysis.qubit_spectroscopy

This module defines the analysis for a qubit-spectroscopy experiment.

The experiment is defined in laboneq_applications.experiments.

In this analysis, we first interpret the raw data into the signal magnitude and phase. Then we fit a Lorentzian model to the signal magnitude and extract the frequency corresponding to the peak of the Lorentzian from the fit. This is the new qubit frequency. Finally, we plot the data and the fit.

analysis_workflow(result, qubits, frequencies, options=None)

The Qubit Spectroscopy analysis Workflow.

The workflow consists of the following steps:

Parameters:

Name Type Description Default
result RunExperimentResults

The experiment results returned by the run_experiment task.

required
qubits Qubits

The qubits on which to run the analysis. May be either a single qubit or a list of qubits. The UIDs of these qubits must exist in the result.

required
frequencies QubitSweepPoints

The array of frequencies that were swept over in the experiment. If qubits is a single qubit, frequencies must be a list of numbers or an array. Otherwise, it must be a list of lists of numbers or arrays.

required
options QubitSpectroscopyAnalysisWorkflowOptions | None

The options for building the workflow, passed as an instance of [QubitSpectroscopyAnalysisWorkflowOptions]. In addition to options from [WorkflowOptions], the following custom options are supported: do_plotting, do_raw_data_plotting, do_plotting_qubit_spectroscopy and the options of the [QubitSpectroscopyAnalysisOptions] class. See the docstring of [QubitSpectroscopyAnalysisOptions] for more details.

None

Returns:

Name Type Description
WorkflowBuilder None

The builder for the analysis workflow.

Example
result = analysis_workflow(
    results=results
    qubits=[q0, q1],
    frequencies=[
        np.linspace(6.0, 6.3, 301),
        np.linspace(5.8, 6.1, 301),
    ],
    options=analysis_workflow.options(),
).run()

calculate_signal_magnitude_and_phase(qubits, result, frequencies)

Calculates the magnitude and phase of the spectroscopy signal in result.

Parameters:

Name Type Description Default
result RunExperimentResults

The experiment results returned by the run_experiment task.

required
qubits Qubits

The qubits on which to run the task. May be either a single qubit or a list of qubits. The UIDs of these qubits must exist in the result.

required
frequencies ArrayLike

The array of frequencies that were swept over in the experiment.

required

Returns:

Type Description
dict[str, dict[str, ArrayLike]]

dictionary with the qubit uids as keys and a processed data dict as values,

dict[str, dict[str, ArrayLike]]

containing the following data: sweep_points data_raw magnitude phase

extract_qubit_parameters(qubits, fit_results, options=None)

Extract the qubit parameters from the fit results.

Parameters:

Name Type Description Default
qubits Qubits

The qubits on which to run the analysis. May be either a single qubit or a list of qubits. The UIDs of these qubits must exist in the processed_data_dict.

required
fit_results dict[str, ModelResult] | None

the fit-results dictionary returned by fit_data

required
options QubitSpectroscopyAnalysisOptions | None

The options for extracting the qubit parameters. See [QubitSpectroscopyAnalysisOptions] for accepted options.

None

Returns:

Type Description
dict[str, dict[str, dict[str, int | float | Variable | None]]]

dict with extracted qubit parameters and the previous values for those qubit

dict[str, dict[str, dict[str, int | float | Variable | None]]]

parameters. The dictionary has the following form:

dict[str, dict[str, dict[str, int | float | Variable | None]]]

```python

dict[str, dict[str, dict[str, int | float | Variable | None]]]

{ "new_parameter_values": { q.uid: { qb_param_name: qb_param_value }, } "old_parameter_values": { q.uid: { qb_param_name: qb_param_value }, }

dict[str, dict[str, dict[str, int | float | Variable | None]]]

}

dict[str, dict[str, dict[str, int | float | Variable | None]]]

```

dict[str, dict[str, dict[str, int | float | Variable | None]]]

If the do_fitting option is False, the new_parameter_values are not extracted

dict[str, dict[str, dict[str, int | float | Variable | None]]]

and the function only returns the old_parameter_values.

dict[str, dict[str, dict[str, int | float | Variable | None]]]

If a qubit uid is not found in fit_results, the new_parameter_values entry for

dict[str, dict[str, dict[str, int | float | Variable | None]]]

that qubit is left empty.

fit_data(qubits, processed_data_dict, options=None)

Perform a fit of a Lorentzian model to the data.

Parameters:

Name Type Description Default
qubits Qubits

The qubits on which to run the analysis. May be either a single qubit or a list of qubits. The UIDs of these qubits must exist in the processed_data_dict.

required
processed_data_dict dict[str, dict[str, ArrayLike]]

the processed data dictionary returned by calculate_signal_magnitude_and_phase

required
options QubitSpectroscopyAnalysisOptions | None

The options for processing the raw data. See [QubitSpectroscopyAnalysisOptions] for accepted options.

None

Returns:

Type Description
dict[str, ModelResult] | None

dict with qubit UIDs as keys and the fit results for each qubit as keys.

plot_qubit_spectroscopy(qubits, processed_data_dict, fit_results, qubit_parameters, options=None)

Create the qubit-spectroscopy plots.

Parameters:

Name Type Description Default
qubits Qubits

The qubits on which to run the analysis. May be either a single qubit or a list of qubits. The UIDs of these qubits must exist in the processed_data_dict and qubit_parameters.

required
processed_data_dict dict[str, dict[str, ArrayLike]]

the processed data dictionary returned by calculate_signal_magnitude_and_phase.

required
fit_results dict[str, ModelResult] | None

the fit-results dictionary returned by fit_data

required
qubit_parameters dict[str, dict[str, dict[str, int | float | Variable | None]]]

the qubit-parameters dictionary returned by extract_qubit_parameters

required
options QubitSpectroscopyAnalysisOptions | None

The options for extracting the qubit parameters. See [QubitSpectroscopyAnalysisOptions] for accepted options.

None

Returns:

Type Description
dict[str, Figure]

dict with qubit UIDs as keys and the figures for each qubit as values.