def _estimate_gain(ns, cs, weighted=False, higher_than=None, plot_results=False, binning=0, pol_order=1): if binning > 0: factor = 2 ** binning remainder = np.mod(ns.shape[1], factor) if remainder != 0: ns = ns[:, remainder:] cs = cs[:, remainder:] new_shape = (ns.shape[0], ns.shape[1] / factor) ns = rebin(ns, new_shape) cs = rebin(cs, new_shape) noise = ns - cs variance = np.var(noise, 0) average = np.mean(cs, 0).squeeze() # Select only the values higher_than for the calculation if higher_than is not None: sorting_index_array = np.argsort(average) average_sorted = average[sorting_index_array] average_higher_than = average_sorted > higher_than variance_sorted = variance.squeeze()[sorting_index_array] variance2fit = variance_sorted[average_higher_than] average2fit = average_sorted[average_higher_than] else: variance2fit = variance average2fit = average fit = np.polyfit(average2fit, variance2fit, pol_order) if weighted is True: from hyperspy._signals.signal1D import Signal1D from hyperspy.models.model1d import Model1D from hyperspy.components1d import Line s = Signal1D(variance2fit) s.axes_manager.signal_axes[0].axis = average2fit m = Model1D(s) l = Line() l.a.value = fit[1] l.b.value = fit[0] m.append(l) m.fit(weights=True) fit[0] = l.b.value fit[1] = l.a.value if plot_results is True: plt.figure() plt.scatter(average.squeeze(), variance.squeeze()) plt.xlabel('Counts') plt.ylabel('Variance') plt.plot(average2fit, np.polyval(fit, average2fit), color='red') results = {'fit': fit, 'variance': variance.squeeze(), 'counts': average.squeeze()} return results
def test_3d_signal(self): # This code should run smoothly, any exceptions should trigger failure s = self.m_3d.as_signal() model = Model1D(s) p = hs.model.components1D.Polynomial(order=2) model.append(p) p.estimate_parameters(s, 0, 100, only_current=False) np.testing.assert_allclose(p.coefficients.map['values'], np.tile([0.5, 2, 3], (2, 5, 1)))
def test_3d_signal(self): # This code should run smoothly, any exceptions should trigger failure s = self.m_3d.as_signal() model = Model1D(s) p = hs.model.components1D.Polynomial(order=2, legacy=False) model.append(p) p.estimate_parameters(s, 0, 100, only_current=False) np.testing.assert_allclose(p.a2.map['values'], 0.5) np.testing.assert_allclose(p.a1.map['values'], 2) np.testing.assert_allclose(p.a0.map['values'], 3)
def create_model(self, dictionary=None): """Create a model for the current data. Returns ------- model : `Model1D` instance. """ from hyperspy.models.model1d import Model1D model = Model1D(self, dictionary=dictionary) return model
def _remove_background_cli(self, signal_range, background_estimator, fast=True, show_progressbar=None): from hyperspy.models.model1d import Model1D model = Model1D(self) model.append(background_estimator) background_estimator.estimate_parameters(self, signal_range[0], signal_range[1], only_current=False) if not fast: model.set_signal_range(signal_range[0], signal_range[1]) model.multifit(show_progressbar=show_progressbar) return self - model.as_signal(show_progressbar=show_progressbar)