Abstract class Local_BRDF_Model


The abstract class Local_BRDF_Model handles the generic operations associated with any scattering model which is associated with a localized defect for which a differential scattering cross-section (DSC) is a more natural description of the scattering function. It adds to the class BRDF_Model a conversion from DSC to BRDF using a specified defect density or inverse spot size. All classes which inherit Local_BRDF_Model must define either jonesDSC or muellerDSC. The class also provides the public functions JonesDSC and MuellerDSC, defined in a similar fashion as the similarly named functions in BRDF_Model.

The convention of Local_BRDF_Model is that the function jonesDSC returns a scattering matrix of type JonesMatrix, which, when converted to a MuellerMatrix by typecasting, becomes the differential scattering cross-section (DSC). This function differs from that defined for SphericalScatterer by a factor of 1/k.

Parameters:

Parameter Data Type Description Default
lambda double Wavelength of the light in vacuum [µm].
(Inherited from BRDF_Model.)
0.532
type int Indicates whether the light is incident from above the substrate or from within the substrate and whether the scattering is evaluated in reflection or transmission. The choices are:
0 : Light is incident from the above the substrate, and scattering is evaluated in reflection.
1 : Light is incident from the above the substrate, and scattering is evaluated in transmission.
2 : Light is incident from the within the substrate, and scattering is evaluated in reflection.
3 : Light is incident from the within the substrate, and scattering is evaluated in transmission.
For 1, 2, and 3, the substrate must be non-absorbing.
Not every model inheriting Local_BRDF_Model supports all modes.
(Inherited from BRDF_Model).
0
substrate dielectric_function The optical constants of the substrate, expressed as a complex number (n,k) or, optionally, as a function of wavelength.
(Inherited from BRDF_Model.)
(4.05,0.05)
density double The surface number density of local scatterers [µm-2]. 1

See also:

SCATMECH Home,   Conventions,   SphericalScatterer  

Include file:

#include "local.h"

Source code:

local.cpp
reg_local.cpp

Definition of public and protected elements:

class BRDF_Model {
    public:
        JonesMatrix JonesDSC(double thetai,
                          double thetas,
                          double phis,
                          Coordinate_System cs = psps);

        MuellerMatrix MuellerDSC(double thetai,
                              double thetas,
                              double phis,
                              Coordinate_System cs = psps);

        JonesMatrix JonesDSC(Vector& source,
                          Vector& viewer,
                          Vector& normal,
                          Coordinate_System cs = plane);

        MuellerMatrix MuellerDSC(Vector& source,
                              Vector& viewer,
                              Vector& normal,
                              Coordinate_System cs = plane);

protected:
        virtual JonesMatrix jonesDSC(double thetai,
                                  double thetas,
                                  double phis);
        virtual MuellerMatrix muellerDSC(double thetai,
                                      double thetas,
                                      double phis);
};

typedef Model_Ptr<Local_BRDF_Model> Local_BRDF_Model_Ptr;


JonesMatrix JonesDSC(double thetai, double thetas, double phis, Coordinate_System cs)
MuellerMatrix MuellerDSC(double thetai, double thetas, double phis, Coordinate_System cs)

These functions behave like their three-argument versions, but allow for evaluation of models using different polarization coordinate systems. They cannot be overloaded by inherited classes. The value of cs defines the coordinate system for which the scattering matrix will be returned.

Example:

double ti,ts,ps;
JonesVector incidentlight;
BRDF_Model *model;
JonesVector jones = model->Jones(ti,ts,ps,BRDF_Model::plane)*incidentlight;

Top of Page

JonesMatrix JonesDSC(Vector& source, Vector& viewer, Vector& normal, Coordinate_System cs)
MuellerMatrix MuellerDSC(Vector& source, Vector& viewer, Vector& normal, Coordinate_System cs)

These function behave like the functions jones and mueller, except that rather than specifying scattering angles, directions to the source and viewer and the surface normal are specified. source is a Vector pointing from the sample to the light source. viewer is a Vector pointing in the scattering direction. normal is a Vector pointing in the outward surface normal. Neither source, viewer, or normal need be normalized.

Note that the coordinate system defaults to BRDF_Model::plane, which is most natural for rendering applications.

Top of Page

virtual JonesMatrix jonesDSC(double thetai,double thetas,double phis)

This function returns the Jones scattering matrix. Its parameters are the incident angle thetai, the scattering polar angle thetas, and the scattering azimuthal angle phis. If this function is not defined for an inherited class, it defaults to a MuellerMatrix to JonesMatrix conversion. One of the functions, mueller or jones, must be defined by any inherited class.

Example:

double ti,ts,ps;
JonesVector incidentlight;
Some_BRDF_Model model; // Assume that Some_BRDF_Model is a BRDF_Model...
JonesVector jones = model.jones(ti,ts,ps)*incidentlight;

Top of Page

virtual MuellerMatrix muellerDSC(double thetai,double thetas,double phis)

This function returns the Mueller scattering matrix. Its parameters are the incident angle thetai, the scattering polar angle thetas, and the scattering azimuthal angle phis. If this function is not defined for an inherited class, it defaults to a JonesMatrix to MuellerMatrix conversion. One of the functions, mueller or jones, must be defined by any inherited class.

The convention of the Local_BRDF_Model class is that the 00 term of the Mueller matrix is the differential scattering cross section (DSC).

Top of Page

typedef Model_Ptr<Local_BRDF_Model> Local_BRDF_Model_Ptr

The typedef Local_BRDF_Model_Ptr behaves like a pointer to an instance of class Local_BRDF_Model. The following statement will query the user for an instance of class Local_BRDF_Model:

Local_BRDF_Model_Ptr model = Get_Model_Ptr();

The next statement will also create an instance of class Local_BRDF_Model:

Local_BRDF_Model_Ptr model = "Bobbert_Vlieger_BRDF_Model";

See Model_Ptr<model>.

Top of Page


For More Information

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

Current SCATMECH version: 7.22 (April 2021)