Open Matlab File in the Editor MTEX

Bingham distribution and EBSD data

testing rotational symmetry of individual orientations

On this page ...
Bingham Distribution
The bipolar case and unimodal distribution
Prolate case and fibre distribution
Oblate case

Bingham Distribution

The quaternionic Bingham distribution has the density

where is a orthogonal matrix with unit quaternions in column and is a diagonal matrix with the entries describing the shape of the distribution. is the hypergeometric function with matrix argument normalizing the density.

The shape parameters give

in unit quaternion space. Since the quaternion +g and -g describes the same rotation, the bipolar distribution corresponds to an unimodal distribution in orientation space. Moreover we would call the circular distribution a fibre in orientation space.

The general setup of the Bingham distribution in MTEX is done as follows

cs = crystalSymmetry('1');

kappa = [100 90 80 0];   % shape parameters
U     = eye(4);          % orthogonal matrix

odf = BinghamODF(kappa,U,cs)
 
odf = ODF  
  crystal symmetry : 1, X||a*, Y||b*, Z||c*
  specimen symmetry: 1
 
  Bingham portion:
     kappa: 100 90 80 0
    weight: 1
 
h = [Miller(0,0,1,cs) Miller(1,0,0,cs) Miller(1,1,1,cs)];
plotPDF(odf,h,'antipodal','silent');


% plot(odf,'sections',10)

The bipolar case and unimodal distribution

First we define some unimodal odf

odf_spherical = unimodalODF(idquaternion,crystalSymmetry,specimenSymmetry,'halfwidth',20*degree)
 
odf_spherical = ODF  
  crystal symmetry : 1, X||a*, Y||b*, Z||c*
  specimen symmetry: 1
 
  Radially symmetric portion:
    kernel: de la Vallee Poussin, halfwidth 20°
    center: (0°,0°,0°)
    weight: 1
 
plotPDF(odf_spherical,h,'antipodal','silent')

Next we simulate individual orientations from this odf, in a scattered axis/angle plot in which the simulated data looks like a sphere

ori_spherical = calcOrientations(odf_spherical,1000);
scatter(ori_spherical)

From this simulated ebsd data, we can estimate the parameters of the bingham distribution,

[qm,lambda,U,kappa] = mean(ori_spherical);
kappa'
Calling external programm
ans =
         0    0.8724    2.2034   24.1798

where U is the orthogonal matrix of eigenvectors of the orientation tensor and kappa the shape parameters associated with the U.

next, we test the different cases of the distribution on rejection

T_spherical = bingham_test(ori_spherical,'spherical','approximated');
T_oblate    = bingham_test(ori_spherical,'prolate',  'approximated');
T_prolate   = bingham_test(ori_spherical,'oblate',   'approximated');

t = [T_spherical T_oblate T_prolate]
t =
    0.1973    0.1553    0.3510

The spherical test case failed to reject it for some level of significance, hence we would dismiss the hypothesis prolate and oblate.

odf_spherical = BinghamODF(kappa,U,crystalSymmetry,specimenSymmetry)
 
odf_spherical = ODF  
  crystal symmetry : 1, X||a*, Y||b*, Z||c*
  specimen symmetry: 1
 
  Bingham portion:
     kappa: 0 0.87238 2.2034 24.1798
    weight: 1
 
plotPDF(odf_spherical,h,'antipodal','silent')

Prolate case and fibre distribution

The prolate case correspondes to a fibre.

odf_prolate = fibreODF(Miller(0,0,1,crystalSymmetry('1')),zvector,...
  'halfwidth',20*degree)
 
odf_prolate = ODF  
  crystal symmetry : 1, X||a*, Y||b*, Z||c*
  specimen symmetry: 1
 
  Fibre symmetric portion:
    kernel: de la Vallee Poussin, halfwidth 20°
    fibre: (001) - 0,0,1
    weight: 1
 
plotPDF(odf_prolate,h,'upper','silent')

As before, we generate some random orientations from an model odf. The shape in a axis/angle scatter plot reminds of a cigar

ori_prolate = calcOrientations(odf_prolate,1000);
scatter(ori_prolate)

We estimate the parameters of the bingham distribution

[qm,lambda,U,kappa] = mean(ori_prolate);
kappa'
Calling external programm
ans =
         0    2.8966   48.8366   49.9104

and test on the three cases

T_spherical = bingham_test(ori_prolate,'spherical','approximated');
T_oblate    = bingham_test(ori_prolate,'prolate',  'approximated');
T_prolate   = bingham_test(ori_prolate,'oblate',   'approximated');

t = [T_spherical T_oblate T_prolate]
t =
    1.0000    0.3604    1.0000

The test clearly rejects the spherical and prolate case, but not the prolate. We construct the bingham distribution from the parameters, it might show some skewness

odf_prolate = BinghamODF(kappa,U,crystalSymmetry,specimenSymmetry)
 
odf_prolate = ODF  
  crystal symmetry : 1, X||a*, Y||b*, Z||c*
  specimen symmetry: 1
 
  Bingham portion:
     kappa: 0 2.8966 48.8366 49.9104
    weight: 1
 
plotPDF(odf_prolate,h,'antipodal','silent')

Oblate case

The oblate case of the bingham distribution has no direct counterpart in terms of texture components, thus we can construct it straightforward

odf_oblate = BinghamODF([50 50 50 0],eye(4),crystalSymmetry,specimenSymmetry)
 
odf_oblate = ODF  
  crystal symmetry : 1, X||a*, Y||b*, Z||c*
  specimen symmetry: 1
 
  Bingham portion:
     kappa: 50 50 50 0
    weight: 1
 
plotPDF(odf_oblate,h,'antipodal','silent')

The oblate cases in axis/angle space reminds on a disk

ori_oblate = calcOrientations(odf_oblate,1000);
scatter(ori_oblate)

We estimate the parameters again

[qm,lambda,U,kappa] = mean(ori_oblate);
kappa'
Calling external programm
ans =
         0   48.3223   48.4183   49.9290

and do the tests

T_spherical = bingham_test(ori_oblate,'spherical','approximated');
T_oblate    = bingham_test(ori_oblate,'prolate',  'approximated');
T_prolate   = bingham_test(ori_oblate,'oblate',   'approximated');

t = [T_spherical T_oblate T_prolate]
t =
    1.0000    1.0000    0.3779

the spherical and oblate case are clearly rejected, the prolate case failed to reject for some level of significance

odf_oblate = BinghamODF(kappa, U,crystalSymmetry,specimenSymmetry)
 
odf_oblate = ODF  
  crystal symmetry : 1, X||a*, Y||b*, Z||c*
  specimen symmetry: 1
 
  Bingham portion:
     kappa: 0 48.3223 48.4183 49.929
    weight: 1
 
plotPDF(odf_oblate,h,'antipodal','silent')