qibocal.protocols.resonator_spectroscopies package#
Submodules#
qibocal.protocols.resonator_spectroscopies.resonator_punchout module#
- qibocal.protocols.resonator_spectroscopies.resonator_punchout.resonator_punchout = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#
ResonatorPunchout Routine object.
- class qibocal.protocols.resonator_spectroscopies.resonator_punchout.ResonatorPunchoutData(resonator_type: str, amplitudes: dict[typing.Union[int, str], float] = <factory>, data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('freq', '<f8'), ('amp', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]] = <factory>)[source]#
Bases:
Data
ResonatorPunchout data acquisition.
- _to_npz(path: Path, filename: str)#
Helper function to use np.savez while converting keys into strings.
- property pairs#
Access qubit pairs ordered alphanumerically from data structure.
- property qubits#
Access qubits from data structure.
- data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('freq', '<f8'), ('amp', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]]#
Raw data acquired.
qibocal.protocols.resonator_spectroscopies.resonator_spectroscopy module#
- qibocal.protocols.resonator_spectroscopies.resonator_spectroscopy.resonator_spectroscopy = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#
ResonatorSpectroscopy Routine object.
- class qibocal.protocols.resonator_spectroscopies.resonator_spectroscopy.ResonatorSpectroscopyData(resonator_type: str, amplitudes: dict[typing.Union[int, str], float], fit_function: str = 'lorentzian', phase_sign: bool = False, data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('freq', '<f8'), ('signal', '<f8'), ('phase', '<f8'), ('error_signal', '<f8'), ('error_phase', '<f8')])]]] = <factory>, power_level: ~typing.Optional[~qibocal.protocols.utils.PowerLevel] = None)[source]#
Bases:
Data
Data structure for resonator spectroscopy with attenuation.
- _to_npz(path: Path, filename: str)#
Helper function to use np.savez while converting keys into strings.
- property pairs#
Access qubit pairs ordered alphanumerically from data structure.
- property qubits#
Access qubits from data structure.
- register_qubit(dtype, data_keys, data_dict)#
Store output for single qubit.
- phase_sign: bool = False#
Several instruments have their convention about the sign of the phase. If True, the routine will apply a minus to the phase data.
- data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('freq', '<f8'), ('signal', '<f8'), ('phase', '<f8'), ('error_signal', '<f8'), ('error_phase', '<f8')])]]]#
Raw data acquired.
- power_level: Optional[PowerLevel] = None#
Power regime of the resonator.
- qibocal.protocols.resonator_spectroscopies.resonator_spectroscopy.ResSpecType = dtype([('freq', '<f8'), ('signal', '<f8'), ('phase', '<f8'), ('error_signal', '<f8'), ('error_phase', '<f8')])#
Custom dtype for resonator spectroscopy.
qibocal.protocols.resonator_spectroscopies.resonator_utils module#
- qibocal.protocols.resonator_spectroscopies.resonator_utils.PHASES_THRESHOLD_PERCENTAGE = 80#
pi circle.
- Type:
Threshold percentage to ensure the phase data covers a significant portion of the full 2
- Type:
math
- qibocal.protocols.resonator_spectroscopies.resonator_utils.STD_DEV_GAUSSIAN_KERNEL = 30#
Standard deviation for the Gaussian kernel.
- qibocal.protocols.resonator_spectroscopies.resonator_utils.PHASE_ELEMENTS = 5#
Number of values to better guess :math:` heta` (in rad) in the phase fit function.
- qibocal.protocols.resonator_spectroscopies.resonator_utils.s21(frequencies: ndarray[Any, dtype[_ScalarType_co]], resonance: float, q_loaded: float, q_coupling: float, phi: float = 0.0, amplitude: float = 1.0, alpha: float = 0.0, tau: float = 0.0) ndarray[Any, dtype[_ScalarType_co]] [source]#
Full model of the S21 notch resonator based on eq. (1) described in: “Efficient and robust analysis of complex scattering data under noise in microwave resonators” (https://doi.org/10.1063/1.4907935) by S. Probst et al and on eq. (E.1) described in: “The Physics of Superconducting Microwave Resonators” (https://doi.org/10.7907/RAT0-VM75) by J. Gao.
The equation is split into two parts describing the ideal resonator and the environment.
- Parameters:
frequencies (NDArray[float]) – frequencies (Hz) at which the measurement was taken.
resonance (float) – resonance frequency (Hz).
q_loaded (float) – loaded quality factor.
q_coupling (float) – coupling quality factor.
phi (float) – quantifies the impedance mismatch (Fano interference).
amplitude (float) – accounts for additional attenuation/amplification present in the setup.
alpha (float) – accounts for a additional phase shift.
tau (float) – cable delay caused by the length of the cable and finite speed of light.
- Returns:
S21 resonance profile array (NDArray) of a notch resonator.
- qibocal.protocols.resonator_spectroscopies.resonator_utils.s21_fit(data: ndarray[Any, dtype[_ScalarType_co]], resonator_type=None, fit=None) tuple[float, list[float], list[float]] [source]#
Calibrates the S21 profile of a notch resonator, based on https://github.com/qkitgroup/qkit.
- Args:
data (NDArray[complex]): S21 scattering matrix element.
- Returns:
Model parameters
- qibocal.protocols.resonator_spectroscopies.resonator_utils.spectroscopy_plot(data, qubit, fit: Results = None)[source]#
- qibocal.protocols.resonator_spectroscopies.resonator_utils.s21_spectroscopy_plot(data, qubit, fit: Results = None)[source]#
- qibocal.protocols.resonator_spectroscopies.resonator_utils.cable_delay(frequencies: ndarray[Any, dtype[_ScalarType_co]], phases: ndarray[Any, dtype[_ScalarType_co]], num_points: int) float [source]#
Evaluates the cable delay :math:` au` (in s).
The cable delay :math:` au` (in s) is caused by the length of the cable and the finite speed of light. This is estimated fitting a first-grade polynomial fit of the phases (in rad) as a function of the frequencies (in Hz), and extracting the angular coefficient, which is then expressed in seconds.
The num_points is used to select how many points should be fitted, from both the start and the end of the frequency range.
- qibocal.protocols.resonator_spectroscopies.resonator_utils.remove_cable_delay(frequencies: ndarray[Any, dtype[_ScalarType_co]], z: ndarray[Any, dtype[_ScalarType_co]], tau: float) ndarray[Any, dtype[_ScalarType_co]] [source]#
Corrects the cable delay :math:` au` (in s).
The cable delay :math:` au` (in s) is removed from the scattering matrix element array z by performing an exponential product which also depends from the frequencies (in Hz).
- qibocal.protocols.resonator_spectroscopies.resonator_utils.circle_fit(z: ndarray[Any, dtype[_ScalarType_co]]) tuple[complex, float] [source]#
Fits the circle of a scattering matrix element array.
The circle fit exploits the algebraic fit described in “Efficient and robust analysis of complex scattering data under noise in microwave resonators” (https://doi.org/10.1063/1.4907935) by S. Probst et al and “The physics of superconducting microwave resonators” (https://doi.org/10.7907/RAT0-VM75) by J. Gao.
The function, from the scattering matrix element array, evaluates the center coordinates x_c and y_c and the radius of the circle r_0.
- qibocal.protocols.resonator_spectroscopies.resonator_utils.phase_fit(frequencies: ndarray[Any, dtype[_ScalarType_co]], phases: ndarray[Any, dtype[_ScalarType_co]]) ndarray[Any, dtype[_ScalarType_co]] [source]#
Fits the phase response of a resonator.
The phase fit firstly ensure the phase data (in rad) covers a significant portion of the full 2 \(\pi\) circle evaluating a roll_off. If the data do not cover a full circle it is possible to increase the frequency span around the resonance. Data are smoothed using a Gaussian filter and the derivative is evaluated while initial guesses for the parameters (resonance_guess (in Hz)), q_loaded_guess, tau_guess (in s) and theta_guess (in rad) are computed with frequencies (in Hz).
The parameter estimation is done through an iterative least squares process to optimize the model parameters. The defined functions: residuals_q_loaded, residuals_resonance_theta residuals_resonance_theta, residuals_tau, residuals_resonance_q_loaded, residuals_full take the parameters to be fitted and return the residuals calculated by subtracting the phase centered model from the phase data (in rad).
- qibocal.protocols.resonator_spectroscopies.resonator_utils.phase_dist(phases: ndarray[Any, dtype[_ScalarType_co]]) ndarray[Any, dtype[_ScalarType_co]] [source]#
Maps phases (in rad) [-2pi, 2pi] to phase distance on circle [0, pi].
- qibocal.protocols.resonator_spectroscopies.resonator_utils.phase_centered(frequencies: ndarray[Any, dtype[_ScalarType_co]], resonance: float, q_loaded: float, theta: float, tau: float = 0.0) ndarray[Any, dtype[_ScalarType_co]] [source]#
Evaluates the phase (in rad) response of a resonator.
The phase centered evaluates the phase angle (in rad) of a circle centered around the origin accounting for a phase offset :math:` heta` (in rad), a linear background slope :math: 2pi ` au` (in s) (frequencies (in Hz) - resonance (in Hz)) (if needed) and a dependency on the q_loaded.