Skip to main content
`Ctrl`+`K`

# Activity 4: From single scattering to multiple scattering

In the previous activity, we saw that simple single scattering calculations (SSC) can be used to simulate photodiffraction diagrams with good accuracy. The approximation works fine when the emitting atom is very close to the surface. However, the SSC approach is no longer suitable for deeper emitter atoms, where multiple scattering effects come into play. In this activity, we will focus on a major consequence of multiple scattering: the defocusing effect.

The defocusing effect is presented in the figure below for a chain of nickel atoms. Although purely illustrative, understanding multiple scattering in atomic chains is fundamental because they are found in many situations, such as in particular directions of a crystal or in molecules of various lengths.

Fig. 10 The defocusing effect dur to multiple scattering in an atomic chain of Ni atoms.

In 1989, M.-L Xu, J.J. Barton and M.A. Van Hove studied these multiple scattering effects on atomic chains (see their paper below). In the spirit of figure 3 of their paper, we will create 3 atomic chains of Ni atoms (2, 3 and 5 atoms) tilted by 45° and we will compare the intensity of the forward scattering peak for single scattering and for full multiple scattering.

See also

based on this paper from M.-L. Xu et al. Phys. Rev. B 39 p8275 (1989)

## Polar scans of Ni atomic chains

### Building a chain of atoms

Start by creating a simple chain of 2 Ni atoms: an emitter and a scatterer in the [101] direction.

Tip

Nickel is fcc with lattice parameter \(a\)=3.499 Å. Use the `Atoms` class of `ase` like in the previous activity…

if you need help to start…

    from msspec.calculator import MSSPEC
    from ase  import Atoms

    symbol = ...             # The kind of atom for the chain
    a = ...                  # The distance bewteen 2 atoms
                             # in [101] direction

    chain = Atoms(..., positions=[...])
    chain.rotate(...)
    chain.edit()

Solution…

Building the 2-atoms chain

     1from msspec.calculator import MSSPEC
     2from ase  import Atoms
     3import numpy as np
     4
     5symbol = 'Ni'            # The kind of atom for the chain
     6a = 3.499 * np.sqrt(2)/2 # The distance bewteen 2 atoms
     7                         # in [101] direction
     8
     9chain = Atoms(symbol*2, positions=[(0,0,0), (0,0,a)])
    10chain.rotate(45, 'y')

Fig. 11 Polar scan of a Ni(3s) chain of 2 atoms for single scattering.

Quiz

Create an `MSSPEC` calculator with `expansion` algortithm and set the `scattering_order`=1 to compute a polar scan of the Ni(3s) in single scattering. How is varying the height of the peak at 45° (along the chain) if you increase the number of atoms in the chain ?

Repeat the same experiment with `inversion` algorithm for having the full multiple scattering result. What do you observe ?

Solution…

The peak at 45° is increasing with the number of atoms in the chain for SSC. We observe defocusing of this peak for full multiple scattering calculations (MSC). For the 2-atoms chain, both SSC and MSC give the same result owing to the fact that the emitter has only one scatterer atom and that kinetic energy is high enough to cancel out all backscattering.

Fig. 12 Polar scan of a Ni chain of 2-5 atoms for single and full mutliple scattering.

     1from msspec.calculator import MSSPEC
     2from ase  import Atoms
     3import numpy as np
     4
     5symbol = 'Ni'            # The kind of atom for the chain
     6a = 3.499 * np.sqrt(2)/2 # The distance bewteen 2 atoms
     7                         # in [101] direction
     8
     9chain = Atoms(symbol)
    10data = None
    11for i in range(1,5):
    12    atom = Atoms(symbol, [[0,0,i*a]])
    13    atom.rotate('y', 45)
    14    chain += atom
    15
    16    calc = MSSPEC(spectroscopy='PED', algorithm='inversion')
    17    calc.calculation_parameters.scattering_order = 1
    18
    19    chain.emitter = 0
    20    calc.set_atoms(chain)
    21
    22    data = calc.get_theta_scan(level='3s', theta=np.arange(0,80,0.5), data=data)
    23    data[-1].views[0].set_plot_options(ylim=[0,0.045])
    24data.view()