コード例 #1
0
ファイル: test_model.py プロジェクト: jonpdx/hyperspy
 def test_get_component_wrong(self):
     m = self.model
     g1 = Gaussian()
     g2 = Gaussian()
     g2.name = "test"
     m.extend((g1, g2))
     m._get_component(1.2)
コード例 #2
0
ファイル: test_model.py プロジェクト: jonpdx/hyperspy
 def test_component_name_when_append(self):
     m = self.model
     gs = [Gaussian(), Gaussian(), Gaussian()]
     m.extend(gs)
     nose.tools.assert_is(m['Gaussian'], gs[0])
     nose.tools.assert_is(m['Gaussian_0'], gs[1])
     nose.tools.assert_is(m['Gaussian_1'], gs[2])
コード例 #3
0
ファイル: test_model.py プロジェクト: jonpdx/hyperspy
 def test_access_component_by_index(self):
     m = self.model
     g1 = Gaussian()
     g2 = Gaussian()
     g2.name = "test"
     m.extend((g1, g2))
     nose.tools.assert_is(m[1], g2)
コード例 #4
0
ファイル: test_model.py プロジェクト: jonpdx/hyperspy
 def test_get_component_by_name(self):
     m = self.model
     g1 = Gaussian()
     g2 = Gaussian()
     g2.name = "test"
     m.extend((g1, g2))
     nose.tools.assert_is(m._get_component("test"), g2)
コード例 #5
0
ファイル: test_model.py プロジェクト: jonpdx/hyperspy
 def test_several_component_with_same_name(self):
     m = self.model
     gs = [Gaussian(), Gaussian(), Gaussian()]
     m.extend(gs)
     m[0]._name = "Gaussian"
     m[1]._name = "Gaussian"
     m[2]._name = "Gaussian"
     m['Gaussian']
コード例 #6
0
 def test_dof_with_fit(self):
     m = self.model
     g = Gaussian()
     g1 = Gaussian()
     m.extend((g, g1))
     g1.set_parameters_not_free('A')
     m.fit()
     assert_true(np.equal(m.dof(), 5))
コード例 #7
0
 def test_chisq_with_inactive_components(self):
     m = self.model
     ga = Gaussian()
     gin = Gaussian()
     m.append(ga)
     m.append(gin)
     gin.active = False
     m.fit()
     assert_true(np.allclose(m.chisq(), 7.78966223))
コード例 #8
0
 def test_dof_with_p0(self):
     m = self.model
     g = Gaussian()
     g1 = Gaussian()
     m.extend((g, g1))
     g1.set_parameters_not_free('A')
     m._set_p0()
     m._set_current_degrees_of_freedom()
     assert_true(np.equal(m.dof(), 5))
コード例 #9
0
 def test_dof_with_inactive_components(self):
     m = self.model
     ga = Gaussian()
     gin = Gaussian()
     m.append(ga)
     m.append(gin)
     gin.active = False
     m.fit()
     assert_true(np.equal(m.dof(), 3))
コード例 #10
0
    def setUp(self):
        s = Spectrum(np.array([1.0, 2, 4, 7, 12, 7, 4, 2, 1]))
        m = s.create_model()
        m._low_loss = (s + 3.0).deepcopy()
        self.model = m
        self.s = s

        m.append(Gaussian())
        m.append(Gaussian())
        m.append(ScalableFixedPattern(s * 0.3))
        m[0].A.twin = m[1].A
        m.fit()
コード例 #11
0
 def setUp(self):
     g1 = Gaussian()
     g2 = Gaussian()
     g3 = Gaussian()
     s = Spectrum(np.arange(10))
     m = create_model(s)
     m.append(g1)
     m.append(g2)
     m.append(g3)
     self.g1 = g1
     self.g2 = g2
     self.g3 = g3
     self.model = m
コード例 #12
0
 def setUp(self):
     gaussian = Gaussian()
     gaussian.A.value = 20
     gaussian.sigma.value = 10
     gaussian.centre.value = 50
     self.signal = Signal(gaussian.function(np.arange(0, 100, 0.01)))
     self.signal.axes_manager[0].scale = 0.01
