vaughan module

Create the Vaughan model, to compute TEEY.

TEEY at non-normal incidence will not be taken into account into the fit (FIXME).

Todo

Make this more robust. Especially the _vaughan_func.

Model parameters

Parameter

Name

Unit

Initial

Description

\(E_0\)

E_0

\(\mathrm{eV}\)

\(12.5\)

Threshold energy. By default, locked to \(12.5\mathrm{\,eV}\). If unlocked, will be fitted to retrieve \(E_{c,\,1}\).

\(E_\mathrm{max}\)

E_max

\(\mathrm{eV}\)

\(0.0\)

Energy at maximum TEEY.

\(\Delta E_{tr}\)

delta_E_transition

\(\mathrm{eV}\)

\(1.0\)

Energy over which we switch from \(\sigma_\mathrm{low}\) to actual Vaughan TEEY. Useful for smoothing the transition. Currently not implemented.

\(\sigma_\mathrm{low}\)

teey_low

\(\mathrm{1}\)

\(0.5\)

TEEY below \(E_0\).

\(\sigma_\mathrm{max}\)

teey_max

\(\mathrm{1}\)

\(0.0\)

Maximum TEEY, directly taken from the measurement.

\(k_s\)

k_s

\(\mathrm{1}\)

\(1.0\)

Roughness factor (\(\sigma_\mathrm{max}\)). Locked by default, but could be used for more precise fits.

\(k_{se}\)

k_se

\(\mathrm{1}\)

\(1.0\)

Roughness factor (\(E_\mathrm{max}\)). Locked by default, but could be used for more precise fits.

\(E_{c,\,1}\)

E_c1

\(\mathrm{eV}\)

\(0.0\)

First crossover energy. Must be provided instead of E_0 for SPARK3D Vaughan.

class VaughanParameters

Bases: TypedDict

E_0: Parameter
E_max: Parameter
delta_E_transition: Parameter
teey_low: Parameter
teey_max: Parameter
k_s: Parameter
k_se: Parameter
E_c1: Parameter
class Vaughan(implementation: Literal['original', 'CST', 'SPARK3D'] = 'original', parameters_values: dict[str, Any] | None = None)

Bases: Model

Define the classic Vaughan model.

emission_data_types: list[Literal['Emission Yield', 'Emission Energy', 'Emission Angle']] = ['Emission Yield']
populations: list[Literal['SE', 'EBE', 'IBE', 'all']] = ['all']
considers_energy: bool = True
is_3d: bool = True
is_dielectrics_compatible: bool = False
model_config: ModelConfig = ModelConfig(emission_yield_files=('all',), emission_energy_files=(), emission_angle_files=())
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_{c,\\,1}`.', 'is_locked': True, 'markdown': 'E_0', 'unit': 'eV', 'value': 12.5}, 'E_c1': {'description': 'First crossover energy. Must be provided instead of E_0 for SPARK3D Vaughan.', 'is_locked': False, 'markdown': 'E_{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': 0.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': 0.0}}
__init__(implementation: Literal['original', 'CST', 'SPARK3D'] = 'original', parameters_values: dict[str, Any] | None = None) None

Instantiate the object.

Note

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

Parameters:
  • implementation – Modifies certain presets to match different interpretations of the model by calling preset_implementation(). These parameter modifications have precedence over the ones set in parameters_values.

  • parameters_values – Contains name of parameters and associated value. If provided, will override the default values set in initial_parameters.

parameters: VaughanParameters
preset_implementation(implementation: Literal['original', 'CST', 'SPARK3D']) None

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.

get_data(population: Literal['SE', 'EBE', 'IBE', 'all'], emission_data_type: Literal['Emission Yield', 'Emission Energy', 'Emission Angle'], energy: ndarray[tuple[Any, ...], dtype[float64]], theta: ndarray[tuple[Any, ...], dtype[float64]], *args, **kwargs) DataFrame | None

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.

find_optimal_parameters(data_matrix: DataMatrix, **kwargs) None

Match with position of first crossover and maximum.

find_e_0() None

Find E_0 with error handling.

_E_0_matching(*, E_c1: float) float

Fit E_0 to retrieve E_c1 (SPARK3D)

evaluate(data_matrix: DataMatrix) dict[str, float]

Evaluate the quality of the model using Fil criterions.

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

_abc_impl = <_abc._abc_data object>
_vaughan_func(ene: float, the: float, E_0: Parameter, E_max: Parameter, teey_max: Parameter, teey_low: Parameter, k_se: Parameter, k_s: Parameter, delta_E_transition: Parameter, **parameters) float | ndarray[tuple[Any, ...], dtype[float64]]

Compute the TEEY for incident energy E.

_vaughan_spark3d(ene: float, the: float, E_0: Parameter, E_max: Parameter, teey_max: Parameter, teey_low: Parameter, k_se: Parameter, k_s: Parameter, delta_E_transition: Parameter, **parameters) float | ndarray[tuple[Any, ...], dtype[float64]]

Compute TEEY as SPARK3D would.

This is a classic Vaughan, but TEEY is null for energies below E_0_SPARK3D=10.0. This parameter is different from the classic E_0 that appears in the expression of \(\xi\).