While carrying out research on optical scattering from surfaces, we have developed an extensive amount of software to evaluate different theoretical models for light scattering and other optical phenomena. To allow others to use the models without their own extensive software development, we are distributing the SCATMECH library.

The SCATMECH library consists of a set of C++ object classes that allow programmers to manipulate a number of complex optical quantities. It adds to standard C++ code data types corresponding to polarimetric quantities (such as Jones vectors, Jones matrices, Stokes vectors, and Mueller matrices), and optical properties of materials and information about stacks. A generalized class for all models (Model) provides support for run-time access to all the available models and their parameters. The class BRDF_Model acts as a base class for all surface scattering models [models that calculate the bidirectional reflectance distribution function (BRDF)], and a variety of specific models, e.g., particles, subsurface defects, and microroughness, are provided. Scattering by isolated particles can be calculated using the class Free_Space_Scatterer, and specfic models for the homogenious sphere (Mie scattering), spheres with coatings, optically-active spheres, and rotationally symmetric non-spherical particles are provided. Simulation of gratings is provided through an implementation of rigorous coupled-wave (RCW) analysis using the class RCW_Model for one-dimensional gratings or the class Cross_RCW_Model for two-dimensional gratings. All of these classes are designed to be expandable, so that we and others can add new models and functionality to the library.

Many of these models have parameters that are, in themselves, models. For example, theories for scattering by surface roughness require models to describe the surface characteristics. A volume scattering model may need a volume scattering phase function. And, a RCW model will need a description of a grating. Thus, there are models within the library that describe the distribution of surface slopes, the power spectral density function, the volume scattering phase function, one- or two-dimensional gratings, etc.

Examples given in the documentation demonstrate how relatively few lines of code can be used to analyze some relatively complicated concepts. The first example evaluates bidirectional reflectance distribution function (BRDF) models, in a manner that allows others to test the models for their applications, to study the sensitivity of the model predictions on specific parameters, or to compare the models to their own data. The second example demonstrates how RCW simulations can be performed. The third example demonstrates how the class library can be used to calculate the reflectance of thin films. Finally, the fourth example is a program that calculates the Mie scattering by an isolated sphere.

Implementing light scattering calculations in an object-oriented programming environment makes full use of that environment. By using class inheritance, for example, we have reduced the amount of code that must be written for a number of different models. Some of the particle-scattering models appear to have little executable code, for example, since they only need to connect a generalized surface/particle-scattering model to the specific free-space model. Abstract classes significantly widen the functionality of many of the models. Function overloading allows the objects describing polarization parameters to be manipulated as easily as scalar quantities. Lastly, the use of abstract classes allows user programs to manipulate all of the models in a unified manner. For example, since all light-scattering models must evaluate the BRDF as a function of the incident and scattering directions, the abstract class BRDF_Model was developed that returns this information.

This hypertext document, and those linked by it, constitutes the documentation for the SCATMECH library. A list of classes and functions are given, which provide links to pages describing each of those classes and external functions. Four examples are given of programs, which make use of different features of the library.

This software was developed at the National Institute of Standards and Technology by employees of the Federal Government in the course of their official duties. Pursuant to Title 17 Section 105 of the United States Code this software is not subject to copyright protection and is in the public domain. SCATMECH is an experimental system. NIST assumes no responsibility whatsoever for its use by other parties, and makes no guarantees, expressed or implied, about its quality, reliability, or any other characteristic. We would appreciate acknowledgment if the software is used. This software can be redistributed and/or modified freely provided that any derivative works bear some notice that they are derived from it, and any modified versions bear some notice that they have been modified.

Return to top

For More Information

SCATMECH Technical Information and Questions
Sensor Science Division Home Page
Sensor Science Division Inquiries
Website Comments

Current SCATMECH version: 7.00 (January 2015)
This page first online: Version 3.00 (December 2001)
This page last modified: Version 7.00 (January 2015)