コード例 #13
0
    def setUp(self):
        s = EDSTEMSpectrum(np.ones([2, 1024]))
        energy_axis = s.axes_manager.signal_axes[0]
        energy_axis.scale = 1e-2
        energy_axis.units = 'keV'
        energy_axis.name = "Energy"
        s.set_microscope_parameters(beam_energy=200,
                                    live_time=3.1,
                                    tilt_stage=0.0,
                                    azimuth_angle=None,
                                    elevation_angle=35,
                                    energy_resolution_MnKa=130)
        elements = ['Al', 'Zn']
        xray_lines = ['Al_Ka', 'Zn_Ka']
        intensities = [300, 500]
        for i, xray_line in enumerate(xray_lines):
            gauss = Gaussian()
            line_energy, FWHM = s._get_line_energy(xray_line, FWHM_MnKa='auto')
            gauss.centre.value = line_energy
            gauss.A.value = intensities[i]
            gauss.sigma.value = FWHM
            s.data[:] += gauss.function(energy_axis.axis)

        s.set_elements(elements)
        s.add_lines(xray_lines)
        self.signal = s
コード例 #14
0
 def test_chisq_in_range(self):
     m = self.model
     g = Gaussian()
     m.append(g)
     m.set_signal_range(1, 7)
     m.fit()
     assert_true(np.allclose(m.red_chisq(), 2.87544335))
コード例 #15
0
 def setUp(self):
     s = Spectrum(range(100))
     m = s.create_model()
     m.append(Gaussian())
     m.components.Gaussian.A.value = 13
     m.components.Gaussian.name = 'something'
     self.m = m
コード例 #16
0
 def test_chisq(self):
     m = self.model
     g = Gaussian()
     g.A.value = self.A
     g.sigma.value = self.sigma
     g.centre.value = self.centre
     m.append(g)
     m._calculate_chisq()
     assert_true(np.allclose(m.chisq(), 7.78966223))
コード例 #17
0
    def test_fit_component(self):
        m = self.model
        axis = self.axis

        g1 = Gaussian()
        m.append(g1)
        m.fit_component(g1, signal_range=(4000, 6000))
        assert_true(
            np.allclose(self.g.function(axis),
                        g1.function(axis),
                        rtol=self.rtol))
コード例 #18
0
 def test_red_chisq(self):
     m = self.model
     g = Gaussian()
     g.A.value = self.A
     g.sigma.value = self.sigma
     g.centre.value = self.centre
     m.append(g)
     m._set_p0()
     m._set_current_degrees_of_freedom()
     m._calculate_chisq()
     assert_true(np.allclose(m.red_chisq(), 1.55793245))
コード例 #19
0
    def setUp(self):
        # Create an empty spectrum
        s = EELSSpectrumSimulation(np.zeros((3, 2, 1024)))
        energy_axis = s.axes_manager.signal_axes[0]
        energy_axis.scale = 0.02
        energy_axis.offset = -5

        gauss = Gaussian()
        gauss.centre.value = 0
        gauss.A.value = 5000
        gauss.sigma.value = 0.5
        gauss2 = Gaussian()
        gauss2.sigma.value = 0.5
        # Inflexion point 1.5
        gauss2.A.value = 5000
        gauss2.centre.value = 5
        s.data[:] = (gauss.function(energy_axis.axis) +
                     gauss2.function(energy_axis.axis))
        #        s.add_poissonian_noise()
        self.signal = s
コード例 #20
0
 def setUp(self):
     g = Gaussian()
     g.A.value = 10000.0
     g.centre.value = 5000.0
     g.sigma.value = 500.0
     axis = np.arange(10000)
     s = Spectrum(g.function(axis))
     m = s.create_model()
     self.model = m
     self.g = g
     self.axis = axis
     self.rtol = 0.00
