for the simulation of Photoelectron Diffraction (PD)
Bekerley Lab

Note: click on the hyperlinks to navigate throughout the manual


For questions or suggestions, please contact F. Javier García de Abajo

Atomic cluster specification
cluster commands cluster data-file format
Description of the beam and the analyzer
mobility of beam and analyzer energy and angle scanning parameters incident beam characterization spin-polarized detector
Emitter atoms and initial core levels
list of emitters initial core levels: n0 and l0 initial core sub-levels: spin and mj0 radial-matrix-elements data-file format
Atomic scattering
basic commands atomic-scattering data-file format
Multiple scattering
multiple scattering parameters electron inelastic mean free path setting the temperature
Units, comments, and miscellaneous
physical units comments wave function input/output other commands miscellaneous
Electron diffraction calculation
List of commands in alphabetical order

EDAC is a multi-purpose code that implements multiple scattering (MS) of electrons in atomic clusters. This manual describes its capabilities concerning core-level photoelectron diffraction (PD) in solids and atomic clusters, including relativistic effects (i.e., spin-flip during scattering and spin-orbit coupling in the initial states), magnetic exchange effects (the program is able to deal with two spin components separately), and non-spherical atoms (this requires special input from the user related to the atomic scattering matrices). Angular and energy scans can be performed with flexibility.

EDAC is written in C++ and it is rather machine independent. It can be run in many platforms, including Unix, Linux, and Windows, and it can be compiled with GNU g++ and SUN C++ compilers.

The cluster approach followed in this code consists in representing the solid by a finite number of atoms N surrounding the emitter atom. The finite inelastic mean free path limits the range of distances up to which the photoelectron can travel within the solid without suffering inelastic collisions, and this defines a finite volume which justifies the use of an atomic cluster.

The muffin-tin model is assumed here, so that the atoms are represented by their scattering matrices and they are considered to be embedded in an homogeneous region of constant potential. The atomic scattering matrices are completely determined by the scattering phase shifts for spherical atoms, but EDAC can deal with both spherical and non-spherical atoms. In particular, the code can calculate scattering phase-shifts internally for spherical atoms, provided their so-called muffin-tin potentials are given in the input. Also, it can calculate approximate muffin-tin potentials (and therefore atomic phase shifts and scattering matrices as well) for specific cluster arrangements using information of free-atom potentials (stored internally) and standard averaging procedures.

The MS expansion is performed up to an order n specified by the user. Different iteration techniques are available in the code. Overall, the computation time is proportional to the number of complex multiplications that have to be performed, and this in turn is Titer ~ nN2(lmax+1)3, where lmax is the maximum value of the orbital angular momentum number. Alternatively, an exact solution of the self-consistent MS equations can be performed in a time proportional to Texact ~ N3(lmax+1)6 (this is computationally very demanding and can be performed only for small cluster sizes and small values of lmax).

The value of lmax is adjusted dynamically during the calculation for each atom and each photoelectron energy, so that negligible matrix elements or scattering phase shifts are not used in order to avoid investing computation time to calculate zeros.

For more details on the theory underlying these issues, the user is referred to García de Abajo, Van Hove, and Fadley, Phys. Rev. B 63, 75404 (2001).

Once the code has been compiled and an executable file named edac has been created, EDAC can be run simply by typing edac filename1 filename2 ... where filename1, filename2, ... are input files containing commands to be performed sequentially (normally, only one input file will be used). EDAC input files are preferably given the extension .ms (for multiple scattering), so that both edac sample.ms and edac sample will use file sample.ms as input, although the latter option will use file sample is file sample.ms does not exist. If no file is specified, the program starts in inline mode and the instructions are directly read from the keyboard (this can be used within Unix systems in combination with echo or as cat sample.ms | edac; to exit this mode you simply have to type end). The format of EDAC instructions is relatively flexible. A detailed description is given below.

