From f5c7746437b5b9f432787972f8a78410ae4d0d80 Mon Sep 17 00:00:00 2001 From: Matthew Newville Date: Tue, 1 Aug 2023 23:07:51 -0500 Subject: [PATCH] more uniform location for atomic symbols and element names --- larch/utils/physical_constants.py | 63 ++++++++++++++++--------------- larch/wxlib/feff_browser.py | 6 +-- larch/wxxas/config.py | 4 +- larch/wxxas/xas_dialogs.py | 15 +------- larch/xray/__init__.py | 16 ++------ larch/xrd/amcsd.py | 16 +------- larch/xrd/amcsd_utils.py | 37 +----------------- 7 files changed, 46 insertions(+), 111 deletions(-) diff --git a/larch/utils/physical_constants.py b/larch/utils/physical_constants.py index bbe190a00..37ae5f8e4 100644 --- a/larch/utils/physical_constants.py +++ b/larch/utils/physical_constants.py @@ -32,42 +32,43 @@ # Rydberg constant in eV (~13.6 eV) RYDBERG = consts.Rydberg * consts.Planck * consts.c/ consts.e -# classical electron radius in cm +# classical electron radius in cm and Ang R_ELECTRON_CM = 100.0 * consts.physical_constants['classical electron radius'][0] -R_ELECTRON_ANG = 1.e10 * consts.physical_constants['classical electron radius'][0] +R_ELECTRON_ANG = 1.e8 * R_ELECTRON_CM ATOM_SYMS = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', - 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', - 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', - 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', - 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', - 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', - 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', - 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', - 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', - 'Md', 'No', 'Lr'] + 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', + 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', + 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', + 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', + 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', + 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', + 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', + 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', 'Md', + 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds', 'Rg', 'Cn', + 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og'] - -ATOM_NAMES = ['hydrogen', 'helium', 'lithium', 'beryllium', 'boron', - 'carbon', 'nitrogen', 'oxygen', 'fluorine', 'neon', 'sodium', - 'magnesium', 'aluminum', 'silicon', 'phosphorus', 'sulfur', - 'chlorine', 'argon', 'potassium', 'calcium', 'scandium', - 'titanium', 'vanadium', 'chromium', 'manganese', 'iron', - 'cobalt', 'nickel', 'copper', 'zinc', 'gallium', 'germanium', - 'arsenic', 'selenium', 'bromine', 'krypton', 'rubidium', - 'strontium', 'yttrium', 'zirconium', 'niobium', 'molybdenum', - 'technetium', 'ruthenium', 'rhodium', 'palladium', 'silver', - 'cadmium', 'indium', 'tin', 'antimony', 'tellurium', 'iodine', - 'xenon', 'cesium', 'barium', 'lanthanum', 'cerium', - 'praseodymium', 'neodymium', 'promethium', 'samarium', +ATOM_NAMES = ['hydrogen', 'helium', 'lithium', 'beryllium', 'boron', 'carbon', + 'nitrogen', 'oxygen', 'fluorine', 'neon', 'sodium', 'magnesium', + 'aluminum', 'silicon', 'phosphorus', 'sulfur', 'chlorine', 'argon', + 'potassium', 'calcium', 'scandium', 'titanium', 'vanadium', + 'chromium', 'manganese', 'iron', 'cobalt', 'nickel', 'copper', + 'zinc', 'gallium', 'germanium', 'arsenic', 'selenium', 'bromine', + 'krypton', 'rubidium', 'strontium', 'yttrium', 'zirconium', + 'niobium', 'molybdenum', 'technetium', 'ruthenium', 'rhodium', + 'palladium', 'silver', 'cadmium', 'indium', 'tin', 'antimony', + 'tellurium', 'iodine', 'xenon', 'cesium', 'barium', 'lanthanum', + 'cerium', 'praseodymium', 'neodymium', 'promethium', 'samarium', 'europium', 'gadolinium', 'terbium', 'dysprosium', 'holmium', 'erbium', 'thulium', 'ytterbium', 'lutetium', 'hafnium', - 'tantalum', 'tungsten', 'rhenium', 'osmium', 'iridium', - 'platinum', 'gold', 'mercury', 'thallium', 'lead', 'bismuth', - 'polonium', 'astatine', 'radon', 'francium', 'radium', - 'actinium', 'thorium', 'protactinium', 'uranium', 'neptunium', - 'plutonium', 'americium', 'curium', 'berkelium', 'californium', - 'einsteinium', 'fermium', 'mendelevium', 'nobelium', - 'lawrencium'] + 'tantalum', 'tungsten', 'rhenium', 'osmium', 'iridium', 'platinum', + 'gold', 'mercury', 'thallium', 'lead', 'bismuth', 'polonium', + 'astatine', 'radon', 'francium', 'radium', 'actinium', 'thorium', + 'protactinium', 'uranium', 'neptunium', 'plutonium', 'americium', + 'curium', 'berkelium', 'californium', 'einsteinium', 'fermium', + 'mendelevium', 'nobelium', 'lawrencium', 'rutherfordium', + 'dubnium', 'seaborgium', 'bohrium', 'hassium', 'meitnerium', + 'darmstadtium', 'roentgenium', 'copernicium', 'nihonium', + 'flerovium', 'moscovium', 'livermorium', 'tennessine', 'oganesson'] diff --git a/larch/wxlib/feff_browser.py b/larch/wxlib/feff_browser.py index 2883f0521..695b8578e 100644 --- a/larch/wxlib/feff_browser.py +++ b/larch/wxlib/feff_browser.py @@ -18,9 +18,9 @@ LarchWxApp) from larch.xafs import get_feff_pathinfo -from larch.xray import atomic_symbols +from larch.utils.physical_constants import ATOM_SYMS -ATSYMS = ['< All Atoms>'] + atomic_symbols +ATSYMS = ['< All Atoms>'] + ATOM_SYMS[:96] EDGES = ['< All Edges>', 'K', 'L3', 'L2', 'L1', 'M5'] @@ -143,7 +143,7 @@ def GetResponse(self): class FeffResultsPanel(wx.Panel): """ present Feff results """ - def __init__(self, parent=None, feffresult=None, path_importer=None, + def __init__(self, parent=None, feffresult=None, path_importer=None, _larch=None): wx.Panel.__init__(self, parent, -1, size=(700, 500)) self.parent = parent diff --git a/larch/wxxas/config.py b/larch/wxxas/config.py index 4433a8a0a..8289d19f7 100644 --- a/larch/wxxas/config.py +++ b/larch/wxxas/config.py @@ -2,9 +2,9 @@ from larch.site_config import get_homedir from larch.xafs.xafsutils import FT_WINDOWS -from larch.xray import atomic_symbols +from larch.utils.physical_constants import ATOM_SYMS -ATSYMS = ['?'] + atomic_symbols +ATSYMS = ['?'] + ATOM_SYMS[:98] EDGES = ['K', 'L3', 'L2', 'L1', 'M5', 'M4', 'M3', 'N7'] CONF_FILE = 'xas_viewer.conf' diff --git a/larch/wxxas/xas_dialogs.py b/larch/wxxas/xas_dialogs.py index f12054c0e..0826d4425 100644 --- a/larch/wxxas/xas_dialogs.py +++ b/larch/wxxas/xas_dialogs.py @@ -24,23 +24,12 @@ get_zoomlimits, set_zoomlimits) from larch.xafs import etok, ktoe, find_energy_step -from larch.utils.physical_constants import PI, DEG2RAD, PLANCK_HC +from larch.utils.physical_constants import PI, DEG2RAD, PLANCK_HC, ATOM_SYMS from larch.math import smooth Plot_Choices = {'Normalized': 'norm', 'Derivative': 'dmude'} -ELEM_LIST = ('H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', - 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', - 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', - 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', - 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', - 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', - 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', - 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', - 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', - 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf') - EDGE_LIST = ('K', 'L3', 'L2', 'L1', 'M5', 'M4', 'M3') NORM_MU = 'Normalized \u03BC(E)' @@ -115,7 +104,7 @@ def __init__(self, parent, controller, **kws): wids['phi_in'] = FloatSpin(panel, **fs_opts) wids['phi_out'] = FloatSpin(panel, **fs_opts) - wids['elem'] = Choice(panel, choices=ELEM_LIST, size=(50, -1)) + wids['elem'] = Choice(panel, choices=ATOM_SYMS[:98], size=(50, -1)) wids['edge'] = Choice(panel, choices=EDGE_LIST, size=(50, -1)) wids['formula'] = wx.TextCtrl(panel, -1, '', size=(250, -1)) diff --git a/larch/xray/__init__.py b/larch/xray/__init__.py index de1b9827a..06ff1ef57 100644 --- a/larch/xray/__init__.py +++ b/larch/xray/__init__.py @@ -19,6 +19,8 @@ xray_lines X-ray emission lines for an element """ +from larch.utils.physical_constants import ATOM_SYMS + from xraydb import (XrayDB, atomic_mass, atomic_number, atomic_symbol, atomic_density, xray_line, xray_lines, xray_edge, xray_edges, ck_probability, f0, f0_ions, mu_elam, @@ -36,18 +38,6 @@ # from .cromer_liberman import f1f2 as f1f2_cl from .background import XrayBackground -atomic_symbols = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', - 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', - 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', - 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', - 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', - 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', - 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', - 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', - 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', - 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', - 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf'] - _larch_builtins = {'_xray': dict(chemparse=chemparse, material_get=material_get, material_add=material_add, @@ -86,4 +76,4 @@ def _larch_init(_larch): setsym = _larch.symtable.set_symbol setsym('_xray._xraydb', XrayDB()) setsym('_xray._materials', _read_materials_db()) - setsym('_xray._atomic_symbols', atomic_symbols) + setsym('_xray._atomic_symbols', ATOM_SYMS) diff --git a/larch/xrd/amcsd.py b/larch/xrd/amcsd.py index c2744f17d..d25283a2b 100755 --- a/larch/xrd/amcsd.py +++ b/larch/xrd/amcsd.py @@ -57,7 +57,7 @@ from .cif2feff import cif2feffinp from ..utils import isotime from ..utils.strutils import version_ge, bytes2str -from ..utils.physical_constants import TAU +from ..utils.physical_constants import TAU, ATOM_SYMS from ..site_config import user_larchdir from .. import logger @@ -89,18 +89,6 @@ 'f2hkl', 'degen', 'lorentz')) -elem_symbol = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', - 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', - 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', - 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', - 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', - 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', - 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', - 'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', - 'Es', 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds', - 'Rg', 'Uub', 'Uut', 'Uuq', 'Uup', 'Uuh', 'Uus', 'Uuo'] - - # for packing/unpacking H, K, L to 2-character hash HKL_ENCODE = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_%' def pack_hkl(h, k, l): @@ -1273,7 +1261,7 @@ def find_cifs(self, id=None, mineral_name=None, author_name=None, matches = new_matches if strict_contains: - excludes_elements = elem_symbol[:] + excludes_elements = ATOM_SYMS[:] for c in contains_elements: if c in excludes_elements: excludes_elements.remove(c) diff --git a/larch/xrd/amcsd_utils.py b/larch/xrd/amcsd_utils.py index 4062086b4..12d00e102 100644 --- a/larch/xrd/amcsd_utils.py +++ b/larch/xrd/amcsd_utils.py @@ -9,7 +9,7 @@ from sqlalchemy.orm import sessionmaker from sqlalchemy.pool import SingletonThreadPool - +from larch.utils.physical_constants import ATOM_SYMS, ATOM_NAMES __version__ = '1' @@ -173,39 +173,6 @@ def get_optarray(dat): ) -atsyms = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', - 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', - 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', - 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', - 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', - 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', - 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', - 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', - 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', - 'Md', 'No', 'Lr', 'D'] - - -atnames = ['hydrogen', 'helium', 'lithium', 'beryllium', - 'boron', 'carbon', 'nitrogen', 'oxygen', 'fluorine', 'neon', - 'sodium', 'magnesium', 'aluminum', 'silicon', 'phosphorus', - 'sulfur', 'chlorine', 'argon', 'potassium', 'calcium', 'scandium', - 'titanium', 'vanadium', 'chromium', 'manganese', 'iron', 'cobalt', - 'nickel', 'copper', 'zinc', 'gallium', 'germanium', 'arsenic', - 'selenium', 'bromine', 'krypton', 'rubidium', 'strontium', - 'yttrium', 'zirconium', 'niobium', 'molybdenum', 'technetium', - 'ruthenium', 'rhodium', 'palladium', 'silver', 'cadmium', - 'indium', 'tin', 'antimony', 'tellurium', 'iodine', 'xenon', - 'cesium', 'barium', 'lanthanum', 'cerium', 'praseodymium', - 'neodymium', 'promethium', 'samarium', 'europium', 'gadolinium', - 'terbium', 'dysprosium', 'holmium', 'erbium', 'thulium', - 'ytterbium', 'lutetium', 'hafnium', 'tantalum', 'tungsten', - 'rhenium', 'osmium', 'iridium', 'platinum', 'gold', 'mercury', - 'thallium', 'lead', 'bismuth', 'polonium', 'astatine', 'radon', - 'francium', 'radium', 'actinium', 'thorium', 'protactinium', - 'uranium', 'neptunium', 'plutonium', 'americium', 'curium', - 'berkelium', 'californium', 'einsteinium', 'fermium', - 'mendelevium', 'nobelium', 'lawrencium', 'deuterium' ] - def create_amcsd(dbname='test.db'): if os.path.exists(dbname): os.unlink(dbname) @@ -219,7 +186,7 @@ def create_amcsd(dbname='test.db'): ('0', 'in progress', 'today', 'in progress')) atz, i = 0, 0 - for sym, name in zip(atsyms, atnames): + for sym, name in zip(ATOM_SYMS, ATOM_NAMES): i += 1 atz += 1 if sym == 'D':