Crystal Orientation Quick Reference

Coordinate System

Laboratory Frame (Fixed)
  • Right-handed orthogonal system: \((x, y, z)\)

  • Incident neutron beam: \(\mathbf{k}_i\) along \(+z\) direction

  • Key difference from NCrystal: Beam direction is FIXED in nBragg

Specifying Orientation

Two-Vector Specification

You must specify TWO reciprocal lattice vectors:

Parameter

Description

Example

[hkl]_z

Miller indices along \(+z\) (beam direction)

[0, 0, 1]

[hkl]_y

Miller indices along \(+y\) direction

[0, 1, 0]

Requirements
  • Vectors must be orthogonal in reciprocal space

  • Use Miller indices \((h, k, l)\) for reciprocal lattice

  • Right-handed system must be maintained

Common Orientations

Description

[hkl]_z

[hkl]_y

Notes

Standard cubic

[0, 0, 1]

[0, 1, 0]

Most common

45° rotation (z-axis)

[0, 0, 1]

[1, 1, 0]

Rotated in xy-plane

90° rotation (z-axis)

[0, 0, 1]

[1, 0, 0]

x-axis along y

Arbitrary

[1, 1, 2]

[1, -1, 0]

Check orthogonality

Rotation for Alignment

Rotation Parameters

When fitting to experimental data:

\[ \begin{align}\begin{aligned}\text{Rotate around } x\text{-axis: } \phi\\\text{Rotate around } y\text{-axis: } \theta\end{aligned}\end{align} \]

Rotation Matrix Application

\[\begin{split}\begin{bmatrix} h' \\ k' \\ l' \end{bmatrix} = R_Y(\theta) \cdot R_X(\phi) \cdot \begin{bmatrix} h \\ k \\ l \end{bmatrix}\end{split}\]

Where:

\[\begin{split}R_Y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix}\end{split}\]
\[\begin{split}R_X(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix}\end{split}\]

Mosaicity Parameters

Gaussian Distribution Model

η (FWHM)

Full Width at Half Maximum of orientation spread

τ (cutoff)

\(\max(3, 1.1\sqrt{-2\log_e \epsilon}) \cdot \eta / (2\sqrt{2\log_e 2})\)

ε (epsilon)

Volume fraction parameter (default: \(10^{-3}\))

Physical Interpretation
  • η defines the angular spread of crystal planes

  • Larger η = more mosaic (imperfect) crystal

  • τ determines where distribution is truncated

Bragg Condition

Bragg Circles
  • At wavelength λ, forms a circle around z-axis

  • Longer wavelength → circle moves along z

  • Bragg condition satisfied when circle intersects \(\hat{n}\)

For Single Crystals
  • Sharp Bragg dips in transmission

  • Position depends on orientation

  • Use rotation to align dips with data

For Polycrystals
  • Bragg edges at \(\lambda = 2d_{hkl}\)

  • Position independent of orientation

  • Edges are orientation-averaged

Troubleshooting Checklist

Issue

Solution

Vectors not orthogonal

Check dot product in reciprocal space

Wrong handedness

Verify \(\mathbf{z} = \mathbf{x} \times \mathbf{y}\)

Rotation not working

Check angle units (radians vs degrees)

Unexpected Bragg dips

Verify crystal structure and orientation

Poor fit to data

Adjust mosaicity parameters η

Quick Equations Reference

Normal Vector

\[\hat{\mathbf{n}}_{hkl} = h\hat{\mathbf{a}}_1 + k\hat{\mathbf{a}}_2 + l\hat{\mathbf{a}}_3\]

With Euler Angles

\[\hat{\mathbf{n}}_{hkl} = R_Z(\alpha) R_Y(\beta) R_Z(\gamma) \hat{\mathbf{a}}\]

Rotation (Matthies Convention)

\[g(\alpha, \beta, \gamma) = R_Z(\alpha) R_Y(\beta) R_Z(\gamma)\]

Where: \(\alpha, \gamma \in [0, 2\pi]\), \(\beta \in [0, \pi]\)

Best Practices

  1. Start Simple

    • Begin with low Miller indices (e.g., [0,0,1], [0,1,0])

    • Test with known crystal orientations

  2. Verify Orthogonality

    • Always check that your chosen vectors are orthogonal

    • Use reciprocal lattice metric for non-cubic systems

  3. Small Increments

    • Use small rotation angles (1-5°) when fitting

    • Avoid large jumps in orientation space

  4. Consider Symmetry

    • Account for crystal symmetry in your analysis

    • Equivalent orientations may exist

  5. Mosaicity Matters

    • Don’t ignore mosaicity - it affects results

    • Typical values: 0.1° to 2° for most crystals

Code Snippets

Basic Setup

# Define orientation
hkl_z = [0, 0, 1]  # Beam direction
hkl_y = [0, 1, 0]  # Y direction

Check Orthogonality

import numpy as np

def check_orthogonal(hkl1, hkl2):
    v1 = np.array(hkl1)
    v2 = np.array(hkl2)
    v1 = v1 / np.linalg.norm(v1)
    v2 = v2 / np.linalg.norm(v2)
    return abs(np.dot(v1, v2)) < 1e-10

Apply Rotation

def rotate_orientation(hkl, phi, theta):
    """Rotate [hkl] by angles phi (x) and theta (y)"""
    Rx = np.array([[1, 0, 0],
                   [0, np.cos(phi), -np.sin(phi)],
                   [0, np.sin(phi), np.cos(phi)]])

    Ry = np.array([[np.cos(theta), 0, np.sin(theta)],
                   [0, 1, 0],
                   [-np.sin(theta), 0, np.cos(theta)]])

    return Ry @ Rx @ np.array(hkl)

Citation

When using nBragg’s orientation specification in publications:

  • Matthies (1987) - Euler angle conventions

  • NCrystal documentation - Mosaicity modeling

  • Kittelmann et al. (2021) - NCrystal implementation