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:
- calculate_signal_magnitude_and_phase
- fit_data
- extract_qubit_parameters
- plot_raw_complex_data_1d
- plot_qubit_spectroscopy
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 |
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. |