From e3db4459c0f94ea48a583418a1bd11d5ca9440c3 Mon Sep 17 00:00:00 2001 From: e3fm8 <wolf.widdra@physik.uni-halle.de> Date: Sat, 16 Jan 2021 19:47:32 +0100 Subject: [PATCH] V1.1.4 additive Drude response corrected! --- libhreels/HREELS.py | 10 +++++++--- libhreels/ViewAuger.py | 4 ++-- libhreels/ViewHREELS.py | 4 ++-- libhreels/calcHREELS.py | 11 ++++++++--- libhreels/dielectrics.py | 28 +++++++++++++++++++++------- libhreels/mod_doeels.mod | Bin 1846 -> 1886 bytes pyproject.toml | 2 +- 7 files changed, 41 insertions(+), 18 deletions(-) diff --git a/libhreels/HREELS.py b/libhreels/HREELS.py index e68634d..6778f2e 100644 --- a/libhreels/HREELS.py +++ b/libhreels/HREELS.py @@ -65,16 +65,20 @@ def HREELS_elog_Dictionary(file, path): class HREELS: """This class handles HREELS data and their plotting. """ path = "\\\\backup-ep3\\BackUp02\\0_experiments\\EELS-PC4\HREELS\\gph_dat\\" - pathSav = "\\\\backup-ep3\\BackUp02\\0_experiments\\EELS-PC4\HREELS\\BATCH\\sav" + pathSav = "\\\\backup-ep3\\BackUp02\\0_experiments\\EELS-PC4\HREELS\\BATCH\\sav\\" # path = "./" - def __init__(self, _filename, datapath=path, dataSav=pathSav, scan=-1): + def __init__(self, _filename, datapath=path, dataSav=" ", scan=-1): + # def __init__(self, _filename, datapath=path, dataSav=pathSav, scan=-1): global eV2cm eV2cm = 8065.6 self.maxIntensity = 1. if scan < 0: self.datapath = myPath(datapath) else: - self.datapath = myPath(dataSav) + if dataSav == " ": + self.datapath = myPath(datapath+"..\\BATCH\\sav\\") + else: + self.datapath = myPath(dataSav) print('Directory {} is used to access individual scans.'.format(dataSav)) _filename += '.{:03.0f}'.format(scan) print('File {} is used.'.format(_filename)) diff --git a/libhreels/ViewAuger.py b/libhreels/ViewAuger.py index 47d32c0..7e02fa0 100644 --- a/libhreels/ViewAuger.py +++ b/libhreels/ViewAuger.py @@ -17,8 +17,8 @@ hhPath = hh.__path__[0] from libhreels.Auger import Auger # fix HighRes Displays -QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) -QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True) +# QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) +# QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True) class Auger_Window(QtWidgets.QMainWindow): diff --git a/libhreels/ViewHREELS.py b/libhreels/ViewHREELS.py index 4fdca54..abcc812 100644 --- a/libhreels/ViewHREELS.py +++ b/libhreels/ViewHREELS.py @@ -19,8 +19,8 @@ import argparse import libhreels.NoExpLogbook as lgb # fix HighRes Displays -QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) -QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True) +# QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) +# QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True) class HREELS_Window(QtWidgets.QMainWindow): """ fill in some initial data """ diff --git a/libhreels/calcHREELS.py b/libhreels/calcHREELS.py index 948c859..5bdd9e9 100644 --- a/libhreels/calcHREELS.py +++ b/libhreels/calcHREELS.py @@ -53,10 +53,14 @@ def importMaterials(string='', path=libDir): def addDrude(wPlasma, gPlasma, material): - ''' Adds a Drude response and returns a dictionary with all phonon parameters for the material provided - as 3rd argument. + ''' Adds a simple Drude response to the materials properties (which are provided + as 3rd argument) and returns a new materials dictionary with all phonon parameters. Note + that at least the eps_infinity has to given before. ''' newMaterial = deepcopy(material) + # To select the Drude response, the Lambin Fortran code requires a negative first oscillator frequency + # which is then interpreted as plasma frequency. + # The values of the former LO parameter are irrelevant (but need to be provided). try: if len(newMaterial['wTO']) > 0: newMaterial['wTO'] += [-1*wPlasma] @@ -167,9 +171,10 @@ def myMain(): film1 = lambin(film=[[oxide,d],[substrate,1000.]]) # xs, spectrum = film1.calcSurfaceLoss(x) xs, spectrum = film1.calcHREELS(x, normalized=True) - plt.plot(xs,spectrum, label=d) + plt.plot(xs,spectrum, label='{:.0f}'.format(d)) plt.ylabel('HREELS Intensity') plt.xlabel('Energy Loss (cm$^{-1}$)') + plt.legend(title='Thickness in ($\AA$)') plt.show() if __name__ == '__main__': diff --git a/libhreels/dielectrics.py b/libhreels/dielectrics.py index 38c49ec..5a98d67 100644 --- a/libhreels/dielectrics.py +++ b/libhreels/dielectrics.py @@ -76,25 +76,37 @@ class simpleOsci(oscillator): return nom/denom class drude: + '''Returns the additive Drude response with plasma frequency and damping as parameters. Note that for the + full dielctric response, this Drude contribution has to be added to eps_infinity and any phonon + contribution. + ''' def __init__(self, wPL, gamma): self.wPL = wPL self.gamma = gamma def eps(self,w): - return 1. - (self.wPL*self.wPL)/(w*w - 1j*self.gamma*w) + # Starting from libhreels version 1.1.4, it has been corrected: + return -(self.wPL*self.wPL)/(w*w - 1j*self.gamma*w) + def __call__(self, w): return self.eps(w) class drude2: - '''This defines an additive Drude component to a dielectric function: - eps_drude = drude2(omega_p, gamma_p, gamma_0) - ... eps(omega) + eps_drude(omega) + '''Returns the additive extended Drude response with three arguments: plasma frequency and two damping + parameters. The first damping parameter is the plasma damping and the second the damping at frequency + zero. Note that for the full dielectric response, this Drude contribution has to be added to eps_infinity + and any phonon contribution. + + eps = drude2(omega_p, gamma_p, gamma_0) ''' - def __init__(self, omega_p, gamma_p, gamma_0): + def __init__(self, omega_p, gamma_p, gamma_0=None): self.omega_p = omega_p self.gamma_p = gamma_p - self.gamma_0 = gamma_0 + if gamma_0: + self.gamma_0 = gamma_0 + else: + self.gamma_0 = gamma_p def eps(self,w): newW = np.where(w==0, 0.000567894, w) # Avoid zeros to avoid devision by zero @@ -114,12 +126,14 @@ def myMain(): oscis = [simpleOsci(TO, Q, f*TO) for (TO, Q, f) in data] - x = np.linspace(0,1000,num=1200) + x = np.linspace(5,1000,num=1200) epsInfinity = 5.25 eps = epsInfinity for each in oscis: eps += each(x) + # Now add Drude contribution: + eps += drude2(1200,60)(x) plotDielectrics(x, eps) if __name__ == '__main__': diff --git a/libhreels/mod_doeels.mod b/libhreels/mod_doeels.mod index da9db7080b19394948d95c96b304783a21845be8..221c658ae96d0bbceb9a3785c8fc2508c6090133 100644 GIT binary patch literal 1886 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 Y$Ps<>Y<<;CHRYA{AB;q71LHpc00^z5>Hq)$ literal 1846 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 diff --git a/pyproject.toml b/pyproject.toml index e48a3f6..1ca0fd6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "libhreels" -version = "1.1.3" +version = "1.1.4" description = "Handling, simulating, and plotting HREELS and Auger spectroscopy data" authors = ["Wolf Widdra <wolf.widdra@physik.uni-halle.de>"] include = ["*./libhreels/*"] -- GitLab