I've been reading this interesting paper and I'm trying to understand the following: it is known that a crystal lattice can be represented by 6 parameters corresponding to lattice vectors lengths ($a,b,c$) and angles between them $(\alpha, \beta, \gamma)$ using Niggli reduction algorithm. What I don't understand too well is how can we compute original coordinates (in $\mathbb{R}^{3 \times 3}$) starting from lengths and angles? On the aforementioned paper, they use the following computation:

enter image description here

but I don't understand why.

  • 3
    $\begingroup$ You may have misunderstood something. The matrix A above is called orthogonalization matrix and is used to calculate Cartesian coordinates from fractional coordinates. For any unit cell. It's not related to the Niggli reduction. It's derived (matrix A) in various crystallographic textbooks. Googling for some online materials I found this: ucl.ac.uk/~rmhajc0/frorth.pdf (eq 17 there is equivalent to A). $\endgroup$
    – marcin
    Aug 22, 2023 at 18:06
  • 1
    $\begingroup$ A quick flick through suggests that all is going on is that you can always QR factorise the matrix formed by the lattice vectors $\endgroup$
    – Ian Bush
    Aug 22, 2023 at 20:04
  • $\begingroup$ many thanks marcin, that reference is indeed very useful $\endgroup$ Aug 28, 2023 at 0:00

1 Answer 1


It's easy enough to write a set of lattice vectors as:

$$\begin{bmatrix} \bf{a} & \bf{b} & \bf{c} \end{bmatrix} = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 2 \end{bmatrix}. \tag{1}$$

And it's easy enough to write another set of lattice vectors as:

$$\begin{bmatrix} \bf{a'} & \bf{b'} & \bf{c'} \end{bmatrix} = \begin{bmatrix} \sqrt{2} & \sqrt{2} & 0 \\ -\sqrt{2} & \sqrt{2} & 0 \\ 0 & 0 & 2 \end{bmatrix}. \tag{2}$$

But it may not be easy to recognise that those are actually the same lattice vectors, just rotated.

There are infinitely many representations of the same lattice vectors under some arbitrary rotation, and it would be very confusing if different people used different representations for the same lattice vectors because of that. So the standard representation of a triclinic lattice vector set requires you to put:

  • the $\bf{a}$ vector along the positive x-axis
  • the $\bf{b}$ vector on the x-y plane
  • the $\bf{c}$ vector in right-hand orientation so that the cell volume is positive (thus $(\bf{a} \times \bf{b}) \cdot \bf{c} > 0$).

Not coincidentally, this makes the lattice "matrix" an upper triangular matrix, always having (at most) six non-zero entries instead of nine. This in turn is useful for computer programs dealing with lattices, where you only need to store six numbers instead of nine and presumably avoid some amount of floating point error.

Once you apply those constraints, it's straightforward trigonometry to see that they lead to the matrix form in your screenshot. I personally frequently consult the triclinic lattice info page for LAMMPS, my usual molecular dynamics software package, since it has all relevant formulae in one handy web page.

  • $\begingroup$ Many thanks! It is actually more clear now! $\endgroup$ Aug 28, 2023 at 0:01

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .