From 3bbec8dd62594901113d29fb5506d8722bb9df34 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 4 Jun 2021 13:22:35 +0200 Subject: [PATCH 1/2] * Outline of spectroscopy added to the backend calibrations. --- .../calibration/backend_calibrations.py | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/qiskit_experiments/calibration/backend_calibrations.py b/qiskit_experiments/calibration/backend_calibrations.py index 99414a8a19..0e47b89763 100644 --- a/qiskit_experiments/calibration/backend_calibrations.py +++ b/qiskit_experiments/calibration/backend_calibrations.py @@ -14,13 +14,15 @@ from datetime import datetime from enum import Enum -from typing import List +from typing import Any, Dict, List, Optional import copy +import numpy as np from qiskit.providers.backend import BackendV1 as Backend from qiskit.circuit import Parameter from qiskit_experiments.calibration.calibrations import Calibrations, ParameterKey from qiskit_experiments.calibration.exceptions import CalibrationError +from qiskit_experiments.characterization.qubit_spectroscopy import QubitSpectroscopy class FrequencyElement(Enum): @@ -147,3 +149,38 @@ def export_backend(self) -> Backend: # TODO: build the instruction schedule map using the stored calibrations return backend + + def qubit_spectroscopy( + self, + qubit: int, + freq_range: Optional[np.array] = None, + force_updated: bool = False, + run_options: Optional[Dict[str, Any]] = None, + experiment_options: Optional[Dict[str, Any]] = None, + analysis_options: Optional[Dict[str, Any]] = None, + ): + """Spectroscopy experiment wrapper. + + Args: + qubit: + freq_range: + force_updated: + run_options: + experiment_options: + analysis_options: + """ + spec = QubitSpectroscopy(qubit, freq_range, unit="Hz") + + if experiment_options is not None: + spec.set_experiment_options(**experiment_options) + + if run_options is not None: + spec.set_run_options(**run_options) + + if analysis_options is not None: + spec.set_analysis_options(**analysis_options) + + result = spec.run(self._backend).analysis_result(0) + + if result["quality"] == "computer_good" or force_updated: + self._backend.defaults().qubit_freq_est[qubit] = result["value"] From c1982fd8f3eac505be4525f7a327adc0dc4161b5 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 4 Jun 2021 13:36:44 +0200 Subject: [PATCH 2/2] * Added parameter value update. --- .../calibration/backend_calibrations.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/qiskit_experiments/calibration/backend_calibrations.py b/qiskit_experiments/calibration/backend_calibrations.py index 0e47b89763..8dc2c6912f 100644 --- a/qiskit_experiments/calibration/backend_calibrations.py +++ b/qiskit_experiments/calibration/backend_calibrations.py @@ -22,6 +22,7 @@ from qiskit.circuit import Parameter from qiskit_experiments.calibration.calibrations import Calibrations, ParameterKey from qiskit_experiments.calibration.exceptions import CalibrationError +from qiskit_experiments.calibration.parameter_value import ParameterValue from qiskit_experiments.characterization.qubit_spectroscopy import QubitSpectroscopy @@ -155,6 +156,7 @@ def qubit_spectroscopy( qubit: int, freq_range: Optional[np.array] = None, force_updated: bool = False, + group: str = "default", run_options: Optional[Dict[str, Any]] = None, experiment_options: Optional[Dict[str, Any]] = None, analysis_options: Optional[Dict[str, Any]] = None, @@ -165,6 +167,7 @@ def qubit_spectroscopy( qubit: freq_range: force_updated: + group: run_options: experiment_options: analysis_options: @@ -180,7 +183,17 @@ def qubit_spectroscopy( if analysis_options is not None: spec.set_analysis_options(**analysis_options) - result = spec.run(self._backend).analysis_result(0) + data = spec.run(self._backend) + result = data.analysis_result(0) if result["quality"] == "computer_good" or force_updated: self._backend.defaults().qubit_freq_est[qubit] = result["value"] + + value = ParameterValue( + result["value"], + valide=True, + exp_id=data.experiment_id, + group=group + ) + + self.add_parameter_value(value, param=self.qubit_freq, qubits=qubit)