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