dionne module

Create the Dionne model, to compute SEEY.

This is a physical model developed by Dionne [Dio73, Dio75, LD57].

Model parameters

Parameter

Name

Unit

Initial

Description

\(\xi\)

excitation_energy

\(\mathrm{eV}\)

\(4.6\)

Energy required to excite a secondary electron in the material.

\(d\)

diffusion_length

\(\mathrm{nm}\)

\(2.0\)

Typical length between two interactions of the SE with the material. Related to elastic and inelastic mean free paths.

\(S\)

escape_probability

\(\mathrm{1}\)

\(0.5\)

Probability for the SE to escape the material.

\(A\)

power_law_scale

\(\mathrm{1}\)

\(1.0\)

Scale factor in the power law energy loss model.

\(n\)

power_law_exponent

\(\mathrm{1}\)

\(1.2\)

Exponent in the power law energy loss model.

EnergyLossModel

Models for the energy loss of PEs in the material. See dionne.range_func() for more information.

alias of Literal[‘Power law’, ‘CSDA’, ‘Inguimbert’]

class DionneParameters

Bases: TypedDict

excitation_energy: Parameter
diffusion_length: Parameter
escape_probability: Parameter
power_law_scale: Parameter
power_law_exponent: Parameter
class Dionne(parameters_values=None, energy_loss_model='Power law')

Bases: Model

Define the Dionne model [Dio73, Dio75, LD57].

Instantiate the object.

Parameters:
  • parameters_values (dict[str, Any] | None, default: None) – Contains name of parameters and associated value. If provided, will override the default values set in initial_parameters.

  • energy_loss_model (Literal['Power law', 'CSDA', 'Inguimbert'], default: 'Power law') – Model for the energy loss of PEs in the material. Only "Power law" is implemented for now. Check documentation of dionne.range_func() for more info.

emission_data_types: list[Literal['Emission Yield', 'Emission Energy', 'Emission Angle']] = ['Emission Yield']
populations: list[Literal['SE', 'EBE', 'IBE', 'all']] = ['SE']
considers_energy: bool = True
is_3d: bool = False
is_dielectrics_compatible: bool = False
model_config: ModelConfig = ModelConfig(emission_yield_files=('SE',), emission_energy_files=(), emission_angle_files=())
initial_parameters: dict[str, dict[str, str | float | bool]] = {'diffusion_length': {'description': 'Typical length between two interactions of the SE with the material. Related to elastic and inelastic mean free paths.', 'lower_bound': 0.0, 'markdown': 'd', 'unit': 'nm', 'value': 2.0}, 'escape_probability': {'description': 'Probability for the SE to escape the material.', 'lower_bound': 0.0, 'markdown': 'S', 'unit': '1', 'upper_bound': 1.0, 'value': 0.5}, 'excitation_energy': {'description': 'Energy required to excite a secondary electron in the material.', 'is_locked': True, 'lower_bound': 0.0, 'markdown': '\\xi', 'unit': 'eV', 'value': 4.6}, 'power_law_exponent': {'description': 'Exponent in the power law energy loss model.', 'lower_bound': 1.0, 'markdown': 'n', 'unit': '1', 'value': 1.2}, 'power_law_scale': {'description': 'Scale factor in the power law energy loss model.', 'lower_bound': 0.0, 'markdown': 'A', 'unit': '1', 'value': 1.0}}
_energy_loss_model: Literal['Power law', 'CSDA', 'Inguimbert']
parameters: DionneParameters

A TypedDict specific to every model.Model. Keys are parameters names, values are Parameter.

get_data(population, emission_data_type, energy, theta, *args, **kwargs)

Return desired data according to current model.

Will return a dataframe only if the TEEY is asked.

Return type:

DataFrame | None

find_optimal_parameters(data_matrix, **kwargs)

Extract main SEEY curve parameters from measure.

Return type:

None

evaluate(data_matrix)

Evaluate the quality of the model using Fil criterions.

Fil criterions [FBHP16, FBHP20] are adapted to TEEY models.

Return type:

dict[str, float]

dionne_func(ene, excitation_energy, diffusion_length, escape_probability, energy_loss_model='Power law', power_law_scale=None, power_law_exponent=None, **parameters)

Compute the SEEY for incident energy E.

The SEEY is given by:

\[\delta = G \cdot T \cdot S\]

where \(G\) is the mean number of SEs generated by the PE. \(T\) is their probability to reach the surface. \(S\) is their probability to cross the surface.

Return type:

float | ndarray[tuple[Any, ...], dtype[float64]]

range_func(ene, energy_loss_model='Power law', power_law_scale=None, power_law_exponent=None, **kwargs)

Compute penetration depth of PE.

We make the assumption that PE looses its energy following a power law or Thomson-Whiddington model [Whi14].

\[R = \frac{E^n}{A\cdot n}\]

Note

This is currently the only model that is implemented. However, it was shown that it was not adapted at low energies. Continuous Slowing-Down Approximation (CSDA) [You56] may be better suited:

\[\frac{\mathrm{d}E}{\mathrm{d}x} = - E / R\]

CSDA may also be incorrect at low-energies, were range is almost constant. See Ref. [IPBP17a, IPBP17b] for an alternative model.

Parameters:
  • ene (float | ndarray[tuple[Any, ...], dtype[float64]]) – PEs energy in \(\mathrm{eV}\).

  • energy_loss_model (Literal['Power law', 'CSDA', 'Inguimbert'], default: 'Power law') – Model for the energy loss of PEs along their path. Currently, the power law is the only one that is implememnted.

  • power_law_scale (Parameter | float | None, default: None) – Power law parameter \(A\).

  • power_law_exponent (Parameter | float | None, default: None) – Power law parameter \(n\).

  • kwargs – For future model implementations.

Return type:

float | ndarray[tuple[Any, ...], dtype[float64]]

Returns:

Corresponding ranges in \(\mathrm{nm}\).

generation(ene, range, excitation_energy, atol=1e-12)

Compute the generation term.

This is the probability for an incident electron with an energy ene to generate a secondary electron.

\[G = \frac{1}{R}\frac{E}{\xi}\]
Parameters:
Return type:

float | ndarray[tuple[Any, ...], dtype[float64]]

Returns:

Probabiliy for an electron to generate secondary electrons.

transport(range, diffusion_length)

Compute the transport term.

This is the probability for a generated secondary electron to reach the sample surface.

\[T = d\left(1-\mathrm{e}^{-R/d}\right)\]
Parameters:
Return type:

float | ndarray[tuple[Any, ...], dtype[float64]]

Returns:

Probabiliy for a SE to reach the surface.

_residue(x, ene, measured)
Return type:

ndarray[tuple[Any, ...], dtype[float64]]