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)
Beispiel #4
0
 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')
Beispiel #11
0
        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()
Beispiel #12
0
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 = []
Beispiel #13
0
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()
Beispiel #14
0
 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)
Beispiel #15
0
 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)