Source code for qblox_scheduler.analysis.cosine_analysis
# Repository: https://gitlab.com/qblox/packages/software/qblox-scheduler
# Licensed according to the LICENSE file on the main branch
#
# Copyright 2020-2025, Quantify Consortium
# Copyright 2025, Qblox B.V.
"""
Module containing an education example of an analysis subclass.
See :ref:`analysis-framework-tutorial` that guides you through the process of building
this analysis.
"""
import matplotlib.pyplot as plt
import qblox_scheduler.analysis.base_analysis as ba
from qblox_scheduler.analysis.fitting_models import CosineModel
from quantify_core.visualization import mpl_plotting as qpl
from quantify_core.visualization.SI_utilities import (
adjust_axeslabels_SI,
format_value_string,
)
[docs]
class CosineAnalysis(ba.BaseAnalysis):
"""
Exemplary analysis subclass that fits a cosine to a dataset.
"""
[docs]
def process_data(self):
"""
In some cases, you might need to process the data, e.g., reshape, filter etc.,
before starting the analysis. This is the method where it should be done.
See :meth:`~qblox_scheduler.analysis.spectroscopy_analysis.ResonatorSpectroscopyAnalysis.process_data`
for an implementation example.
""" # noqa: E501
[docs]
def run_fitting(self):
"""
Fits a :class:`~qblox_scheduler.analysis.fitting_models.CosineModel` to the data.
"""
# create a fitting model based on a cosine function
model = CosineModel()
guess = model.guess(self.dataset.y0.values, x=self.dataset.x0.values)
result = model.fit(self.dataset.y0.values, x=self.dataset.x0.values, params=guess)
self.fit_results.update({"cosine": result})
[docs]
def analyze_fit_results(self):
"""
Checks fit success and populates :code:`quantities_of_interest`.
"""
fit_result = self.fit_results["cosine"]
fit_warning = ba.check_lmfit(fit_result)
# If there is a problem with the fit, display an error message in the text box.
# Otherwise, display the parameters as normal.
if fit_warning is None:
self.quantities_of_interest["fit_success"] = True
unit = self.dataset.y0.units
text_msg = "Summary\n"
text_msg += format_value_string(
r"$f$", fit_result.params["frequency"], end_char="\n", unit="Hz"
)
text_msg += format_value_string(r"$A$", fit_result.params["amplitude"], unit=unit)
else:
text_msg = fit_warning
self.quantities_of_interest["fit_success"] = False
# save values and fit uncertainty
for parameter_name in ["frequency", "amplitude"]:
self.quantities_of_interest[parameter_name] = ba.lmfit_par_to_ufloat(
fit_result.params[parameter_name]
)
self.quantities_of_interest["fit_msg"] = text_msg