ThinFilmFilter#

class optika.materials.ThinFilmFilter(layer, layer_oxide, mesh)[source]#

Bases: AbstractThinFilmFilter

A model of a thin-film EUV filter, such as those manufactured by Luxel [Powell et al., 1990].

Examples

Plot the transmissivity of an aluminum thin-film filter, with a thickness of 100 nm and an oxide layer of 2 nm.

import matplotlib.pyplot as plt
import astropy.units as u
import named_arrays as na
import optika

# Define a model of the thin-film filter
film = optika.materials.ThinFilmFilter(
    layer=optika.materials.Layer(
        chemical="Al",
        thickness=100 * u.nm,
    ),
    layer_oxide=optika.materials.Layer(
        chemical="Al2O3",
        thickness=2 * u.nm,
    ),
    mesh=optika.materials.meshes.Mesh(
        chemical="Ni",
        efficiency=0.8,
        pitch=70 / u.mm,
    ),
)

# Define the wavelength of the incident light
wavelength = na.linspace(100, 1000, axis="wavelength", num=1001) * u.AA

# Define the rays incident on the filter
rays = optika.rays.RayVectorArray(
    wavelength=wavelength,
    direction=na.Cartesian3dVectorArray(0, 0, 1),
)

# Compute the transmissivity of the filter
transmissivity = film.efficiency(
    rays=rays,
    normal=na.Cartesian3dVectorArray(0, 0, -1),
)

# Plot the transmissivity as a function of wavelength
fig, ax = plt.subplots()
na.plt.plot(
    wavelength,
    transmissivity,
    ax=ax,
    axis="wavelength",
);
ax.set_xlabel(f"wavelength ({wavelength.unit:latex_inline})");
ax.set_ylabel("transmissivity");
../_images/optika.materials.ThinFilmFilter_0_1.png

Attributes

is_mirror

flag controlling whether this material reflects or transmits light

layer

The main layer of bulk material comprising this filter.

layer_oxide

The oxide layer that lies on either side of the bulk layer.

layers

A sequence of layers representing the multilayer stack.

mesh

The mesh backing supporting this thin-film filter.

shape

The array shape of this object.

transformation

the coordinate transformation between the global coordinate system and this object's local coordinate system

Methods

__init__(layer, layer_oxide, mesh)

attenuation(rays)

the attenuation coefficient of the given rays

efficiency(rays, normal)

Compute the efficiency of this multilayer film using optika.materials.multilayer_efficiency().

index_refraction(rays)

the index of refraction of this material for the given input rays

plot_layers([width, ax])

Plot the multilayer stack using optika.materials.AbstractLayer.plot().

to_string([prefix])

Public-facing version of the __repr__ method that allows for defining a prefix string, which can be used to calculate how much whitespace to add to the beginning of each line of the result.

Inheritance Diagram

Inheritance diagram of optika.materials.ThinFilmFilter
Parameters:
attenuation(rays)#

the attenuation coefficient of the given rays

Parameters:

rays (RayVectorArray) – input rays to calculate the attenuation coefficient for

Return type:

int | float | complex | ndarray | Quantity | AbstractScalar

efficiency(rays, normal)#

Compute the efficiency of this multilayer film using optika.materials.multilayer_efficiency().

Parameters:
Return type:

float | AbstractScalar

index_refraction(rays)#

the index of refraction of this material for the given input rays

Parameters:

rays (RayVectorArray) – input rays used to evaluate the index of refraction

Return type:

int | float | complex | ndarray | Quantity | AbstractScalar

plot_layers(width=<Quantity 100. nm>, ax=None, **kwargs)#

Plot the multilayer stack using optika.materials.AbstractLayer.plot().

Parameters:
  • width (Quantity) – The width of the plotted multilayer stack in physical units.

  • ax (Axes) – The matplotlib axes on which to plot the multilayer stack.

  • kwargs – Additional keyword arguments to pass along to optika.materials.AbstractLayer.plot().

Return type:

list[Polygon]

to_string(prefix=None)#

Public-facing version of the __repr__ method that allows for defining a prefix string, which can be used to calculate how much whitespace to add to the beginning of each line of the result.

Parameters:

prefix (None | str) – an optional string, the length of which is used to calculate how much whitespace to add to the result.

Return type:

str

property is_mirror: bool#

flag controlling whether this material reflects or transmits light

layer: AbstractLayer = <dataclasses._MISSING_TYPE object>#

The main layer of bulk material comprising this filter.

layer_oxide: AbstractLayer = <dataclasses._MISSING_TYPE object>#

The oxide layer that lies on either side of the bulk layer.

property layers: list[AbstractLayer]#

A sequence of layers representing the multilayer stack.

mesh: AbstractMesh = <dataclasses._MISSING_TYPE object>#

The mesh backing supporting this thin-film filter.

property shape: dict[str, int]#

The array shape of this object.

property transformation: None#

the coordinate transformation between the global coordinate system and this object’s local coordinate system