Skip to main content

Ultra-fast Python package for X-ray optical properties calculation with CXRO/NIST data, CLI tools, and synchrotron applications

Project description

XRayLabTool

Python 3.12+ PyPI version License: MIT Documentation Status CI

Ultra-fast Python package and CLI for calculating X-ray optical properties of materials using CXRO/NIST atomic scattering factor data. Supports NumPy and JAX backends for CPU/GPU acceleration.

Installation

Using uv (Recommended)

# Core package
uv pip install xraylabtool

# With JAX backend for GPU acceleration
uv pip install "xraylabtool[jax]"

# With matplotlib for publication plots
uv pip install "xraylabtool[plots]"

Using pip

pip install xraylabtool

Development

git clone https://github.com/imewei/pyXRayLabTool.git
cd pyXRayLabTool
uv sync

Quick Start

Python API

import xraylabtool as xlt

# Single material at 10 keV
result = xlt.calculate_single_material_properties("SiO2", 10.0, 2.2)
print(f"Critical angle: {result.critical_angle_degrees[0]:.3f}°")
print(f"Attenuation length: {result.attenuation_length_cm[0]:.2f} cm")

# Multiple materials comparison
materials = {"SiO2": 2.2, "Si": 2.33, "Al2O3": 3.95, "C": 3.52}
results = xlt.calculate_xray_properties(
    list(materials.keys()), 10.0, list(materials.values())
)
for formula, r in results.items():
    print(f"{formula:6}: θc = {r.critical_angle_degrees[0]:.3f}°")

Command-Line Interface

xraylabtool calc SiO2 -e 10.0 -d 2.2           # Single material
xraylabtool calc Si -e 5-15:11 -d 2.33 -o out.csv  # Energy sweep
xraylabtool convert energy 8.048,10.0 --to wavelength
xraylabtool formula Al2O3                         # Formula analysis
xraylabtool bragg -d 3.14,2.45 -e 8.048          # Bragg angles
xraylabtool batch materials.csv -o results.csv    # Batch processing
xraylabtool completion install                    # Shell tab-completion

GUI

python -m xraylabtool.gui

Single-material analysis and multi-material comparison with interactive plots and CSV/PNG export.

GUI overview

Calculated Properties

Property Field Unit
Dispersion coefficient dispersion_delta dimensionless
Absorption coefficient absorption_beta dimensionless
Scattering factors scattering_factor_f1, f2 electrons
Critical angle critical_angle_degrees degrees
Attenuation length attenuation_length_cm cm
Scattering length density real_sld_per_ang2, imaginary_sld_per_ang2 Å⁻²

All properties are returned as NumPy arrays in the XRayResult dataclass, supporting single energies or energy sweeps.

Backend Selection

import xraylabtool as xlt

# Switch to JAX for JIT-compiled GPU acceleration
xlt.set_backend("jax")

# Switch back to NumPy (default)
xlt.set_backend("numpy")

Scientific Background

Calculations use Henke, Gullikson, and Davis atomic scattering factor tabulations (0.03–30 keV):

  • Refractive index: n = 1 - δ - iβ
  • Critical angle: θc = √(2δ)
  • Attenuation: Beer-Lambert law with μ = 4πβ/λ

Documentation

Full documentation: pyxraylabtool.readthedocs.io

Development

uv sync                          # Install dependencies
uv run pytest                    # Run tests
uv run ruff check .              # Lint
uv run ruff format .             # Format
uv run sphinx-build docs docs/_build  # Build docs
make test                        # Or use Makefile shortcuts

Citation

@software{xraylabtool,
  title = {XRayLabTool: High-Performance X-ray Optical Properties Calculator},
  author = {Wei Chen},
  url = {https://github.com/imewei/pyXRayLabTool},
  version = {0.4.2},
  year = {2024--2026}
}

License

MIT License. See LICENSE for details.

Acknowledgments

  • CXRO — Atomic scattering factor databases
  • NIST — Reference data and validation

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

xraylabtool-0.4.2.tar.gz (556.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xraylabtool-0.4.2-py3-none-any.whl (641.7 kB view details)

Uploaded Python 3

File details

Details for the file xraylabtool-0.4.2.tar.gz.

File metadata

  • Download URL: xraylabtool-0.4.2.tar.gz
  • Upload date:
  • Size: 556.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for xraylabtool-0.4.2.tar.gz
Algorithm Hash digest
SHA256 45cd6b727bc0d1fb9fe76763ce2d67cb3681570360abe876bec107e7ced87a67
MD5 2193e09f1aaf3fa3d61d44d6127af9b7
BLAKE2b-256 45738d5f85d94fb9f1343e90977faca541c115bbec671687f8e433a6f74964f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for xraylabtool-0.4.2.tar.gz:

Publisher: publish.yml on imewei/pyXRayLabTool

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xraylabtool-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: xraylabtool-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 641.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for xraylabtool-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 38d7eb5b3c75808aa9c8ba1e60c66e62e70ab7fdd788332bcf9bbe53f4a11537
MD5 83a47a788f5cc5a16041834512d2bb43
BLAKE2b-256 b918141a64dae2263a3c62e68eb682623d5822ebb5c3dc51ebcc3ebface52970

See more details on using hashes here.

Provenance

The following attestation bundles were made for xraylabtool-0.4.2-py3-none-any.whl:

Publisher: publish.yml on imewei/pyXRayLabTool

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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