コード例 #21
0
 def setUp(self):
     np.random.seed(1)
     axes = np.array([[
         100 * np.random.random() + np.arange(0., 600, 1) for i in range(3)
     ] for j in range(4)])
     g = Gaussian()
     g.A.value = 30000.
     g.centre.value = 300.
     g.sigma.value = 150.
     data = g.function(axes)
     s = SpectrumSimulation(data)
     s.axes_manager[-1].offset = -150.
     s.axes_manager[-1].scale = 0.5
     s.add_gaussian_noise(2.0)
     m = s.create_model()
     g = Gaussian()
     g.A.ext_force_positive = True
     g.A.ext_bounded = True
     m.append(g)
     g.active_is_multidimensional = True
     for index in m.axes_manager:
         m.fit()
     self.model = m
コード例 #22
0
 def setUp(self):
     # Create an empty spectrum
     s = EDSSEMSpectrum(np.zeros((2, 2, 3, 100)))
     energy_axis = s.axes_manager.signal_axes[0]
     energy_axis.scale = 0.04
     energy_axis.units = 'keV'
     energy_axis.name = "Energy"
     g = Gaussian()
     g.sigma.value = 0.05
     g.centre.value = 1.487
     s.data[:] = g.function(energy_axis.axis)
     s.metadata.Acquisition_instrument.SEM.Detector.EDS.live_time = 3.1
     s.metadata.Acquisition_instrument.SEM.beam_energy = 15.0
     self.signal = s
コード例 #23
0
 def setUp(self):
     data = np.random.random((10, 10, 600))
     s = EELSSpectrum(data)
     s.axes_manager[-1].offset = -150.
     s.axes_manager[-1].scale = 0.5
     s.metadata.set_item(
         'Acquisition_instrument.TEM.Detector.EELS.collection_angle', 3.0)
     s.metadata.set_item('Acquisition_instrument.TEM.beam_energy', 1.0)
     s.metadata.set_item('Acquisition_instrument.TEM.convergence_angle',
                         2.0)
     m = s.create_model(ll=s + 1,
                        auto_background=False,
                        auto_add_edges=False)
     g = Gaussian()
     m.append(g)
     self.model = m
コード例 #24
0
    def setUp(self):
        gs1 = Gaussian()
        gs1.A.value = 10000.0
        gs1.centre.value = 5000.0
        gs1.sigma.value = 500.0

        gs2 = Gaussian()
        gs2.A.value = 60000.0
        gs2.centre.value = 2000.0
        gs2.sigma.value = 300.0

        gs3 = Gaussian()
        gs3.A.value = 20000.0
        gs3.centre.value = 6000.0
        gs3.sigma.value = 100.0

        axis = np.arange(10000)
        total_signal = (gs1.function(axis) + gs2.function(axis) +
                        gs3.function(axis))

        s = Spectrum(total_signal)
        m = s.create_model()

        g1 = Gaussian()
        g2 = Gaussian()
        g3 = Gaussian()
        m.append(g1)
        m.append(g2)
        m.append(g3)

        self.model = m
        self.gs1 = gs1
        self.gs2 = gs2
        self.gs3 = gs3
        self.g1 = g1
        self.g2 = g2
        self.g3 = g3
        self.axis = axis
        self.rtol = 0.01
コード例 #25
0
 def setUp(self):
     self.gaussian = Gaussian()
     self.gaussian._axes_manager = Signal(np.zeros((3, 3, 1))).axes_manager
コード例 #26
0
ファイル: test_model.py プロジェクト: jonpdx/hyperspy
 def test_remove_component_by_name(self):
     m = self.model
     g1 = Gaussian()
     m.append(g1)
     m.remove(g1.name)
     nose.tools.assert_equal(len(m), 0)
コード例 #27
0
ファイル: test_model.py プロジェクト: jonpdx/hyperspy
 def test_component_already_in_model(self):
     m = self.model
     g1 = Gaussian()
     m.extend((g1, g1))
