コード例 #1
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_function():
    g = Voigt(legacy=False)
    g.area.value = 5
    g.sigma.value = 0.5
    g.gamma.value = 0.2
    g.centre.value = 1
    assert_allclose(g.function(0), 0.78853024)
    assert_allclose(g.function(1), 2.97832092)
コード例 #2
0
ファイル: test_pes_voigt.py プロジェクト: ytzeng1/hyperspy
def test_legacy():
    """Legacy test, to be removed in v2.0."""
    with pytest.warns(
            VisibleDeprecationWarning,
            match="API of the `Voigt` component will change",
    ):
        g = Voigt(legacy=True)
        g.area.value = 5
        g.FWHM.value = 0.5
        g.gamma.value = 0.2
        g.centre.value = 1
        np.testing.assert_allclose(g.function(0), 0.35380168)
        np.testing.assert_allclose(g.function(1), 5.06863535)
コード例 #3
0
ファイル: electron_diffraction.py プロジェクト: erh3cq/pyxem
    def get_background_model(self, saturation_radius):
        """Creates a model for the background of the signal.

        The mean radial profile is fitted with the following three components:

        * Voigt profile for the central beam
        * Exponential profile for the diffuse scatter
        * Linear profile for the background offset and to improve the fit

        Using the exponential profile and the linear profile, an
        ElectronDiffraction signal is produced representing the mean background
        of the signal. This may be used for background subtraction.

        Parameters
        ----------
        saturation_radius : int
            The radius of the region about the central beam in which pixels are
            saturated.

        Returns
        -------
        ElectronDiffraction
            The mean background of the signal.

        """
        # TODO: get this done without taking the mean
        profile = self.get_radial_profile().mean()
        model = profile.create_model()
        e1 = saturation_radius * profile.axes_manager.signal_axes[0].scale
        model.set_signal_range(e1)

        direct_beam = Voigt()
        direct_beam.centre.value = 0
        direct_beam.centre.free = False
        direct_beam.FWHM.value = 0.1
        direct_beam.area.bmin = 0
        model.append(direct_beam)

        diffuse_scatter = Exponential()
        diffuse_scatter.A.value = 0
        diffuse_scatter.A.bmin = 0
        diffuse_scatter.tau.value = 0
        diffuse_scatter.tau.bmin = 0
        model.append(diffuse_scatter)

        linear_decay = Polynomial(1)
        model.append(linear_decay)

        model.fit(bounded=True)

        x_axis = self.axes_manager.signal_axes[0].axis
        y_axis = self.axes_manager.signal_axes[1].axis
        xs, ys = np.meshgrid(x_axis, y_axis)
        rs = (xs ** 2 + ys ** 2) ** 0.5
        bg = ElectronDiffraction(
            diffuse_scatter.function(rs) + linear_decay.function(rs))
        for i in (0, 1):
            bg.axes_manager.signal_axes[i].update_from(
                self.axes_manager.signal_axes[i])
        return bg
コード例 #4
0
def test_estimate_parameters_binned(only_current, binned, lazy, uniform):
    s = Signal1D(np.empty((200, )))
    s.axes_manager.signal_axes[0].is_binned = binned
    axis = s.axes_manager.signal_axes[0]
    axis.scale = .05
    axis.offset = -5
    g1 = Voigt(centre=1, area=5, gamma=0.001, sigma=0.5, legacy=False)
    s.data = g1.function(axis.axis)
    if lazy:
        s = s.as_lazy()
    g2 = Voigt(legacy=False)
    if not uniform:
        axis.convert_to_non_uniform_axis()
    if binned and uniform:
        factor = axis.scale
    elif binned:
        factor = np.gradient(axis.axis)
    else:
        factor = 1
    assert g2.estimate_parameters(s,
                                  axis.low_value,
                                  axis.high_value,
                                  only_current=only_current)
    assert g2._axes_manager[-1].is_binned == binned
    np.testing.assert_allclose(g2.sigma.value, 0.5, 0.01)
    np.testing.assert_allclose(g1.area.value, g2.area.value * factor, 0.01)
    np.testing.assert_allclose(g2.centre.value, 1, 1e-3)
