def test_rebin_errors(self): with pytest.raises(ValueError): self.signal.rebin() with pytest.raises(ValueError): rebin(self.signal.data, scale=(3, 3, 1), new_shape=(1, 2, 6)) with pytest.raises(ValueError): rebin(self.signal.data, scale=(2, 2, 2, 2))
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 _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.spectrum import Spectrum from hyperspy.models.model1D import Model1D from hyperspy.components import Line s = Spectrum(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_rebin(self): self.signal.estimate_poissonian_noise_variance() new_s = self.signal.rebin((2, 1, 6)) var = new_s.metadata.Signal.Noise_properties.variance nt.assert_true(new_s.data.shape == (1, 2, 6)) nt.assert_true(var.data.shape == (1, 2, 6)) from hyperspy.misc.array_tools import rebin nt.assert_true(np.all(rebin(self.signal.data, (1, 2, 6)) == var.data)) nt.assert_true( np.all(rebin(self.signal.data, (1, 2, 6)) == new_s.data))
def test_rebin(self): self.signal.estimate_poissonian_noise_variance() new_s = self.signal.rebin((2, 1, 6)) var = new_s.metadata.Signal.Noise_properties.variance nt.assert_equal(new_s.data.shape, (1, 2, 6)) nt.assert_equal(var.data.shape, (1, 2, 6)) from hyperspy.misc.array_tools import rebin np.testing.assert_array_equal(rebin(self.signal.data, (1, 2, 6)), var.data) np.testing.assert_array_equal(rebin(self.signal.data, (1, 2, 6)), new_s.data)
def test_rebin(self): self.signal.estimate_poissonian_noise_variance() new_s = self.signal.rebin((2, 1, 6)) var = new_s.metadata.Signal.Noise_properties.variance nt.assert_true(new_s.data.shape == (1, 2, 6)) nt.assert_true(var.data.shape == (1, 2, 6)) from hyperspy.misc.array_tools import rebin nt.assert_true(np.all(rebin(self.signal.data, (1, 2, 6)) == var.data)) nt.assert_true( np.all( rebin( self.signal.data, (1, 2, 6)) == new_s.data))
def test_rebin_new_shape(self): self.signal.estimate_poissonian_noise_variance() new_s = self.signal.rebin(new_shape=(1, 2, 6)) var = new_s.metadata.Signal.Noise_properties.variance assert new_s.data.shape == (2, 1, 6) assert var.data.shape == (2, 1, 6) np.testing.assert_array_equal( rebin(self.signal.data, new_shape=(2, 1, 6)), new_s.data ) np.testing.assert_array_equal( rebin(self.signal.data, new_shape=(2, 1, 6)), var.data ) new_s = self.signal.rebin(new_shape=(4, 2, 6)) assert new_s.data.shape == self.data.shape
def test_rebin(self): self.signal.estimate_poissonian_noise_variance() new_s = self.signal.rebin(scale=(2, 2, 1)) var = new_s.metadata.Signal.Noise_properties.variance assert new_s.data.shape == (1, 2, 6) assert var.data.shape == (1, 2, 6) from hyperspy.misc.array_tools import rebin np.testing.assert_array_equal(rebin(self.signal.data, scale=(2, 2, 1)), var.data) np.testing.assert_array_equal(rebin(self.signal.data, scale=(2, 2, 1)), new_s.data) if self.signal._lazy: new_s = self.signal.rebin(scale=(2, 2, 1), rechunk=False) np.testing.assert_array_equal( rebin(self.signal.data, scale=(2, 2, 1)), var.data) np.testing.assert_array_equal( rebin(self.signal.data, scale=(2, 2, 1)), new_s.data)
def test_rebin(self): self.signal.estimate_poissonian_noise_variance() new_s = self.signal.rebin(scale=(2, 2, 1)) var = new_s.metadata.Signal.Noise_properties.variance assert new_s.data.shape == (1, 2, 6) assert var.data.shape == (1, 2, 6) from hyperspy.misc.array_tools import rebin np.testing.assert_array_equal(rebin(self.signal.data, scale=(2, 2, 1)), var.data) np.testing.assert_array_equal(rebin(self.signal.data, scale=(2, 2, 1)), new_s.data) if self.signal._lazy: new_s = self.signal.rebin(scale=(2, 2, 1), rechunk=False) np.testing.assert_array_equal(rebin(self.signal.data, scale=(2, 2, 1)), var.data) np.testing.assert_array_equal(rebin(self.signal.data, scale=(2, 2, 1)), new_s.data)
def test_rebin(self): self.signal.estimate_poissonian_noise_variance() new_s = self.signal.rebin(scale=(2, 2, 1)) var = new_s.metadata.Signal.Noise_properties.variance assert new_s.data.shape == (1, 2, 6) assert var.data.shape == (1, 2, 6) from hyperspy.misc.array_tools import rebin if self.signal._lazy: from distutils.version import LooseVersion import dask if LooseVersion(np.__version__) >= "1.12.0" and \ LooseVersion(dask.__version__) <= "0.13.0": pytest.skip("Dask not up to date with new numpy") np.testing.assert_array_equal(rebin(self.signal.data, scale=(2, 2, 1)), var.data) np.testing.assert_array_equal(rebin(self.signal.data, scale=(2, 2, 1)), new_s.data)