7. phaseshifts API
7.1. Package Contents
This chapter covers the main modules of the phaseshifts and provides some API documentation for those wishing to incorporate this package into their own projects.
7.2. Subpackages
- The main sub packages are listed below:
phaseshifts.gui
- includes all the necessary files for the graphical user interface.phaseshifts.lib
- contains the Fortran libphsh library and the python wrappings.phaseshifts.doc
- source documentation for the phaseshifts package.phaseshifts.test
- modules for testing the phaseshift package.
7.3. Submodules
7.3.1. phaseshifts.atorb
atorb.py
Provides convenience functions for generating input and calculating atomic charge densities for use with the Barbieri/Van Hove phase shift calculation package.
- See:
http://www.icts.hkbu.edu.hk/surfstructinfo/SurfStrucInfo_files/leed/
- Requires:
f2py (for libphsh fortran wrapper generation)
Note
To generate libphsh fortran wrappers (libphsh.pyd) for your platform then use ‘python setup.py’ in the lib directory of this package to install into your python distribution. Alternatively, use:
f2py -c -m libphsh libphsh.f
Windows users may have to add appropriate compiler switches, e.g.
# 32-bit
f2py -c -m libphsh --fcompiler=gfortran --compiler=mingw-32 libphsh.f
# 64-bit
f2py -c -m libphsh --fcompiler=gfortran --compiler=mingw-64 libphsh.f
- class phaseshifts.atorb.Atorb(**kwargs)[source]
Bases:
object
Notes
Original author: Eric Shirley
There are nr grid points, and distances are in Bohr radii
,
The orbitals are stored in phe(), first index goes , the second index is the orbital index ()
Look at the atomic files after printing this out to see everything… Suffice it to say, that the charge density at radius in units of electrons per cubic Bohr radius is given by:
Think of the phe functions as plotting the radial wave-functions as a function of radius on a logarithmic mesh…
The Dirac equation is solved for the orbitals, whereas their density is treated by setting to Dirac’s times the sign of …
So we are doing Dirac-Fock, except that we are not treating exchange exactly, in terms of working with major and minor components of the orbitals, and the phe’s give the CORRECT CHARGE DENSITY…
The above approximation ought to be very small for valence states, so you need not worry about it…
The Breit interaction has been neglected altogether…it should not have a huge effect on the charge density you are concerned with…
- static calculate_Q_density(**kwargs)[source]
- Parameters:
- kwargs may be any of the following.
- elementint or str, optional
Generate element atorb input file on the fly. Additional kwargs may be used to govern the structure of the input file - please use
help(phaseshifts.Atorb.gen_input)
for more information.- inputstr, optional
Specify atorb input file otherwise will use the class instance value.
- output_dirstr, optional
Specify the output directory for the at_*.i file generated, otherwise the default current working directory is used.
- Returns:
- strfilename
Examples
>>> Atorb.calculate_Q_density(input='atorb_C.txt') 18.008635 -33.678535 4.451786 -36.654271 1.569616 -37.283660 0.424129 -37.355634 0.116221 -37.359816 0.047172 -37.360317 0.021939 -37.360435 0.010555 -37.360464 0.005112 -37.360471 0.002486 -37.360473 0.001213 -37.360473 0.000593 -37.360473 0.000290 -37.360474 N L M J S OCC. 1 0 0 -1/2 1 2.0000 -11.493862 2 0 0 -1/2 1 2.0000 -0.788618 2 1 1 -1/2 1 0.6667 -0.133536 2 1 1 -3/2 1 1.3333 -0.133311 TOTAL ENERGY = -37.360474 -1016.638262
>>> Atorb.calculate_Q_density(element='H') 0.500007 -0.343752 0.152392 -0.354939 0.065889 -0.357254 0.028751 -0.357644 0.012732 -0.357703 0.005743 -0.357711 0.002641 -0.357712 0.001236 -0.357713 0.000587 -0.357713 0.000282 -0.357713 N L M J S OCC. 1 0 0 -1/2 1 1.0000 -0.229756 TOTAL ENERGY = -0.357713 -9.733932
- static gen_input(element, **kwargs)[source]
- Parameters:
- elementint or str
Either the atomic number, symbol or name for a given element
- outputstr, optional
File string for atomic orbital output (default: ‘at_<symbol>.i’)
- ngridint, optional
Number of points in radial grid (default: 1000)
- relbool, optional
Specify whether to consider relativistic effects
- filenamestr, optional
Name for generated input file (default: ‘atorb’)
- headerstr, optional
Comment at beginning of input file
- methodstr, optional
Exchange correlation method using either 0.0=Hartree-Fock, 1.0=LDA, -alpha = xalpha (default: 0.0)
- relicfloat, optional
Relic value for calculation (default: 0)
- mixing_SCFfloat, optional
Self consisting field value (default: 0.5)
- tolerancefloat, optional
Eigenvalue tolerance (default: 0.0005)
- echfloat, optional
(default: 100)
- static get_quantum_info(shell)[source]
- Returns:
- tuple(int, int, list[float, float], list[float, float])
(n, l, j=[l-s, l+s], occ=[, ])
Notes
n is the principle quantum number ().
l is the azimuthal quantum number ().
s is the spin quantum number ().
j is the total angular momentum quantum numbers for both or , respectively.
is the occupancy of the spin-split and levels, respectively.
- static replace_core_config(electron_config)[source]
- Parameters:
- electron_configstr
String containing the electronic configuration of the given element.
- Returns:
- str
A substituted string where the nobel gas core has been replaced.
Examples
>>> Atorb.replace_core_config('[Ar] 4s2') '1s2 2s2 2p6 3s2 3p6 4s2'
>>> Atorb.replace_core_config('[Xe] 6s2 5d1') '1s2 2s2 2p6 3s2 3p6 3d10 4s2 4p6 5s2 4d10 5p6 6s2 5d1'
7.3.2. phaseshifts.conphas
conphas.py
Provides a native python version of the conphas (phsh3) FORTRAN program by W. Moritz, which is distributed as part of the SATLEED code (see “Barbieri/Van Hove phase shift calculation package” section) and can be found at: http://www.icts.hkbu.edu.hk/surfstructinfo/SurfStrucInfo_files/ leed/leedpack.html
The Conphas() class also provides a number of convenience functions (see docstrings below).
7.3.2.1. Examples
>>> from os.path import join
>>> from phaseshifts.conphas import Conphas
>>> con = Conphas(output_file=join('testing', 'leedph_py.d'), lmax=10)
>>> con.set_input_files([join('testing', 'ph1')])
>>> con.set_format('cleed')
>>> con.calculate()
- class phaseshifts.conphas.Conphas(input_files=[], output_file=[], formatting=None, lmax=10, **kwargs)[source]
Bases:
object
Class Conphas
Notes
This work is based on the original conphas (phsh3) FORTRAN program by W. Moritz, which is distributed as part of the SATLEED code (see “Barbieri/Van Hove phase shift calculation package” section) and can be found at: http://www.icts.hkbu.edu.hk/surfstructinfo/SurfStrucInfo_files/ leed/leedpack.html
- __fix_path(file_path)
Fix escaped characters in filepath
- __set_data(data=None)
- calculate()[source]
Calculates continuous phase shifts from input file(s).
Examples
>>> con = Conphas(output_file=r'testing\leedph_py.d', lmax=10) >>> con.set_input_files([r'testing\ph1']) >>> con.set_format('cleed') >>> con.calculate() L = 0 jump between 25.0 eV and 30.0 eV; IFAK = -1 L = 1 jump between 65.0 eV and 70.0 eV; IFAK = -1 L = 2 jump between 20.0 eV and 25.0 eV; IFAK = 1 jump between 80.0 eV and 85.0 eV; IFAK = 0 L = 3 L = 4 jump between 275.0 eV and 280.0 eV; IFAK = 1 L = 5 L = 6 L = 7 L = 8 L = 9 L = 10
- load_data(filename)[source]
Load (discontinuous) phase shift data from file
- Parameters:
- filestr
Path to phase shift file.
- Returns:
- tuple: (double, double, int, int, ndarray)
(initial_energy, energy_step, n_phases, lmf, data)
Notes
initial_energy is the starting energy of the phase shifts.
energy_step is the change in energy between consecutive values.
n_phases is the number of phase shifts contained in the file.
lmf is the maximum azimuthal quantum number considered.
data is a (2 x n_phases) array containing the phase shift data.
- read_datafile(filename)[source]
Read in discontinuous phase shift file
- Parameters:
- filenamestr
The path to the discontinuous phase shift file
- set_format(formatting=None)[source]
Set appropriate format from available options
- Parameters:
- formatstr, optional
The format identifier for different packages; can be ‘cleed’ or None.
7.3.3. phaseshifts.elements
Properties of the chemical elements.
Each chemical element is represented as an object instance. Physicochemical and descriptive properties of the elements are stored as instance attributes.
- Author:
- Version:
2013.03.18
7.3.3.1. Requirements
7.3.3.2. References
7.3.3.3. Examples
>>> from elements import ELEMENTS
>>> len(ELEMENTS)
109
>>> str(ELEMENTS[109])
'Meitnerium'
>>> ele = ELEMENTS['C']
>>> ele.number, ele.symbol, ele.name, ele.eleconfig
(6, 'C', 'Carbon', '[He] 2s2 2p2')
>>> ele.eleconfig_dict
{(1, 's'): 2, (2, 'p'): 2, (2, 's'): 2}
>>> sum(ele.mass for ele in ELEMENTS)
14659.1115599
>>> for ele in ELEMENTS:
... ele.validate()
... ele = eval(repr(ele))