Structures

The virtual representation of a sample is finally build using the Structure class.

A Structure consists of one IsotropicMaterial used as semi-infinite entry material and a second arbitrary Material as exit material. A list of Layers can be added as desired in between these materials, to create a 1D model of layered media.

The basic Layer consists of a material and an assigned thickness. An arbitrary sequence of layers can be stacked and repeated by RepeatedLayers, to create Bragg-mirror or multiple quantum well structures.

There are also classes to approximate layers with varying properties along the z-axis (inhomogeneous layers) by creating multiple thinner homogeneous slices:

Layers

Abstract base classes

class elli.structure.AbstractLayer[source]

Abstract class for a layer.

abstract get_permittivity_profile(lbda)[source]

Returns the permittivity profile of the layer for the given wavelengths.

Parameters:

lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

Returns:

Returns list of tuples [(thickness, dielectric tensor), …]

Return type:

List[Tuple[float, npt.NDArray]]

class elli.structure.InhomogeneousLayer[source]

Abstract base class for inhomogeneous layers with varying properties in z-direction.

get_permittivity_profile(lbda)[source]

Returns the permittivity profile of the layer for the given wavelengths. The tensor is evaluated in the middle of each slice.

Parameters:

lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

Returns:

Returns list of tuples [(d1, epsilon1), (d2, epsilon2), …]

Return type:

List[Tuple[float, npt.NDArray]]

get_slices()[source]

Returns z slicing with the position relative to this layer, not to the whole structure.

Returns:

array of ‘z’ positions [z0, z1,… , zmax], with z0 = 0 and zmax = z{d+1}

Return type:

npt.NDArray

abstract get_tensor(z, lbda)[source]

Returns permittivity tensor matrix for position ‘z’.

set_divisions(div)[source]

Defines the number of slices to simulate the layer.

Parameters:

div (int) – Number of slices for the layer

set_material(material)[source]

Defines the material for the layer.

Parameters:

material (Material) – Material object

set_thickness(thickness)[source]

Defines the thickness of the layer in nm.

Parameters:

thickness (float) – Thickness of the layer in nm.

Homogeneous layers

class elli.structure.Layer(material, thickness)[source]

Homogeneous layer of dielectric material.

New layer of material ‘material’, with thickness ‘thickness’

Parameters:
  • material (Material) – Material object

  • thickness (float) – Thickness of layer (in nm)

get_permittivity_profile(lbda)[source]

Returns the permittivity profile of the layer for the given wavelengths.

Parameters:

lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

Returns:

Returns a list containing one tuple [(thickness, dielectric tensor)]

Return type:

List[Tuple[float, npt.NDArray]]

set_material(material)[source]

Defines the material for the layer.

Parameters:

material (Material) – Material object

set_thickness(thickness)[source]

Defines the thickness of the layer in nm.

Parameters:

thickness (float) – Thickness of the layer in nm.

class elli.structure.RepeatedLayers(layers, repetitions, before=0, after=0)[source]

Repeated structure of layers.

Create a repeated structure of layers.

Example : For layers [1,2,3] with n=2, before=1 and after=0, the structure will be 3123123.

Parameters:
  • layers (List[AbstractLayer]) – List of the repeated layers, starting from z=0

  • repetitions (int) – Number of repetitions

  • before (int, optional) – Number of additional layers before the first period. Defaults to 0.

  • after (int, optional) – Number of additional layers after the last period. Defaults to 0.

get_permittivity_profile(lbda)[source]

Returns the permittivity profile of the layer for the given wavelengths.

Parameters:

lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

Returns:

Returns list of tuples [(thickness, dielectric tensor), …]

Return type:

List[Tuple[float, npt.NDArray]]

set_layers(layers)[source]

Set list of layers.

Parameters:

layers (List[AbstractLayer]) – List of the repeated layers, starting from z=0

set_repetitions(repetitions, before=0, after=0)[source]

Defines the number of repetitions and the first and last layers.

Example : For layers [1,2,3] with n=2, before=1 and after=0, the structure will be 3123123.

