def get_core_loss_eels_line_scan_signal(): """Get an artificial core loss electron energy loss line scan spectrum. Similar to a Mn-L32 and Fe-L32 edge from a perovskite oxide. Returns ------- artificial_core_loss_line_scan_signal : HyperSpy EELSSpectrum Example ------- >>> s = hs.datasets.artificial_data.get_core_loss_eels_line_scan_signal() >>> s.plot() See also -------- get_low_loss_eels_model : get a low loss signal get_core_loss_eels_model : get a model instead of a signal get_low_loss_eels_line_scan_signal : get low loss signal with the same size """ from hyperspy.signals import EELSSpectrum from hyperspy import components1d x = np.arange(400, 800, 1) arctan_mn = components1d.Arctan(A=1, k=0.2, x0=688) arctan_mn.minimum_at_zero = True arctan_fe = components1d.Arctan(A=1, k=0.2, x0=612) arctan_fe.minimum_at_zero = True mn_l3_g = components1d.Gaussian(A=100, centre=695, sigma=4) mn_l2_g = components1d.Gaussian(A=20, centre=720, sigma=4) fe_l3_g = components1d.Gaussian(A=100, centre=605, sigma=4) fe_l2_g = components1d.Gaussian(A=10, centre=630, sigma=3) mn_intensity = [1, 1, 1, 1, 1, 1, 0.8, 0.5, 0.2, 0, 0, 0] fe_intensity = [0, 0, 0, 0, 0, 0, 0.2, 0.5, 0.8, 1, 1, 1] data = np.zeros((len(mn_intensity), len(x))) for i in range(len(mn_intensity)): data[i] += arctan_mn.function(x) * mn_intensity[i] data[i] += mn_l3_g.function(x) * mn_intensity[i] data[i] += mn_l2_g.function(x) * mn_intensity[i] data[i] += arctan_fe.function(x) * fe_intensity[i] data[i] += fe_l3_g.function(x) * fe_intensity[i] data[i] += fe_l2_g.function(x) * fe_intensity[i] data[i] += np.random.random(size=len(x)) * 0.7 s = EELSSpectrum(data) s.axes_manager.signal_axes[0].offset = x[0] s.metadata.General.title = 'Artifical core loss EEL spectrum' s.axes_manager.signal_axes[0].name = 'Electron energy loss' s.axes_manager.signal_axes[0].units = 'eV' s.axes_manager.navigation_axes[0].name = 'Probe position' s.axes_manager.navigation_axes[0].units = 'nm' s.set_microscope_parameters( beam_energy=200, convergence_angle=26, collection_angle=20) return s
def _make_mn_eels_spectrum(energy_range=None): if energy_range is None: energy_range = (590, 900) energy = np.arange(energy_range[0], energy_range[1], 1) mn_arctan = components1d.Arctan(A=2, k=0.2, x0=634) mn_arctan.minimum_at_zero = True mn_l3_g = components1d.Gaussian(A=100, centre=642, sigma=1.8) mn_l2_g = components1d.Gaussian(A=40, centre=652, sigma=1.8) mn_data = mn_arctan.function(energy) mn_data += mn_l3_g.function(energy) mn_data += mn_l2_g.function(energy) return mn_data
def _make_la_eels_spectrum(energy_range=None): if energy_range is None: energy_range = (590, 900) energy = np.arange(energy_range[0], energy_range[1], 1) la_arctan = components1d.Arctan(A=1, k=0.2, x0=845) la_arctan.minimum_at_zero = True la_l3_g = components1d.Gaussian(A=110, centre=833, sigma=1.5) la_l2_g = components1d.Gaussian(A=100, centre=850, sigma=1.5) la_data = la_arctan.function(energy) la_data += la_l3_g.function(energy) la_data += la_l2_g.function(energy) return la_data
def get_core_loss_eels_signal(): """Get an artificial core loss electron energy loss spectrum. Similar to a Mn-L32 edge from a perovskite oxide. Returns ------- artificial_core_loss_signal : HyperSpy EELSSpectrum Example ------- >>> s = hs.datasets.artificial_data.get_core_loss_eels_signal() >>> s.plot() See also -------- get_low_loss_eels_model : get a low loss signal get_core_loss_eels_model : get a model instead of a signal get_low_loss_eels_line_scan_signal : get EELS low loss line scan get_core_loss_eels_line_scan_signal : get EELS core loss line scan """ x = np.arange(400, 800, 1) arctan = components1d.Arctan(A=1, k=0.2, x0=688) arctan.minimum_at_zero = True mn_l3_g = components1d.Gaussian(A=100, centre=695, sigma=4) mn_l2_g = components1d.Gaussian(A=20, centre=720, sigma=4) data = arctan.function(x) data += mn_l3_g.function(x) data += mn_l2_g.function(x) data += np.random.random(size=len(x)) * 0.7 s = EELSSpectrum(data) s.axes_manager[0].offset = x[0] s.metadata.General.title = 'Artifical core loss EEL spectrum' s.axes_manager[0].name = 'Electron energy loss' s.axes_manager[0].units = 'eV' s.set_microscope_parameters(beam_energy=200, convergence_angle=26, collection_angle=20) return s
def get_core_loss_eels_signal(add_powerlaw=False): """Get an artificial core loss electron energy loss spectrum. Similar to a Mn-L32 edge from a perovskite oxide. Some random noise is also added to the spectrum, to simulate experimental noise. Parameters ---------- add_powerlaw : bool If True, adds a powerlaw background to the spectrum. Default False. Returns ------- artificial_core_loss_signal : HyperSpy EELSSpectrum Example ------- >>> import hs.datasets.artifical_data as ad >>> s = ad.get_core_loss_eels_signal() >>> s.plot() With the powerlaw background >>> s = ad.get_core_loss_eels_signal(add_powerlaw=True) >>> s.plot() To make the noise the same for multiple spectra, which can be useful for testing fitting routines >>> np.random.seed(seed=10) >>> s1 = ad.get_core_loss_eels_signal() >>> np.random.seed(seed=10) >>> s2 = ad.get_core_loss_eels_signal() >>> (s1.data == s2.data).all() True See also -------- get_low_loss_eels_model : get a low loss signal get_core_loss_eels_model : get a model instead of a signal get_low_loss_eels_line_scan_signal : get EELS low loss line scan get_core_loss_eels_line_scan_signal : get EELS core loss line scan """ from hyperspy.signals import EELSSpectrum from hyperspy import components1d x = np.arange(400, 800, 1) arctan = components1d.Arctan(A=1, k=0.2, x0=688) arctan.minimum_at_zero = True mn_l3_g = components1d.Gaussian(A=100, centre=695, sigma=4) mn_l2_g = components1d.Gaussian(A=20, centre=720, sigma=4) data = arctan.function(x) data += mn_l3_g.function(x) data += mn_l2_g.function(x) data += np.random.random(size=len(x)) * 0.7 if add_powerlaw: powerlaw = components1d.PowerLaw(A=10e8, r=3, origin=0) data += powerlaw.function(x) s = EELSSpectrum(data) s.axes_manager[0].offset = x[0] s.metadata.General.title = 'Artifical core loss EEL spectrum' s.axes_manager[0].name = 'Electron energy loss' s.axes_manager[0].units = 'eV' s.set_microscope_parameters( beam_energy=200, convergence_angle=26, collection_angle=20) return s