Playing with the scattering factor

In this tutorial we will play with an important parameter of any multiple scattering calculation: the scattering factor. When a electron wave is scattered by an atom, the electron trajectory is modified after this event. The particle will most likely continue its trajectory in the same direction (forward scattering), but, to a lesser extent and depending on the atom and on the electron energy, the direction of the scattered electron can change. The electron can even be backscattered. The angular distribution of the electron direction after the scattering event is the scattering factor.

In a paper published in 1998, T. Gerber et al. used the quite high backscattering factor of Rhodium atoms to probe the distance of Oxygen atoms adsorbed on a Rhodium surface. Some electrons coming from Oxygen atoms are ejected toward the Rhodium surface. They are then backscattered and interfere with the direct signal comming from Oxygen atoms (see the figure below). They demonstrated both experimentally and numerically with a sinle scattering computation that this lead to a very accurate probe of adsorbed species that can be sensitive to bond length changes of the order of \(\pm 0.02 \mathring{A}\).

../../_images/RhO_fig0.png

Interferences produced by the backscattering effect.

First, compute the scattering factor of both chemical species, Rh and O.

 1# coding: utf8
 2
 3from msspec.calculator import MSSPEC
 4from ase import Atoms
 5
 6# Create an atomic chain O-Rh
 7cluster = Atoms(['O', 'Rh'], positions = [(0,0,0), (0,0,4.)])
 8
 9# Create the calculator
10calc = MSSPEC(spectroscopy = 'PED')
11calc.set_atoms(cluster)
12cluster.absorber = 0
13
14# compute
15data = calc.get_scattering_factors(level='1s', kinetic_energy=723)
16
17data.view()

Running the above script should produce this polar plot. You can see that for Rhodium, the backscattering coefficient is still significant even at quite high kinetic energy (here 723 eV).

../../_images/RhO_fig1.png

Polar representation of the scattering factor

Let an Oxygen atom being adsorbed at a distance \(z_0\) of an fcc site of the (111) Rh surface. and compute the \(\theta-\phi\) scan for different values of \(z_0\). You can see on the stereographic projection 3 bright circles representing fringes of constructive interference between the direct O(1s) photoelectron wave and that backscattered by the Rhodium atoms. The center of these annular shapes changes from bright to dark due to the variation of the Oxygen atom height above the surface which changes the path difference.

../../_images/RhO_fig2a.png
../../_images/RhO_fig2b.gif

Stereographic projections of O(1s) emission at \(E_k\) = 723 eV for an oxygen atom on top of a fcc site of 3 Rh atoms at various altitudes \(z_0\)

Here is the script for the computation. (download)

 1# coding: utf8
 2
 3from msspec.calculator import MSSPEC
 4from ase.build import fcc111, add_adsorbate
 5import numpy as np
 6
 7data = None
 8all_z = np.arange(1.10, 1.65, 0.05)
 9for zi, z0 in enumerate(all_z):
10    # construct the cluster
11    cluster = fcc111('Rh', size = (2,2,1))
12    cluster.pop(3)
13    add_adsorbate(cluster, 'O', z0, position = 'fcc')
14    cluster.absorber = len(cluster) - 1
15
16    # Define a calculator
17    calc = MSSPEC(spectroscopy='PED', algorithm='inversion')
18    calc.set_atoms(cluster)
19
20    # Compute
21    data = calc.get_theta_phi_scan(level='1s', kinetic_energy=723, data=data)
22    dset = data[-1]
23    dset.title = "{:d}) z = {:.2f} angstroms".format(zi, z0)
24
25data.view()

See also

X-Ray Photoelectron Diffraction in the Backscattering Geometry: A Key to Adsorption Sites and Bond Lengths at Surfaces

T. Gerber, J. Wider, E. Welti & J. Osterwalder, Phys. Rev. Lett. 81 (8) p1654 (1998) [doi]