Skip to content

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:

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 qubits is a single qubit, delays must be an array of numbers. Otherwise, it must be a list of arrays of numbers.

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. detunings is a list of float values for each qubit following the order in qubits.

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. detunings is a list of float values for each qubit following the order in qubits.

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. detunings is a list of float values for each qubit following the order in qubits.

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. detunings is a list of float values for each qubit following the order in qubits.

None

Returns:

Type Description
Sequence[float]

a list containing the validated detunings