# Coordinate systems¶

SpinW uses three different coordinate systems. It is important to consider every time, that a given vector/tensor data is in which coordinate system. In the following documentation the xyz, lu and rlu shorthand notation will be used for the three coordinate systems.

## Lattice units (lu) coordinate system¶

This is the lattice coordinate system. The three axis are the **a**, **b** and **c** crystal axes. For example the vector `[0,1,0]` denotes a position translated from the origin by **b** vector. The following sw class properties are stored in lattice units:

- atomic positions (
`sw.unit_cell`.r) - translation vectors for bonds (
`sw.coupling`.dl)

Also several function takes input or output in lattice units:

- atomic positions of the output of
`matom()`and`atom()`methods of sw - magnetic moments can be given in lattice units for the
`genmagstr()`function (using the ‘unitS’ option with ‘lu’ value) - calculated bond vectors from
`couplingtable()`

## xyz coordinate system¶

Most of the sw class properties are stored in the xyz coordinate system. The xyz coordinate system is right-handed Cartesian and fixed to the crystal lattice:

*x*: parallel to*a*-axis,*y*: perpendicular to*x*and in the*ab*-plane,*z*: perpendicular to*xy*-plane

The following properties are in the xyz coordinate system:

- twin rotation matrices (
`sw.twin`.rotc) - stored 3x3 matrices (
`sw.matrix`.mat) - magnetic field (
`sw.single_ion`.field) - magnetic moment components (
`sw.mag_str`.S) - normal vector of the magnetic structure (
`sw.mag_str`.n)

Also output of several functions are in xyz coordinate system:

- spin-spin correlation function matrix elements calculated by
`spinwave()`method (spec.Sab matrices) - interaction matrices calculated by
`couplingtable()`

Vectors in reciprocal space in Å\(^{-1}\) units are also in a right handed Cartesian coordinate system:

- momentum transfer values in Å\(^{-1}\) reciprocal lattice units of the spec.hklA output of the
`spinwave()`function

## Reciprocal lattice (rlu) coordinate system¶

The reciprocal lattice coordinate system is the dual vector space of the
lattice coordinate system. The three axis are the reciprocal lattice vectors denoted by **a**\(^*\), **b**\(^*\) and **c**\(^*\). The following sw class properties are stored in rlu units:

- magnetic ordering wave vector (
`sw.mag_str`.k)

Also several function takes input in rlu units:

- the
`sw_neutron()`function takes the option ‘uv’, that defines the scattering plane by two vectors in rlu - the first input of the
`spinwave()`function is a list of Q points in rlu units

## Transformation between coordinate systems¶

To transform vectors and tensors between the above coordinate systems, the output of
`basisvector()` function can be used:

```
tri = sw;
tri.genlattice('lat_const',[3 3 5],'angled',[90 90 120])
BV = tri.basisvector
```

The `BV` 3x3 matrix contains the coordinates of the lattice vectors as column vectors: `[a b c]`. To convert vectors from the abc coordinate system to the xyz, we can do the following:

```
r_abc = [1/2 1/2; 0];
r_xyz = BV * r_abc
```