ODF Component Analysis edit page

A common way to interpret ODFs is to think of them as superposition of different components that originate from different deformation processes and describe the texture of the material. In this section we describe how these components can be identified from a given ODF.

We start by reconstruction a Quartz ODF from Neutron pole figure data.

% import Neutron pole figure data from a Quartz specimen
mtexdata dubna silent

% reconstruct the ODF
odf = calcODF(pf,'zeroRange');

% visualize the ODF in sigma sections
plotSection(odf,'sigma','sections',12,'layout',[3,4])
mtexColorbar

The preferred orientation

First of all we observe that the ODF posses a strong maximum. To find this orientation that corresponds to the maximum ODF intensity we use the max command.

[value,ori] = max(odf)
value =
  106.1526
 
ori = orientation (Quartz → y↑→x)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  133.047 34.5158  207.16

Note that, similarly as the MATLAB max command, the second output argument is the position where the maximum is attained. In our case we observe that the maximum value is about 121. To visualize the corresponding preferred orientation we plot it into the sigma sections of the ODF.

annotate(ori)

We may not only use the command max to find the global maximum of an ODF but also to find a certain amount of local maxima. The number of local maxima MTEX should search for, is specified as by the option 'numLocal', i.e., to find the three largest local maxima do

[value,ori] = max(odf,'numLocal',3)

annotate(ori(2:end),'MarkerFaceColor','red')
value =
  106.1526
   39.5028
   21.8787
 
ori = orientation (Quartz → y↑→x)
  size: 3 x 1
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  133.047 34.5158  207.16
  136.129 36.5776 263.088
  89.1225 32.0272 328.032

Note, that orientations are returned sorted according to their ODF value.

Volume Portions

It is important to understand, that the value of the ODF at a preferred orientation is in general not sufficient to judge the importance of a component. Very sharp components may result in extremely large ODF values that represent only very little volume. A more robust and physically more relevant quantity is the relative volume of crystal that have an orientation close to the preferred orientation. This volume portion can be computed by the command volume(odf,ori,delta) where ori is a list of preferred orientations and delta is the maximum disorientation angle. Multiplying with \(100\) the output will be in percent

delta = 10*degree;
volume(odf,ori,delta) * 100
ans =
   10.0162
    4.2756
    2.3085

We observe that the sum of all volume portions is far from \(100\) percent. This is very typical. The reason is that the portion of the full orientations space that is within the \(10\) degree disorientation distance from the preferred orientations is very small. More precisely, it represents only

volume(uniformODF(odf.CS),ori(1),delta) * 100
ans =
    0.1690

percent of the entire orientations space. Putting these values in relation it becomes clear, that all the components are multiple times stronger than the uniform distribution. We may compute these factors by

volume(odf,ori,delta) ./ volume(uniformODF(odf.CS),ori,delta)
ans =
   59.2762
   25.3030
   13.6616

It is important to understand, that all these values above depend significantly from the chosen disorientation angle delta. If delta is chosen too large

delta = 40*degree
volume(odf,ori,delta)*100
delta =
    0.6981
ans =
   42.9599
   32.5091
   34.2095

it may even happen that the components overlap and the sum of the volumes exceeds 100 percent.

Non circular components

A disadvantage of the approach above is that one is restricted to circular components with a fixed disorientation angle which makes it hard to analyze components that are close together. In such settings one may want to use the command calcComponents. This command starts with evenly distributed orientations and lets the crawl towards the closest preferred orientation. At the end of this process the command returns these preferred orientation and the percentage of orientations that crawled to each of them.

[ori, vol] = calcComponents(odf);
ori
vol * 100
ori = orientation (Quartz → y↑→x)
  size: 13 x 1
 
  Bunge Euler angles in degree
     phi1     Phi    phi2
  132.898 34.4654 207.245
   136.09 36.5906 263.167
  76.0005 31.2479 280.393
  89.7483    31.7 208.055
  27.9842  49.058 291.758
  257.145 32.7075 95.9347
  304.084 63.7077 39.0428
   231.35  58.236 130.307
  348.788 30.9359 326.838
  273.018 61.0376 18.0205
  237.018 66.3019 66.2121
  91.3824 32.1173 208.862
  352.425 31.4184 326.841
 
ans =
   36.7302
   21.6220
    8.6210
    6.4254
    3.5524
    2.8876
    2.4003
    2.2447
    1.9547
    1.4056
    1.2158
    1.0931
    1.0024

These volumes always sums up to approximately 100 percent. While the preferred orientations should be the same as those computed by the max command.

annotate(ori,'MarkerFaceColor','none','MarkerEdgeColor','white',...
  'linewidth',2,'MarkerSize',15,'marker','o')