prysm.thinfilm#
Tools for performing thin film calculations.
- prysm.thinfilm.brewsters_angle(n0, n1, deg=True)#
Compute the Brewster’s angle at a given interface.
- Parameters
n0 (float) – refractive index on the “left” of the boundary
n1 (float) – refractive index on the “right” of the boundary
deg (bool, optional) – if True, convert output to degrees
- prysm.thinfilm.critical_angle(n0, n1, deg=True)#
Minimum angle for total internal reflection at an interface.
- Parameters
n0 (float) – index of refraction of the “left” material
n1 (float) – index of refraction of the “right” material
deg (bool, optional) – if true, returns degrees, else radians
- Returns
the angle in degrees at which TIR begins to occur
- Return type
float
- prysm.thinfilm.snell_aor(n0, n1, theta, degrees=True)#
Compute the angle of refraction using Snell’s law.
- Parameters
n0 (float) – index of refraction of the “left” material
n1 (float) – index of refraction of the “right” material
theta (float) – angle of incidence, in degrees if degrees=True
degrees (bool, optional) – if True, theta is interpreted as an angle in degrees
- Returns
angle of refraction
- Return type
float
- prysm.thinfilm.fresnel_rs(n0, n1, theta0, theta1)#
Compute the “r sub s” fresnel coefficient.
This is associated with reflection of the s-polarized electric field.
- Parameters
n0 (float) – refractive index of the “left” material
n1 (float) – refractive index of the “right” material
theta0 (float) – angle of incidence, radians
theta1 (float) – angle of reflection, radians
- Returns
the fresnel coefficient “r sub s”
- Return type
float
- prysm.thinfilm.fresnel_ts(n0, n1, theta0, theta1)#
Compute the “t sub s” fresnel coefficient.
This is associated with transmission of the s-polarized electric field.
- Parameters
n0 (float) – refractive index of the “left” material
n1 (float) – refractive index of the “right” material
theta0 (float) – angle of incidence, radians
theta1 (float) – angle of refraction, radians
- Returns
the fresnel coefficient “t sub s”
- Return type
float
- prysm.thinfilm.fresnel_rp(n0, n1, theta0, theta1)#
Compute the “r sub p” fresnel coefficient.
This is associated with reflection of the p-polarized electric field.
- Parameters
n0 (float) – refractive index of the “left” material
n1 (float) – refractive index of the “right” material
theta0 (float) – angle of incidence, radians
theta1 (float) – angle of reflection, radians
- Returns
the fresnel coefficient “r sub p”
- Return type
float
- prysm.thinfilm.fresnel_tp(n0, n1, theta0, theta1)#
Compute the “t sub p” fresnel coefficient.
This is associated with transmission of the p-polarized electric field.
- Parameters
n0 (float) – refractive index of the “left” material
n1 (float) – refractive index of the “right” material
theta0 (float) – angle of incidence, radians
theta1 (float) – angle of refraction, radians
- Returns
the fresnel coefficient “t sub p”
- Return type
float
- prysm.thinfilm.characteristic_matrix_p(lambda_, d, n, theta)#
Compute the characteristic matrix M_j^p for a layer of a material stack and p-polarized light.
Uses (4.49) to compute (4.55) from BYU optics book, edition 2015
- Parameters
lambda (float) – wavelength of light, microns
d (float) – thickness of the layer, microns
n (float or complex) – refractive index of the layer
theta (float) – angle of incidence, radians
- Returns
a 2x2 matrix
- Return type
numpy.array
- prysm.thinfilm.characteristic_matrix_s(lambda_, d, n, theta)#
Compute the characteristic matrix M_j^p for a layer of a material stack and s-polarized light.
Uses (4.49) to compute (4.55) from BYU optics book, edition 2015
- Parameters
lambda (float) – wavelength of light, microns
d (float) – thickness of the layer, microns
n (float or complex) – refractive index of the layer
theta (float) – angle of incidence, radians
- Returns
a 2x2 matrix
- Return type
numpy.array
- prysm.thinfilm.multilayer_matrix_p(n0, theta0, characteristic_matrices, nnp1, theta_np1)#
Reduce a multilayer problem to give the 2x2 matrix A^p.
Computes (4.58) from BYU optics book.
- Parameters
n0 (float or complex) – refractive index of the first medium
theta0 (float) – angle of incidence on the first medium, radians
characteristic_matrices (iterable of numpy.ndarray each of which of shape 2x2) – the characteristic matrices of each layer
nnp1 (float or complex) – refractive index of the final medium
theta_np1 (float) – angle of incidence on final medium, radians
- Returns
2x2 matrix A^s
- Return type
numpy.ndarray
- prysm.thinfilm.multilayer_matrix_s(n0, theta0, characteristic_matrices, nnp1, theta_np1)#
Reduce a multilayer problem to give the 2x2 matrix A^s.
Computes (4.62) from BYU optics book.
- Parameters
n0 (float or complex) – refractive index of the first medium
theta0 (float) – angle of incidence on the first medium, radians
characteristic_matrices (iterable of numpy.ndarray each of which of shape 2x2) – the characteristic matrices of each layer
nnp1 (float or complex) – refractive index of the final medium
theta_np1 (float) – angle of incidence on final medium, radians
- Returns
2x2 matrix A^s
- Return type
numpy.ndarray
- prysm.thinfilm.rtot(Amat)#
Compute rtot, the equivalent total fresnel coefficient for a multilayer stack.
- Parameters
Amat (numpy.ndarray) – 2x2 array
- Returns
the value of rtot, either s or p.
- Return type
float or complex
- prysm.thinfilm.ttot(Amat)#
Compute ttot, the equivalent total fresnel coefficient for a multilayer stack.
- Parameters
Amat (numpy.ndarray) – 2x2 array
- Returns
the value of rtot, either s or p.
- Return type
float or complex
- prysm.thinfilm.multilayer_stack_rt(stack, wavelength, polarization, aoi=0, assume_vac_ambient=True)#
Compute r and t for a given stack of materials.
An infinitely thick layer of vacuum is assumed to proceed stack if assume_vac_ambient is True
- Parameters
polarization (str, {'p', 's'}) – the polarization state
stack (numpy.ndarray) –
array which has final dimensions of [n, t] where n is the index and t is the thickness in microns. i.e., stack[0] is N dimensional index of refraction, and
stack[1] is N dimensional thickness
For example, if stack is of shape (2, 100, 100) then the computation is for a 100x100 spatial arrangement of index and thickness
iterable of tuples, which looks like [(n1, t1), (n2, t2) …] also work
wavelength (float) – wavelength of light, microns
aoi (float, optional) – angle of incidence, degrees
assume_vac_ambient (bool, optional) – if True, prepends an infinitely thick layer of vacuum to the stack if False, prepend the ambient index but NOT a thickness
- Returns
r, t coefficients
- Return type
(float, float)