Skip to content

Commit

Permalink
CODATA 2022 update (#2049)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jellby authored Dec 15, 2024
1 parent 2bdf58c commit fadbf70
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 56 deletions.
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Pint Changelog

- Add docs to the functions in ``pint.testing`` (PR #2070)
- Fix round function returning float instead of int (#2081)
- Update constants to CODATA 2022 recommended values. (#2049)


0.24.4 (2024-11-07)
Expand Down
21 changes: 10 additions & 11 deletions pint/constants_en.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,22 +46,21 @@ wien_wavelength_displacement_law_constant = ℎ * c / (k * wien_x)
wien_frequency_displacement_law_constant = wien_u * k / ℎ

#### MEASURED CONSTANTS ####
# Recommended CODATA-2018 values
# Recommended CODATA-2022 values
# To some extent, what is measured and what is derived is a bit arbitrary.
# The choice of measured constants is based on convenience and on available uncertainty.
# The uncertainty in the last significant digits is given in parentheses as a comment.

newtonian_constant_of_gravitation = 6.67430e-11 m^3/(kg s^2) = _ = gravitational_constant # (15)
rydberg_constant = 1.0973731568160e7 * m^-1 = R_∞ = R_inf # (21)
electron_g_factor = -2.00231930436256 = g_e # (35)
atomic_mass_constant = 1.66053906660e-27 kg = m_u # (50)
electron_mass = 9.1093837015e-31 kg = m_e = atomic_unit_of_mass = a_u_mass # (28)
proton_mass = 1.67262192369e-27 kg = m_p # (51)
neutron_mass = 1.67492749804e-27 kg = m_n # (95)
lattice_spacing_of_Si = 1.920155716e-10 m = d_220 # (32)
K_alpha_Cu_d_220 = 0.80232719 # (22)
K_alpha_Mo_d_220 = 0.36940604 # (19)
K_alpha_W_d_220 = 0.108852175 # (98)
rydberg_constant = 1.0973731568157e7 * m^-1 = R_∞ = R_inf # (12)
electron_g_factor = -2.00231930436092 = g_e # (36)
atomic_mass_constant = 1.66053906892e-27 kg = m_u # (52)
electron_mass = 9.1093837139e-31 kg = m_e = atomic_unit_of_mass = a_u_mass # (28)
proton_mass = 1.67262192595e-27 kg = m_p # (52)
neutron_mass = 1.67492750056e-27 kg = m_n # (85)
x_unit_Cu = 1.00207697e-13 m = Xu_Cu # (28)
x_unit_Mo = 1.00209952e-13 m = Xu_Mo # (53)
angstrom_star = 1.00001495e-10 = Å_star # (90)

#### DERIVED CONSTANTS ####

Expand Down
3 changes: 0 additions & 3 deletions pint/default_en.txt
Original file line number Diff line number Diff line change
Expand Up @@ -162,9 +162,6 @@ astronomical_unit = 149597870700 * meter = au # since Aug 2012
parsec = 1 / tansec * astronomical_unit = pc
nautical_mile = 1852 * meter = nmi
bohr = hbar / (alpha * m_e * c) = a_0 = a0 = bohr_radius = atomic_unit_of_length = a_u_length
x_unit_Cu = K_alpha_Cu_d_220 * d_220 / 1537.4 = Xu_Cu
x_unit_Mo = K_alpha_Mo_d_220 * d_220 / 707.831 = Xu_Mo
angstrom_star = K_alpha_W_d_220 * d_220 / 0.2090100 = Å_star
planck_length = (hbar * gravitational_constant / c ** 3) ** 0.5

# Mass
Expand Down
85 changes: 43 additions & 42 deletions pint/pint_convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,26 +91,47 @@ def _set(key: str, value):
# m_e: Electron mass
# m_p: Proton mass
# m_n: Neutron mass
R_i = (ureg._units["R_inf"].converter.scale, 0.0000000000021e7)
g_e = (ureg._units["g_e"].converter.scale, 0.00000000000035)
m_u = (ureg._units["m_u"].converter.scale, 0.00000000050e-27)
m_e = (ureg._units["m_e"].converter.scale, 0.00000000028e-30)
m_p = (ureg._units["m_p"].converter.scale, 0.00000000051e-27)
m_n = (ureg._units["m_n"].converter.scale, 0.00000000095e-27)
# x_Cu: Copper x unit
# x_Mo: Molybdenum x unit
# A_s: Angstrom star
R_i = (ureg._units["R_inf"].converter.scale, 0.0000000000012e7)
g_e = (ureg._units["g_e"].converter.scale, 0.00000000000036)
m_u = (ureg._units["m_u"].converter.scale, 0.00000000052e-27)
m_e = (ureg._units["m_e"].converter.scale, 0.0000000028e-31)
m_p = (ureg._units["m_p"].converter.scale, 0.00000000052e-27)
m_n = (ureg._units["m_n"].converter.scale, 0.00000000085e-27)
x_Cu = (ureg._units["x_unit_Cu"].converter.scale, 0.00000028e-13)
x_Mo = (ureg._units["x_unit_Mo"].converter.scale, 0.00000053e-13)
A_s = (ureg._units["angstrom_star"].converter.scale, 0.00000090e-10)
if args.corr:
# fmt: off
# Correlation matrix between measured constants (to be completed below)
# R_i g_e m_u m_e m_p m_n
# R_i g_e m_u m_e m_p m_n x_Cu x_Mo A_s
corr = [
[1.0, -0.00206, 0.00369, 0.00436, 0.00194, 0.00233], # R_i
[-0.00206, 1.0, 0.99029, 0.99490, 0.97560, 0.52445], # g_e
[0.00369, 0.99029, 1.0, 0.99536, 0.98516, 0.52959], # m_u
[0.00436, 0.99490, 0.99536, 1.0, 0.98058, 0.52714], # m_e
[0.00194, 0.97560, 0.98516, 0.98058, 1.0, 0.51521], # m_p
[0.00233, 0.52445, 0.52959, 0.52714, 0.51521, 1.0],
] # m_n
[ 1.00000, -0.00122, 0.00438, 0.00225, 0.00455, 0.00277, 0.00000, 0.00000, 0.00000], # R_i
[-0.00122, 1.00000, 0.97398, 0.97555, 0.97404, 0.59702, 0.00000, 0.00000, 0.00000], # g_e
[ 0.00438, 0.97398, 1.00000, 0.99839, 0.99965, 0.61279, 0.00000, 0.00000, 0.00000], # m_u
[ 0.00225, 0.97555, 0.99839, 1.00000, 0.99845, 0.61199, 0.00000, 0.00000, 0.00000], # m_e
[ 0.00455, 0.97404, 0.99965, 0.99845, 1.00000, 0.61281, 0.00000, 0.00000, 0.00000], # m_p
[ 0.00277, 0.59702, 0.61279, 0.61199, 0.61281, 1.00000,-0.00098,-0.00108,-0.00063], # m_n
[ 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,-0.00098, 1.00000, 0.00067, 0.00039], # x_Cu
[ 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,-0.00108, 0.00067, 1.00000, 0.00100], # x_Mo
[ 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,-0.00063, 0.00039, 0.00100, 1.00000], # A_s
]
# fmt: on
try:
(R_i, g_e, m_u, m_e, m_p, m_n) = uncertainties.correlated_values_norm(
[R_i, g_e, m_u, m_e, m_p, m_n], corr
(
R_i,
g_e,
m_u,
m_e,
m_p,
m_n,
x_Cu,
x_Mo,
A_s,
) = uncertainties.correlated_values_norm(
[R_i, g_e, m_u, m_e, m_p, m_n, x_Cu, x_Mo, A_s], corr
)
except AttributeError:
raise Exception(
Expand All @@ -123,13 +144,19 @@ def _set(key: str, value):
m_e = uncertainties.ufloat(*m_e)
m_p = uncertainties.ufloat(*m_p)
m_n = uncertainties.ufloat(*m_n)
x_Cu = uncertainties.ufloat(*x_Cu)
x_Mo = uncertainties.ufloat(*x_Mo)
A_s = uncertainties.ufloat(*A_s)

_set("R_inf", R_i)
_set("g_e", g_e)
_set("m_u", m_u)
_set("m_e", m_e)
_set("m_p", m_p)
_set("m_n", m_n)
_set("x_unit_Cu", x_Cu)
_set("x_unit_Mo", x_Mo)
_set("angstrom_star", A_s)

# Measured constants with zero correlation
_set(
Expand All @@ -139,32 +166,6 @@ def _set(key: str, value):
),
)

_set(
"d_220",
uncertainties.ufloat(ureg._units["d_220"].converter.scale, 0.000000032e-10),
)

_set(
"K_alpha_Cu_d_220",
uncertainties.ufloat(
ureg._units["K_alpha_Cu_d_220"].converter.scale, 0.00000022
),
)

_set(
"K_alpha_Mo_d_220",
uncertainties.ufloat(
ureg._units["K_alpha_Mo_d_220"].converter.scale, 0.00000019
),
)

_set(
"K_alpha_W_d_220",
uncertainties.ufloat(
ureg._units["K_alpha_W_d_220"].converter.scale, 0.000000098
),
)

ureg._root_units_cache = {}
ureg._build_cache()

Expand Down

0 comments on commit fadbf70

Please sign in to comment.