Rabi¶
- class Rabi(physical_qubits, schedule, amplitudes=None, backend=None)[source]¶
An experiment that scans a pulse amplitude to calibrate rotations on the
<-> transition.Overview
The circuits have a custom rabi gate with the pulse schedule attached to it through the calibrations. The circuits are of the form:
┌───────────┐ ░ ┌─┐ q_0: ┤ Rabi(amp) ├─░─┤M├ └───────────┘ ░ └╥┘ measure: 1/═════════════════╩═ 0
The user provides his own schedule for the Rabi at initialization which must have one free parameter, i.e. the amplitude to scan and a drive channel which matches the qubit.
User manual
Calibrating the pulse amplitudes with a Rabi experiment
See also the Qiskit Textbook for the pulse level programming of a Rabi experiment.
Analysis class reference
Experiment options
These options can be set by the
set_experiment_options()
method.- Options
Defined in the class
Rabi
:amplitudes (iterable)
Default value:array(-0.95, -0.9119999999999999, -0.874, -0.836, -0.7979999999999999, ..., size=51)
The list of amplitude values to scan.schedule (ScheduleBlock)
Default value:None
The schedule for the Rabi pulse. This schedule must have exactly one free parameter. The drive channel should match the qubit.
Defined in the class
BaseExperiment
:max_circuits (Optional[int])
Default value:None
The maximum number of circuits per job when running an experiment on a backend.
Example
import numpy as np from qiskit import pulse from qiskit.circuit import Parameter from qiskit_experiments.library import Rabi with pulse.build() as build_sched: pulse.play(pulse.Gaussian(160, Parameter("amp"), 40), pulse.DriveChannel(0)) exp = Rabi(physical_qubits=(0,), schedule=build_sched, amplitudes=np.linspace(-0.1, 0.1, 21), backend=backend,) exp_data = exp.run().block_for_results() display(exp_data.figure(0)) exp_data.analysis_results(dataframe=True)
name experiment components value quality backend run_time chisq 38c4c2eb @Parameters_OscillationAnalysis Rabi [Q0] CurveFitResult:\n - fitting method: least_squa... good PulseBackendV2 None None 20633220 rabi_rate Rabi [Q0] 8.595+/-0.008 good PulseBackendV2 None 1.369338 Initialization
Initialize a Rabi experiment on the given qubit.
- Parameters:
physical_qubits (Sequence[int]) – List with the qubit on which to run the Rabi experiment.
schedule (ScheduleBlock) – The schedule that will be used in the Rabi experiment. This schedule should have one free parameter namely the amplitude.
amplitudes (Iterable[float] | None) – The pulse amplitudes that one wishes to scan. If this variable is not specified it will default to
np.linspace(-0.95, 0.95, 51)
.backend (Backend | None) – Optional, the backend to run the experiment on.
Attributes
- analysis: BaseAnalysis¶
Return the analysis instance for the experiment
- backend¶
Return the backend for the experiment
- experiment_options¶
Return the options for the experiment.
- experiment_type¶
Return experiment type.
- num_qubits¶
Return the number of qubits for the experiment.
- physical_qubits¶
Return the device qubits for the experiment.
Methods
- circuits()[source]¶
Create the circuits for the Rabi experiment.
- Returns:
A list of circuits with a rabi gate with an attached schedule. Each schedule will have a different value of the scanned amplitude.
- Return type:
List[QuantumCircuit]
- config()¶
Return the config dataclass for this experiment
- Return type:
- copy()¶
Return a copy of the experiment
- Return type:
- enable_restless(rep_delay=None, override_processor_by_restless=True, suppress_t1_error=False)¶
Enables a restless experiment by setting the restless run options and the restless data processor.
- Parameters:
rep_delay (float | None) – The repetition delay. This is the delay between a measurement and the subsequent quantum circuit. Since the backends have dynamic repetition rates, the repetition delay can be set to a small value which is required for restless experiments. Typical values are 1 us or less.
override_processor_by_restless (bool) – If False, a data processor that is specified in the analysis options of the experiment is not overridden by the restless data processor. The default is True.
suppress_t1_error (bool) – If True, the default is False, then no error will be raised when
rep_delay
is larger than the T1 times of the qubits. Instead, a warning will be logged as restless measurements may have a large amount of noise.
- Raises:
DataProcessorError – If the attribute rep_delay_range is not defined for the backend.
DataProcessorError – If a data processor has already been set but override_processor_by_restless is True.
DataProcessorError – If the experiment analysis does not have the data_processor option.
DataProcessorError – If the rep_delay is equal to or greater than the T1 time of one of the physical qubits in the experiment and the flag
ignore_t1_check
is False.
- classmethod from_config(config)¶
Initialize an experiment from experiment config
- Return type:
- job_info(backend=None)¶
Get information about job distribution for the experiment on a specific backend.
- Parameters:
backend (Backend) – Optional, the backend for which to get job distribution information. If not specified, the experiment must already have a set backend.
- Returns:
A dictionary containing information about job distribution.
”Total number of circuits in the experiment”: Total number of circuits in the experiment.
”Maximum number of circuits per job”: Maximum number of circuits in one job based on backend and experiment settings.
”Total number of jobs”: Number of jobs needed to run this experiment on the currently set backend.
- Return type:
dict
- Raises:
QiskitError – if backend is not specified.
- run(backend=None, analysis='default', timeout=None, **run_options)¶
Run an experiment and perform analysis.
- Parameters:
backend (Backend | None) – Optional, the backend to run the experiment on. This will override any currently set backends for the single execution.
analysis (BaseAnalysis | None) – Optional, a custom analysis instance to use for performing analysis. If None analysis will not be run. If
"default"
the experimentsanalysis()
instance will be used if it contains one.timeout (float | None) – Time to wait for experiment jobs to finish running before cancelling.
run_options – backend runtime options used for circuit execution.
- Returns:
The experiment data object.
- Raises:
QiskitError – If experiment is run with an incompatible existing ExperimentData container.
- Return type:
- set_experiment_options(**fields)¶
Set the experiment options.
- Parameters:
fields – The fields to update the options
- Raises:
AttributeError – If the field passed in is not a supported options
- set_run_options(**fields)¶
Set options values for the experiment
run()
method.- Parameters:
fields – The fields to update the options
See also
The Setting options for your experiment guide for code example.
- set_transpile_options(**fields)¶
Set the transpiler options for
run()
method.- Parameters:
fields – The fields to update the options
- Raises:
QiskitError – If initial_layout is one of the fields.
See also
The Setting options for your experiment guide for code example.