Symmetry Properties of Orientation Functions edit page

Every SO3Fun has a left and a right symmetry. For further information on symmetries look at crystal symmetries, specimen symmetries and, Quasi symmetries.

SO3F = SO3Fun.dubna

cs = SO3F.SRight
ss = SO3F.SLeft
SO3F = SO3FunRBF (Quartz → xyz)
 
  multimodal components
  kernel: de la Vallee Poussin, halfwidth 5°
  center: 19848 orientations, resolution: 5°
  weight: 1
 
 
cs = crystalSymmetry
 
  mineral        : Quartz            
  color          : lightblue         
  symmetry       : 321               
  elements       : 6                 
  a, b, c        : 4.9, 4.9, 5.4     
  reference frame: X||a*, Y||b, Z||c*
 
 
ss = triclinic specimenSymmetry

The function values of SO3F are equal at symmetric nodes. Since the composition of rotations is not commutative there exists a left and right symmetry.

ori = orientation.rand(cs,ss);
SO3F.eval(ori.symmetrise).'
SO3F.eval(ss*ori*cs)
ans =
    0.1106    0.1106    0.1106    0.1106    0.1106    0.1106
ans =
    0.1106    0.1106    0.1106    0.1106    0.1106    0.1106

The symmetries have, for example, an influence on the plot domain.

plot(SO3F,'sigma')
  • Note that only the important part with respect to the symmetry is plotted
  • you can plot the full rotation group using the argument 'complete'

In most subclasses of SO3Fun the symmetries are independent from the rest of variables of the function. So one can change them very easy and only effects the function values.

SO3F.SLeft = specimenSymmetry('432')
SO3F = SO3FunRBF (Quartz → xyz (432))
 
  multimodal components
  kernel: de la Vallee Poussin, halfwidth 5°
  center: 19848 orientations

The class SO3FunHarmonic describes an rotational function by the Fourier coefficients of its harmonic series. Here it is possible to get the symmetries directly from the fourier coefficients.

Similary if we want to change the symmetry of a function it is not enough to change it. We also have to symmetries this function.

SO3F2 = SO3FunHarmonic(rand(1e3,1))
SO3F2.fhat(1:10)
SO3F2 = SO3FunHarmonic (xyz → xyz)
  isReal: false
  bandwidth: 9
  weight: 0.65
 
ans =
    0.6538
    0.1482
    0.8623
    0.2782
    0.6607
    0.6610
    0.9911
    0.4788
    0.5404
    0.7100
plot(SO3F2)
Warning: Imaginary part of complex valued SO3FunHarmonic is ignored.
In the following only the real part is plotted.

Changing the symmetry has no effect on the Fourier coefficients. No we are only plotting the given function on some fundamental region.

SO3F2.SRight = crystalSymmetry('2')
SO3F2.fhat(1:10)
SO3F2 = SO3FunHarmonic (121 → xyz)
  isReal: false
  bandwidth: 9
  weight: 0.65
 
ans =
    0.6538
    0.1482
    0.8623
    0.2782
    0.6607
    0.6610
    0.9911
    0.4788
    0.5404
    0.7100
plot(SO3F2)
Warning: Imaginary part of complex valued SO3FunHarmonic is ignored.
In the following only the real part is plotted.

Symmetrizing the Fourier coefficients transforms the coefficients. So we symmetrize the function and it is no longer possible to go back to the non symmetrized function from before.

SO3F2 = SO3F2.symmetrise
SO3F2.fhat(1:10)
SO3F2 = SO3FunHarmonic (121 → xyz)
  isReal: false
  bandwidth: 9
  weight: 0.65
 
ans =
   0.6538 - 0.0000i
  -0.0650 + 0.0000i
   0.0000 + 0.0000i
   0.0650 - 0.0000i
  -0.1652 + 0.0000i
   0.0000 + 0.0000i
   0.1652 - 0.0000i
  -0.1156 + 0.0000i
   0.0000 + 0.0000i
   0.1156 - 0.0000i
plot(SO3F2)
Warning: Imaginary part of complex valued SO3FunHarmonic is ignored.
In the following only the real part is plotted.

Now the function is symmetrised on the full rotation group.

plot(SO3F2,'complete')
Warning: Imaginary part of complex valued SO3FunHarmonic is ignored.
In the following only the real part is plotted.

Note that you can expand every SO3Fun to an SO3FunHarmonic

SO3F3 = SO3FunHarmonic(SO3F)
SO3F3 = SO3FunHarmonic (Quartz → xyz (432))
  bandwidth: 48
  weight: 1

and do the same as before.