SCATMECH > Classes and Functions >
Optical Properties and
Materials > dielectric_stack
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;
};
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
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
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
The default and copy constructors. The default
constructor initializes the stack to have no layers.
Top of Page
Assignment operator.
Top of Page
Destructor.
Top of Page
Function that removes all existing layers.
Example:
dielectric_stack ds;
ds.wash();
Top of Page
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
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
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
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));
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
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
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)
|