Source code for solrat.atom_model.multi_term_atom_model.data.HeI

from pathlib import Path

from solrat.atom_model.multi_term_atom_model.object.level_registry import LevelRegistry
from solrat.atom_model.multi_term_atom_model.object.multi_term_atom_config import MultiTermAtomConfig
from solrat.atom_model.multi_term_atom_model.object.precomputed_data import PrecomputedData
from solrat.atom_model.multi_term_atom_model.object.transition_registry import TransitionRegistry
from solrat.engine.functions.decorators import log_function

_PRECOMPUTED_DIR = Path(__file__).parent / "HeI_precomputed"


[docs] @log_function def get_He_I_D3_config() -> MultiTermAtomConfig: # pragma: no cover r""" Config constructor for He I atom, with multiple transitions including D3. For details see A. Asensio Ramos et al 2008 ApJ 683 542 https://iopscience.iop.org/article/10.1086/589433 :return: :any:`MultiTermAtomConfig` instance """ # Levels level_registry = LevelRegistry() level_registry.register_level( beta="2s3", L=0, S=1, J=1, energy_cmm1=159855.9726, ) level_registry.register_level( beta="3s3", L=0, S=1, J=1, energy_cmm1=183236.7905, ) level_registry.register_level( beta="2p3", L=1, S=1, J=0, energy_cmm1=169087.8291, ) level_registry.register_level( beta="2p3", L=1, S=1, J=1, energy_cmm1=169086.8412, ) level_registry.register_level( beta="2p3", L=1, S=1, J=2, energy_cmm1=169086.7647, ) level_registry.register_level( beta="3p3", L=1, S=1, J=0, energy_cmm1=185564.8528, ) level_registry.register_level( beta="3p3", L=1, S=1, J=1, energy_cmm1=185564.5817, ) level_registry.register_level( beta="3p3", L=1, S=1, J=2, energy_cmm1=185564.5602, ) level_registry.register_level( beta="3d3", L=2, S=1, J=1, energy_cmm1=186101.5908, ) level_registry.register_level( beta="3d3", L=2, S=1, J=2, energy_cmm1=186101.5466, ) level_registry.register_level( beta="3d3", L=2, S=1, J=3, energy_cmm1=186101.5440, ) level_registry.validate() # Transitions transition_registry = TransitionRegistry() transition_registry.register_transition( term_upper=level_registry.get_term(beta="2p3", L=1, S=1), term_lower=level_registry.get_term(beta="2s3", L=0, S=1), einstein_a_ul_sm1=3 * 1.022e7, ) transition_registry.register_transition( term_upper=level_registry.get_term(beta="3p3", L=1, S=1), term_lower=level_registry.get_term(beta="2s3", L=0, S=1), einstein_a_ul_sm1=3 * 9.478e6, ) transition_registry.register_transition( term_upper=level_registry.get_term(beta="3s3", L=0, S=1), term_lower=level_registry.get_term(beta="2p3", L=1, S=1), einstein_a_ul_sm1=3.080e6 + 9.259e6 + 1.540e7, ) transition_registry.register_transition( term_upper=level_registry.get_term(beta="3d3", L=2, S=1), term_lower=level_registry.get_term(beta="2p3", L=1, S=1), einstein_a_ul_sm1=3.920e7 + 5.290e7 + 2.940e7 + 7.060e7 + 1.760e7 + 1.960e6, ) precomputed_data = PrecomputedData.load_from_directory(str(_PRECOMPUTED_DIR)) if _PRECOMPUTED_DIR.exists() else None return MultiTermAtomConfig( level_registry=level_registry, transition_registry=transition_registry, reference_lambda_A_air=5875.621, atomic_mass_amu=4.0, precomputed_data=precomputed_data, )