A suite of tools for handling surface science related data

## Project description

# surfsci

A suite of tools for handling surface science related data. This project will contain tools for the following:

- X-ray photoelectron spectroscopy (XPS)

## Future

- Docmuentation (priority)

## X-ray Photonelectron Spectroscopy

### Example

An example analyzing a Ge peak fit within CasaXPS.

```
from surfsci import xps
# Shortcut for the XPS machine at Dalhousie
# xps_mach = 'Dalhousie'
# mach = xps.mach_param[xps_mach]
mach = {
'coef' : [0.9033, -4.0724, 5.0677, 1.1066],
'scale' : 0.01,
'work_func' : 4.6,
}
hv = xps.photon_energy['Al']
# Pass energy [eV], found from XPS operator
pe = 30
sfwagner_Ge = xps.sf.Ge['3d'].area
data = xps.parser.CasaXPS('Ge_example.csv')
# Labels defined by user in CasaXPS fits
pk_lbl = 'Ge 3d'
be = data.binding_energy(pk_lbl)
area = data.area(pk_lbl)
ke = xps.kinetic_energy(be, hv, mach['work_func'])
t_fn = xps.transmission(ke, pe, mach['coef'], mach['scale'])
t_fn_wagner = 1/ke # Proportional to 1/KE
sf_mach = xps.sf_machine(sfwagner_Ge, t_fn, t_fn_wagner)
pk_corr = xps.peak_correction(area, sf_mach)
# NOTE Use the surfsci.xps.XPSPeak(...) helper for convienence
# analyzed_Ge = xps.XPSPeak(pk_lbl, be, area, sfwagner_Ge, hv, pe, mach)
# NOTE Returns pandas.DataFrame with all parameters calculated.
# The user can also query parameters individually
# df = analyzed_Ge.df()
```

### Matrix Factor corrections

If using multple elements within a matrix (e.g. an alloy), you can utilize the
`surfsci.xps.matrix_factor`

function. You require the inelastic mean free path
of electron scattering (*imfp*) of both species in bulk and the density, as
well as the *imfp* of the matrix at the measured kinetic energies of both
elements. For example, if you have two corrected peaks: `pk_Mn_corr`

, and
`pk_Ge_corr`

. The *imfp* can be calculated using the TPP-2M equation for
inelastic mean free path, found in the following reference:

S. Tanuma, C. J. Powel, D. R. Penn, *Surf. Interf. Anal.*, Vol 21, 165 (1994)

```
from surfsci import xps
# pk_Mn_corr and pk_Ge_corr calculated as in the example above
# a is the kinetic energy used to determine imfp of Ge in Bulk
imfp_matrix_a = 21.17
imfp_Ge_a = 29.84
rho_Ge_a = 5.32
# b is the kinetic energy used to determine imfp of Mn in Bulk
imfp_matrix_b = 14.17
imfp_Mn_b = 14.87
rho_Mn_b = 7.43
mat_fact = xps.matrix_factor(imfp_Ge_a, imfp_Mn_b,
mfp_matrix_a, mfp_matrix_b,
rho_Ge_a, rho_Mn_b)
relative_pk_Ge_corr = (pk_Ge_corr/pk_Mn_corr)*mat_fact
# NOTE because Mn is used as the normalizing component we can use its
# corrected peak value directly, all other elements require the matrix
# factor correction
print('Ratios of Mn and Ge in MnGe matrix')
print('Mn : {:0.4e}'.format(pk_Mn_corr))
print('Ge : {:0.4e}'.format(relative_pk_Ge_corr))
```

### sfwagner.{db,py}: Empirically derived set of atomic sensitivity factors for XPS

The data in Appendix 5 is reproduced and provided here for non-profit use with permission of the publisher John Wiley & Sons Ltd.

"Practical Surface Analysis by Auger and X-ray Photoelectron Spectroscopy", D. Briggs and M. P. Seah, Appendix 5, p511-514, Published by J. Wiley and Sons in 1983, ISBN 0-471-26279

Copyright (c) 1983 by John Wiley & Sons Ltd.

The original set of data first appeared in the following resource: C. D. Wagner, L. E. Davis, M. V. Zeller, J. A. Taylor, R. M. Raymond and L. H. Gale, Surf. Interface Anal., 3. 211 (1981)

Any use of this data must include the citations above in any work.

## Electron Inelastic Mean Free Path (IMFP)

Electron IMFP can be calculated from using the Tanuma, Powel, Penn modified (TPP-2M) equation derived from equations (3), (4b,c,d,e) and (8) in the following reference:

S. Tanuma, C. J. Powel, D. R. Penn, *Surf. Interf. Anal.*, Vol 21, 165 (1994)

For convienence the IMFP TPP-2M equation is located in `surfsci.scatter`

and
can be used as such:

```
from surfsci import scatter
# Mn example
kinetic_energy = 1000 # Can be calculated from surfsci.xps.kinetic_energy
rho = 7.43 # [g/cc]
Nv = 7 # valence electrons
M = 53.938 # atomic mass
bandgap_energy = 0 # [eV]
# Return SI units [m]
imfp_Mn = scatter.imfp_TPP2M(kinetic_energy, rho, M, Nv,
bandgap_energy, 'SI')
```

The value here can be used in the `surfsci.xps.matrix_factor`

calculations
outlined above.

## Project details

## Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.