Diffraction allows to determine orientation from a set of diffraction patterns.


Determining orientation from diffraction patterns requires to collect and identify a set of diffraction vectors \vec{q}. When using this approach, we assume that the diffraction vector is close to a Bragg condition, which is fulfill typically in a two-beam condition. This often needs to tilt the specimen. Alternatively we present in Kikuchi a method based on Kikuchi lines.

Consider an electronic wave scattered by a crystal plane (h,k,l) corresponding to a diffraction vector \vec{q}. Its amplitude and phase is given by:

\Psi(\vec{q})=\sum_{j=1}^N f_j e^{- 2i\pi \vec{q}\cdot\vec{r}_j}

where the sum is made on all the atoms j placed at \vec{r}_j in the unit cell.

The intensity recorded is thus:


For a given crystal, the wave intensity will depend both on the \vec{q}\cdot\vec{r} and on the atomic form factor f_j.

Systematic extinctions

Extinctions for specific (h,k,l) diffracted planes are expected if: $$ \sum_{j=1}^N e^{- 2i\pi (h \cdot x_j + k \cdot y_j + l \cdot z_j)}=0 $$ For fcc cubic crystals, with atoms placed at (x_j,y_j,z_j) = (0, 0, 0), (0.5, 0.5, 0) ,(0, 0.5, 0.5), (0.5, 0, 0.5), this condition is fulfilled when (h,k,l) are of different parity.

The atomic form factor f_j corresponds to the amplitude of the wave diffracting on a single atom. In the range of scattering vectors between 0\leq q \leq 25 \mathring{A}^{-1}, the atomic form factor can be approximated by a Gaussian decomposition:

f(q)=\sum _{i=1}^{4}a_{i}\exp \left(-b_{i}\left({\frac {q}{4\pi }}\right)^{2}\right)+c

where the values of a_i, b_i, and c_i can be found for every atoms for instance here

The position and the name of atoms are defined in the space_group.txt file following the scheme:

Atom name1 x1 y1 z1
Atom name1 x2 y2 z2
Atom name2 x3 y3 z3

The atomic factor is defined in the scattering.txt file according to the scheme:

Atom name1 a1 b1 a2 b2 a3 b3 a4 b4 c

Diffraction pattern in TEM

When a plane electronic wave is scattered by a crystal under a given orientation, a spot diffraction pattern is formed in the back focal plane of the objective lens. The spots correspond to different diffraction vectors \vec{q}, the intensity of the pattern depending both on the crystal lattice and its orientation (see stereoproj). In Diffraction, we only use the structure factor as a guide to identify diffraction spots.

Thus, an electron wave traveling in the direction -z will be diffracted by an angle 2\theta_B given by the Bragg law:

2d \sin{\theta_B} = n \lambda

\lambda being the wavelength, d the inter-reticular spacing and n the diffraction order (corresponding to parallel diffraction vectors n(h,k,l)).

Diffracted spots will be located at a given distance r from the transmitted beam and at a given angle \eta from a fixed direction, chosen here as the y axis.

The observed/recorded pattern will depend on:

  • the magnification due to intermediate and projection lenses. The distance r measured will thus depend on the value of L called the camera length, given by $$ L=\frac{rd}{n\lambda} $$ As a consequence, the pattern will depend on the acceleration voltage, through the wavelength.

  • the rotation, by an angle \xi, between the \alpha-tilt axis which defines the y axis in the holder reference frame, and the y axis on the pattern.

Two-beam and three-beam conditions

In a two-beam condition (left picture), only one diffraction vector is strongly excited. In that case \vec{g} is located on a sphere of radius 1/\lambda, the Ewald sphere, corresponding to the exact Bragg condition (s, the deviation from this condition is zero). In that condition, the Kikuchi lines lie at (0,+\vec{g}). However, the diffraction planes are rotated of an angle \theta_B with respect to the electron beam. This angle is usually small, but depend both on the acceleration voltage (through 1/\lambda) and the interplanar spacing (d). At 200 kV, in iron austenite, \theta_B \approx 0.4^\circ for the (200) vector.

In a three-beam condition (right), the crystal is tilted by an angle \theta_B from the two-beam conditions. Now the Kikuchi lines, are located between the transmitted beam and the diffracted beams. Three beams (0,-\vec{g},\vec{g}) are equally excited and the planes are perpendicular to the electron beam. This corresponds to a situation where s=-\lambda/2 \|\vec{g}\|^2.

