예제 #1
0
 def test_linear_upsize(self, dtype):
     spectrum = EDSTEMSpectrum(np.ones([4, 5, 10], dtype=dtype))
     scale = [0.3, 0.2, 0.5]
     res = spectrum.rebin(scale=scale)
     np.testing.assert_allclose(res.data, 0.03 * np.ones((20, 16, 20)))
     for axis in res.axes_manager._axes:
         assert scale[axis.index_in_axes_manager] == axis.scale
     res = spectrum.rebin(scale=scale, crop=False)
     np.testing.assert_allclose(res.data.sum(), spectrum.data.sum())
예제 #2
0
 def test_linear_downsize(self, dtype):
     spectrum = EDSTEMSpectrum(np.ones([3, 5, 1], dtype=dtype))
     scale = (1.5, 2.5, 1)
     res = spectrum.rebin(scale=scale, crop=True)
     np.testing.assert_allclose(res.data, 3.75 * np.ones((1, 3, 1)))
     for axis in res.axes_manager._axes:
         assert scale[axis.index_in_axes_manager] == axis.scale
     res = spectrum.rebin(scale=scale, crop=False)
     np.testing.assert_allclose(res.data.sum(), spectrum.data.sum())
예제 #3
0
    def setup_method(self, method):
        s = EDSTEMSpectrum(np.ones([2, 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=2.5,
                                    tilt_stage=0.0,
                                    azimuth_angle=0,
                                    elevation_angle=35,
                                    energy_resolution_MnKa=130,
                                    beam_current=0.05)
        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)
        s.axes_manager[0].scale = 0.5
        s.axes_manager[1].scale = 0.5
        s.axes_manager[0].units = 'nm'
        s.axes_manager[1].units = 'nm'
        self.signal = s
예제 #4
0
def test_decomposition(normalise_poissonian_noise):
    s = EDSTEMSpectrum(np.ones(shape=(32, 32, 1024)))
    s.add_poissonian_noise()
    # default uses `vacuum_mask`
    s.decomposition(normalise_poissonian_noise)

    # test with numpy array mask
    mask = s.vacuum_mask().data
    s.decomposition(normalise_poissonian_noise, navigation_mask=mask)
예제 #5
0
    def setup_method(self, method):
        s = EDSTEMSpectrum(np.ones([2, 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=2.5, tilt_stage=0.0,
                                    azimuth_angle=0, elevation_angle=35,
                                    energy_resolution_MnKa=130,
                                    beam_current=0.05)
        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)
        s.axes_manager[0].scale = 0.5
        s.axes_manager[1].scale = 0.5
        self.signal = s
예제 #6
0
    def setUp(self):
        s = EDSTEMSpectrum(np.ones([2, 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,
        )
        s.metadata.Acquisition_instrument.TEM.Detector.EDS.real_time = 2.5
        s.metadata.Acquisition_instrument.TEM.beam_current = 0.05
        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)
        s.axes_manager[0].scale = 0.5
        s.axes_manager[1].scale = 0.5
        self.signal = s
예제 #7
0
def _create_signal(
    shape,
    dim,
    dtype,
):
    data = np.arange(np.product(shape)).reshape(shape).astype(dtype)
    if dim == 1:
        if len(shape) > 2:
            s = EELSSpectrum(data)
            s.set_microscope_parameters(beam_energy=100.,
                                        convergence_angle=1.,
                                        collection_angle=10.)
        else:
            s = EDSTEMSpectrum(data)
            s.set_microscope_parameters(beam_energy=100.,
                                        live_time=1.,
                                        tilt_stage=2.,
                                        azimuth_angle=3.,
                                        elevation_angle=4.,
                                        energy_resolution_MnKa=5.)
    else:
        s = BaseSignal(data)
        s.axes_manager.set_signal_dimension(dim)
    for i, axis in enumerate(s.axes_manager._axes):
        i += 1
        axis.offset = i * 0.5
        axis.scale = i * 100
        axis.name = "%i" % i
        if axis.navigate:
            axis.units = "m"
        else:
            axis.units = "eV"

    return s
예제 #8
0
 def test_get_calibration_from(self):
     s = self.signal
     scalib = EDSTEMSpectrum(np.ones(1024))
     energy_axis = scalib.axes_manager.signal_axes[0]
     energy_axis.scale = 0.01
     energy_axis.offset = -0.10
     s.get_calibration_from(scalib)
     assert (s.axes_manager.signal_axes[0].scale == energy_axis.scale)
예제 #9
0
 def test_linear_upscale_out(self):
     spectrum = EDSTEMSpectrum(np.ones([4, 1, 1]))
     scale = [1, 0.4, 1]
     offset = [0, -0.3, 0]
     res = spectrum.rebin(scale=scale)
     spectrum.data[2][0] = 5
     spectrum.rebin(scale=scale, out=res)
     np.testing.assert_allclose(
         res.data,
         [
             [[0.4]],
             [[0.4]],
             [[0.4]],
             [[0.4]],
             [[0.4]],
             [[2.0]],
             [[2.0]],
             [[1.2]],
             [[0.4]],
             [[0.4]],
         ],
         atol=1e-3,
     )
     for axis in res.axes_manager._axes:
         assert scale[axis.index_in_axes_manager] == axis.scale
         assert offset[axis.index_in_axes_manager] == axis.offset
예제 #10
0
def test_eds():
    s = EDSTEMSpectrum(([0, 1]))
    s2 = EDSSEMSpectrum(([0, 1]))
    s.axes_manager[0].convert_to_non_uniform_axis()
    s2.axes_manager[0].convert_to_non_uniform_axis()
    s.set_microscope_parameters(20)
    with pytest.raises(NotImplementedError):
        s.get_calibration_from(s)
    with pytest.raises(NotImplementedError):
        s2.get_calibration_from(s2)
    m = s.create_model()
    with pytest.raises(NotImplementedError):
        m.add_family_lines('Al_Ka')
    with pytest.raises(NotImplementedError):
        m._set_energy_scale('Al_Ka', [1.0])
    with pytest.raises(NotImplementedError):
        m._set_energy_offset('Al_Ka', [1.0])
예제 #11
0
# numpy dataset
np.random.seed(1001)
imageds = np.random.randint(1, 5, size=(3, 32, 32))
imageds_da = da.from_array(imageds)
hsimage = Signal2D(imageds)
hsimage_da = Signal2D(imageds_da).as_lazy()
hsimage.metadata.General.original_filename = "non/existant/path.emd"
hsimage.metadata.General.title = "dummy"
hsimage_da.metadata.General.original_filename = "non/existant/path.emd"
hsimage_da.metadata.General.title = "dummy"

# spectrum maps
specmap = np.random.randint(1, 5, size=(3, 32, 32, 3))
specmap_da = da.from_array(specmap)
hsspecmap = EDSTEMSpectrum(specmap)
hsspecmap_da = EDSTEMSpectrum(specmap_da).as_lazy()


@pytest.mark.parametrize("data", [imageds, imageds_da, hsimage, hsimage_da])
def test_match_series_create(data):
    mso = ms.MatchSeries(data)
    assert not mso.completed
    assert type(mso.data) == type(data)


@pytest.mark.xfail(raises=ValueError)
def test_match_series_fail():
    ms.MatchSeries()

예제 #12
0
 def setup_method(self, method):
     s = EDSTEMSpectrum(np.array([np.linspace(0.001, 0.5, 20)] * 100).T)
     s.add_poissonian_noise()
     self.signal = s
예제 #13
0
 def test_sum_minimum_missing(self):
     s = EDSTEMSpectrum(np.ones((4, 2, 1024)))
     s.sum()
예제 #14
0
 def setup_method(self, method):
     # Create an empty spectrum
     s = EDSTEMSpectrum(np.ones((4, 2, 1024)))
     s.metadata.Acquisition_instrument.TEM.Detector.EDS.live_time = 3.1
     s.metadata.Acquisition_instrument.TEM.beam_energy = 15.0
     self.signal = s
예제 #15
0
 def setUp(self):
     # Create an empty spectrum
     s = EDSTEMSpectrum(np.ones((4, 2, 1024)))
     s.mapped_parameters.TEM.EDS.live_time = 3.1
     s.mapped_parameters.TEM.beam_energy = 15.0
     self.signal = s
예제 #16
0
 def test_sum_minimum_missing(self):
     s = EDSTEMSpectrum(np.ones((4, 2, 1024)))
     s.sum()
예제 #17
0
 def setup_method(self, method):
     s = EDSTEMSpectrum(np.array([np.linspace(0.001, 0.5, 20)] * 100).T)
     s.add_poissonian_noise()
     self.signal = s
예제 #18
0
 def setUp(self):
     s = Simulation(np.array([np.linspace(0.001, 0.5, 20)] * 100).T)
     s.add_poissonian_noise()
     s = EDSTEMSpectrum(s.data)
     self.signal = s