Skip to main content

X-Ray Scattering Tools

Tests

xrayscatteringtools is a Python library for gas-phase X-ray scattering data analysis. It provides tools for data I/O, visualization, detector calibration, masking, and theoretical modeling. It is designed to work alongside the CXI-Template repository for analyzing data from the Coherent X-ray Imaging (CXI) endstation at the Linac Coherent Light Source (LCLS).

Features

  • Data I/O — Read and write .xyz and .mol molecular geometry files, combine multi-run HDF5 experimental data, and manage YAML-based experiment configurations.
  • Visualization — Plot Jungfrau 4M detector images with proper tiled geometry.
  • Calibration — Geometry calibration, interactive pixel masking, per-material scattering corrections, and timetool arrival-time calibration.
  • Theoretical Modeling — Compute elastic and inelastic scattering patterns via the Independent Atom Model (IAM), load ab initio scattering data and optimized molecular geometries.
  • Utilities — Unit conversions (keV, Å, a.u., q, θ), momentum-transfer maps, azimuthal binning, molecular transformations, and element lookups.

Installation

Install from PyPI:

pip install xrayscatteringtools

Or install from source:

git clone https://github.com/Weber-Group/xrayscatteringtools.git
cd xrayscatteringtools
pip install .

For development (includes pytest, black, mypy, ruff):

pip install -e ".[dev]"

Requirements: Python ≥ 3.9


Modules Overview

xrayscatteringtools.io

Data input and output:

  • combineRuns — Combine data from multiple LCLS experimental runs (HDF5).
  • read_xyz / write_xyz — Read and write .xyz molecular geometry files.
  • read_mol — Parse .mol / .molden files.
  • get_leaves — Inspect the dataset tree of an HDF5 file.
  • get_data_paths — Resolve run-specific data paths from a YAML config.
  • get_config / get_config_for_runs — Load experiment configuration values.

xrayscatteringtools.plotting

Detector visualization:

  • plot_j4m — Plot a Jungfrau 4M image using the stored pixel geometry.
  • plot_jungfrau — Plot arbitrary Jungfrau panel data with custom coordinates.
  • compute_pixel_edges / edges_from_centers — Derive pixel-edge arrays for pcolormesh.

xrayscatteringtools.utils

General-purpose utilities:

  • Unit conversions — keV2Angstroms, Angstroms2keV, au2invAngstroms, invAngstroms2au, q2theta, theta2q.
  • Detector geometry — compute_q_map, azimuthalBinning.
  • Molecular transforms — translate_molecule, rotate_molecule.
  • Element lookups — element_symbol_to_number, element_number_to_symbol.
  • Other — compress_ranges, enable_underscore_cleanup, J4M (lazy-loaded Jungfrau 4M geometry).

xrayscatteringtools.calib

Calibration and correction tools:

  • geometry_calibration — Fit beam center and detector distance via azimuthally-averaged scattering patterns (run_geometry_calibration, thompson_correction, geometry_correction).
  • masking — MaskMaker class for step-by-step pixel masking: dark, background, polygon, and per-q-ring sample masks.
  • scattering_corrections — Per-material correction factors (Si, Al, Be, Kapton HN, sample cell), attenuation-length lookups, and J4M_efficiency.
  • timetool_calibration — fast_erf_fit for edge detection, apply_timetool_correction for per-shot arrival-time correction, and add_calibration_to_yaml for persisting calibration parameters.

xrayscatteringtools.theory

Theoretical scattering models:

  • iam — Independent Atom Model: isotropic and oriented elastic/inelastic scattering patterns (iam_elastic_pattern, iam_inelastic_pattern, iam_total_pattern, and their _oriented variants), plus iam_compton_spectrum.
  • geometries — Lazy-loaded optimized molecular geometries from bundled HDF5 data (accessed as module-level attributes, e.g. geometries.SF6).
  • patterns — Lazy-loaded ab initio scattering patterns from bundled HDF5 data (accessed as module-level attributes, e.g. patterns.SF6__HF__aug_cc_pVDZ).

Testing

The test suite uses pytest and covers all modules (360+ tests):

pip install -e ".[dev]"
python -m pytest tests/

Tests run automatically via GitHub Actions on every push and pull request to main.


Contributing

Contributions are welcome! Please fork the repository and submit a pull request with your changes.


License

This project is licensed under the MIT License. See the LICENSE file for details.


Acknowledgments

This library was created by David J. Romano by compiling and standardizing code from previous data analysis pipelines. Maintained by the Weber Research Group and developed by collaborators to facilitate X-ray scattering research.

Metadata

Release files for xrayscatteringtools 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xrayscatteringtools 1.0.2
File Size Uploaded
xrayscatteringtools-1.0.2.tar.gz 387.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for xrayscatteringtools 1.0.2
File Interpreter ABI Platform
xrayscatteringtools-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 757.0 kB

Release files / xrayscatteringtools-1.0.2.tar.gz

Download URL xrayscatteringtools-1.0.2.tar.gz
Size 387.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9ffd1a561ecbfc3c1315466b6c146d177d1891efc6f2fd937d8e5e433bd995b4
BLAKE2b-256 checksum
How to use checksums
f29bfb120d82f69c9f8d97c31000639424ae33b1ab6b66f13462dcfd84e41d10
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.0

Release files / xrayscatteringtools-1.0.2-py3-none-any.whl

Download URL xrayscatteringtools-1.0.2-py3-none-any.whl
Size 370.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ba1a80060a8777ad57d797abef86236b2868fea3c9c18dfd5eb5ee68f60daea8
BLAKE2b-256 checksum
How to use checksums
be9b28dae066113577a8d40046c03767f7329520dec2c0280ad0125e02e9fcc4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.0

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page