The input file has to contain information on the following topics:

  1. Atomic cluster. The cluster atomic coordinates and the type of atoms (i.e., their chemical nature or alternatively the type of scattering properties).

  2. Mobility of beam and analyzer. How the sample moves with respect to the beam and the analyzer.

  3. Energies and angles of emission. The range of energies and angles of emission of the photoelectrons.

  4. Incident beam. The angle of incidence and polarization of the incoming light.

  5. Emitters. The atoms that are emitters and their scattering properties when they are ionized (if various emitters are selected, the program calculates the sum of photoelectron intensities from each of them).

  6. Initial core level. The initial core level from which the photoelectron is emitted. Also, whether the sum over sublevels is required.

  7. Atomic scattering parameters. The scattering properties of the different atoms in the form of input files with scattering phase shifts, muffin-tin potentials, or scattering matrices. Alternatively, the muffin-tin potentials of the cluster atoms can be calculated internally (provided the atomic numbers or atomic symbols of those atoms have been specified) using the command muffin-tin.

  8. Multiple scattering parameters. lmax, the type of iteration method, the orders of iteration, the muffin-tin zero, the temperature, and the electron inelastic mean free path.

  9. Actual PD calculation. Invoke the command scan pd ... that performs the PD calculation.

The order of the different commands is to some extent arbitrary, although many restrictions apply (e.g., a cluster must be defined before invoking a PD calculation). Therefore, the structure of the input file suggested by the above list is recommended.

The calculated far-field photoelectron emission intensities correspond to the triply-differential energy-solid-angle distribution probability per unit time in a.u., assuming that the external electric field has an strength of 1 a.u. The units of the rest of the input and output magnitudes are explained below.

Finally, the MS calculation is performed for an atomic cluster surrounded by an infinite space of constant potential. The value of the potential outside the cluster is just the muffin-tin zero. The effect of the surface is taken into account by introducing a transmission factor (obtained from the transmission of an electron through a step barrier of height equal to the muffin-tin zero) and by transforming the directions of emission from/to the vacuum to/from inside the solid via the corresponding refraction at the surface barrier. A shift in energy corresponding the the potential step is also incorporated.

Here are some examples of input files along with their respective output (click on the chosen example for more details):

  1. Emission from Cu2s in the third layer of Cu(111).

  2. Emission from oxide W4f in O/W(110).

  3. General sample of input file. This contains most of the common features of the program and all of the commands that are mandatory to run a PD calculation. It contains comments that indicate what can be changed to the convenience of the user.

  4. Simple test of various miscellaneous commands.

A full list of commands in alphabetical order is included at the end of this document with links to more detailed explanations and discussions.


EDAC evaluates the MS series for a photoelectron in the presence of an atomic cluster. The latter can be specified either in an external output file or by means of commands that add/remove individual atoms, rows of atoms, planes of atoms, or an entire semi-infinite crystal to/from the cluster. These commands are explained below in detail.

The number of atoms that are stored in the program is controlled by the parameter Rmax (see below). When an atom, row of atoms, layer of atoms, or semi-infinite crystal is added to the cluster, only the coordinates of those atoms that are closer than Rmax to a given reference point (xr, yr, zr) are actually stored in the cluster.

When running a photoelectron diffraction calculation, not all the atoms stored in the cluster are actually used, but just those whose distance to the emitter is less than the current value of Rmax (the user may change this several times during the execution of the program). Furthermore, the maximum number of atoms used in photoelectron diffraction calculations is also limited by the command cluster natoms N.

Besides its coordinates, each atom is characterized by a label that identifies the kind of scatterer that it represents. The meaning and format of this label are discussed below.

Cluster commands

Adding and removing atoms, layers of atoms, and semi-infinite crystals

Note: the parameters θmagnet and φmagnet are only required when the flag orientation on has been invoked (it is off by default).

Limiting the number of atoms

Displacing and rotating the cluster

Reading/writing cluster from/to a file


Cluster data-file format