Parameters:
  • repetitions (int) – Number of repetitions

  • before (int, optional) – Number of additional layers before the first period. Defaults to 0.

  • after (int, optional) – Number of additional layers after the last period. Defaults to 0.

Inhomogeneous layers

class elli.structure.TwistedLayer(material, thickness, div, angle)[source]

Twisted layer. The material gets rotated around the z axis.

Creates a layer with a twisted material.

Parameters:
  • material (Material) – Material object

  • thickness (float) – Thickness of layer (in nm)

  • div (int) – Number of slices for the layer

  • angle (float) – rotation angle over the distance ‘d’ (in degrees)

get_tensor(z, lbda)[source]

Gets permittivity tensor matrix for position ‘z’ and wavelength ‘lbda’.

Parameters:
  • z (float) – Position in the layer (in nm)

  • lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

Returns:

Permittivity tensor for position ‘z’ and wavelength ‘lbda’.

Return type:

npt.NDArray

set_angle(angle)[source]

Defines the total twist angle of this layer.

Parameters:

angle (float) – Rotation angle over the thickness ‘d’ of the layer (in degrees)

class elli.structure.VaryingMixtureLayer(material, thickness, div, fraction_modulation=<function VaryingMixtureLayer.<lambda>>)[source]

Mixture layer, with varying fraction dependent on z Position.

Note: The set fraction of the mixture material will be ignored and replaced by the result of the fraction modulation function.

Parameters:
  • material (MixtureMaterial) – MixtureMaterial object

  • d (float) – Thickness of layer (in nm)

  • div (int) – Number of slices for the layer

  • fraction_modulation (Callable[[float], float]) – Function to modify the fraction amount, takes float from 0 to 1 (top to bottom of layer), should return fraction at that level. Defaults to a linear profile (100% host material to 100% guest material).

get_tensor(z, lbda)[source]

Gets permittivity tensor matrix for position ‘z’ and wavelength ‘lbda’.

Parameters:
  • z (float) – Position in the layer (in nm)

  • lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

Returns:

Permittivity tensor for position ‘z’ and wavelength ‘lbda’.

Return type:

npt.NDArray

set_fraction_modulation(fraction_modulation=<function VaryingMixtureLayer.<lambda>>)[source]

Sets function for variation of the mixture over the layer

Parameters:

fraction_modulation (Callable[[float], float]) – Function to modify the fraction amount, takes float from 0 to 1 (top to bottom of layer), should return fraction at that level. Defaults to a linear profile (100% host material to 100% guest material).

Structure Class

class elli.structure.Structure(front, layers, back)[source]

Description of the whole structure.

Consists of:

  • front half-space (incident)

  • layer succession

  • back half-space (exit)

Parameters:
  • front (IsotropicMaterial) – IsotropicMaterial used as front half space

  • layers (List[Layer]) – List of Layers, starting from z=0

  • back (Material) – Material used as back half space

evaluate(lbda, theta_i, solver=<class 'elli.solver4x4.Solver4x4'>, **solver_kwargs)[source]

Return the Evaluation of the structure for the given parameters with standard settings.

Parameters:
  • lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

  • theta_i (float) – Incident angle of the experiment (in degrees).

  • solver (Solver, optional) – Choose which solver class is used. Defaults to Solver4x4.

  • solver_kwargs (optional) – Keyword arguments for the Solver can be appended as arguments.

Returns:

Result of the experiment.

Return type:

Result

get_permittivity_profile(lbda)[source]

Returns the permittivity profile of the complete structure for the given wavelengths.

Parameters:

lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

Returns:

Returns list of tuples [(thickness, dielectric tensor), …]

Return type:

List[Tuple[float, npt.NDArray]]

set_back_material(material)[source]

Defines the back half-space material.

Parameters:

material (Material) – Material used as back half space

set_front_material(material)[source]

Defines the front half-space material. Has to be isotropic.

Parameters:

material (IsotropicMaterial) – IsotropicMaterial used as front half space

set_layers(layers)[source]

Sets sequence of layers.

Parameters:

layers (List[Layer]) – List of Layers, starting from z=0