コード例 #28
0
ファイル: eels.py プロジェクト: jonpdx/hyperspy
    def fourier_ratio_deconvolution(self,
                                    ll,
                                    fwhm=None,
                                    threshold=None,
                                    extrapolate_lowloss=True,
                                    extrapolate_coreloss=True):
        """Performs Fourier-ratio deconvolution.

        The core-loss should have the background removed. To reduce
         the noise amplication the result is convolved with a
        Gaussian function.

        Parameters
        ----------
        ll: EELSSpectrum
            The corresponding low-loss (ll) EELSSpectrum.

        fwhm : float or None
            Full-width half-maximum of the Gaussian function by which
            the result of the deconvolution is convolved. It can be
            used to select the final SNR and spectral resolution. If
            None, the FWHM of the zero-loss peak of the low-loss is
            estimated and used.
        threshold : {None, float}
            Truncation energy to estimate the intensity of the
            elastic scattering. If None the threshold is taken as the
             first minimum after the ZLP centre.
        extrapolate_lowloss, extrapolate_coreloss : bool
            If True the signals are extrapolated using a power law,

        Notes
        -----
        For details see: Egerton, R. Electron Energy-Loss
        Spectroscopy in the Electron Microscope. Springer-Verlag, 2011.

        """
        self._check_signal_dimension_equals_one()
        orig_cl_size = self.axes_manager.signal_axes[0].size

        if threshold is None:
            threshold = ll.estimate_elastic_scattering_threshold()

        if extrapolate_coreloss is True:
            cl = self.power_law_extrapolation(window_size=20,
                                              extrapolation_size=100)
        else:
            cl = self.deepcopy()

        if extrapolate_lowloss is True:
            ll = ll.power_law_extrapolation(window_size=100,
                                            extrapolation_size=100)
        else:
            ll = ll.deepcopy()

        ll.hanning_taper()
        cl.hanning_taper()

        ll_size = ll.axes_manager.signal_axes[0].size
        cl_size = self.axes_manager.signal_axes[0].size
        # Conservative new size to solve the wrap-around problem
        size = ll_size + cl_size - 1
        # Increase to the closest multiple of two to enhance the FFT
        # performance
        size = int(2**np.ceil(np.log2(size)))

        axis = ll.axes_manager.signal_axes[0]
        if fwhm is None:
            fwhm = float(ll.get_current_signal().estimate_peak_width()())
            print("FWHM = %1.2f" % fwhm)

        I0 = ll.estimate_elastic_scattering_intensity(threshold=threshold)
        if ll.axes_manager.navigation_size > 0:
            I0 = I0.data
            I0_shape = list(I0.shape)
            I0_shape.insert(axis.index_in_array, 1)
            I0 = I0.reshape(I0_shape)

        from hyperspy.components import Gaussian
        g = Gaussian()
        g.sigma.value = fwhm / 2.3548
        g.A.value = 1
        g.centre.value = 0
        zl = g.function(
            np.linspace(axis.offset, axis.offset + axis.scale * (size - 1),
                        size))
        z = np.fft.rfft(zl)
        jk = np.fft.rfft(cl.data, n=size, axis=axis.index_in_array)
        jl = np.fft.rfft(ll.data, n=size, axis=axis.index_in_array)
        zshape = [
            1,
        ] * len(cl.data.shape)
        zshape[axis.index_in_array] = jk.shape[axis.index_in_array]
        cl.data = np.fft.irfft(z.reshape(zshape) * jk / jl,
                               axis=axis.index_in_array)
        cl.data *= I0.data
        cl.crop(-1, None, int(orig_cl_size))
        cl.metadata.General.title = (self.metadata.General.title +
                                     ' after Fourier-ratio deconvolution')
        if cl.tmp_parameters.has_item('filename'):
            cl.tmp_parameters.filename = (self.tmp_parameters.filename +
                                          'after_fourier_ratio_deconvolution')
        return cl
コード例 #29
0
 def setUp(self):
     self.gaussian = Gaussian()
コード例 #30
0
 def setUp(self):
     s = Spectrum(range(100))
     m = s.create_model()
     m.append(Gaussian())
     m.fit()
     self.m = m