Symmetricaly Equivalent Orientations edit page

A crystal orientation always appears as a class of symmetrically equivalent rotations which all transform the crystal reference frame into the specimen reference frame and are physicaly not distinguishable.

Lets start by defining some random orientation

% trigonal crystal symmetry
cs = crystalSymmetry('6')

% monoclinic specimen symmetry with respect to the x-axis
ss = specimenSymmetry('112')

% a random orientation
ori = orientation.rand(cs,ss)
cs = crystalSymmetry
 
  symmetry       : 6                 
  elements       : 6                 
  a, b, c        : 1, 1, 1           
  reference frame: X||a*, Y||b, Z||c*
 
 
ss = monoclinic specimenSymmetry  
 
 
ori = orientation (6 → xyz (112))
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  292.504 49.3513 81.2794       0

Since orientations transform crystal coordinates into specimen coordinates crystal symmetries will act from the right and specimen symmetries from the left

% symmetrically equivalent orientations with respect to crystal symmetry
ori * cs
ans = orientation (6 → xyz (112))
  size: 1 x 6
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  292.504 49.3513 81.2794       0
  292.504 49.3513 141.279       0
  292.504 49.3513 201.279       0
  292.504 49.3513 261.279       0
  292.504 49.3513 321.279       0
  292.504 49.3513 21.2794       0

We observe that only the third Euler angle phi2 changes as this Euler angle applies first to the crystal coordinates.

% symmetrically equivalent orientations with respect to specimen symmetry
ss * ori
ans = orientation (6 → xyz (112))
  size: 2 x 1
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  292.504 49.3513 81.2794       0
  112.504 49.3513 81.2794       0

Combining crystal and specimen symmetry we obtain 6 crystallographically equivalent orientations to ori

ss * ori * cs
ans = orientation (6 → xyz (112))
  size: 2 x 6
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  292.504 49.3513 81.2794       0
  112.504 49.3513 81.2794       0
  292.504 49.3513 141.279       0
  112.504 49.3513 141.279       0
  292.504 49.3513 201.279       0
  112.504 49.3513 201.279       0
  292.504 49.3513 261.279       0
  112.504 49.3513 261.279       0
  292.504 49.3513 321.279       0
  112.504 49.3513 321.279       0
  292.504 49.3513 21.2794       0
  112.504 49.3513 21.2794       0

A shortcut for this operation is the command symmetrise

symmetrise(ori)
ans = orientation (6 → xyz (112))
  size: 12 x 1
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  292.504 49.3513 81.2794       0
  112.504 49.3513 81.2794       0
  292.504 49.3513 141.279       0
  112.504 49.3513 141.279       0
  292.504 49.3513 201.279       0
  112.504 49.3513 201.279       0
  292.504 49.3513 261.279       0
  112.504 49.3513 261.279       0
  292.504 49.3513 321.279       0
  112.504 49.3513 321.279       0
  292.504 49.3513 21.2794       0
  112.504 49.3513 21.2794       0

For specific orientations, e.g. for the cube orientations, symmetrisation leads to multiple identical orientations. This can be prevented by passing the option unique to the command symmetrise

symmetrise(orientation.id(cs,ss),'unique')
ans = orientation (6 → xyz (112))
  size: 6 x 1
 
  Bunge Euler angles in degree
  phi1  Phi phi2 Inv.
   180    0    0    0
   240    0    0    0
   120    0    0    0
   300    0    0    0
    60    0    0    0
     0    0    0    0

Crystal symmetries in computations

Note that all operation on orientations are preformed taking all symmetrically equivalent orientations into account. As an example consider the angle between a random orientation and all orientations symmetricall equivalent to the goss orientation

ori = orientation.rand(cs);
angle(ori,symmetrise(orientation.goss(cs))) ./ degree
ans =
   68.3741
   68.3741
   68.3741
   68.3741
   68.3741
   68.3741

The value is the same for all orientations and equal to the smallest angle to one of the symmetrally equivalent orientations. This can be verified by computing the rotational angle ignoring symmetry.

angle(ori,symmetrise(orientation.goss(cs)),'noSymmetry') ./ degree
ans =
  136.9000
   92.7941
   68.3741
   84.0062
  125.2394
  173.8720

Functions that respect crystal symmetry but allow to switch it off using the flag noSymmetry include dot, unique, calcCluster.