Crystal directions are directions relative to a crystal reference frame and are usually defined in terms of Miller indices. This sections explains how to calculate with crystal directions in MTEX.

On this page ... |

Definition |

Trigonal and Hexagonal Convention |

Symmetrically Equivalent Crystal Directions |

Angles |

Conversions |

Calculations |

Since crystal directions are always subject to a certain crystal reference frame, the starting point for any crystal direction is the definition of a variable of type crystalSymmetry

cs = crystalSymmetry('triclinic',[5.29,9.18,9.42],[90.4,98.9,90.1]*degree,... 'X||a*','Z||c','mineral','Talc');

The variable `cs` containes the geometry of the crystal reference frame and, in particular, the alignment of the crystallographic a,b, and,
c axis.

a = cs.aAxis b = cs.bAxis c = cs.cAxis

a = Miller size: 1 x 1 mineral: Talc (-1, X||a*, Z||c) u 1 v 0 w 0 b = Miller size: 1 x 1 mineral: Talc (-1, X||a*, Z||c) u 0 v 1 w 0 c = Miller size: 1 x 1 mineral: Talc (-1, X||a*, Z||c) u 0 v 0 w 1

A crystal direction `m = u * a + v * b + w * c` is a vector with coordinates u, v, w with respect to these crystallographic axes. In MTEX a crystal direction is represented
by a variable of type Miller which is defined by

`m = Miller(1,0,1,cs,'uvw')`

m = Miller size: 1 x 1 mineral: Talc (-1, X||a*, Z||c) u 1 v 0 w 1

for values `u = 1`, `v = 0`, and, `w = 1`. To plot a crystal direction as a spherical projections do

plot(m,'upper','labeled','grid')

Alternatively, a crystal direction may also be defined in the reciprocal space, i.e. with respect to the dual axes a*, b*,
c*. The corresponding coordinates are usually denoted by `h`, `k`, `l`. Note that for non Euclidean crystal frames uvw and hkl notations usually lead to different directions.

m = Miller(1,0,1,cs,'hkl') hold on plot(m,'upper','labeled') % the corresponding lattice plane plot(m,'plane','linecolor','r','linewidth',2) hold off

m = Miller size: 1 x 1 mineral: Talc (-1, X||a*, Z||c) h 1 k 0 l 1

In the case of trigonal and hexagonal crystal symmetry, the convention of using four Miller indices h, k, i, l, and U, V, T, W is supported as well.

cs = loadCIF('quartz') m = Miller(2,1,-3,1,cs,'UVTW')

cs = crystalSymmetry mineral : Quartz symmetry : 321 a, b, c : 4.9, 4.9, 5.4 reference frame: X||a*, Y||b, Z||c* m = Miller size: 1 x 1 mineral: Quartz (321, X||a*, Y||b, Z||c*) U 2 V 1 T -3 W 1

A simple way to compute all symmetrically equivalent directions to a given crystal direction is provided by the command symmetrise

symmetrise(m)

ans = Miller size: 6 x 1 mineral: Quartz (321, X||a*, Y||b, Z||c*) U 2 2 -3 -3 1 1 V 1 -3 2 1 -3 2 T -3 1 1 2 2 -3 W 1 -1 1 -1 1 -1

As always the keyword antipodal adds antipodal symmetry to this computation

`symmetrise(m,'antipodal')`

ans = Miller size: 12 x 1 mineral: Quartz (321, X||a*, Y||b, Z||c*) U 2 2 -3 -3 1 1 -2 -2 3 3 -1 -1 V 1 -3 2 1 -3 2 -1 3 -2 -1 3 -2 T -3 1 1 2 2 -3 3 -1 -1 -2 -2 3 W 1 -1 1 -1 1 -1 -1 1 -1 1 -1 1

Using the options **symmetrised** and **labeled** all symmetrically equivalent crystal directions are plotted together with their Miller indices.

plot(m,'symmetrised','labeled','grid','backgroundcolor','w')

The command eq or == can be used to check whether two crystal directions are symmetrically equivalent. Compare

Miller(1,1,-2,0,cs) == Miller(-1,-1,2,0,cs)

ans = logical 0

and

`eq(Miller(1,1,-2,0,cs),Miller(-1,-1,2,0,cs),'antipodal')`

ans = logical 1

The angle between two crystal directions m1 and m2 is defined as the smallest angle between m1 and all symmetrically equivalent directions to m2. This angle is in radians and it is calculated by the function angle

angle(Miller(1,1,-2,0,cs),Miller(-1,-1,2,0,cs)) / degree

ans = 60.0000

As always the keyword antipodal adds antipodal symmetry to this computation

`angle(Miller(1,1,-2,0,cs),Miller(-1,-1,2,0,cs),'antipodal') / degree`

ans = 0

Converting a crystal direction which is represented by its coordinates with respect to the crystal coordinate system a, b, c into a representation with respect to the associated Euclidean coordinate system is done by the command vectord3d.

vector3d(m)

ans = vector3d size: 1 x 1 x y z 7.09563 2.458 1.8018

Conversion into spherical coordinates requires the function polar

[theta,rho] = polar(m)

theta = 1.3353 rho = 0.3335

Essentially all the operations defined for general directions, i.e. for variables of type vector3d are also available for Miller indices. In addition Miller indices interact with crystal orientations. Consider the crystal orientation

`o = orientation('Euler',10*degree,20*degree,30*degree,cs)`

o = orientation size: 1 x 1 crystal symmetry : Quartz (321, X||a*, Y||b, Z||c*) specimen symmetry: 1 Bunge Euler angles in degree phi1 Phi phi2 Inv. 10 20 30 0

Then one can apply it to a crystal direction to find its coordinates with respect to the specimen coordinate system

o * m

ans = vector3d size: 1 x 1 x y z 4.02206 5.4999 3.63462

By applying a crystal symmetry one obtains the coordinates with respect to the specimen coordinate system of all crystallographically equivalent specimen directions.

```
p = o * symmetrise(m);
plot(p,'grid')
```

DocHelp 0.1 beta |