The file read by cluster input filename or written by cluster output filename has the following structure:

N units2
L1 T1 x1 y1 z11 φ1]
L2 T2 x2 y2 z22 φ2]
LN TN xN yN zNN φN]

where N is the number of atoms in the cluster, the coordinates (xj, yj, zj) are given in units of units2, Lj are atomic labels (1 through N without repetition), and Tj is the type of scatterer i that atom j represents. The parameters θj and φj specify the orientation of atomic magnetic moments (if the atom in question has a magnetic moment at all) and they have to be given if and only if the flag orientation on has been invoked (it is off by default).

The actual scattering properties of each atom are specified by the command scatterer Tj ... and properties for all Tj's must be defined before a PD calculation is performed. Alternatively, Tj can be either an atomic number or an atomic symbol, and this must be done in combination with the command muffin-tin (click here for further details).

The labels Lj change when performing calculations or when writing the cluster to a file. However, they can be used immediately after reading a cluster file to specify the list of emitters via the command emitters n i1 L1 ...

Example of cluster file (for non-oriented atoms): oxygen (blue atoms) on top of tungsten (red atoms):

13 l(A)
1 74 0.00 0.00 0.00
2 8 1.51 0.00 0.95
3 8 -0.72 -1.58 0.95
4 8 -0.72 1.58 0.95
5 8 -2.96 0.00 0.95
6 8 1.51 -3.16 0.95
7 8 1.51 3.16 0.95
8 74 -2.23 1.58 0.00
9 74 -2.23 -1.58 0.00
10 74 2.23 1.58 0.00
11 74 2.23 -1.58 0.00
12 74 -0.00 3.16 0.00
13 74 0.00 -3.16 0.00

The yellow atom (tungsten) is at the position (0,0,0). The scatterer type labels (74 and 8 in the example) are changed when the command muffin-tin is invoked to construct the muffin-tin potentials. The command cluster output ... can be used after that to see what the new labels are.


The angles of incidence of the incoming photon beam and the angles of emission of the photoelectron are represented in the following figure:

Besides the mode of mobility, the input file has to specify the electron energy range and angular range of emission and the beam incidence direction and polarization. Next, a description of the modes of angular scans that are supported by the code is given, along with an explanation of the relevant commands.

Mobility of beam and analyzer

Various different general modes of motion of detector and sample are supported by this code. In all of them, the polar emission angle θ refers to the polar direction of the detector with respect to the surface normal (the z-axis of the cluster), and the azimuthal emission angle φ refers to the azimuthal direction of the detector with respect to the x axis (all atomic positions are expressed in terms of their Cartesian coordinates (x, y, z)). A detailed description of each mode of motion follows:

Moreover, some specific geometries for particular beamlines have been implemented (beamline geometries that are not contained in this list can be implemented upon request):

The following schematic representation can help to visualize this. Azimuthal/polar rotations are represented by brown/pink double arrows. The sample and the analyzer move when these arrows are sitting on the analyzer (blue arrow) and near the surface normal (black line), respectively.

The commands that control the mobility of the beam and the analyzer during angular scans are:

The last mode from this list that has been given at a certain point in the input file is the one that is active after that point.

Energy and angle scanning parameters

The energy range of the photoelectron and the angles of emission are specified by means of the following commands:

Incident beam characterization

By default, the incidence is normal to the surface and the polarization is linear along the x axis. This can be changed to any direction of incidence and light polarization using the commands described below. The polarization can be any of those represented in the following figure:

Here are the commands that can be used to specify the direction of incidence of the light and its polarization:

Spin-polarized detector

The calculations performed by the program are done for unpolarized electrons when the scatterers and emitters do not include any electron-spin information. However, when any of the scatterers incorporates magnetic exchange effects or spin-orbit coupling, or when any of them is defined by an externally introduced t-matrix with two electron-spin components, or when the initial core sub-levels include information on electron spin (that is, by selecting a given spin using initial ms0 ... or initial mj0 ...), then the PD calculations performed by the program are done for the two spin components separately. The resulting photoelectron intensity is the sum of the two spin intensities, unless a spin-polarized detector is simulated using the following commands:


The atoms that act as emitters must be specified (they must all have the same chemical identity). Then, the photoelectron intensities calculated in this code represent the incoherent sum of the emission from all of the selected emitters, with those closer to the surface contributing more because of the smaller attenuation originating in inelastic scattering.

An arbitrary number of emitters can be specified (see incompatibilities with the keyword amplitude in the command scan pd ...). Each emitter is characterized both by its coordinates and by a label that specifies the type of scatterer that represents it when it is ionized (different in general from the non-ionized atom). When muffin-tin is invoked to calculate the scattering properties of the cluster atoms internally (that is, without the help of external data files) or when the atomic scattering properties are given in terms of a muffin-tin potential, the latter label is disregarded and a screened Coulomb hole is added to the muffin-tin potential in order to calculate the scattering properties of the ionized atom. The length of screening of the hole is 1 Å by default, but it can be changed using the command screening-length ...

Next, the initial core levels and sublevels have to be specified. This can be done in two different ways: either by selecting the initial state (e.g., 1s, 2p, etc.), so that the emission matrix elements are calculated internally within the program, or by reading radial matrix elements from an external data file. In both cases, a finer selection of sublevels can be achieved by specifying further initial-state quantum numbers.

List of emitters

The following commands can be used to specify which atoms are emitters:

Initial core levels: n0 and l0

The following commands permit selecting the initial core-level quantum numbers and calculating or inputting from external data files the corresponding emission radial matrix elements.

Emission matrix elements calculated internally for a specific level

The emission matrix elements are calculated internally by default, provided the emitter under consideration has been defined by its muffin-tin potential (e.g., by invoking the command muffin-tin). The following commands can be used to specify the desired emission level.

Emission matrix elements defined via radial matrix elements

As an alternative to initial state ... or initial n0/l0 ..., the emission matrix elements can be introduced via an external data file whose format is specified below. Here are the relevant commands in that case:

Initial core sub-levels: spin and mj0

The following commands permit selecting the initial core sub-level quantum numbers and the kind of representation that is used.

Two different representations can be used to specify further the sublevel of emission. The first one (default) is the (lmms) or spin representation, in which ms is the electron spin. This can be selected by using the following commands:

A second representation available within this code is the (ljmj) or orbital momentum representation, which can be selected using the following commands:

Radial-matrix-elements data-file format

The general form of the file that contains the radial matrix elements of a given emitter is:

nk units1 index l0
k1 a11 a12 a13 ...
k2 a21 a22 a23 ...
knk ank1 ank2 ank3 ...

where nk is the number of energies (or momenta), for which the radial matrix elements are given, units1 are the units in which the energies (or momenta) are given, k1, k2, ... are the respective energies (or momenta), either in decreasing or decreasing order (linear of cubic spline interpolation is used latter on for values lying in between), and a21, a22, ... are the data necessary to specify the radial matrix elements, which depend on the parameter index. The latter can be one of the following:

An important part of the input data file is the orbital angular momentum number l0 of the initial core level. Previous calls to commands initial n0 ... and initial l0 ... are ignored.

Here is an example (for l0=1, that is, emission from a p state):

6 k(au) regular1 1
4 0.38 0.31 0.18 -0.01
5 0.30 0.40 0.16 -0.08
6 0.21 0.65 0.12 0.09
7 0.16 0.73 0.10 0.15
8 0.12 0.69 0.11 0.26
9 0.10 0.52 0.09 0.32

This is another example: 1 regular1 0 0.1 0.3 0 0. The latter illustrates the special case nk=1, for which units1 and k1 do not have to be given. Moreover, the l=l0-1 channel does not contribute when l0=0.