コード例 #5
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_function_nd(binned, lazy):
    s = Signal1D(np.empty((200, )))
    s.metadata.Signal.binned = binned
    axis = s.axes_manager.signal_axes[0]
    axis.scale = .05
    axis.offset = -5
    g1 = Voigt(centre=1, area=5, gamma=0, sigma=0.5, legacy=False)
    s.data = g1.function(axis.axis)
    s2 = stack([s] * 2)
    if lazy:
        s2 = s2.as_lazy()
    g2 = Voigt(legacy=False)
    factor = axis.scale if binned else 1
    g2.estimate_parameters(s2, axis.low_value, axis.high_value, False)
    assert g2.binned == binned
    assert_allclose(g2.function_nd(axis.axis) * factor, s2.data)
コード例 #6
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_estimate_parameters_binned(only_current, binned, lazy):
    s = Signal1D(np.empty((200, )))
    s.metadata.Signal.binned = binned
    axis = s.axes_manager.signal_axes[0]
    axis.scale = .05
    axis.offset = -5
    g1 = Voigt(centre=1, area=5, gamma=0.001, sigma=0.5, legacy=False)
    s.data = g1.function(axis.axis)
    if lazy:
        s = s.as_lazy()
    g2 = Voigt(legacy=False)
    factor = axis.scale if binned else 1
    assert g2.estimate_parameters(s,
                                  axis.low_value,
                                  axis.high_value,
                                  only_current=only_current)
    assert g2.binned == binned
    assert_allclose(g2.sigma.value, 0.5, 0.01)
    assert_allclose(g1.area.value, g2.area.value * factor, 0.01)
    assert_allclose(g2.centre.value, 1, 1e-3)
コード例 #7
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_util_lwidth_getset():
    g1 = Voigt(legacy=False)
    g1.lwidth = 3.0
    assert_allclose(g1.lwidth, 3.0)
コード例 #8
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_util_lwidth_get():
    g1 = Voigt(legacy=False)
    g1.gamma.value = 3.0
    assert_allclose(g1.lwidth / 2, g1.gamma.value)
コード例 #9
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_util_FWHM_getset():
    g1 = Voigt(legacy=False)
    g1.FWHM = 1.0
    assert_allclose(g1.FWHM, 1.0)
コード例 #10
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_util_FWHM_get():
    g1 = Voigt(legacy=False)
    g1.sigma.value = 1.0
    assert_allclose(g1.FWHM, 1.0 * (2 * np.sqrt(2 * np.log(2))))
コード例 #11
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_util_gwidth_getset():
    g1 = Voigt(legacy=False)
    g1.gwidth = 1.0
    assert_allclose(g1.gwidth, 1.0)
コード例 #12
0
ファイル: test_voigt.py プロジェクト: pc494/hyperspy
def test_util_gwidth_set():
    g1 = Voigt(legacy=False)
    g1.gwidth = 1.0
    assert_allclose(g1.sigma.value, 1.0 / (2 * np.sqrt(2 * np.log(2))))
コード例 #13
0
def test_util_lwidth_set():
    g1 = Voigt(legacy=False)
    g1.lwidth = 3.0
    np.testing.assert_allclose(g1.lwidth / 2, g1.gamma.value)
コード例 #14
0
def test_util_FWHM_set():
    g1 = Voigt(legacy=False)
    g1.FWHM = 1.0
    np.testing.assert_allclose(g1.sigma.value,
                               1.0 / (2 * np.sqrt(2 * np.log(2))))
コード例 #15
0
def test_util_gwidth_get():
    g1 = Voigt(legacy=False)
    g1.sigma.value = 1.0
    np.testing.assert_allclose(g1.gwidth, 1.0 * (2 * np.sqrt(2 * np.log(2))))