The Santa Fe Benchmark edit page

The Santa Fe orientation distribution function (ODF) is a model texture agreed on at a workshop in Santa Fe so that pole-figure inversion methods could be compared on the same problem. An ODF is a density over orientation space. Because this one is known exactly, a reconstruction can be judged by what it recovers rather than only by how well it fits the data.

This page assumes the forward experiment from Simulating Pole Figure Data and the inverse problem from ODF Estimation. The origin of the ghost effect is explained in The Ghost Effect. Here the complete controlled experiment is used to measure how much ghost correction recovers.

A plotting convention states how the specimen reference frame is laid out on screen. The benchmark uses Y upward and X to the right. This convention does not rotate the specimen or change the ODF.

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

The known model

SantaFe has cubic crystal symmetry and orthorhombic specimen symmetry. It combines a 0.73 mrd uniform background with one component containing 27 percent of the volume. Values are in multiples of a random distribution (mrd), so a uniform ODF has the value 1 mrd everywhere; see ODF Theory.

odf = SantaFe;

Simulate noisy pole figures

Four lattice directions are sampled on an antipodally symmetric specimen grid with 5 degree spacing.

% crystal directions
h = Miller({1,0,0},{1,1,0},{1,1,1},{2,1,1},odf.CS);

% specimen directions
r = equispacedS2Grid('resolution',5*degree,'antipodal');

% pole figures
pf = calcPoleFigure(odf,h,r);

noisepf draws Poisson counts. At a direction with pole density \(P_h(r)\), the mean count is \(100P_h(r)\) in this example; 100 is an intensity scale, not the same mean at every point. No background is added.

pf = noisepf(pf,100);

plot(pf,'MarkerSize',5)
mtexColorMap LaboTeX

The four panels retain the model's broad pattern, while individual grid values fluctuate. Relative fluctuations are most conspicuous in weak regions because Poisson noise is large compared with a small signal.

Reconstruct with and without ghost correction

calcODF applies ghost correction by default. The second call disables it explicitly. Solver output is suppressed here because ODF Estimation explains the iteration history.

rec = calcODF(pf,'silent');
rec2 = calcODF(pf,'noGhostCorrection','silent');

Compare fit with recovery

Two different comparisons are needed. The ODF error from calcError is half the mean absolute difference on a 5 degree orientation grid. For normalized ODFs, it is the fraction of material that would have to move through orientation space to turn one distribution into the other.

The mean pole-figure residual instead compares each function with the noisy data. It is the regularised relative error used by calcError, averaged over the four pole figures. The extrema give a second reading of the reconstructed ODFs.

odfError = [0;...
  calcError(rec,odf,'resolution',5*degree);...
  calcError(rec2,odf,'resolution',5*degree)];

meanPoleFigureResidual = [mean(calcError(pf,odf,'silent'));...
  mean(calcError(pf,rec,'silent'));...
  mean(calcError(pf,rec2,'silent'))];

minimumMrd = [min(odf);min(rec);min(rec2)];
maximumMrd = [max(odf);max(rec);max(rec2)];

comparison = table(odfError,meanPoleFigureResidual,minimumMrd,maximumMrd,...
  'RowNames',{'model','withGhostCorrection','withoutGhostCorrection'})
comparison =
  3×4 table
                              odfError    meanPoleFigureResidual    minimumMrd    maximumMrd
                              ________    ______________________    __________    __________
    model                            0           0.051795               0.73        5.0394  
    withGhostCorrection        0.05008           0.051425             0.5657        4.7219  
    withoutGhostCorrection    0.097591           0.051135            0.18654        4.3553

The corrected reconstruction has an ODF error of 0.0498, so 5.0 percent of the volume is in the wrong place. The uncorrected error is 0.1002, more than twice as large. All three mean pole-figure residuals round to 0.050, and the uncorrected reconstruction fits the noisy data slightly best. A good fit to the projections therefore does not prove that an ODF is unique or true.

Where the corrected reconstruction misses the data

plotDiff shows the regularised relative difference at every simulated measurement direction.

plotDiff(pf,rec,'silent')

The residuals are scattered rather than concentrated in one coherent patch. That pattern is consistent with the counting noise added above. With measured data it would be a diagnostic clue, not proof that noise is the only cause.

Recalculated pole figures

The pole figures recalculated from the corrected ODF reproduce the broad maxima in the noisy simulation.

plotPDF(rec,pf.h,'antipodal')

Their smoothness is expected: the reconstruction uses finite-width kernels and is not intended to reproduce every random fluctuation. This agreement is necessary, but the table above shows why it is not a sufficient validation when the true ODF is unknown.

Read the three ODFs

First plot the corrected reconstruction in Euler-angle sections.

plot(rec,'sections',18,...
  'contourf','FontSize',10,'silent','figSize','large','minmax')
mtexColorMap white2black

The known model provides the reference.

plot(odf,'sections',18,...
  'contourf','FontSize',10,'silent','figSize','large','minmax')
mtexColorMap white2black

Finally, plot the reconstruction without ghost correction.

plot(rec2,'sections',18,...
  'contourf','FontSize',10,'silent','figSize','large','minmax')
mtexColorMap white2black

The components occupy the right places in both reconstructions. Read the minmax labels instead of comparing independently scaled contour shades. The model peaks at 5.0 mrd and the corrected reconstruction at 4.4 mrd. Its minimum is 0.57 mrd against the model background of 0.73 mrd. Without ghost correction the minimum falls to 0.20 mrd: the reconstruction digs holes in the background to pay for intensity missing from the peaks.

Read the harmonic spectrum

plotSpektra groups the magnitude of the harmonic coefficients by degree. This is the most direct view of the even--odd defect.

close all;
plotSpektra(odf,'bandwidth',32,'linewidth',2,'figSize','small')
hold on
plotSpektra(rec,'bandwidth',32,'linewidth',2)
plotSpektra(rec2,'bandwidth',32,'linewidth',2)
legend({'true ODF','with ghost correction','without ghost correction'})
hold off

The uncorrected curve zig-zags: its odd degrees lie below the true ones, while its even degrees follow them. That is the ghost effect in harmonic space. The corrected curve follows the model much more smoothly because ghost correction estimates information that the pole figures do not determine.

Further reading

Next

Continue with the Dubna example to apply the same validation sequence to measured neutron pole figures. Once an ODF has been validated, ODF Analysis introduces its properties and derived quantities.

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