def _evaluate_quality(self, fit_data: curve.FitData) -> Union[str, None]: """Algorithmic criteria for whether the fit is good or bad. A good fit has: - a reduced chi-squared lower than three - absolute amp is within [0.4, 0.6] - base is less is within [0.4, 0.6] - amp error is less than 0.1 - tau error is less than its value - base error is less than 0.1 """ amp = fit_data.fitval("amp") tau = fit_data.fitval("tau") base = fit_data.fitval("base") criteria = [ fit_data.reduced_chisq < 3, abs(amp.nominal_value - 0.5) < 0.1, abs(base.nominal_value - 0.5) < 0.1, curve.is_error_not_significant(amp, absolute=0.1), curve.is_error_not_significant(tau), curve.is_error_not_significant(base, absolute=0.1), ] if all(criteria): return "good" return "bad"
def _evaluate_quality(self, fit_data: curve.FitData) -> Union[str, None]: """Algorithmic criteria for whether the fit is good or bad. A good fit has: - a reduced chi-squared lower than three - relative error of tau is less than its value - relative error of freq is less than its value """ tau = fit_data.fitval("tau") freq = fit_data.fitval("freq") criteria = [ fit_data.reduced_chisq < 3, curve.is_error_not_significant(tau), curve.is_error_not_significant(freq), ] if all(criteria): return "good" return "bad"
def _evaluate_quality(self, fit_data: curve.FitData) -> Union[str, None]: """Algorithmic criteria for whether the fit is good or bad. A good fit has: - a reduced chi-squared lower than three, - an error on the frequency smaller than the frequency. """ fit_freq = fit_data.fitval("freq") criteria = [ fit_data.reduced_chisq < 3, curve.is_error_not_significant(fit_freq), ] if all(criteria): return "good" return "bad"
def _evaluate_quality(self, fit_data: curve.FitData) -> Union[str, None]: """Algorithmic criteria for whether the fit is good or bad. A good fit has: - a reduced chi-squared lower than three, - a DRAG parameter value within the first period of the lowest number of repetitions, - an error on the drag beta smaller than the beta. """ fit_beta = fit_data.fitval("beta") fit_freq = fit_data.fitval("freq") criteria = [ fit_data.reduced_chisq < 3, abs(fit_beta.nominal_value) < 1 / fit_freq.nominal_value / 2, curve.is_error_not_significant(fit_beta), ] if all(criteria): return "good" return "bad"
def _evaluate_quality(self, fit_data: curve.FitData) -> Union[str, None]: """Algorithmic criteria for whether the fit is good or bad. A good fit has: - a reduced chi-squared lower than three, - more than a quarter of a full period, - less than 10 full periods, and - an error on the fit frequency lower than the fit frequency. """ fit_freq = fit_data.fitval("freq") criteria = [ fit_data.reduced_chisq < 3, 1.0 / 4.0 < fit_freq.nominal_value < 10.0, curve.is_error_not_significant(fit_freq), ] if all(criteria): return "good" return "bad"
def _evaluate_quality(self, fit_data: curve.FitData) -> Union[str, None]: """Algorithmic criteria for whether the fit is good or bad. A good fit has: - a reduced chi-squared less than 3, - a peak within the scanned frequency range, - a standard deviation that is not larger than the scanned frequency range, - a standard deviation that is wider than the smallest frequency increment, - a signal-to-noise ratio, defined as the amplitude of the peak divided by the square root of the median y-value less the fit offset, greater than a threshold of two, and - a standard error on the kappa of the Lorentzian that is smaller than the kappa. """ curve_data = self._data() max_freq = np.max(curve_data.x) min_freq = np.min(curve_data.x) freq_increment = np.mean(np.diff(curve_data.x)) fit_a = fit_data.fitval("a") fit_b = fit_data.fitval("b") fit_freq = fit_data.fitval("freq") fit_kappa = fit_data.fitval("kappa") snr = abs(fit_a.n) / np.sqrt(abs(np.median(curve_data.y) - fit_b.n)) fit_width_ratio = fit_kappa.n / (max_freq - min_freq) criteria = [ min_freq <= fit_freq.n <= max_freq, 1.5 * freq_increment < fit_kappa.n, fit_width_ratio < 0.25, fit_data.reduced_chisq < 3, curve.is_error_not_significant(fit_kappa), snr > 2, ] if all(criteria): return "good" return "bad"