laboneq_applications.analysis.ramsey
¶
This module defines the analysis for Ramsey experiment.
The experiment is defined in laboneq_applications.experiments.
In this analysis, we first interpret the raw data into qubit population using principle-component analysis or rotation and projection on the measured calibration states. Then we fit an exponentially decaying cosine model to the qubit population and extract the frequency and the qubit T2_star time from the fit. Then we calculate the new qubit frequency from the old value and the frequency of the oscillations extracted from the fit. Finally, we plot the data and the fit.
analysis_workflow(result, qubits, delays, detunings=None, options=None)
¶
The Ramsey analysis Workflow.
The workflow consists of the following steps:
- calculate_qubit_population
- fit_data
- extract_qubit_parameters
- plot_raw_complex_data_1d
- plot_population
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 |
delays |
QubitSweepPoints
|
The delays that were swept over in the Ramsey experiment for
each qubit. If |
required |
detunings |
float | Sequence[float] | None
|
The detuning in Hz introduced in order to generate oscillations of the qubit
state vector around the Bloch sphere. This detuning and the frequency of the
fitted oscillations is used to calculate the true qubit resonance frequency.
|
None
|
options |
TuneUpAnalysisWorkflowOptions | None
|
The options for building the workflow, passed as an instance of [TuneUpAnalysisWorkflowOptions]. In addition to options from [WorkflowOptions], the following custom options are supported: do_fitting, do_plotting, do_raw_data_plotting, do_qubit_population_plotting, and the options of the [TuneupAnalysisOptions] class. See the docstring of [TuneUpAnalysisWorkflowOptions] 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],
delays=[
np.linspace(0, 20e-6, 51),
np.linspace(0, 30e-6, 52),
],
detunings = [1e6, 1.346e6],
options=analysis_workflow.options()
).run()
extract_qubit_parameters(qubits, fit_results, detunings=None, 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. |
required |
fit_results |
dict[str, ModelResult]
|
the fit-results dictionary returned by fit_data |
required |
detunings |
dict[str, float] | None
|
The detuning in Hz introduced in order to generate oscillations of the qubit
state vector around the Bloch sphere. This detuning and the frequency of the
fitted oscillations is used to calculate the true qubit resonance frequency.
|
None
|
options |
TuneupAnalysisOptions | None
|
The options for extracting the qubit parameters. See [TuneupAnalysisOptions], [TuneupExperimentOptions] and [BaseExperimentOptions] 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 an exponentially decaying cosine 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 process_raw_data |
required |
options |
TuneupAnalysisOptions | None
|
The options for processing the raw data. See [TuneupAnalysisOptions], [TuneupExperimentOptions] and [BaseExperimentOptions] for accepted options. |
None
|
Returns:
Type | Description |
---|---|
dict[str, ModelResult]
|
dict with qubit UIDs as keys and the fit results for each qubit as values. |
plot_population(qubits, processed_data_dict, fit_results, qubit_parameters, detunings=None, options=None)
¶
Create the Ramsey 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. |
required |
processed_data_dict |
dict[str, dict[str, ArrayLike]]
|
the processed data dictionary returned by process_raw_data |
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]]] | None
|
the qubit-parameters dictionary returned by extract_qubit_parameters |
required |
detunings |
dict[str, float] | None
|
The detuning in Hz introduced in order to generate oscillations of the qubit
state vector around the Bloch sphere. This detuning and the frequency of the
fitted oscillations is used to calculate the true qubit resonance frequency.
|
None
|
options |
TuneupAnalysisOptions | None
|
The options for processing the raw data. See [TuneupAnalysisOptions], [TuneupExperimentOptions] and [BaseExperimentOptions] for accepted options. |
None
|
Returns:
Type | Description |
---|---|
dict[str, Figure]
|
dict with qubit UIDs as keys and the figures for each qubit as values. |
dict[str, Figure]
|
If a qubit uid is not found in fit_results, the fit and the textbox with the |
dict[str, Figure]
|
extracted qubit parameters are not plotted. |
validate_and_convert_detunings(qubits, detunings=None)
¶
Validate the detunings used in a Ramsey experiment, and convert them to iterable.
Check for the following conditions
- qubits must be a sequence.
- detunings must be a sequence
- detunings must have the same length as qubits
If detunings is None, it is instantiated to a list of zeros with the same length as qubits.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
qubits |
Qubits
|
the qubits used in the experiment/analysis |
required |
detunings |
float | Sequence[float] | None
|
The detuning in Hz introduced in order to generate oscillations of the qubit
state vector around the Bloch sphere. This detuning and the frequency of the
fitted oscillations is used to calculate the true qubit resonance frequency.
|
None
|
Returns:
Type | Description |
---|---|
Sequence[float]
|
a list containing the validated detunings |