88from rydstate .angular .utils import check_spin_addition_rule , get_possible_quantum_number_values , is_unknown
99from rydstate .metaclass_cache import CachedABCMeta
1010from rydstate .species .utils import get_all_subclasses
11- from rydstate .units import rydberg_constant_au
11+ from rydstate .units import electron_mass_u , rydberg_constant_au
1212
1313if TYPE_CHECKING :
1414 from rydstate .angular .utils import Unknown
@@ -35,8 +35,19 @@ class ElementProperties(ABC, metaclass=CachedABCMeta):
3535 number_valence_electrons : ClassVar [int ]
3636 """Number of valence electrons (i.e. 1 for alkali atoms and 2 for alkaline earth atoms)."""
3737
38- corrected_rydberg_constant : ClassVar [tuple [float , str ]]
39- r"""Corrected Rydberg constant stored as a tuple of the form (value, unit) for lazy unit conversion."""
38+ mass_number : ClassVar [int ]
39+ """Mass number A (i.e. number of nucleons) of the isotope."""
40+ atomic_mass_u : ClassVar [float ]
41+ """Relative atomic mass of the *neutral* atom in unified atomic mass units (u).
42+
43+ I.e. the mass including all Z electrons and their binding energies.
44+
45+ If not said otherwise, the values are taken from Table I (the atomic mass table)
46+ of the AME2020 atomic mass evaluation
47+ (M. Wang et al., Chin. Phys. C 45, 030003 (2021), https://doi.org/10.1088/1674-1137/abddaf).
48+ Concretely, we use the unrounded version of that table, which is published as the text file
49+ https://www-nds.iaea.org/amdc/ame2020/mass_1.mas20.txt, where the last column holds the atomic mass.
50+ """
4051
4152 ground_state_shell : ClassVar [tuple [int , int ]]
4253 """Shell (n, l) describing the electronic ground state configuration."""
@@ -137,11 +148,20 @@ def get_corrected_rydberg_constant(self, unit: str | None = None) -> PintFloat |
137148 Corrected Rydberg constant in the desired unit.
138149
139150 """
140- corrected_rydberg_constant_au = units .user_to_au (
141- self .corrected_rydberg_constant [0 ], self .corrected_rydberg_constant [1 ], "energy"
142- )
151+ corrected_rydberg_constant_au = self .reduced_mass_au * rydberg_constant_au
143152 return units .au_to_user (corrected_rydberg_constant_au , "energy" , unit )
144153
154+ @cached_property
155+ def mass_core_u (self ) -> float :
156+ """The mass of the ionic core in unified atomic mass units (u).
157+
158+ The core is the neutral atom stripped of the Rydberg electron and of all further
159+ electrons that are missing for an ion, i.e. of ``net_charge`` electrons in total.
160+ (The binding energies of these electrons are neglected, they only contribute
161+ on the order of 1e-8 u.)
162+ """
163+ return self .atomic_mass_u - self .net_charge * electron_mass_u
164+
145165 @cached_property # don't remove this caching without benchmarking it!!!
146166 def reduced_mass_au (self ) -> float :
147167 r"""The reduced mass mu in atomic units.
@@ -150,14 +170,12 @@ def reduced_mass_au(self) -> float:
150170
151171 .. math::
152172 \frac{\mu}{m_e} = \frac{m_{Core}}{m_{Core} + m_e}
173+ = \frac{1}{1 + m_e / m_{Core}}
153174
154- We calculate the reduced mass via the corrected Rydberg constant
155-
156- .. math::
157- \frac{\mu}{m_e} = \frac{R_M}{R_\infty}
175+ where :math:`m_{Core}` is given by :attr:`mass_core_u`.
158176
159177 """
160- return self . get_corrected_rydberg_constant ( "a.u." ) / rydberg_constant_au
178+ return 1 / ( 1 + electron_mass_u / self . mass_core_u )
161179
162180
163181def get_element_properties (species : str ) -> ElementProperties :
0 commit comments