A high accuracy of orientation thus needs the knowledge of s, i.e. the position of the Kikuchi lines. Please refer to Kikuchi, for such analysis.

When taking a diffraction pattern, it is thus recommended to fulfill the three-beam conditions, i.e. in the middle of the extinction contours in image mode. However better imaging conditions are reached in two-beam with s>0.

Pycotem allows to correct the orientation of a diffraction vector from a two-beam condition. See below.

Calibration and operating conditions

The diffraction pattern needs to be carefully calibrated on the microscope used. Use a crystal with known lattice parameters and record a diffraction pattern, ideally forming rows or a zone axis with a large value of n. For every camera length and acceleration voltage, measure r in pixels corresponding to d in angstroms.

The calibration are set in the calibration.txt file following the scheme:

Microscope_name voltage camera length binning r.d

For Diffraction, both the value r . d and the acceleration voltage (in kV) are necessary, the other fields are informative.

Orientation from a set of diffraction vectors

If a set of diffraction vectors are given, the orientation can be retrieved knowing the position of the vectors in the microscope coordinates M (see below regarding ambiguities). Given the direction X in the crystal C coordinates:

G_C X = G_M \begin{pmatrix} 1\\ 0 \\ 0 \end{pmatrix}


G_C=D^\ast \begin{pmatrix} h_1 & k_1 & l_1\\ & ... & \\ h_N & k_N & l_N \end{pmatrix}

are the g-vectors in the crystal coordinates and D^\ast is defined here, and:

G_M=\begin{pmatrix} x_1 & y_1 & z_1\\ & ... & \\ x_N & y_N & z_N \end{pmatrix}

are the g-vectors in the sample coordinates.

The coordinates x_i,y_i,z_i are obtained by appropriate rotation in the sample coordinates. For a double tilt holder, with no angle between the vertical direction and the \alpha-tilt axis, the coordinates of the diffraction vector i is 1:

\begin{pmatrix} x_i\\ y_i \\ z_i \end{pmatrix} = R_x(-\beta_i) R_y(-\alpha_i) R_z(-\eta_i) \begin{pmatrix} 0\\ 1 \\ 0 \end{pmatrix}

Example of a tilt sequence in a double tilt holder. The recorded diffraction vector (1,1,1) is obtained after rotating along x of an angle \beta=-20, then along \alpha=10. The inclination made on diffraction pattern with the \alpha-tilt axis (here along the y direction) is \eta=40.

The equations

G_CX=G_M [1,0,0]^T \\ G_CY=G_M [0,1,0]^T \\ G_CZ =G_M [0,0,1]^T

lead to:


The above equation defines the crystal orientation, so that A should be a rotation matrix. The closest Euler rotation matrix R can be found with the approach proposed by Mackenzie 2 using singular value decomposition:

U,S,V^T=svd(G_C^TG_M) \\ R=V U^T

The Euler angles are retrieved from the R matrix:

\varphi_1 = \arctan (R_{02}, R_{12}) \\ \phi = \arccos(R_{22}) \\ \varphi_2 = \arctan (R_{20},R_{21})

180° ambiguity

When the inputs g-vectors are coplanar, the retrieved orientation may suffer the 180° ambiguity.

The situation described on the left side of the figure below is ambiguous. In this case, the 180° rotation along g_3 leads two different crystal orientations. On the contrary, the right side of the figure is not ambiguous, as the 180° rotation along (0\bar{1}1) is a crystal symmetry.

Same ambiguities can arise when indexing zone axes that present a 180° rotational symmetry which does not exist in the crystal.

In Diffraction ambiguous results can be detected.


The interface is composed of a top bar menu, a plotting area to display diffraction patterns and a setting/results panel.


Defining the crystal structure

Crystal structure can be imported from the structure menu. This menu can be populated by adding structures in the structure.txt files following the template:

Name a(A) b(A) c(A) alpha beta gamma space group

The space group is defined in the space_group.txt file and with the scattering.txt file as defined above.

Alternatively, the structure can be set by filling the a,b,c and \alpha, \beta, \gamma fields.


  • Open a diffraction pattern. Make sure that the file name does not contain non-ASCII characters.

  • Define a calibration in the Calibrations box

  • Set the Diffraction alpha y-axis angle (see stereoproj )

  • Left click on a diffraction spot. Zoom in to ensure a higher precision.

  • Click again on a second spot corresponding to the diffraction order n.

  • Indicate the order n in the diffraction order field.

  • Click reset view or reset point if needed

  • The distance d (A) and the inclination angle \eta are indicated in the Dist, Inclination box.

