Source code for qiskit_experiments.library.characterization.t1
# This code is part of Qiskit.## (C) Copyright IBM 2021.## This code is licensed under the Apache License, Version 2.0. You may# obtain a copy of this license in the LICENSE.txt file in the root directory# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.## Any modifications or derivative works of this code must retain this# copyright notice, and modified files need to carry a notice indicating# that they have been altered from the originals."""T1 Experiment class."""fromtypingimportList,Optional,Union,Sequenceimportnumpyasnpfromqiskit.circuitimportQuantumCircuitfromqiskit.providers.backendimportBackendfromqiskit_experiments.frameworkimportBackendTiming,BaseExperiment,Optionsfromqiskit_experiments.library.characterization.analysis.t1_analysisimportT1Analysis
[docs]classT1(BaseExperiment):r"""An experiment to measure the qubit relaxation time. # section: overview This experiment estimates the :math:`T_1` relaxation time of the qubit by generating a series of circuits that excite the qubit then wait for different intervals before measurement. The resulting data of excited population versus wait time is fitted to an exponential curve to obtain an estimate for :math:`T_1`. # section: analysis_ref :class:`.T1Analysis` # section: example .. jupyter-execute:: :hide-code: # Temporary workaround for missing support in Qiskit and qiskit-ibm-runtime from qiskit_experiments.test.patching import patch_sampler_test_support patch_sampler_test_support() # backend from qiskit_ibm_runtime.fake_provider import FakeManilaV2 from qiskit_aer import AerSimulator backend = AerSimulator.from_backend(FakeManilaV2()) .. jupyter-execute:: import numpy as np from qiskit_experiments.library import T1 delays = np.arange(1.e-6, 300.e-6, 30.e-6) exp = T1(physical_qubits=(0, ), delays=delays, backend=backend) exp_data = exp.run().block_for_results() display(exp_data.figure(0)) exp_data.analysis_results(dataframe=True) # section: manual :doc:`/manuals/characterization/t1` """@classmethoddef_default_experiment_options(cls)->Options:"""Default experiment options. Experiment Options: delays (Iterable[float]): Delay times of the experiments in seconds. """options=super()._default_experiment_options()options.delays=Nonereturnoptionsdef__init__(self,physical_qubits:Sequence[int],delays:Union[List[float],np.array],backend:Optional[Backend]=None,):""" Initialize the T1 experiment class. Args: physical_qubits: a single-element sequence containing the qubit whose T1 is to be estimated. delays: Delay times of the experiments in seconds. backend: Optional, the backend to run the experiment on. Raises: ValueError: If the number of delays is smaller than 3 """# Initialize base experimentsuper().__init__(physical_qubits,analysis=T1Analysis(),backend=backend)# Set experiment optionsself.set_experiment_options(delays=delays)
[docs]defcircuits(self)->List[QuantumCircuit]:""" Return a list of experiment circuits Returns: The experiment circuits """timing=BackendTiming(self.backend)circuits=[]fordelayinself.experiment_options.delays:circ=QuantumCircuit(1,1)circ.x(0)circ.barrier(0)circ.delay(timing.round_delay(time=delay),0,timing.delay_unit)circ.barrier(0)circ.measure(0,0)circ.metadata={"xval":timing.delay_time(time=delay)}circuits.append(circ)returncircuits
def_metadata(self):metadata=super()._metadata()# Store measurement level and meas return if they have been# set for the experimentforrun_optin["meas_level","meas_return"]:ifhasattr(self.run_options,run_opt):metadata[run_opt]=getattr(self.run_options,run_opt)returnmetadata