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}\).
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).
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.
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]