Notice that 2π jumps in the phase of the radial matrix elements are automatically eliminated while they are read in order to avoid possible interpolation anomalies.


Each of the atoms included in the atomic cluster must have a label that indicates the type of scatterer under consideration. These labels can be given either as the atomic numbers of the atoms or as their atomic symbols. Then, the command muffin-tin can be invoked after defining the cluster. This command asks the program to calculate the muffin-tin potential associated to each different kind of atom (identified by its atomic symbol or atomic number, as specified in the definition of the cluster) within the cluster (with the limitation imposed by Rmax). The resulting muffin-tin potentials are stored at that particular moment, so that they are available to be used to obtain scattering phase shifts when these are needed during the execution of an actual PD calculation, performed later on using the command scan pd ... The muffin-tin potentials are automatically calculated by the code using a muffin tin construction based upon the Mattheiss prescription (Mattheiss Phys. Rev. 133, A1399 (1964)). Atoms with different atomic number or with the same atomic number but with different atomic environment (e.g., surface atoms versus bulk atoms) will have different muffin-tin potentials. The cluster should include atoms that surround the actual cluster used in the MS calculations that might follow, so that cluster-boundary effects do not affect the actual cluster.

Notice that the scatterer properties of an emitter atom are different when it is ionized as compared to the non-ionized atom, since the former contains the photoelectron hole. This is incorporated in the calculation by adding to the muffin-tin potential of the emitter atom a point-like Coulomb hole which is screened with an exponential screening-length prescribed by the user (1 Å by default).

While the procedure just described is convenient and reduces drastically the input that the user must provide, one can still define the scattering properties using external files (this is recommended only for expert users that want to deal with special cases). This is done by giving integral numbers (unconnected to the atomic numbers) as input for the atomic labels that refer to the type of scatterer under consideration. Then the scattering properties for each kind of scatterer must be read from external data files using commands that will be explained below. In this case, the effect of the photoelectron hole can be included by defining scatterer properties for the ionized atom (different from those describing the non-ionized atom) during the selection of the emitters. The screening length defined by the user does not apply here, since the scattering properties of the ionized atoms are obtained from an external data file.

Basic commands

At any given point in the input, the general properties of a given scatterer can be obtained using the following command:

Calculating the scattering properties inside the code

Reading/writing scattering properties from/to external data files

Spin-orbit coupling

Spin-orbit coupling during atomic scattering may cause spin-flip of the photoelectron (Mott scattering). This relativistic effect can be very important for heavy atoms and/or high photoelectron energies. A way to account for this is by reading relativistic scattering phase shifts using the command scatterer i ... Also, for atoms whose scattering properties are defined via their muffin-tin potentials (either because these potentials have been read from external data files or because the command muffin-tin has been invoked), the scattering phase shifts are calculated inside the code, and these phase shifts are relativistic or non-relativistic depending on the status of the flag scattering-so, which can be set using the following command:

Effects of atomic magnetic moments

When the atom has a magnetic moment, the exchange and correlation for electrons with their spin parallel or anti-parallel with respect to the direction of that moment is different, and therefore, they are scattered differently (i.e., their scattering must be described by a different set of phase shifts). The orientation of the atomic magnetic moments can be specified during the definition of the cluster using the commands add cluster .... The following commands can also be used:

Notice that orientation on has to be invoked to activate the orientation of magnetic moments.

Atomic scattering data-file format

The external data file that contains the atomic scattering properties of a given atom can contain data of three different kinds:

  1. The scattering phase shifts, which define completely the scattering properties of spherical atoms. These have to be given for an energy range that contains the photoelectron energies that will be eventually used.

  2. The scattering muffin-tin potential for a particular atom. The scattering phase shifts for that atom are calculated only whenever they are needed. The muffin-tin potential is referred to the muffin-tin zero.

  3. The full scattering t-matrix, which can represent non-spherical atoms. Again, this has to be given within a sufficient energy range.

