Crystal Orientation as Coordinate Transformation edit page

An orientation in MTEX is the rotation that takes crystal coordinates - a direction or a tensor written in the crystal reference frame - to specimen coordinates, the description of the same object in the frame the sample sits in.

Everything else on this page follows from that one sentence, including the side an orientation has to be multiplied on and what happens when the specimen is turned.

plottingConvention.default('y↑→x');

The Two Ingredients

An orientation is a rotation

rot = rotation.rand
rot = rotation
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  156.958 161.468 197.878

together with a description of the crystal lattice, a crystalSymmetry.

cs = crystalSymmetry.load("Al-Aluminum.cif")
cs = crystalSymmetry (⊙c→a)
 
  mineral : Aluminum
  symmetry: m3̅m    
  elements: 48      
  a, b, c : 4, 4, 4

Combined, they are an orientation.

ori = orientation(rot,cs)
ori = orientation (Aluminum → y↑→x)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  156.958 161.468 197.878

An orientation is therefore a rotation as well, and every rotation operation applies to it.

From Crystal Coordinates to Specimen Coordinates

Take a crystal direction.

h = Miller(1,0,0,cs,'uvw')
h = Miller (Aluminum)
  u v w
  1 0 0

In a grain of orientation ori that direction points here, in specimen coordinates.

r = ori * h
r = vector3d (y↑→x)
     x      y      z
  3.09  -2.59 -0.395

This is the whole idea in one picture. The crystal is drawn where the orientation ori puts it, the black arrows are the specimen axes X, Y and Z, and the red arrow is the crystal direction h expressed in specimen coordinates. The direction is fixed in the lattice; what the orientation supplies is where the lattice is pointing.

cS = crystalShape.cube(cs);

plot(ori * cS,'faceAlpha',0.35,'faceColor',[0.6 0.75 0.9])
hold on
arrow3d(1.3*normalize(vector3d(r)),'faceColor','red')
arrow3d(1.6*[vector3d.X,vector3d.Y,vector3d.Z],'faceColor','black')
hold off

Tensors transform the same way. A single crystal stiffness tensor given in the crystal frame

C = stiffnessTensor(...
  [[2 1 1 0 0 0];...
  [1 2 1 0 0 0];...
  [1 1 2 0 0 0];...
  [0 0 0 1 0 0];...
  [0 0 0 0 1 0];...
  [0 0 0 0 0 1]],cs)
C = stiffnessTensor (Aluminum)
  unit: GPa              
  rank: 4 (3 × 3 × 3 × 3)
 
  tensor in Voigt matrix representation:
 2 1 1 0 0 0
 1 2 1 0 0 0
 1 1 2 0 0 0
 0 0 0 1 0 0
 0 0 0 0 1 0
 0 0 0 0 0 1

becomes a stiffness tensor in the specimen frame.

ori * C
ans = stiffnessTensor (y↑→x)
  unit: GPa              
  rank: 4 (3 × 3 × 3 × 3)
 
  tensor in Voigt matrix representation:
  2.4996  0.5568  0.9436 -0.1188 -0.0327  0.1002
  0.5568  2.5701   0.873 -0.1103 -0.0564 -0.0308
  0.9436   0.873  2.1834   0.229  0.0891 -0.0694
 -0.1188 -0.1103   0.229   0.873 -0.0694 -0.0564
 -0.0327 -0.0564  0.0891 -0.0694  0.9436 -0.1188
  0.1002 -0.0308 -0.0694 -0.0564 -0.1188  0.5568

Everything that is defined in the crystal frame travels this way:

And Back Again

The inverse orientation takes specimen coordinates to crystal coordinates, so applying it to r returns the direction we started from.

hBack = inv(ori) * r
hBack = Miller (Aluminum)
        h       k       l
  16.3991       0       0

The numbers look nothing like the \([100]\) we started from, because a Miller displays as \((hkl)\) unless told otherwise, and \([100]\) for aluminium is the vector of length \(a = 4.05\) Angstrom. Asking for the lattice direction notation gives it back.

hBack.dispStyle = 'uvw';
round(hBack)
ans = Miller (Aluminum)
  u v w
  1 0 0

Much of the literature defines an orientation the other way round, as the transformation from specimen to crystal coordinates - what MTEX calls inv(ori). Both conventions are in use, and reading a table of Euler angles in the wrong one inverts every orientation in it. The consequences are spelled out in MTEX vs. Bunge Convention.

Turning the Specimen

Rotating the specimen - putting the sample on the stage the other way round - changes every orientation in it. Such a rotation acts in specimen coordinates, hence from the left.

rotSpecimen = rotation.byAxisAngle(vector3d.X,60*degree);

ori_new = rotSpecimen * ori
ori_new = orientation (Aluminum → y↑→x)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  172.672 102.755 218.216

Every crystal direction moves with the specimen, which is what multiplying from the left means:

angle(ori_new * h, rotSpecimen * r) ./ degree
ans =
     0

Zero - going through the new orientation and turning the old result give the same direction.

The same rotation applied on the other side means something else. Used in crystal coordinates it turns the direction inside the lattice, before the orientation maps it out, and the result is a different specimen direction altogether.

angle(ori * (rotSpecimen * h), ori_new * h) ./ degree
ans =
   37.7949

Right multiplication is nonetheless the meaningful side for one purpose: multiplying by a symmetry operation of the crystal changes nothing at all, because the crystal cannot tell the two settings apart. That is precisely what symmetrise does, and all 48 results are the same orientation - the largest angle between any of them and the original is zero up to rounding.

max(angle(ori.symmetrise,ori)) ./ degree
ans =
   2.9576e-06

Which side a rotation belongs on is decided by the frame it is given in, and the same question decides the order of a misorientation product, see Misorientations.

Orientations also depend on how the Cartesian crystal frame \(\vec x\), \(\vec y\), \(\vec z\) is inscribed into the crystal axes \(\vec a\), \(\vec b\), \(\vec c\), which is The Crystal Reference System.

Next

Symmetry adds the fact that an orientation stands for a whole set of equivalent rotations, and Pole Figures is the standard way of drawing what this page computes by hand.

Citing this page. This page is part of the documentation of MTEX, a free and open source MATLAB toolbox for analyzing and modeling crystallographic textures. It was written by The MTEX Developers and is published at https://mtex-toolbox.github.io/DefinitionAsCoordinateTransform.html. If you use MTEX, or reuse text or figures from this page, in your research, please cite

F. Bachmann, R. Hielscher, H. Schaeben: Texture Analysis with MTEX - Free and Open Source Software Toolbox, Solid State Phenomena 160 (2010), 63-68. 10.4028/www.scientific.net/SSP.160.63

BibTeX
@article{bachmann2010mtex,
  author  = {F. Bachmann and R. Hielscher and H. Schaeben},
  title   = {Texture Analysis with MTEX - Free and Open Source Software Toolbox},
  journal = {Solid State Phenomena},
  volume  = {160},
  pages   = {63-68},
  year    = {2010},
  doi     = {10.4028/www.scientific.net/SSP.160.63},
  url     = {https://doi.org/10.4028/www.scientific.net/SSP.160.63}
}

Other papers describing specific MTEX methods are listed under Publications — please cite the one that best fits your application. The MTEX source code is licensed under the GNU General Public License v2.0; the text and figures of this documentation are licensed under CC BY 4.0, which permits reuse — including by automated systems — provided The MTEX Developers and this page are credited.