Fast x-ray and neutron database
Project description
pyDABAX
pyDABAX aims to make the dabax database fast and easy accessible in python. Besides the access to the original database, pyDABAX also provides high level functionality for important quantities like anomalous x-ray and neutron form-factors, absorption edges, and compton scattering.
Installation
Package
Install with pip into your current environment.
pip install pyDABAX
The following dependencies will be installed by pip:
numpy <https://www.numpy.org/>
TinyDB <https://github.com/msiemens/tinydb>
astropy <https://github.com/astropy/astropy>
pandas
regex
Manual installation
Clone the current git repository:
# Run in your terminal or conda terminal
git clone https://github.com/JulianMars/pyDABAX.git
You can install pyDABAX from inside the git folder to your current environment using:
# Install package using pip
cd ./pyDABAX.git # Change into the pyDABAX.git folder
pip install . # Use the pip package manager to install pyDABAX in your current python environment
High-level interface
Getting Started
Create compound from string with fixed energy.
from pydabax import *
Gold = Compound('Au', energy='10 keV', density='element')
Obtain refractive index, x-ray form factor, and attenuation coefficient.
print('Refractive index: δ + βj = {:.2e}'.format(Gold.deltabeta))
print('Formfactor: f = {:.1f}'.format(Gold.f))
print('Attenuation coefficient: mu = {:.3f}'.format(Gold.mu))
Refractive index: δ + βj = 2.99e-05+2.21e-06j Formfactor: f = 73.4+5.4j Attenuation coefficient: mu = 2218.580 1 / cm
In jupyter notebooks Compounds and Elements have a html representation with useful parameters:
from pydabax import *
Elements['O']
Oxygen
Symbol | O |
---|---|
Atomic number | 8 |
Atomic mass | 15.9994 u |
Charge | 0 |
Atomic radius | 0.65 Angstrom |
Covalent radius | 0.73 Angstrom |
Melting point | 50.35 K |
Boiling point | 90.18 K |
Energy | 8.047 keV |
q | 0.0 1 / Angstrom |
X-ray formfactor | 8.052 electron |
Kα1 | 0.5249 keV |
Kα2 | 0.5249 keV |
Kβ | - |
bcoh | (5.803+0j) fm |
binc | - |
σcoh | 4.232 barn |
σinc | 0.0008 barn |
absorption (2200m/s) | 0.0002 barn |
Plot the q-dependent Form factor density
import matplotlib.pyplot as plt
import numpy as np
from pydabax import Compound
#q-space
q = np.linspace(0, 35, 101)
#Create Compounds
Gold = Compound("Au", energy="8.047 keV", density="element")
Water = Compound("H2O", energy="8047 eV", density="997 kg/m^3")
Il = Compound('(CH6N)0.4(C8H15N2)0.6(CF3SO2)2N', density="mcgowan")
#Set q of compounds
Water.q = q
Gold.q = q
Il.q = q
#Prepare plot
fig, ax = plt.subplots(figsize=[3.375, 3])
ax.set_xlabel("q (1/Å)")
ax.set_ylabel("f1 / V (e/Å)")
#Obtain f from compounds and plot
ax.plot(Water.q, Water.f.real/Water.molecular_volume, label="H2O at 8.047 keV")
ax.plot(Gold.q, Gold.f.real/Gold.molecular_volume, label="Gold at 8.047 keV")
ax.plot(Il.q, Il.f.real/Il.molecular_volume, label="Ionic Liquid at 8.047 keV")
_ = ax.legend(prop={"size": 8})
Ions and Isotopes
pydabax supports all common isotopes and ions and fractional formulas. Compounds can be multiplied and added.
Compound('2H2O', density="mcgowan") #Deuterium
Compound('OH-', density="mcgowan")
Compound('YB2Cu3O6.93', density="element")
#create 0.8 mol/kg aqueous CsCl solution
cp = 0.8 * Compound('CsCl') + 55.555 * Compound('H2O')
Units
As the different flavors of x-ray analysis prefers different units, pyDABAX uses astropy to handle physical quantities consisting of a value and a unit. Hence, unit handling should be flexible and coherent within the package. First, set the preferred global units. Standard units are keV, Å, 1/Å, and °. All inputs without explicitly specified unit and all outputs will have this unit.
#Photon energy
UnitSettings.UNIT_E = 'eV'
#Momentum transfer
UnitSettings.UNIT_Q = '1/nm'
#Wavelength
UnitSettings.UNIT_R = 'nm'
#Total scattering angles
UnitSettings.UNIT_TTH = 'rad'
Dosimetric quantities and compounds
pyDABAX includes the X-Ray Attenuation and Absorption for Materials of Dosimetric Interest (XAAMDI) database. The Mass Energy Attenuation coefficient can be accessed via
from pydabax import *
print(Compound('YB2Cu3O6.93', density="element") .mu_en)
print(Compound('YB2Cu3O6.93', density="element") .mup_en)
Predefined compounds are predefined for convenience.
from pydabax import *
import matplotlib.pyplot as plt
bone = Compounds['Bone, Cortical (ICRU-44)']
bone.energy = xen
blood = Compounds['Blood, Whole (ICRU-44)']
blood.energy = xen
fig, ax = plt.subplots(figsize=[3.375, 3])
ax.set_ylabel('Energy Attenuation Coeff. μ_en (1/cm)')
ax.set_xlabel('Photon Energy (keV)')
ax.set_yscale('log')
ax.plot(xen, bone.mu_en, label = 'Bone, Cortical (ICRU-44)')
ax.plot(xen, blood.mu_en, label = 'Blood, Whole (ICRU-44)')
_ = ax.legend(prop={"size": 8})
Accessing the X-ray database dabax
Return a list of all available symbols:
import pydabax as dbx
dbx.get_symbols()
Show all available entries for carbon.
import pydabax as dbx
dbx.get_keys("C")
['atomic_number', 'symbol', 'element_symbol', 'name', 'charge', 'mass_number', 'mcgowan_volume', 'atomic_weight', 'nist_f1f2_chantler', 'nist_edges_chantler', 'cxro_f1f2_henke', 'nist_b_sears', 'dabax_AtomicConstants', 'dabax_ComptonProfiles', 'dabax_CrossSec_BrennanCowan', 'dabax_CrossSec_Compton_IntegrHubbell', ... ... ..., 'dabax_isf_xop_biggs_linap', 'dabax_JumpRatio_Elam', 'dabax_Neutron_SLCS_DataBooklet', 'dabax_Neutron_SLCS_NeutronNews', 'dabax_RadiativeRates_KrauseScofield', 'dabax_RadiativeRates_L_Scofield', 'dabax_XAFS_McKale_K-edge_R=2.5_A', 'dabax_XAFS_McKale_K-edge_R=4.0_A', 'dabax_XAFS_McKale_L-edge_R=2.5_A', 'dabax_XAFS_McKale_L-edge_R=4.0_A', 'dabax_XREmission_NIST', 'dabax_XREmission', 'dabax_XREmissionWeights', 'mcgowan_vol']
Get the CXRO Henke table for f1 and f2.
dbx.get_dabax("C", "cxro_f1f2_henke")
E (eV) f1 f2 0 10.0000 -9999.00000 0.806885 1 10.1617 -9999.00000 0.851522 2 10.3261 -9999.00000 0.898628 3 10.4931 -9999.00000 0.948341 4 10.6628 -9999.00000 1.000800 ... ... ... ... 497 28135.1000 6.00026 0.000515 498 28590.2000 6.00020 0.000496 499 29052.6000 6.00013 0.000478 500 29522.5000 6.00007 0.000460 501 30000.0000 6.00000 0.000443 502 rows × 3 columns
The database file is in json format and can be thus viewed with all common json viewers. Jupyter lab comes with an integrated json viewer.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pyDABAX-0.3.1.tar.gz
.
File metadata
- Download URL: pyDABAX-0.3.1.tar.gz
- Upload date:
- Size: 46.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d8865cb7d459aa030d254c79d1142cb46869aaad8f20b1fe2a44b1e0b43be1a |
|
MD5 | 998b68c87ef550953b6d41a8d888be55 |
|
BLAKE2b-256 | f70c1cfe8fa827e5b69bebfa99cf3956c0e9ad12fc4d82e80f5aed0cab474db5 |
File details
Details for the file pyDABAX-0.3.1-py2.py3-none-any.whl
.
File metadata
- Download URL: pyDABAX-0.3.1-py2.py3-none-any.whl
- Upload date:
- Size: 46.3 MB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5ede2ed3f46af8ed439d2c18ea1dfcffef4289a7b1e3fb05121a8921afb718c1 |
|
MD5 | 5b68e3a6623a83d78c39a64e5f5ddf05 |
|
BLAKE2b-256 | 80cf3bc9098b8af8aaeb115b299396042a3118813db22eb8ecc190bea3a3110a |