Skip to main content

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


Download files

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

Source Distribution

powerxrd-4.0.0.tar.gz (3.6 MB view details)

Uploaded Source

Built Distribution

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

powerxrd-4.0.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

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

Hashes for powerxrd-4.0.0.tar.gz
Algorithm Hash digest
SHA256 6e4c435722c1aa3fb9743d08bff5a0f135c61db43e7099a6f53a57818ca3c881
MD5 63a5932fd09fcb7af73c53a07efe5028
BLAKE2b-256 95d1d2a104fe091600475df09a800d1de7ed7a5a43355d49f759584685131a8b

See more details on using hashes here.

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

Hashes for powerxrd-4.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b180d8dc3e9de9796317bb7db44234b88314affd7c11e58363b2910258643d8a
MD5 3020ef4c48790665f194100872b2ab63
BLAKE2b-256 2bac7aa09b59c457d10f10ad4f952a60dde585380c8b37bb0d8a9a218cde371d

See more details on using hashes here.

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