model package

Define the electron emission models.

class ChungEverhart(parameters_values=None)

Bases: Model

Chung and Everhart model, defined in [CE74].

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.

considers_energy: bool = True
emission_data_types: list[Literal['Emission Yield', 'Emission Energy', 'Emission Angle']] = ['Emission Energy']
find_optimal_parameters(data_matrix, **kwargs)

Fit model parameters on measurements.

Return type:

None

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

Return desired data according to current model.

Will return a dataframe only if the SEs energy distribution is asked.

Return type:

DataFrame | None

initial_parameters: dict[str, dict[str, str | float | bool]] = {'W_f': {'description': 'Material work function.', 'lower_bound': 0.0, 'markdown': 'W_f', 'unit': 'eV', 'value': 8.0}, 'norm': {'description': 'Distribution re-normalization constant.', 'lower_bound': 0.0, 'markdown': 'k', 'unit': '1', 'value': 1.0}}
is_3d: bool = False
is_dielectrics_compatible: bool = False
model_config: ModelConfig = ModelConfig(emission_yield_files=(), emission_energy_files=('all',), emission_angle_files=())
populations: list[Literal['SE', 'EBE', 'IBE', 'all']] = ['SE']
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.

considers_energy: bool = True
emission_data_types: list[Literal['Emission Yield', 'Emission Energy', 'Emission Angle']] = ['Emission Yield']
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]

find_optimal_parameters(data_matrix, **kwargs)

Extract main SEEY curve parameters from measure.

Return type:

None

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

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}}
is_3d: bool = False
is_dielectrics_compatible: bool = False
model_config: ModelConfig = ModelConfig(emission_yield_files=('SE',), emission_energy_files=(), emission_angle_files=())
populations: list[Literal['SE', 'EBE', 'IBE', 'all']] = ['SE']
class Maxwellian(parameters_values=None)

Bases: Model

Maxwellian distribution.

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.

considers_energy: bool = True
emission_data_types: list[Literal['Emission Yield', 'Emission Energy', 'Emission Angle']] = ['Emission Energy']
find_optimal_parameters(data_matrix, **kwargs)

Fit model parameters on measurements.

Return type:

None

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

Return desired data according to current model.

Will return a dataframe only if the SEs energy distribution is asked.

Return type:

DataFrame | None

initial_parameters: dict[str, dict[str, str | float | bool]] = {'norm': {'description': 'Distribution re-normalization constant.', 'lower_bound': 0.0, 'markdown': 'k', 'unit': '1', 'value': 1.0}, 'temperature': {'description': 'Temperature distribution.', 'lower_bound': 0.0, 'markdown': 'T', 'unit': 'eV', 'value': 7.5}}
is_3d: bool = False
is_dielectrics_compatible: bool = False
model_config: ModelConfig = ModelConfig(emission_yield_files=(), emission_energy_files=('SE',), emission_angle_files=())
populations: list[Literal['SE', 'EBE', 'IBE', 'all']] = ['SE']
class Sombrin(parameters_values=None)

Bases: Model

Define the Sombrin model, defined in [Som93].

We use the implementation from [FBHP16].

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.

property E: float

Return the E parameter in Sombrin model. Not incident energy.

considers_energy: bool = True
emission_data_types: list[Literal['Emission Yield', 'Emission Energy', 'Emission Angle']] = ['Emission Yield']
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]

find_optimal_parameters(data_matrix, **kwargs)

Extract main TEEY curve parameters from measure.

Return type:

None

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

initial_parameters: dict[str, dict[str, str | float | bool]] = {'E_c1': {'description': 'First crossover energy.', 'lower_bound': 0.0, 'markdown': 'E_{\\mathrm{c,\\,1}}', 'unit': 'eV', 'value': 0.0}, 'E_max': {'description': 'Energy at maximum TEEY.', 'lower_bound': 0.0, 'markdown': 'E_\\mathrm{max}', 'unit': 'eV', 'value': 1.0}, 'teey_max': {'description': 'Maximum TEEY, directly taken from the measurement.', 'lower_bound': 0.0, 'markdown': '\\sigma_\\mathrm{max}', 'unit': '1', 'value': 0.0}}
is_3d: bool = False
is_dielectrics_compatible: bool = False
model_config: ModelConfig = ModelConfig(emission_yield_files=('all',), emission_energy_files=(), emission_angle_files=())
populations: list[Literal['SE', 'EBE', 'IBE', 'all']] = ['all']
set_parameter_value(name, value)