These kinds of data files are considered separately in what follows, but any of them can be used as input of scatterer i filename.

Atomic scattering phase shifts

The phase-shift data files explained here represent atoms described by spherically-symmetric potentials. These can be non-relativistic phase shifts, relativistic phase shifts, or even separate sets of phase shifts for spin-up and spin-down electrons (in that case the atomic potential including spin interaction is not really spherical). The general form of these files is:

nk units1 lmax regular/ex/so real/complex/tl
k1    ps10   ps11 ...
k2    ps20   ps21 ...
knk    psnk0  psnk1 ...

(keywords are given in different color). Here, psj0 ... are phase-shift values (the actual order depends on whether regular, ex, or so is chosen; see below) at the energy (or momentum) kj. The phase shifts are given in radians and any 2π jumps are automatically eliminated while they are read so as to avoid possible interpolation problems (caution: widely separated kj's can be problematic in this respect). nk is the number of energies (or momenta) and their values kj are given in units of units1, either in decreasing or decreasing order. When the keyword real is specified, the phase shifts are assumed to be real, so that psjl is just a real number. However, some absorption during the atomic scattering process can be introduced by using complex phase shifts. This is done by selecting the keyword complex, and then the entry for each phase shift psjl is actually two real numbers: the real part and the imaginary part in that order. If the keyword tl is used instead, each entry is the real part and the imaginary part of the t-matrix element sinδ exp(i δ), where δ is the corresponding phase shift (only the diagonal elements of the scattering matrix are entered). Finally, either regular, or ex, or so must be chosen, meaning:

Here is an example of a phase-shift data file:

7 k(A) 4 regular real
3.2382 0.1018 1.0211 1.3299 0.1949 0.0227
3.4346 0.0149 0.9595 1.3810 0.2583 0.0345
3.6204 -0.0613 0.9060 1.4159 0.3244 0.0494
3.7971 -0.1290 0.8594 1.4431 0.3891 0.0676
3.9659 -0.1900 0.8188 1.4672 0.4493 0.0888
4.1279 -0.2457 0.7831 1.4908 0.5028 0.1129
4.2837 -0.2974 0.7513 1.5147 0.5486 0.1393

This is another example for nk=1 (then the units and value of the energy or momentum are not necessary; caution: this means that these phase shifts are assumed to be appropriate for the current kinetic energy): 1 3 regular real 0.8 0.6 0.2 0.1.

Atomic muffin-tin potential

The muffin-tin potential can be input to define the scattering properties of a given atom, which is considered to be spherically symmetric. Then, the scattering phase shifts are calculated whenever they are needed. For an emitter, a screened Coulomb hole is added to this potential to calculate the scattering phase shifts of the ionized atom in the solid. Here is the format of the potential data files:

nr Z units2 units1 rV/V
r1 a1 [b1]
r2 a2 [b2]
rnr anr [bnr]

(keywords are given in different color) where nr is the number of radial points, Z is the atomic number of the atom under consideration, rj is the distance to the atomic nucleus in units of units2 (given in increasing order), the potential V(rj) is expressed in units of units1, and aj represents either rjV(rj) (if the label rV is used) or simply V(rj) (if the label V is used). If potential2 is used rather than potential2, the values just explained for the potential stand for spin-up components of the electron wave function, whereas spin-down components see a different potential obtained from bj rather than aj. The potential is assumed to be given with respect to the muffin-tin zero. A logarithmic radial grid, denser near the origin, is recommended. The r=0 point must not be included in the grid.

Atomic scattering t-matrix

The t-matrix contains a full description of the atomic scattering process. Two different kinds of scattering t-matrix files can be read by the program, appropriate for axially symmetric atoms (axial) and for arbitrarily shaped atoms (full), respectively. The general format is:

nk units1 lmax axial/full ns
k1    block1
k2    block2
knk    blocknk

(keywords are given in different color). As in the case of the scattering phase shifts, units1 and k1 must be omitted when nk=1. The meaning of lmax is the same here. Furthermore, ns specifies the number of components of the electron wave function: 2 if the electron spin is taken into consideration and 1 otherwise. The elements of the t matrix are given in the lmms representation. The information contained within each block (for each given energy/momentum) depends on whether axial or full is chosen. More precisely, each block contains the blue lines generated by the following loops:

where the notation [s] and [s'] means that s and s' are only written if ns>1. The components with s different from s' for ns=2 represent spin-flip processes. In that case, s=1 refers to the spin-up component with respect to the quantization direction (ms=1/2), and s=2 refers to the spin-down component (ms=-1/2). The quantization direction is the z axis by default, but it can be changed to an arbitrary direction using the commands orientation ... (see also add cluster ...). Caution: use oriented atoms with axial only (not with full).


The way multiple scattering is performed has to be specified by choosing the iteration method and the number of iterations (see orders ...); the value of the maximum angular momentum in the multipole expansion of the wave function around each atomic center of scattering (see lmax ...); the value of the muffin-tin zero relative to vacuum (see V0 ...); the inelastic mean free path of the photoelectrons; and the temperature. The relevant commands are described within this section.

Multiple scattering parameters

Electron inelastic mean free path

Defining commands

Inelastic mean free path data-file format

The general form of the file that contains the inelastic mean free path (read with the command imfp filename) is:

nk units1 units2
k1 imfp1
k2 imfp2
knk imfpnk

where imfp1 ... are the values of the inelastic mean free path, given in units of units2, at the nk energies (or momenta) k1 ..., given in units of units1 in either increasing or decreasing order.

Here is an example:

7 E(eV) l(A)
50 7.0
60 6.5
70 6.0
80 5.5
90 6.0
100 6.5
110 7.0

This is another example to illustrate the nk=1 case (the units and values of the energy or momentum are not necessary): 1 l(A) 5 (imfp equal to 5 Å).

Setting the temperature

Thermal vibrations create some diffuse scattering, that is, some loss of coherence in the electron wave function. Here, this is accounted for by using temperature-dependent phase shifts (calculated inside the code), which contain a finite imaginary part. A Debye temperature must be also selected, which roughly indicates how rigid is the solid. The temperature is selected using the following commands:

The averaging procedure to produce temperature-dependent phase shifts requires to know the atomic mass of the scatterers. The mass is already stored inside the code for cluster atoms that are identified by their atomic numbers of symbols. However, when the scattering properties are defined via external data files using the command scatterer i ..., the mass needs to be introduced by the user via the following command (if no mass is specified, it is assumed to be infinite):


In this section, we describe some extra commands and features of the code. It is very important in particular to end the execution of the program after the calculation is performed; this is done by invoking the command end. Also important are the physical units that are used to input and output data.

Physical units

All external data are converted into atomic units (a.u.) inside the program. However, the energy/momentum in the output of scan ... is given in the same units as specified in the command emission energy ... Angular magnitudes are in degrees both in input and in output files (except phase shifts, which are always given in radians).

Two different labels are used throughout this manual to refer to units used in the input files. Namely:

Finally, the calculated angle-dependent emission probability is given in atomic units per steradian and the electric field of the external light is considered to have a strength of 1 a.u. in magnitude (just for normalization purposes).


Internal comments

It is possible to incorporate comments which are not printed out in the output file(s). There are two types of internal comments:

External comments

These are comments that are directly printed out in the output file(s). They start with " and end with " too. Special characters can be printed using \: \\ to print \, \" to print ", \n to print a line skip. These comments must be given in between commands, that is, they cannot be inserted in between the keywords or parameters of a single command.

Wave function input/output

The photoelectron wave function φ(r) is expressed in a basis set of spherical harmonics attached to each atom of the cluster:

φ(r)    =    Σα,lms   φα,lms  il hl(+)(k|r-Rα|)  Ylmr-Rα)  |s,

where s=1 and s=2 stand for spin up and spin down components. The wave function is thus completely determined by the (complex) electron momentum k, the atomic positions Rα, and the coefficients φα,lms.

This information can be input and output using the commands explained below.

Setting the direct wave function for emitter atoms

The code allows one to manually define the direct wave function (i.e., the excited electron wave function before scattering takes place) for the emitter atoms, in order to represent arbitrary emission processes from localized atoms (e.g., PD and Auger emission).

Reading and writing an entire direct wave function

The entire wave function, along with the cluster, can also be input and output using the following commands:

The format of the wave function file used as input in this commands corresponds to the blue lines generated by the following algorithmic structure (the underlined words are just comments included in the file):

Momentum (a.u.)   Re{k}  Im{k}
Maximum order   omax
lmax_eff   lmax


     cluster block


for o = 0 to omax
for α = 1 to N
     order o   atom α   ns ns   lmax l'max
     for s = 1 to ns
     for l = 0 to l'max
     for m = -l to l
            s   l   m   Re{φαe,lms}    Im{φαe,lms}

Here, l'max refers to the inner loops and can be different for each atom α; also l'max cannot be larger than lmax. The number of atoms N is fixed inside the cluster block; the latter has exactly the same structure as an atomic cluster data file.

The full wave function data file can contain several wave functions for different electron momenta or even different atomic clusters. Each of the wave function data has the structure just specified, and the entire data file is just a concatenation of all of them.

Other commands

Redirecting input and output

Finishing the execution of the program

Type of interpolation and tolerance

Reporting execution time and other comments

T matrix of the entire atomic cluster


Inline specifications

Whenever an input file is expected (e.g., after cluster input filename, scatterer i filename, etc.) one can type inline and then the rest of the information required by the current command is read from the main input file. Example: imfp inline 1 l(A) 6, which specifies an imfp of 6 Å.

Surface position and z axis

The polar angles are generally given with respect to the positive z-axis, which points perpendicularly to the surface in the outward direction. The position of the latter is fixed by the command cluster surface zsurf, so that the electronic surface is considered to be at z=zsurf.

Miscellaneous keywords

The words infinite and zero can be used in the input files meaning an arbitrarily large number and 0, respectively.

Output file names

Some of the commands require an output file name parameter (filename). The output of those commands is written into their respective output file names, except when filename=none, in which case no output file is created. For some commands, filename=terminal redirects the output to the standard output device (the terminal). The output is sent to the standard output device (the screen) in any case, unless the command verbose off has been invoked.


Once all necessary input has been provided, electron diffraction (e.g., PD) calculations can be performed by invoking the commands explained next (e.g., scan pd ... for PD). Information on some internal statistics of the calculation can then be obtained by using the commands report ... discussed below.

The code has the capability to perform both spin-independent and spin-polarized MS calculations. The latter takes approximately twice the time as compared with the former (under otherwise identical conditions), since two spin components have to be propagated, rather than one (the bulk of the computation time is invested in propagating the wave function by means of the free-electron Green function between consecutive atomic scattering events).

Spin-polarized calculations are performed whenever one of the following conditions is fulfilled:

In that case, one can select the direction on which the detector projects the electron spin (for spin-polarized detectors) using the commands spin ...

If none of the above conditions if fulfilled, the program performs spin-independent MS calculations and the command spin ... is ignored.

Finally, photoelectron intensities can be averaged over a final acceptance-angle window using the command emission angle window ... This can be used to represent a finite angular width in the photoelectron detector. Notice however that this command is ignored when any of the options integrated, half-integrated, or amplitude is used in the commands explained below.

Photoelectron diffraction

Diffraction of predefined wave

Reporting information on diffraction calculations


Note. Keywords in square brackets are optional and keywords separated by / are multi-choice (select only one of them). The parameter sector of the commands (i.e., numbers, units, filenames, etc.) is written in blue.