Skip to main content

X-Ray Diffraction Cooking -- nx5d data processing recipes

Project description

xraydc — X-Ray Diffraction Cooking

xraydc provides X-ray diffraction recipes and helper functions for the nx5d analysis framework. Within the nx5d Spice Concept, it supplies the domain-specific logic that "cooks" raw detector data into reciprocal-space representations that are ready for physical interpretation.

Overview

  • QMapper maps angular detector images into reciprocal-space with coordinates $q_x$, $q_y$, and $q_z$ using well tested algorithms provided by xrayutilities.
  • sRSM generates static reciprocal-space maps from a single scan.
  • TRSM generates parameter-grouped reciprocal-space maps, for example over delay, temperature, or scan index.
  • QMapper.qmap_groupby() provides split-apply-combine Q-mapping over grouped xarray datasets.

The package is designed to work with xarray, supports arbitrary goniometer and detector geometries, and can be used with pixelated area detectors beyond the original beamline setup.

Provenance

xraydc originated at the KMC3-XPP beamline at BESSY II (Helmholtz-Zentrum Berlin). It is also used in the Ultrafast Dynamics group of Prof. Matias Bargheer (University of Potsdam) for laboratory-based plasma X-ray source time-resolved diffraction experiments.

The Q-mapping workflow has been used with the following detector and beamline combinations:

Facility Beamline Detector(s)
BESSY II KMC3-XPP Dectris Pilatus 100K, Dectris Eiger
MAX IV FemtoMAX Dectris Pilatus 1M
European XFEL MID AGIPD

Installation

pip install xraydc

Runtime dependencies:

Package Role
nx5d Data management and Spice framework
xrayutilities Angle-to-Q conversion backend
xarray Labelled multidimensional arrays
dask Lazy and parallel computation
scipy Scientific computing utilities

Quick Start

The example below uses the standard KMC3-XPP geometry with a Pilatus 100K detector and the actual motor names used at the beamline.

KMC3-XPP 4-circle goniometer geometry with θ, 2θ, χ, φ axes and area detector
Standard KMC3-XPP 4-circle geometry with Pilatus 100K area detector.

from xraydc.signal import QMapper

exp_setup = {
    "goniometerAxes": {
        "Theta_mea": "y-",
        "Chi": "x+",
        "Phi": "z+",
    },
    "detectorAxes": {
        "TwoTheta_mea": "y-",
    },
    "detectorTARAlign": [0.0, 0.0, 0.0],
    "imageAxes": ["y-", "z-"],
    "imageSize": [195, 487],
    "imageCenter": [95, 244],
    "imageDistance": 481.0,
    "imageChannelSize": [0.172, 0.172],
    "sampleFaceUp": "z+",
    "beamDirection": [1, 0, 0],
    "sampleNormal": [0, 0, 1],
    "beamEnergy": 10000.0,
}

mapper = QMapper(**exp_setup)

# raw_data is an xarray.Dataset containing detector images and angle arrays
q_data = mapper.qmap(raw_data)

# Example: 2D reciprocal-space projection
q_data_2d = mapper.qmap(raw_data, dims=("qx", "qz"))

Using nx5d Recipes

Inside an nx5d Spice pipeline, the recipe layer is usually called through nx5d rather than directly:

from xraydc.cooking import TRSM, sRSM

result = sRSM(scan_type, data, exp_info=exp_info, offsets=offsets)

result = TRSM(
    scan_type,
    data,
    exp_info=exp_info,
    qargs={"groupby": "delay", "dims": ("qy", "qz"), "qsize": None, "gridargs": None},
)

Repository Layout

src/xraydc/
├── signal.py     # QMapper and Q-space conversion logic
├── cooking.py    # nx5d-compatible XRD recipes
└── _version.py   # generated by setuptools_scm during packaging

scripts/
└── release.sh    # maintainer release helper

Development

# install package with test and documentation extras
pip install -e ".[all]"

# run the test suite
pytest

Release Workflow

The repository includes a maintainer release helper at scripts/release.sh.

./scripts/release.sh 0.2.3

Before creating and pushing the release tag, the script verifies:

  • semantic version format (X.Y.Z)
  • current branch is master
  • working tree is clean
  • local master is in sync with origin/master
  • tag vX.Y.Z does not already exist
  • setuptools_scm write_to target in pyproject.toml matches src/xraydc/_version.py

Notes:

  • Run the script from the repository root in Git Bash, Linux, or WSL.
  • The script asks for confirmation before creating and pushing the tag.
  • CI release jobs are triggered by the pushed tag.

License

GPLv3+ — see pyproject.toml for package metadata and licensing information.

Authors

  • Matthias Rössle (Helmholtz-Zentrum Berlin)
  • Alexander von Reppert (University of Potsdam)
  • Florin Boariu (Helmholtz-Zentrum Berlin)

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

xraydc-0.3.4.tar.gz (347.8 kB view details)

Uploaded Source

Built Distribution

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

xraydc-0.3.4-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

Details for the file xraydc-0.3.4.tar.gz.

File metadata

  • Download URL: xraydc-0.3.4.tar.gz
  • Upload date:
  • Size: 347.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.1

File hashes

Hashes for xraydc-0.3.4.tar.gz
Algorithm Hash digest
SHA256 af574549a553114a63c01fd868d7e5445793963f4df98feb1d9c615d90498b75
MD5 cd2be832e14b6e2493da8bbe2b42407c
BLAKE2b-256 6b17cb1c46f9bbff49a2b4cbb42b237505c11d204f5f7ab46a12601ffd6e9e5e

See more details on using hashes here.

File details

Details for the file xraydc-0.3.4-py3-none-any.whl.

File metadata

  • Download URL: xraydc-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 22.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.1

File hashes

Hashes for xraydc-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 374e09f24c9cff68ec3465f9f3f92b9b29d73e23a8f7b93b5eddfbe3b6ed2c88
MD5 e87b9b7902aeb9db06dbae956b528756
BLAKE2b-256 a5e4f959148fc129e0bbb82d8e79d75514a3aab264f5bafd396a8281f737b676

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