Skip to content

Commit 9e46f19

Browse files
improve ElementProperties, use atomic_mass to determine reduced_mass and corrected_rydberg_constant
1 parent 9eb3862 commit 9e46f19

11 files changed

Lines changed: 66 additions & 72 deletions

File tree

‎src/rydstate/species/cesium/element_properties_data.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ class ElementPropertiesCesium(ElementProperties):
1313
additional_allowed_shells: ClassVar = [(4, 3), (5, 2), (5, 3), (5, 4)]
1414
core_electron_configuration = "5p6"
1515

16-
corrected_rydberg_constant = (109736.8627339, "1/cm")
16+
mass_number = 133
17+
atomic_mass_u = 132.905451958
1718

1819
alpha_closed_shell_core = 15.6440 # M. Marinescu et al., Phys. Rev. A 49, 982 (1994), https://journals.aps.org/pra/abstract/10.1103/PhysRevA.49.982
1920
r_c_dipole_operator = 3.42 # fitted to NIST matrix elements

‎src/rydstate/species/element_properties.py‎

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from rydstate.angular.utils import check_spin_addition_rule, get_possible_quantum_number_values, is_unknown
99
from rydstate.metaclass_cache import CachedABCMeta
1010
from 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

1313
if 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

163181
def get_element_properties(species: str) -> ElementProperties:

‎src/rydstate/species/hydrogen/element_properties_data.py‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import math
2+
13
from rydstate.species.element_properties import ElementProperties
24

35

@@ -10,7 +12,8 @@ class ElementPropertiesHydrogen(ElementProperties):
1012
ground_state_shell = (1, 0)
1113
core_electron_configuration = "1s0"
1214

13-
corrected_rydberg_constant = (109677.58340280356, "1/cm")
15+
mass_number = 1
16+
atomic_mass_u = 1.007825031898
1417

1518

1619
class ElementPropertiesHydrogenTextBook(ElementProperties):
@@ -22,4 +25,6 @@ class ElementPropertiesHydrogenTextBook(ElementProperties):
2225
ground_state_shell = (1, 0)
2326
core_electron_configuration = "1s0"
2427

25-
corrected_rydberg_constant = (109737.31568160003, "1/cm")
28+
mass_number = 1
29+
# infinite nuclear mass, i.e. the textbook Rydberg constant R_infinity
30+
atomic_mass_u = math.inf

‎src/rydstate/species/lithium/element_properties_data.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ class ElementPropertiesLithium(ElementProperties):
1010
ground_state_shell = (2, 0)
1111
core_electron_configuration = "1s2"
1212

13-
corrected_rydberg_constant = (109728.64, "1/cm")
13+
mass_number = 7
14+
atomic_mass_u = 7.01600343426
1415

1516
alpha_closed_shell_core = 0.1923 # M. Marinescu et al., Phys. Rev. A 49, 982 (1994), https://journals.aps.org/pra/abstract/10.1103/PhysRevA.49.982
1617
r_c_dipole_operator = 3.04 # fitted to NIST matrix elements

‎src/rydstate/species/potassium/element_properties_data.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ class ElementPropertiesPotassium(ElementProperties):
1313
additional_allowed_shells: ClassVar = [(3, 2)]
1414
core_electron_configuration = "3p6"
1515

16-
corrected_rydberg_constant = (109735.774, "1/cm")
16+
mass_number = 39
17+
atomic_mass_u = 38.96370648482
1718

1819
alpha_closed_shell_core = 5.331 # M. Marinescu et al., Phys. Rev. A 49, 982 (1994), https://journals.aps.org/pra/abstract/10.1103/PhysRevA.49.982
1920
r_c_dipole_operator = 2.3 # fitted to NIST matrix elements

‎src/rydstate/species/rubidium/element_properties_data.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ class ElementPropertiesRubidium(ElementProperties):
1313
additional_allowed_shells: ClassVar = [(4, 2), (4, 3)]
1414
core_electron_configuration = "4p6"
1515

16-
corrected_rydberg_constant = (109736.62301604665, "1/cm")
16+
mass_number = 87
17+
atomic_mass_u = 86.909180529
1718

1819
alpha_closed_shell_core = 9.076 # M. Marinescu et al., Phys. Rev. A 49, 982 (1994), https://journals.aps.org/pra/abstract/10.1103/PhysRevA.49.982
1920
r_c_dipole_operator = 3.12 # fitted to NIST matrix elements

‎src/rydstate/species/sodium/element_properties_data.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ class ElementPropertiesSodium(ElementProperties):
1010
ground_state_shell = (3, 0)
1111
core_electron_configuration = "2p6"
1212

13-
corrected_rydberg_constant = (109734.69, "1/cm")
13+
mass_number = 23
14+
atomic_mass_u = 22.98976928195
1415

1516
alpha_closed_shell_core = 0.9448 # M. Marinescu et al., Phys. Rev. A 49, 982 (1994), https://journals.aps.org/pra/abstract/10.1103/PhysRevA.49.982
1617
r_c_dipole_operator = 3.18 # fitted to NIST matrix elements

‎src/rydstate/species/strontium/element_properties_data.py‎

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from typing import ClassVar
33

