Skip to content

Commit

Permalink
x units and angstrom star as constants
Browse files Browse the repository at this point in the history
Like most "measured constants", they're not measured directly, but
derived from other measures. However, the list of CODATA values
includes these (and their uncertainties and correlations), so it's
better to treat them as other constants.
  • Loading branch information
Ignacio Fdez. Galván authored and Ignacio Fdez. Galván committed Aug 22, 2024
1 parent 04beecf commit 736ee66
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 45 deletions.
9 changes: 3 additions & 6 deletions pint/constants_en.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ wien_frequency_displacement_law_constant = wien_u * k / ℎ
# 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.
# The K_alpha values are either backtransformed from the corresponding x unit or
# from the CODATA-2018 publication (doi:10.1103/RevModPhys.93.025010)

newtonian_constant_of_gravitation = 6.67430e-11 m^3/(kg s^2) = _ = gravitational_constant # (15)
rydberg_constant = 1.0973731568157e7 * m^-1 = R_∞ = R_inf # (12)
Expand All @@ -60,10 +58,9 @@ atomic_mass_constant = 1.66053906892e-27 kg = m_u
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)
lattice_spacing_of_Si = 1.920155716e-10 m = d_220 # (32)
K_alpha_Cu_d_220 = 0.80232719 # (24)
K_alpha_Mo_d_220 = 0.36940604 # (19)
K_alpha_W_d_220 = 0.108852175 # (98)
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.20901 = Å_star
planck_length = (hbar * gravitational_constant / c ** 3) ** 0.5

# Mass
Expand Down
71 changes: 35 additions & 36 deletions pint/pint_convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,28 +91,47 @@ def _set(key: str, value):
# m_e: Electron mass
# m_p: Proton mass
# m_n: Neutron mass
# 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.00000000028e-30)
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.00000, -0.00122, 0.00438, 0.00225, 0.00455, 0.00277], # R_i
[-0.00122, 1.00000, 0.97398, 0.97555, 0.97404, 0.59702], # g_e
[ 0.00438, 0.97398, 1.00000, 0.99839, 0.99965, 0.61279], # m_u
[ 0.00225, 0.97555, 0.99839, 1.00000, 0.99845, 0.61199], # m_e
[ 0.00455, 0.97404, 0.99965, 0.99845, 1.00000, 0.61281], # m_p
[ 0.00277, 0.59702, 0.61279, 0.61199, 0.61281, 1.00000], # 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 @@ -125,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 @@ -141,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.00000024
),
)

_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 736ee66

Please sign in to comment.