class dielectric_stack


A dielectric_stack stores information about a stack of films on a substrate. It provides member functions that return the reflection and transmission coefficients of the stack.

Include file:

#include "filmtran.h"

Source code:

filmtran.cpp

See also:

SCATMECH Home,   Conventions,   optical_constant,   dielectric_constant,   dielectric_function

M. Born and E. Wolf, Principles of Optics, (Pergamon, Oxford, 1980).
G. R. Fowles, Introduction to Modern Optics, (Holt, Rinehart and Winston, New York, 1975).

Definition of public elements:

class dielectric_stack {
   void read_stack_file(const string& filename);
   static dielectric_stack AskUser(const string& prompt,const string& deflt="");
   void print(ostream& os, double lambda) const;
   dielectric_stack();
   dielectric_stack(const dielectric_stack& ds);
   dielectric_stack& operator=(const dielectric_stack& ds);
   ~dielectric_stack();
   void wash();
   void grow(const dielectric_function& epsilon, double thickness);
   complex<double> rp12(complex<double> theta,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> rs12(complex<double> theta,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> tp12(complex<double> theta,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> ts12(complex<double> theta,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> rp21(complex<double> theta,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> rs21(complex<double> theta,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> tp21(complex<double> theta,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> ts21(complex<double> theta,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   JonesMatrix r12(complex<double> theta,double lambda,
                   const dielectric_function& n0,
                   const dielectric_function& nt) const;
   JonesMatrix t12(complex<double> theta,double lambda,
                   const dielectric_function& n0,
                   const dielectric_function& nt) const;
   JonesMatrix r21(complex<double> theta,double lambda,
                   const dielectric_function& n0,
                   const dielectric_function& nt) const;
   JonesMatrix t21(complex<double> theta,double lambda,
                   const dielectric_function& n0,
                   const dielectric_function& nt) const;

   complex<double> rp12i(complex<double> angle,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> rs12i(complex<double> angle,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> tp12i(complex<double> angle,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> ts12i(complex<double> angle,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> rp21i(complex<double> angle,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> rs21i(complex<double> angle,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> tp21i(complex<double> angle,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   complex<double> ts21i(complex<double> angle,double lambda,
                        const dielectric_function& n0,
                        const dielectric_function& nt) const;
   JonesMatrix r12i(complex<double> angle,double lambda,
                   const dielectric_function& n0,
                   const dielectric_function& nt) const;
   JonesMatrix t12i(complex<double> angle,double lambda,
                   const dielectric_function& n0,
                   const dielectric_function& nt) const;
   JonesMatrix r21i(complex<double> angle,double lambda,
                   const dielectric_function& n0,
                   const dielectric_function& nt) const;
   JonesMatrix t21i(complex<double> angle,double lambda,
                   const dielectric_function& n0,
                   const dielectric_function& nt) const;
};

void read_stack_file(const string& filename)

Reads a file containing the optical constants and thicknesses of a dielectric stack. The file format must contain two whitespace-delimited columns:

Column Description
1 Dielectric Function [either n, (n,k), or filename]
2 Thickness

A blank line or end-of-file completes the description. The layers are specified in the order in which they will be deposited. The following example assumes that there are two files (silicon and copper), which contain optical constants:

Example
silicon   2.00  
(1.46,0.)   0.05  
copper   0.01  
(1.46,0.)   0.05  

This example represent four layers, the first layer (nearest to substrate) having optical constants given in a file named silicon and thickness 2.00 (in whatever units the calculations are carried out). The next layer has a a constant and real index of refraction of 1.46 and thickness 0.05. The next layer has optical constants given in a file named copper and thickness 0.01. Finally, another layer of index 1.46 and thickness 0.05 is deposited.

Example:

string filename="MyStack";
dielectric_stack ds=read_stack_file(filename);

Top of Page

static dielectric_stack AskUser(const string& prompt,const string& deflt)

A function which asks the user for information about a stack of films. It uses prompt to prompt the user and deflt if the user presses return. The user can input a film description file by preceding the filename with a colon (":"). Films can also be specified by entering a list as would be done in a film description file. A blank line completes the descriptions.

Example:

dielectric_stack ds;
ds = dielectric_stack::AskUser("Film stack","");

Top of Page

void print(ostream& os, double lambda) const

A print function to display a synopsis of the current layers that exist. The optical constants that will be displayed are evaluated at wavelength lambda.

Example:

dielectric_stack ds;
ds.print(cout,0.633);

Top of Page

dielectric_stack()
dielectric_stack(const dielectric_stack& ds)

The default and copy constructors. The default constructor initializes the stack to have no layers.

Top of Page

dielectric_stack& operator=(const dielectric_stack& ds)

Assignment operator.

Top of Page

~dielectric_stack()

Destructor.

Top of Page

void wash()

Function that removes all existing layers.

Example:

dielectric_stack ds;
ds.wash();

Top of Page

void grow(const dielectric_function& epsilon, double thickness)

Function that adds a new layer on top of existing layers, with a specified epsilon and thickness.

Example:

double thick1;
dielectric_function eps1("silicon");
dielectric_stack ds;
ds.wash();
ds.grow(eps1,thick1);

Top of Page

complex<double> rp12(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> rs12(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> tp12(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> ts12(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const

The reflection coefficients and transmission coefficients for p and s polarized light, assuming that the light is propagating from the top layer to the bottom layer. The incident angle (measured as an angle from normal when the wave is propagating in vacuum) is theta, the wavelength in vacuum is lambda, and the optical properties of the surrounding media are n0 and nt, respectively, where n0 is the incident medium and nt is the transmitted medium. If the incident angle theta is not real, the wave is evanescent in vacuum. If the internal angle of incidence is angle, then theta = asin(sin(angle)*n0).

Example:

dielectric_stack ds;
double lambda=0.633;
double theta=45.*deg;
// The following make a type change from optical_constant to dielectric_function...
ds.grow(optical_constant(2.25),0.1);
cout << "rs = " << rs12(theta,lambda,
                                    optical_constant(1.),
                                    optical_constant(1.5)) << endl
     << "rp = " << rp12(theta,lambda,
                                    optical_constant(1.),
                                    optical_constant(1.5)) << endl
     << "ts = " << ts12(theta,lambda,
                                    optical_constant(1.),
                                    optical_constant(1.5)) << endl
     << "tp = " << tp12(theta,lambda,
                                    optical_constant(1.),
                                    optical_constant(1.5)) << endl;

Top of Page

complex<double> rp21(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> rs21(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> tp21(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> ts21(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const

The reflection coefficients and transmission coefficients for p and s polarized light, assuming that the light is propagating from the bottom layer to the top layer. The incident angle (measured as an angle from normal when the wave is propagating in vacuum) is theta, the wavelength in vacuum is lambda, and the optical properties of the surrounding media are n0 and nt, respectively, where n0 is the incident medium and nt is the transmitted medium. If the incident angle theta is not real, the wave is evanescent in vacuum. If the internal angle of incidence is angle, then theta = asin(sin(angle)*n0).

Top of Page

JonesMatrix r12(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
JonesMatrix t12(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
JonesMatrix r21(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
JonesMatrix t21(complex<double> theta,double lambda,const dielectric_function& n0,const dielectric_function& nt) const

Jones matrix equivalents to the reflection and transmission coefficient coefficients described above.

Example:

dielectric_stack ds;
double lambda=0.633;
double theta=45.*deg;
ds.grow(optical_constant((2.25),0.1);
JonesMatrix r = ds.r12(theta,lambda,
                       optical_constant(1.),
                       optical_constant(1.5));

complex<double> rp12i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> rs12i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> tp12i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> ts12i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const

The reflection coefficients and transmission coefficients for p and s polarized light, assuming that the light is propagating from the top layer to the bottom layer. The incident angle (measured as an internal angle from normal) is angle, the wavelength in vacuum is lambda, and the optical properties of the surrounding media are n0 and nt, respectively, where n0 is the incident medium and nt is the transmitted medium.

Top of Page

complex<double> rp21i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> rs21i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> tp21i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
complex<double> ts21i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const

The reflection coefficients and transmission coefficients for p and s polarized light, assuming that the light is propagating from the bottom layer to the top layer. The incident angle (measured as an internal angle from normal) is angle, the wavelength in vacuum is lambda, and the optical properties of the surrounding media are n0 and nt, respectively, where n0 is the incident medium and nt is the transmitted medium.

Top of Page

JonesMatrix r12i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
JonesMatrix t12i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
JonesMatrix r21i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const
JonesMatrix t21i(complex<double> angle,double lambda,const dielectric_function& n0,const dielectric_function& nt) const

Jones matrix equivalents to the reflection and transmission coefficient coefficients described above.

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)