Skip to main content

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})
formfactor

Ions and Isotopes

pydabax supports all common isotopes and ions and fractional formulas. Compounds can be multiplied and added.

Compound('2H2O', density="mcgowan") 
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'

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyDABAX-0.2.8.tar.gz (45.9 MB view details)

Uploaded Source

Built Distribution

pyDABAX-0.2.8-py2.py3-none-any.whl (46.2 MB view details)

Uploaded Python 2 Python 3

File details

Details for the file pyDABAX-0.2.8.tar.gz.

File metadata

  • Download URL: pyDABAX-0.2.8.tar.gz
  • Upload date:
  • Size: 45.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.10

File hashes

Hashes for pyDABAX-0.2.8.tar.gz
Algorithm Hash digest
SHA256 8a5db3bdc9b9e3c23827a8ad142c4dee433f73f235a21b8eaeff6642b50d3b17
MD5 a151312b7a1b8d0b552c26c0f7976b72
BLAKE2b-256 5c2f8bcbe692964cd96f50db12a977c76a510cea567375cf8907a5270eb58681

See more details on using hashes here.

File details

Details for the file pyDABAX-0.2.8-py2.py3-none-any.whl.

File metadata

  • Download URL: pyDABAX-0.2.8-py2.py3-none-any.whl
  • Upload date:
  • Size: 46.2 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.10

File hashes

Hashes for pyDABAX-0.2.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6cea1408e588709687c20a5be06276672d283bd9000bfb7340fc3e3805feb076
MD5 7b8ede5dddfc2a4a253fe5f33cc6c820
BLAKE2b-256 3338b3b8c01e2ce0ed2242c9e5a1d9187fcee5c9b5f23ac7212db292a99d6beb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page