コード例 #1
0
ファイル: test_3D.py プロジェクト: mstatkus/hyperspy
 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))
コード例 #2
0
ファイル: tools.py プロジェクト: woozey/hyperspy
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
コード例 #3
0
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
コード例 #4
0
 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))
コード例 #5
0
 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)
コード例 #6
0
ファイル: test_tools.py プロジェクト: AakashV/hyperspy
 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)
コード例 #7
0
ファイル: test_tools.py プロジェクト: temcode/hyperspy
 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))
コード例 #8
0
ファイル: test_3D.py プロジェクト: mstatkus/hyperspy
 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
コード例 #9
0
ファイル: test_tools.py プロジェクト: lijielife/hyperspy
    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)
コード例 #10
0
ファイル: test_tools.py プロジェクト: woozey/hyperspy
    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)
コード例 #11
0
    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)