Source code for maicos.lib.tables
#!/usr/bin/env python
#
# Copyright (c) 2025 Authors and contributors
# (see the AUTHORS.rst file for the full list of names)
#
# Released under the GNU Public Licence, v3 or any higher version
# SPDX-License-Identifier: GPL-3.0-or-later
"""The module contains static lookup tables for atom typing etc.
The tables are dictionaries that are indexed by elements. All known elements are listed
in the :attr:`elements` set.
"""
from dataclasses import dataclass
from pathlib import Path
import numpy as np
_share_path = Path(__file__).parents[1] / "share"
[docs]
@dataclass
class CMParameter:
"""Cromer-Mann X-ray scattering factor parameters."""
a: np.ndarray
b: np.ndarray
c: float
#: Cromer-Mann X-ray scattering factors computed from numerical
#: Hartree-Fock wave functions. See https://it.iucr.org/Cb/ch6o1v0001/
CM_parameters = {}
with Path(_share_path / "scatteringfactors.dat").open() as f:
for line in f:
if line[0] != "#":
params = line.split()
element = params[0]
CM_parameters[element] = CMParameter(
a=np.array(params[1:5], dtype=np.double),
b=np.array(params[5:9], dtype=np.double),
c=float(params[9]),
)
#: Set of known elements for Cromer-Mann coefficients.
elements = set(CM_parameters.keys())
#: Number of electrons for each element
#: Values are computed from :math:`q=0` limit of Cromer-Mann parameters.
electron_count = {}
for element in elements:
CM_parameter = CM_parameters[element]
electron_count[element] = np.sum(CM_parameter.a) + CM_parameter.c