Option 1: computer-aided determination of (h,k,l) indices

In most of case, the reflection indices can be determined unambiguously from their d-spacing.

  • Indicate a value in px in the precision box. The g-vectors will be chosen within the uncertainty range \pm the precision. By default, the value is 10 px.

  • Select the d-spacing in the Dist, Inclination box.

  • Click on Find diffraction spots to identify the spot. The results appear in the g vectors box with the scheme

    d(A) |  h,k,l | Intensity(arb. units) | angles
    The angles values are explained below.

The data (h,k,l), the inclination angle \eta and the tilt angles, can be used to plot stereographic projection from a diffraction vector

Thus for every diffraction patterns, the diffraction vector, inclination angle, and tilt angles need to be provided.

  • Fill the tilt angles fields. Tick the box to indicate that rotation is anti-clockwise.

  • Tick the 2-to-3 beams box if a correction from a 2-beam to a 3-beam condition is required (see above). This leads to the evaluation of the out of plane angle \epsilon.

  • Click and Find diffraction spots

  • Select both the dist, inclination field and the appropriate g vector. For the first condition, the indices of the g-vector can arbitrary be chosen.

  • Press Add data. A line appears alpha angle, beta angle, theta angle, inclination, h,k,l, epsilon angle. Data can be removed by selecting the line and by pressing Remove data.

  • Repeat the above operations for at least 2 diffraction spots. For every conditions, the angle between the proposed g-vectors and the already chosen g-vectors are indicated. Choose the (h,k,l) indices that minimize all the angles.

Option 2: Automatic determination

When the reflections are ambiguous from their d-spacing, consistent sets of data can be retrieved by comparing the measured angles \theta_{ij}=\angle{(\vec{g}_i,\vec{g}_j)} with a lookup table compiling the angles \theta'_{ij}=\angle{((h_i,k_i,l_i),(h_j,k_j,l_j))}. The sets of g-vectors are obtained if all the angle differences \left|\theta_{ij}-\theta'_{ij}\right| is less than a tolerance angle equals to 3 degrees. To proceed this way:

  • Tick the do not use g-vector guess box.

  • Add the spot as above. The indices will appear as 0,0,0.

Retrieve orientation

  • Select the data lines and press Get orientation

The result box shows:

phi1, phi, phi2 (Euler angles)
mean angular deviation, mean d-spacing deviation
In case of option 2, the (hkl) indices are indicated.

Two sets of phi1, phi, phi2 angles are displayed if the results are ambiguous.

The accuracy of the result is given by:

  • The mean angular deviation, which is the average angle between each diffraction vector computed from the Euler angles and the experimental values:
\langle \theta_d \rangle = \frac{1}{N}{\sum_i^N \left| \arccos(R \vec{g}_i \cdot [x_i,y_i,z_i]^T) \right|}

where \vec{g}_i is the normalized diffraction vector corresponding to the (h_i,k_i,l_i) plane.

  • The mean d-spacing deviation, in percents, is the mean spread between measured and expected d-spacings. It should be of typically less than 10/%
\langle d \rangle= \frac{1}{N}{\sum_i^N \left| \frac{d_{hkl}-d_i}{d_{hkl}}\right|}
  • In case of option 2, the results are sorted by ascending order of mean deviation angles and mean d-spacings.

Import/Export data

Using the Data menu, data can be imported and results exported. Data sets are provided in a .txt file using the following scheme

# Diffraction data file 

Exporting data will write in a .txt file, adding to the above datasets:

# Results 
# Phi1,Phi,Phi2
# phi_1,phi, phi_2
# Mean angular deviation, Mean square angular dev.
# ang_d, ang_d^2
The two files can be combined in one as # sign will not be read during import.


Spectra, i.e. peak intensity with respect to the d-spacing, can be plotted from the top menu. The maximum indices should be indicated.

  1. if the diffraction is taken away from the three-beam condition, an extra rotation R_x(\epsilon) applies, with \epsilon = \theta_B+s/\|\vec{g}\|^2

  2. J. Mackenzie, Acta Cryst. 1957, 10, 61.