44
from rydstate.species.element_properties import ElementProperties
5-
from rydstate.units import electron_mass_u, rydberg_constant_au
65

76

87
class _ElementPropertiesStrontiumAbstract(ElementProperties, ABC):
@@ -17,11 +16,8 @@ class ElementPropertiesStrontium87(_ElementPropertiesStrontiumAbstract):
1716
species = "Sr87"
1817
i_c = 9 / 2
1918

20-
_isotope_mass_u = 86.9088774970
21-
corrected_rydberg_constant = (
22-
rydberg_constant_au / (1 + electron_mass_u / _isotope_mass_u),
23-
"a.u.",
24-
)
19+
mass_number = 87
20+
atomic_mass_u = 86.90887749454
2521

2622
# https://nds.iaea.org/nuclearmoments/isotope_measurement_results.php?A=87&Z=38
2723
nuclear_dipole = -1.09316
@@ -31,9 +27,6 @@ class ElementPropertiesStrontium88(_ElementPropertiesStrontiumAbstract):
3127
species = "Sr88"
3228
i_c = 0
3329

34-
_isotope_mass_u = 87.9056122571
35-
corrected_rydberg_constant = (
36-
rydberg_constant_au / (1 + electron_mass_u / _isotope_mass_u),
37-
"a.u.",
38-
)
30+
mass_number = 88
31+
atomic_mass_u = 87.905612253
3932
nuclear_dipole = 0.0

‎src/rydstate/species/strontium_ion/element_properties_data.py‎

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from typing import ClassVar
33

44
from rydstate.species.element_properties import ElementProperties
5-
from rydstate.units import electron_mass_u, rydberg_constant_au
65

76

87
class _ElementPropertiesStrontiumAbstractIon(ElementProperties, ABC):
@@ -24,11 +23,8 @@ class ElementPropertiesStrontium87Ion(_ElementPropertiesStrontiumAbstractIon):
2423
species = "Sr87_ion"
2524
i_c = 9 / 2
2625

27-
_isotope_mass_u = 86.9088774970
28-
corrected_rydberg_constant = (
29-
rydberg_constant_au / (1 + electron_mass_u / _isotope_mass_u),
30-
"a.u.",
31-
)
26+
mass_number = 87
27+
atomic_mass_u = 86.90887749454
3228

3329
# https://nds.iaea.org/nuclearmoments/isotope_measurement_results.php?A=87&Z=38
3430
nuclear_dipole = -1.09316
@@ -38,8 +34,5 @@ class ElementPropertiesStrontium88Ion(_ElementPropertiesStrontiumAbstractIon):
3834
species = "Sr88_ion"
3935
i_c = 0
4036

41-
_isotope_mass_u = 87.9056122571
42-
corrected_rydberg_constant = (
43-
rydberg_constant_au / (1 + electron_mass_u / _isotope_mass_u),
44-
"a.u.",
45-
)
37+
mass_number = 88
38+
atomic_mass_u = 87.905612253

‎src/rydstate/species/ytterbium/element_properties_data.py‎

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from typing import ClassVar
33

44
from rydstate.species.element_properties import ElementProperties
5-
from rydstate.units import electron_mass_u, rydberg_constant_au
65

76

87
class _ElementPropertiesYtterbiumAbstract(ElementProperties, ABC):
@@ -17,11 +16,8 @@ class ElementPropertiesYtterbium171(_ElementPropertiesYtterbiumAbstract):
1716
species = "Yb171"
1817
i_c = 1 / 2
1918

20-
_isotope_mass_u = 170.9363258
21-
corrected_rydberg_constant = (
22-
rydberg_constant_au / (1 + electron_mass_u / _isotope_mass_u),
23-
"a.u.",
24-
)
19+
mass_number = 171
20+
atomic_mass_u = 170.936331515
2521

2622
# https://nds.iaea.org/nuclearmoments/isotope_measurement_results.php?A=171&Z=70
2723
nuclear_dipole = 0.4923
@@ -31,11 +27,8 @@ class ElementPropertiesYtterbium173(_ElementPropertiesYtterbiumAbstract):
3127
species = "Yb173"
3228
i_c = 5 / 2
3329

34-
_isotope_mass_u = 172.938216212
35-
corrected_rydberg_constant = (
36-
rydberg_constant_au / (1 + electron_mass_u / _isotope_mass_u),
37-
"a.u.",
38-
)
30+
mass_number = 173
31+
atomic_mass_u = 172.938216211
3932

4033
# https://nds.iaea.org/nuclearmoments/isotope_measurement_results.php?A=173&Z=70
4134
nuclear_dipole = -0.6780
@@ -45,9 +38,6 @@ class ElementPropertiesYtterbium174(_ElementPropertiesYtterbiumAbstract):
4538
species = "Yb174"
4639
i_c = 0
4740

48-
_isotope_mass_u = 173.938859
49-
corrected_rydberg_constant = (
50-
rydberg_constant_au / (1 + electron_mass_u / _isotope_mass_u),
51-
"a.u.",
52-
)
41+
mass_number = 174
42+
atomic_mass_u = 173.938867545
5343
nuclear_dipole = 0.0

0 commit comments

Comments
 (0)