Modular Python tools for powder XRD analysis with extensible Rietveld refinement.
Project description
powerxrd
Minimal, extensible Python tools for powder XRD analysis with a lightweight Rietveld refinement engine.
✨ Overview
powerxrd is a modular framework for:
- Parsing powder XRD data
- Background subtraction and smoothing
- Peak analysis
- Lightweight Rietveld refinement
- Extensible lattice definitions
It is not a replacement for FullProf or GSAS.
It is a compact, inspectable refinement engine designed for:
- Teaching
- Prototyping
- Research exploration
- Algorithm experimentation
- Rapid lattice model development
🧱 Architecture
The package is organized into clear layers:
Lattice → geometry only (d-spacing, HKL generation)
Model → profile + background + peak physics
Refine → least-squares optimization
Workflow → staged refinement orchestration
Chart/Data → preprocessing utilities
This separation allows you to extend:
- New lattice systems (tetragonal, hexagonal, etc.)
- Alternative peak shapes
- Custom refinement strategies
- Structure factor implementations
The lattice layer is fully abstracted through BaseLattice, enabling clean geometric extensions.
📦 Installation
From PyPI (for users)
pip install powerxrd
🛠 Development Setup (recommended: uv)
PowerXRD uses uv for fast, reproducible dependency management.
Install uv:
pip install uv
Then inside the repository:
uv sync --group dev
This will:
- Create a virtual environment automatically
- Install runtime dependencies
- Install development tools (pytest, ruff, mypy)
No manual venv activation required.
To run anything inside the project environment:
uv run python script.py
🚀 Quick Example
from powerxrd.lattice import CubicLattice
from powerxrd.model import PhaseModel
import powerxrd.refine as rr
# Define lattice
model = PhaseModel(lattice=CubicLattice(a=4.0))
# Load experimental data (example)
x_exp, y_exp = rr.load_data()
# Staged refinement
rr.refine(model, x_exp, y_exp, ["scale"])
rr.refine(model, x_exp, y_exp, ["bkg_intercept", "bkg_slope"])
rr.refine(model, x_exp, y_exp, ["a"])
# Plot final fit
rr.plot_fit(model, x_exp, y_exp, model.pattern(x_exp))
Full examples are available in:
examples/
Including extended hello_rietveld workflows.
Run them via:
uv run python examples/hello_rietveld_long.py
🧪 Development
Run tests:
make test
Lint:
make lint
Format:
make format
Type check:
make type
Build package:
make build
🧠 Philosophy
This project prioritizes:
- Clarity over feature bloat
- Extensibility over monolithic design
- Numerical transparency
- Minimal abstraction overhead
- Inspectable scientific computation
It is intentionally small.
The goal is not to compete with large crystallographic suites — but to provide a clean, programmable refinement core.
📚 References
See RIETVELD_CLASSIC.md for foundational Rietveld literature and background resources.
License
MIT License © Andrew Garcia
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file powerxrd-4.0.0.tar.gz.
File metadata
- Download URL: powerxrd-4.0.0.tar.gz
- Upload date:
- Size: 3.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e4c435722c1aa3fb9743d08bff5a0f135c61db43e7099a6f53a57818ca3c881
|
|
| MD5 |
63a5932fd09fcb7af73c53a07efe5028
|
|
| BLAKE2b-256 |
95d1d2a104fe091600475df09a800d1de7ed7a5a43355d49f759584685131a8b
|
File details
Details for the file powerxrd-4.0.0-py3-none-any.whl.
File metadata
- Download URL: powerxrd-4.0.0-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b180d8dc3e9de9796317bb7db44234b88314affd7c11e58363b2910258643d8a
|
|
| MD5 |
3020ef4c48790665f194100872b2ab63
|
|
| BLAKE2b-256 |
2bac7aa09b59c457d10f10ad4f952a60dde585380c8b37bb0d8a9a218cde371d
|