def testSymmetrizeAroundZLPnegativevalues(self): #Spectrum contains negative values data = np.array([1, -1, 1, 1, 20, 35, 20, 1, -1, -1, 1]) eels = Spectrum.EELSSpectrum(data, dispersion=0.2, ZLP=True) eels_sym = eels.SymmetrizeAroundZLP() data_positive = np.array([1, 0, 1, 1, 20, 35, 20, 1, 0, 0, 1]) self.assertArraysEqual(data_positive, eels_sym.intensity)
def testNormalize(self): #Test normalization to integrated intensity data = np.array([1, 20, 35, 20, 1, 1, 1, 1, 1, 1, 1]) eels = Spectrum.EELSSpectrum(data, dispersion=0.2, ZLP=True) eels_norm = eels.Normalize() data_norm = data / 83. self.assertArraysEqual(data_norm, eels_norm.intensity)
def testSymmetrizeAroundZLPright(self): #ZLP is in the right half of the spectrum data = np.array([1, 1, 1, 1, 1, 1, 1, 20, 35, 20, 1]) eels = Spectrum.EELSSpectrum(data, dispersion=0.2, ZLP=True) eels_sym = eels.SymmetrizeAroundZLP() data_sym = np.array([1, 20, 35, 20, 1]) self.assertArraysEqual(eels_sym.intensity, data_sym)
def ExtractSpectrum(self, mask3D): extractedspectrum = Spectrum.EELSSpectrum(np.sum(np.sum( np.ma.masked_array(self.data, mask3D), axis=0), axis=0), dispersion=self.dispersion, units=self.spectrum_units) return extractedspectrum
def testPadSpectrumright(self): #Pad the right side of the spectrum with 0s data = np.array([1, 1, 1, 1, 20, 35, 20, 1, 1, 1, 1]) data_pad = np.array([1, 1, 1, 1, 20, 35, 20, 1, 1, 1, 1, 0, 0, 0]) eels = Spectrum.EELSSpectrum(data, dispersion=0.2, ZLP=True) eels_pad = eels.PadSpectrum(3, pad_value=0, pad_side='right') self.assertArraysEqual(eels_pad.intensity, data_pad)
def ExtractSpectrum(self, mask3D): extractedspectrum = Spectrum.EELSSpectrum( np.mean(np.mean(np.ma.masked_array(self.data, mask3D), axis=0), axis=0), SpectrumRange=self.SpectrumRange, units=self.spectrum_units) return extractedspectrum
def testPadSpectrumRangeleft(self): #Pad the left side of the spectrum with 0s data = np.array([1, 1, 1, 1, 20, 35, 20, 1, 1, 1, 1]) s_range = np.array( [-0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]) data_pad = np.array([0, 0, 0, 1, 1, 1, 1, 20, 35, 20, 1, 1, 1, 1]) s_range_pad = np.array([ -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, ]) eels = Spectrum.EELSSpectrum(data, SpectrumRange=s_range) eels_pad = eels.PadSpectrum(3, pad_value=0, pad_side='left') self.assertTrue(np.allclose(eels_pad.SpectrumRange, s_range_pad))
def testeVSliceDispersionIrrational(self): data = np.array([35, 20, 1, 28, 3, 5, 4, 7, 9, 15]) Srange = np.linspace(10, 15, num=10) eels = Spectrum.EELSSpectrum(data, SpectrumRange=Srange) sliced = eels.eVSlice(11, 13) print(Srange) self.assertArraysEqual(np.array([1, 28, 3, 5]), sliced)
def testSymmetrizeAroundZLPcenter(self): #ZLP is exactly in the middle of the spectrum data = np.array([1, 1, 1, 1, 20, 35, 20, 1, 1, 1, 1]) eels = Spectrum.EELSSpectrum(data, dispersion=0.2, ZLP=True) eels_sym = eels.SymmetrizeAroundZLP() self.assertArraysEqual(eels.intensity, eels_sym.intensity)
import numpy as np import Spectrum import SpectrumPlotter import CLSpectrumData import SpectrumImagePlotter import matplotlib.pyplot as plt import SpectrumImage import os #### Testing Spectrum and SpectrumPlotter PSFfolder = '/home/isobel/Documents/McMaster/EELS/2016-04-18/Sq1A_(1,8)' PSFfilename = 'Spectrum_ZLP.csv' Spectrumfilename = 'Processed/Spectrum_1.csv' spectrum = Spectrum.EELSSpectrum.LoadFromCSV( os.path.join(PSFfolder, Spectrumfilename)) Spectrumsmooth = Spectrum.EELSSpectrum(spectrum.SmoothingFilter1D(sigma=2)) #PSF = Spectrum.EELSSpectrum.LoadFromCSV(os.path.join(PSFfolder, PSFfilename)) #PSFsmooth = Spectrum.EELSSpectrum(PSF.SmoothingFilter1D()) s = np.random.random(100) * 0.00003 wvl = np.arange(500, 600) SCL = Spectrum.CLSpectrum(s, wvl) fig = plt.figure() ax = plt.axes() s = SpectrumPlotter.SpectrumManager(spectrum, ax) s.update_spectrum(Spectrumsmooth, 1) s.update_spectrum(SCL, 'CL') plt.show() #S.SaveSpectrumAsCSV('/home/isobel/Documents/McMaster/PythonCodes/DataAnalysis/test.csv')
writer = csv.writer(csvfile, delimiter=' ') writer.writerow(ExportHeaders) writer.writerows(ExportData) # Import test data (simulated spectrum from Bellido et al (2014) folder = 'TestCase' spec1name = 'SimRod_(60,0)_10meV.csv' # Plot original data spec1 = Spectrum.EELSSpectrum.LoadFromCSV(os.path.join(folder, spec1name)) spec1plot = SpectrumPlotter.SpectrumManager(spec1) # Create point spread function (PSF) PSF_Gauss = Spectrum.EELSSpectrum(signal.gaussian(801, std=np.sqrt(2)), dispersion=0.01, ZLP=True) # Convolve simulated data with PSF conv = np.convolve(PSF_Gauss.intensity, spec1.intensity) spec2 = Spectrum.EELSSpectrum(conv / np.max(conv), dispersion=0.01, ZLP=True) # Plot PSF and convolved (blurred) spectra spec1plot.update_spectrum(PSF_Gauss, ID='PSF Gauss') spec1plot.update_spectrum(spec2, ID='Convolved') spec1plot.add_legend() iterations = np.append(np.arange(1, 1000), np.array([2000, 2500, 3000, 3500, 4000, 4500, 5000])) iterations = np.arange(10) spec2RL = collections.OrderedDict()
spec1name = 'SimRod_(60,0)_10meV.csv' psfname = 'PSF_exp.csv' # Import and plot original data spec1 = Spectrum.EELSSpectrum.LoadFromCSV(os.path.join(folder, spec1name)) spec1plot = SpectrumPlotter.SpectrumManager(spec1, cmap=plt.get_cmap('brg')) # Import and plot original psf psf = Spectrum.EELSSpectrum.LoadFromCSV(os.path.join(folder, psfname)) psf.intensity = psf.intensity/np.max(psf.intensity) psf.SpectrumRange = np.append(psf.SpectrumRange[1:], psf.SpectrumRange[-1] + psf.dispersion) spec1plot.update_spectrum(psf, ID='PSF') # Convolve data with PSF conv = np.convolve(psf.intensity, spec1.intensity, 'same') spec_conv = Spectrum.EELSSpectrum(conv/np.max(conv), ZLP=True, dispersion=0.01) spec1plot.update_spectrum(spec_conv, ID='conv') # Make poisson noise noise = np.random.poisson(spec_conv.intensity/np.min(spec_conv.intensity)) # Noisy data noised = spec_conv.intensity + noise spec_noise = Spectrum.EELSSpectrum(noised/np.max(noised), SpectrumRange=spec_conv.SpectrumRange) spec1plot.update_spectrum(spec_noise, ID='noisy') iterations = np.arange(2001) #iterations = np.array([0, 1, 10, 50, 107, 123, 293, 350, 1000, 2000]) #iterations = np.arange(100) specRL = collections.OrderedDict() error = []
import os import matplotlib.pyplot as plt import numpy as np import collections import rms folder = 'TestCase' spec1name = 'SimRod_(60,0).csv' spec1 = Spectrum.EELSSpectrum.LoadFromCSV(os.path.join(folder, spec1name)) spec1plot = SpectrumPlotter.SpectrumManager(spec1) blankPSF = np.zeros(np.size(spec1.intensity)) blankPSF[int(len(blankPSF) / 2)] = 1 blankPSF = Spectrum.EELSSpectrum(blankPSF, ZLP=True, dispersion=spec1.dispersion) iterations = np.array([0, 1, 5, 10, 50, 100, 500, 1000, 5000]) spec1RL = collections.OrderedDict() error = [] for ii in iterations: spec1RL[ii] = spec1.RLDeconvolution(ii, blankPSF) spec1plot.update_spectrum(spec1RL[ii], ID='RL' + str(ii)) error.append(rms.rms(spec1RL[ii].intensity, spec1.intensity)) spec1plot.add_legend() fig_error = plt.figure('RMS error') plt.plot(iterations, error) plt.show()
def testeVSliceNoZLP(self): data = np.array([35, 20, 1, 28, 3, 5, 4, 7, 6, 9, 8]) Srange = np.arange(10, 20) eels = Spectrum.EELSSpectrum(data, SpectrumRange=Srange) sliced = eels.eVSlice(11, 13) self.assertArraysEqual(np.array([20, 1]), sliced)
def testeVSlice(self): data = np.array([35, 20, 1, 2, 3, 5, 4, 7, 6, 9, 8]) Srange = np.arange(0, 10) eels = Spectrum.EELSSpectrum(data, SpectrumRange=Srange) sliced = eels.eVSlice(2, 5) self.assertArraysEqual(np.array([1, 2, 3]), sliced)