ODF Component Analysis edit page

A texture is often described by a handful of components. Each component has a preferred orientation and a surrounding population of similar orientations, usually produced by a deformation or recrystallisation process. Component analysis asks where these populations are and how much material to assign to each one.

This page assumes the normalisation of an orientation distribution function (ODF) introduced in ODF Theory and the section geometry introduced in Sigma Sections. It compares three answers that must not be confused: peak density, volume inside a fixed angular radius, and a partition by modes.

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

A Measured Texture

The example is reconstructed from neutron pole figures of a quartz specimen. The Dubna Example follows the same data from the measured files. Here the zero-range method handles regions where no intensity was measured.

mtexdata dubna silent
odf = calcODF(pf,'zeroRange','silent');

plotSection(odf,'sigma','sections',12,'layout',[3,4]);
mtexColorbar('title','mrd');

The twelve panels are slices through the same three-dimensional orientation space. Bright compact regions are candidate components, but a feature can continue into a neighbouring slice. Symmetry-equivalent appearances also represent the same physical orientation, not additional components.

The Strongest Mode

A mode is a local maximum of the ODF. The largest mode is the preferred orientation of the whole texture. max returns its density and its orientation.

[peakValue,peakOri] = max(odf)
peakValue =
  110.3994
 
peakOri = orientation (Quartz → y↑→x)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  133.758 34.4328 206.931

The maximum is 110 multiples of a random distribution (mrd). This is a density, not a percentage of material. The black marker sits in the brightest region of the section plot.

annotate(peakOri,'MarkerFaceColor','black');

Local Modes

With 'numLocal', max returns the requested number of largest local maxima. Their values are sorted from largest to smallest.

[localValue,localOri] = max(odf,'numLocal',3);
localValue

annotate(localOri(2:end),'MarkerFaceColor','red');
localValue =
  110.3994
   47.2245
   31.9077

The three modes reach 110, 47, and 32 mrd. The black marker is the global mode and the red markers are the next two. Each lies in a bright neighbourhood; the markers locate peaks but do not define the extent of a component.

These modes belong to the reconstructed ODF, not directly to the measured pole figures. Resolution, kernel halfwidth, and measurement noise can move or merge weak maxima. Check that a small mode persists under reasonable reconstruction or smoothing choices before assigning it to a physical process. ODF Estimation explains those choices.

Volume Inside a Fixed Radius

Peak density is not a measure of component importance. A sharp component can reach a large value while occupying little volume. A reproducible alternative is the fraction of material within a stated disorientation angle of the mode. volume(odf,ori,delta) integrates the ODF over that orientation-space ball.

delta = 10*degree;
ballPercent = 100 * volume(odf,localOri,delta)
ballPercent =
   11.3229
    5.1668
    4.0250

The three balls contain 11, 5, and 4 percent of the material. Their sum is far below 100 percent because a \(10^\circ\) ball is a small part of orientation space, not because the ODF is missing material. In a uniform texture the same ball would contain

uniformPercent = 100 * volume(uniformODF(odf.CS),localOri(1),delta)
uniformPercent =
    0.1690

0.17 percent. Dividing by that reference gives the enrichment over a uniform texture.

enrichment = ballPercent ./ uniformPercent
enrichment =
   67.0094
   30.5774
   23.8202

The enrichments are 67, 31, and 24. Every value in this section depends on delta. Choosing it too large makes neighbouring balls overlap.

delta = 40*degree;
overlapPercent = 100 * volume(odf,localOri,delta)
overlapTotal = sum(overlapPercent)
overlapPercent =
   58.7745
   35.2044
   43.0778
overlapTotal =
  137.0567

At \(40^\circ\) the three balls sum to 137 percent. The same orientations are counted in several balls, so the total can exceed 100 percent. These are three separate neighbourhood measurements, not volume fractions of disjoint components.

A Modal Partition

One radius for every component is a strong assumption. Real components need not be spherical, and neighbouring ones can run into each other. calcComponents instead lets seed orientations climb the ODF gradient and groups seeds that reach the same mode.

For this radial-basis ODF, the seeds are its kernel centres and their positive weights. For another representation, MTEX uses an equispaced orientation grid. The shares below are accumulated seed weights. They form a useful modal partition, but they are not integrals over uniquely defined geometric boundaries.

[componentOri,componentFraction] = calcComponents(odf,'silent');
componentPercent = 100 * componentFraction
retainedPercent = sum(componentPercent)
componentPercent =
   48.4320
   22.0545
   21.3252
    7.2784
retainedPercent =
   99.0901

The four modes contain 48, 22, 21, and 7 percent. They sum to 99 percent because nearly all positive seed weight reaches a retained mode. By default, very small modes may be discarded; use 'exact' when retaining them matters.

The open white circles show the modal centres. The leading centres agree with the maxima located by max, while the fourth circle appears because the earlier call requested only three local maxima.

annotate(componentOri,'MarkerFaceColor','none',...
  'MarkerEdgeColor','white','LineWidth',2,'MarkerSize',15,'Marker','o');

Further Reading

Next

Fitting parametric components to an ODF rather than locating them is Modeling. The single numbers that summarise a whole ODF are Properties. Those are global descriptors, whereas the quantities on this page describe selected modes or their neighbourhoods.

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/ODFComponents.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.