Set E to None before updating the parameter.

Return type:

None

class Vaughan(implementation='original', parameters_values=None)

Bases: Model

Define the classic Vaughan model.

Instantiate the object.

Note

Parameter values set by implementation have priority over values given in parameters_values.

Parameters:
  • implementation (Literal['original', 'CST', 'SPARK3D'], default: 'original') – Modifies certain presets to match different interpretations of the model by calling set_implementation(). These parameter modifications have precedence over the ones set in parameters_values.

  • 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.

_E_0_matching(*, E_c1)

Fit E_0 to retrieve E_c1 (SPARK3D)

Return type:

float

considers_energy: bool = True
emission_data_types: list[Literal['Emission Yield', 'Emission Energy', 'Emission Angle']] = ['Emission Yield']
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]

find_e_0()

Find E_0 with error handling.

Return type:

None

find_optimal_parameters(data_matrix, **kwargs)

Match with position of first crossover and maximum.

Return type:

None

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.

Todo

This method could be so much simpler and efficient.

Return type:

DataFrame | None

implementations: tuple[str, ...] | None = ('original', 'CST', 'SPARK3D')
initial_parameters: dict[str, dict[str, str | float | bool]] = {'E_0': {'description': 'Threshold energy. By default, locked to :math:`12.5\\mathrm{\\,eV}`. If unlocked, will be fitted to retrieve :math:`E_{\\mathrm{c,\\,1}}`.', 'is_locked': True, 'markdown': 'E_0', 'unit': 'eV', 'value': 12.5}, 'E_c1': {'description': 'First crossover energy. Must be provided instead of :math:`E_0` for SPARK3D Vaughan.', 'is_locked': False, 'markdown': 'E_{\\mathrm{c,\\,1}}', 'unit': 'eV', 'value': 25.0}, 'E_max': {'description': 'Energy at maximum TEEY.', 'lower_bound': 0.0, 'markdown': 'E_\\mathrm{max}', 'unit': 'eV', 'value': 100.0}, 'delta_E_transition': {'description': 'Energy over which we switch from :math:`\\sigma_\\mathrm{low}` to actual Vaughan TEEY. Useful for smoothing the transition. Currently not implemented.', 'is_locked': True, 'markdown': '\\Delta E_{tr}', 'unit': 'eV', 'value': 1.0}, 'k_s': {'description': 'Roughness factor (:math:`\\sigma_\\mathrm{max}`).  Locked by default, but could be used for more precise fits.', 'is_locked': True, 'lower_bound': 0.0, 'markdown': 'k_s', 'unit': '1', 'upper_bound': 2.0, 'value': 1.0}, 'k_se': {'description': 'Roughness factor (:math:`E_\\mathrm{max}`).  Locked by default, but could be used for more precise fits.', 'is_locked': True, 'lower_bound': 0.0, 'markdown': 'k_{se}', 'unit': '1', 'upper_bound': 2.0, 'value': 1.0}, 'teey_low': {'description': 'TEEY below :math:`E_0`.', 'is_locked': True, 'lower_bound': 0.0, 'markdown': '\\sigma_\\mathrm{low}', 'unit': '1', 'value': 0.5}, 'teey_max': {'description': 'Maximum TEEY, directly taken from the measurement.', 'lower_bound': 0.0, 'markdown': '\\sigma_\\mathrm{max}', 'unit': '1', 'value': 1.5}}
is_3d: bool = True
is_dielectrics_compatible: bool = False
model_config: ModelConfig = ModelConfig(emission_yield_files=('all',), emission_energy_files=(), emission_angle_files=())
populations: list[Literal['SE', 'EBE', 'IBE', 'all']] = ['all']
set_implementation(implementation)

Update some parameters to reproduce a specific implementation.

Vaughan CST:

  • \(\sigma_\mathrm{low}\) is set to 0.

Vaughan SPARK3D:

  • \(\sigma_\mathrm{low}\) is set to 0.

  • \(E_0\) is unlocked, so that it will be fitted to match \(E_{c,\,1}\).

  • Below \(10\) \(\mathrm{eV}\), TEEY is 0.

Note

If the implementation is changed after the creation of the object, some parameters will be reset to their default value defined in initial_parameters, not to the values defined in the parameters_values argument of __init__ method.

Return type:

None

Submodules