Axes and Antipodal Symmetry edit page

A direction distinguishes its two ends - north is not south. An axis does not. The normal of a lattice plane is an axis, because the plane has no preferred side, and so is the axis of a twofold rotation, because turning by \(180^\circ\) one way and the other gives the same result.

MTEX stores both as a <vector3d.vector3d.html vector3d> and keeps the difference in a single flag, antipodal. Setting it means: v and -v are the same thing.

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

Setting the Flag

Take a pair of directions that differ only in the sign of their z coordinate.

v1 = vector3d(1,1,2);
v2 = vector3d(1,1,-2);

plot([v1,v2],'label',{'v_1','v_2'},'grid','on')

They plot on opposite hemispheres, v1 on the upper one and v2 on the lower one. Read as axes, v2 is the same axis as -v2, which points upwards, and both mark the same spot.

plot([v1,v2],'label',{'v_1','v_2'},'antipodal','grid','on')

The Angle Between Axes

Two axes are never more than \(90^\circ\) apart, because the angle is measured to whichever end is closer. Without the flag,

angle(v1,v2) / degree
ans =
  109.4712

and with it

angle(v1,v2,'antipodal') / degree
ans =
   70.5288

\(180^\circ\) minus the first answer. This is the quiet way to get a plausible wrong number: nothing complains if the flag is missing, the angle simply comes out obtuse where it should not be. The same holds for the mean of a list, which cancels itself out if half the axes are written with one sign and half with the other.

Attaching the Flag to the Data

Rather than repeating the option at every command, mark the data itself once. Every operation that follows honours the flag.

v2.antipodal = true;

angle(v1,v2) / degree
%
ans =
   70.5288

Densities of Axes

Density estimation turns a list of directions into a function on the sphere. For directions, that function can be anything.

v = vector3d.rand(100);
density = v.calcDensity;
plot(density)

For axes it cannot: a density of axes has to give v and -v the same value, so it is symmetric under inversion by construction. Note how the lower half of the plot below is the point reflection of the upper one.

density = v.calcDensity('antipodal');
plot(density,'complete')

Experimental Pole Figures

Under Friedel's law, conventional kinematic diffraction gives the same intensity for opposite reflections. Pole figures measured in this way therefore carry antipodal symmetry. MTEX plots such pole-figure data on the upper hemisphere only and reads a direction annotated there as an axis.

mtexdata dubna

CS = pf.CS;

plot(pf({1}))
pf = PoleFigure (y↑→x)
  crystal symmetry : Quartz (321, X||a*, Y||b, Z||c)
 
  h = (022̅1), r = 72 × 19 points
  h = (101̅0), r = 72 × 19 points
  h = (101̅1)(011̅1), r = 72 × 19 points
  h = (101̅2), r = 72 × 19 points
  h = (112̅0), r = 72 × 19 points
  h = (112̅1), r = 72 × 19 points
  h = (112̅2), r = 72 × 19 points

The annotated direction was given pointing downwards, and appears on the upper hemisphere.

annotate(vector3d(1,0,-1),'labeled','backgroundColor','w')

Pole Figures Computed from an ODF

A pole figure computed from an ODF is under no such constraint, and in general the two hemispheres differ. Here the (122) pole figure and the one of the opposite normal are not the same.

o = orientation.byEuler(20*degree,30*degree,0,'ZYZ',CS);

odf = unimodalODF(o);

plotPDF(odf,[Miller(1,2,2,CS),-Miller(1,2,2,CS)])

To compare such a computation with a measurement, add the antipodal symmetry that the measurement has.

plotPDF(odf,Miller(1,2,2,CS),'antipodal')

Inverse Pole Figures

The same reasoning applies to inverse pole figures. A complete one has no antipodal symmetry,

plotIPDF(odf,[vector3d.Y,-vector3d.Y],'complete','noLabel')

and enforcing the flag makes both halves equal.

plotIPDF(odf,vector3d.Y,'antipodal','complete','noLabel')

Inverse pole figures are usually not drawn complete but reduced to the fundamental sector, the patch of the sphere that crystal symmetry leaves inequivalent. Antipodal symmetry shrinks that sector further, so the two plots below cover different regions of the sphere.

plotIPDF(odf,vector3d.Y)
plotIPDF(odf,vector3d.Y,'antipodal')

Next

Density Estimation works throughout with the c-axes of an EBSD map, which are axes in exactly this sense. Antipodal symmetry appears again for crystal directions in Miller indices and for misorientation axes in Misorientations.