7.1 KiB
Photo-Electron Diffraction (PED)
Introduction
In PhotoElectron Diffraction, an incoming photon, with an energy in the X-ray range is absorbed by an atom of the sample. A core electron of the absorbing atom is emitted and will eventually escape from the sample after many scattering events toward a detector. This photo-electron is detected at a given kinetic energy and for a given position (polar angle and azimutal angle) of the detector with respect to the sample (see figure below). The distribution of electrons as a function of the sample polar or azimutal angles contains chemically resolved informations about the crystallography in the immediate proximity of the surface sample. This spectroscopy can also be done on Auger electrons. In this case, the technique is named Auger Electron Diffraction.
The Full picture of a photoelectron diffraction process. a) The geometry of the experiment. b) A view of the multiple scattering process and c) Atomic energy level sketch of the normal and Auger photoemission process.
Quick reference
To quickly start with MsSpec and Python, the easiest way is to read the :ref:`tutorials` section. Here we summurize all the steps to perform a PED simulation:
System Message: ERROR/3 (<stdin>, line 30); backlink
Unknown interpreted text role "ref".
:ref:`Build your cluster <step1>` (thanks to the ASE python package)
System Message: ERROR/3 (<stdin>, line 33); backlink
Unknown interpreted text role "ref".
:ref:`Create a calculator <step2>` with :py:func:`MSSPEC`
System Message: ERROR/3 (<stdin>, line 34); backlink
Unknown interpreted text role "ref".
System Message: ERROR/3 (<stdin>, line 34); backlink
Unknown interpreted text role "py:func".
:ref:`Set the parameters <step3>` of your calculation.
System Message: ERROR/3 (<stdin>, line 35); backlink
Unknown interpreted text role "ref".
:ref:`Attach <step4>` your cluster to the calculator
System Message: ERROR/3 (<stdin>, line 36); backlink
Unknown interpreted text role "ref".
:ref:`Choose the absorber <step5>`
System Message: ERROR/3 (<stdin>, line 37); backlink
Unknown interpreted text role "ref".
:ref:`Compute <step6>` a scan
System Message: ERROR/3 (<stdin>, line 38); backlink
Unknown interpreted text role "ref".
:ref:`Plot <step7>` the results
System Message: ERROR/3 (<stdin>, line 39); backlink
Unknown interpreted text role "ref".
Build your cluster
Building a cluster means creating a list of atoms with their given positions in x, y, z coordinates. It is easily done thanks to the ase Python package.
Because most of spectroscopies have a source and a detector in the same hemispherical space, a cluster is often shaped as an half sphere. To create such atomic arrangements, special helper functions are provided in the :py:mod:`utils` module.
System Message: ERROR/3 (<stdin>, line 50); backlink
Unknown interpreted text role "py:mod".For example to create an MgO cluster:
System Message: ERROR/3 (<stdin>, line 56)
Unknown directive type "literalinclude".
.. literalinclude:: MgO.py :linenos: :lines: 1-15
System Message: ERROR/3 (<stdin>, line 60)
Unknown directive type "only".
.. only:: html will produce a cluster of 519 atoms like this: .. figure:: MgO.gif :align: center :width: 60% The shape of a typical (yet quite large) cluster used for a calculation (519 atoms of MgO).
System Message: ERROR/3 (<stdin>, line 71)
Unknown directive type "only".
.. only:: latex will produce a cluster of 519 atoms like this: .. figure:: MgO.png :align: center :width: 60% The shape of a typical (yet quite large) cluster used for a calculation (519 atoms of MgO).
Create a calculator
To create a claculator, you will use the :py:func:`calculator.MSSPEC` function. This function takes 4 keyword arguments:
System Message: ERROR/3 (<stdin>, line 87); backlink
Unknown interpreted text role "py:func".
- spectroscopy, to specify the kind of spectroscopy. This is a string and can be one of 'PED' for PhotoElectron Diffraction, 'AED' for Auger Electron Diffraction, 'APECS' for Auger PhotoElectron Coincidence Spectroscopy or 'EXAFS' for Extended X-Ray Absorption Fine Structure.
- algorithm, to choose between the matrix inversion method with the string 'inversion' (best suited for lower kinetic energies < 100 eV), or the series expansion technique with 'expansion' or the correlation-expansion with 'correlation'.
- polarization to specify the light polarization. 'linear_qOz' or 'linear_xOy' for a linearly polarized light with the polarization vector in the (→qOz) or in the (xOy) plane respectively. Finally choose 'circular' for circularly polarized light.
- folder. Enter here the name of the folder used for temporary files.
The function returns a calculator object, so for example. To create a calculator for PhotoElectron Diffraction with the matrix inversion method:
System Message: WARNING/2 (<stdin>, line 107)
Cannot analyze code. Pygments package not found.
.. code-block:: python calc = MSSPEC(spectroscopy = 'PED', algorithm = 'inversion')
Set the parameters
A calculator has many parameters. They fall into 4 categories:
- Muffin-tin parameters, to tweak the potential used for the phase shifts calculation
- T-Matrix parameters, to control the T-matrix calculation
- Calculation parameters, to tune the multiple scattering calculation: add atomic vibrations, add some filters to speed up the process, control the parameters of the series expansion method...
- Spectroscopy dependent parameters. These parameters control -- for example -- the light source, the detector...
Each set of parameters is accessible through properties of the calculator object. For example, to tweak the interstitial value of the Muffin Tin potential, use:
>>> calc.muffintin_parameters.interstitial_potential = 12.1
To change the source energy, use:
>>> calc.source_parameters.energy = 1253.0
All options are detailed in :ref:`this section <allparameters>`
System Message: ERROR/3 (<stdin>, line 135); backlink
Unknown interpreted text role "ref".Attach your cluster
Very easy! Juste use the :py:func:`set_atoms` function like this:
System Message: ERROR/3 (<stdin>, line 143); backlink
Unknown interpreted text role "py:func".System Message: WARNING/2 (<stdin>, line 145)
Cannot analyze code. Pygments package not found.
.. code-block:: python calc.set_atoms(cluster)
Choose the absorber
Set the absorber attribute of your cluster to the index of the atom you want it to be the absorber. For example if the first atom of your cluster is the absorber
System Message: WARNING/2 (<stdin>, line 157)
Cannot analyze code. Pygments package not found.
.. code-block:: python cluster.absorber = 0
The best way is to use a function to find the index based on the xyz coordinates of the atom. For example to choose the closest atom of the origin:
System Message: WARNING/2 (<stdin>, line 164)
Cannot analyze code. Pygments package not found.
.. code-block:: python cluster.absorber = get_atom_index(cluster, 0, 0, 0)
:py:func:`get_atom_index` is in the :py:mod:`utils` package so do not forget to import it. The first argument is the cluster you will look for and the 3 next parameters are the x, y and z coordinates.
System Message: ERROR/3 (<stdin>, line 168); backlink
Unknown interpreted text role "py:func".System Message: ERROR/3 (<stdin>, line 168); backlink
Unknown interpreted text role "py:mod".Compute
You can compute 5 kinds of scans in PED spectroscopy:
A polar scan, with the :py:func:`get_theta_scan` method of the calculator object
System Message: ERROR/3 (<stdin>, line 179); backlink
Unknown interpreted text role "py:func".
An azimutal scan, with the :py:func:`MSSPEC.get_phi_scan` method
System Message: ERROR/3 (<stdin>, line 180); backlink
Unknown interpreted text role "py:func".
A stereographic scan, with the :py:func:`MSSPEC.get_theta_phi_scan` method
System Message: ERROR/3 (<stdin>, line 181); backlink
Unknown interpreted text role "py:func".
An energy scan, with the :py:func:`MSSPEC.get_energy_scan` method
System Message: ERROR/3 (<stdin>, line 182); backlink
Unknown interpreted text role "py:func".
The scattering factor, with the :py:func:`MSSPEC.get_scattering_factors` method
System Message: ERROR/3 (<stdin>, line 183); backlink
Unknown interpreted text role "py:func".
All these functions are used and detailed in the :ref:`tutorials <tutorials>`.
System Message: ERROR/3 (<stdin>, line 185); backlink
Unknown interpreted text role "ref".Plot the results
Normally, the output of the previous functions is a :py:class:`iodata.Data` object. You can see the results by typing:
System Message: ERROR/3 (<stdin>, line 192); backlink
Unknown interpreted text role "py:class".>>> data = calc.get_theta_scan(...) # a polar scan for example >>> data.view() # will popup a graphical window