XPCS Viewer: A python-based interactive tool to visualize and model XPCS dataset
Project description
Python-based XPCS data analysis and visualization tool.
Features:
G2 correlation analysis across three tabs (g2 view, g2 Fit, g2 Map)
SAXS 1D/2D visualization
Two-time correlation analysis
Diffusion coefficient extraction (tau-Q analysis)
Sample stability monitoring
Mask Editor with Q-map and Q-binning
HDF5 data support (NeXus format)
GUI Features:
Light/dark theme support with system detection
Scalable SVG icons with theme-aware coloring
Category tab bar grouping 12 analysis tabs
Session persistence (resume where you left off)
Command palette (Ctrl+Shift+P) for quick access
Toast notifications for status updates
Keyboard shortcut management
Drag-and-drop file handling
Theme-aware plots (PyQtGraph & Matplotlib)
UI notes
Menu-driven header (no quick-access toolbar); all actions live under the menus/shortcuts.
Starts maximized with a rectangular layout and a minimum-size floor to prevent cramped controls.
PySide6 GUI interface with modern theming
Performance optimizations
Installation
Requirements: Python 3.12+
# Install from PyPI
pip install xpcsviewer-gui
# Or install with uv (recommended)
uv pip install xpcsviewer-gui
JAX and all scientific dependencies (NumPyro, ArviZ, interpax, etc.) are included automatically — no extras needed.
GPU Acceleration (Optional)
Default installation uses CPU-only JAX. For GPU acceleration on Linux with an NVIDIA GPU and system CUDA 12+ or 13+:
# Auto-detect system CUDA version (from repo checkout)
make install-jax-gpu
# Or manually install JAX with CUDA support
pip install jax[cuda12-local] # System CUDA 12.x
pip install jax[cuda13-local] # System CUDA 13.x
Verify GPU detection:
python -c "import jax; print(jax.devices())"
# Expected output: [CudaDevice(id=0), ...]
Environment variables for control:
Variable |
Description |
Default |
|---|---|---|
XPCS_USE_JAX |
Enable JAX backend (true, false, auto) |
auto |
JAX_PLATFORMS |
Force CPU/GPU (cpu, cuda) |
(auto-detected) |
XPCS_GPU_FALLBACK |
Allow CPU fallback if GPU fails |
true |
XPCS_GPU_MEMORY_FRACTION |
Maximum GPU memory usage (0.0-1.0) |
0.9 |
Usage
GUI (Interactive):
# Launch GUI with data path
xpcsviewer-gui /path/to/hdf/data
# Launch from current directory
xpcsviewer-gui
# With debug logging
xpcsviewer-gui --log-level DEBUG
CLI (Batch Processing):
# Show available commands
xpcsviewer --help
# Generate twotime plots for all phi angles at q=0.05
xpcsviewer twotime --input /data --output /results --q 0.05
# Generate high-resolution PDF plots
xpcsviewer twotime -i /data -o /results --phi 45 --dpi 300 --format pdf
Citation
Chu et al., “pyXPCSviewer: an open-source interactive tool for X-ray photon correlation spectroscopy visualization and analysis”, Journal of Synchrotron Radiation, (2022) 29, 1122–1129.
Development
# Clone and install (uv recommended)
git clone https://github.com/imewei/XPCSViewer.git
cd XPCSViewer
# With uv (recommended) — installs package + dev/test dependencies
uv sync
make install-hooks # install pre-commit + commit-msg hooks
# Or with pip (editable install, no dev dependencies)
pip install -e .
# Run tests
make test # parallel tests (excl. GUI)
make test-fast # fast tests excluding slow markers
# Build docs
make docs
Data Formats
NeXus HDF5 (APS-8IDI beamline)
SAXS 2D/1D data
G2 correlation functions
Time series data
Testing
make test # Run tests
make test-unit # Unit tests
make test-integration # Integration tests
make coverage # Coverage report
Documentation
Tutorials – Step-by-step learning guides
How-To Guides – Task-oriented instructions
API Reference – Auto-generated from docstrings
Architecture – Design decisions and diagrams
make docs # Build docs
make docs-autobuild # Live reload docs
Configuration
Environment variables for customization:
Variable |
Description |
Default |
|---|---|---|
XPCS_LOG_LEVEL |
Logging verbosity (DEBUG, INFO, WARNING, ERROR) |
INFO |
XPCS_CACHE_SIZE_MB |
Maximum cache size in MB |
512 |
XPCS_THEME |
UI theme (light, dark, system) |
system |
Project Structure
xpcsviewer/
├── module/ # Analysis modules (g2, saxs, twotime, ...)
├── fileIO/ # HDF5 I/O and Q-map utilities
├── simplemask/ # Mask editor & Q-map
├── gui/ # GUI modernization
│ ├── icons.py # SVG icon loader with theme-aware colors
│ ├── theme/ # Light/dark theming
│ ├── state/ # Session & preferences
│ ├── shortcuts/ # Keyboard shortcuts
│ └── widgets/ # Modern UI widgets (incl. category tab bar)
├── fitting/ # Bayesian fitting (NLSQ 0.6.0)
├── plothandler/ # Theme-aware plotting
├── threading/ # Async workers
├── utils/ # Utilities, validation, exceptions
└── xpcs_file.py # Core data class
Analysis Features
Multi-tau G2 correlation with fitting
Two-time correlation analysis
SAXS 2D pattern visualization
SAXS 1D radial averaging
Sample stability monitoring
File averaging tools
Mask editing with drawing tools (Rectangle, Circle, Polygon, Line, Ellipse)
Q-map generation from detector geometry
Q-binning (partition) for XPCS analysis
Fitting Module (NLSQ 0.6.0)
Bayesian fitting with NumPyro NUTS sampler and JAX-accelerated NLSQ warm-start:
Statistical metrics: R², adjusted R², RMSE, MAE, AIC, BIC
Confidence intervals for parameter uncertainty
Prediction intervals accounting for observation noise
Models: single/double/stretched exponential, power law
Automatic bounds inference and fallback strategies
Model health diagnostics
from xpcsviewer.fitting import nlsq_fit
import jax.numpy as jnp
def model(x, tau, baseline, contrast):
return baseline + contrast * jnp.exp(-2 * x / tau)
result = nlsq_fit(
model, x_data, y_data, y_errors,
p0={'tau': 1.0, 'baseline': 1.0, 'contrast': 0.3},
bounds={'tau': (0.01, 100), 'baseline': (0.9, 1.1), 'contrast': (0.1, 0.5)},
)
print(f"R² = {result.r_squared:.4f}")
print(result.summary())
Gallery
Analysis Modules Showcase
SAXS 2D – Integrated Scattering Pattern
SAXS 1D – Radial Reduction and Analysis
Stability – Sample Assessment
I(t) – Intensity vs Time
g2 – Correlation Function Viewer
g2 Fit – Correlation Fitting
g2 Map – Correlation Map
Diffusion – tau(q) Characterization
Two-Time – Correlation Maps
Q-Map – Q-Space Mapping
Average – File Averaging Toolbox
Metadata – HDF5 Explorer
License
MIT License. See CONTRIBUTING.md for development guidelines.
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
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 xpcsviewer_gui-0.1.4.tar.gz.
File metadata
- Download URL: xpcsviewer_gui-0.1.4.tar.gz
- Upload date:
- Size: 11.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4d19b81829ec2ed2ed396b0d90f932404bc82d87e5651782120c4f54f1290d7
|
|
| MD5 |
0d611e7423a480dfe0f5e2aaa786832b
|
|
| BLAKE2b-256 |
bf0c3536b592347c96a80fabaf097dc079e4c5dbf6984ef4950ef613d09fa541
|
Provenance
The following attestation bundles were made for xpcsviewer_gui-0.1.4.tar.gz:
Publisher:
release.yml on imewei/xpcsviewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
xpcsviewer_gui-0.1.4.tar.gz -
Subject digest:
b4d19b81829ec2ed2ed396b0d90f932404bc82d87e5651782120c4f54f1290d7 - Sigstore transparency entry: 985362687
- Sigstore integration time:
-
Permalink:
imewei/xpcsviewer@200b2e6835cdbbf95469185ec59c9d62dce52b5d -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/imewei
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@200b2e6835cdbbf95469185ec59c9d62dce52b5d -
Trigger Event:
push
-
Statement type:
File details
Details for the file xpcsviewer_gui-0.1.4-py3-none-any.whl.
File metadata
- Download URL: xpcsviewer_gui-0.1.4-py3-none-any.whl
- Upload date:
- Size: 4.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02cfa276962b6db7f147eca35c62126ea2c3c6b635290794da2a15d5a39a0e7d
|
|
| MD5 |
823925cee60dcec55b27dd71c2604d8e
|
|
| BLAKE2b-256 |
6cf850a5af9abce96ee6a06e6eb661e6ab4716584d462c11969e00c502c04d22
|
Provenance
The following attestation bundles were made for xpcsviewer_gui-0.1.4-py3-none-any.whl:
Publisher:
release.yml on imewei/xpcsviewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
xpcsviewer_gui-0.1.4-py3-none-any.whl -
Subject digest:
02cfa276962b6db7f147eca35c62126ea2c3c6b635290794da2a15d5a39a0e7d - Sigstore transparency entry: 985362705
- Sigstore integration time:
-
Permalink:
imewei/xpcsviewer@200b2e6835cdbbf95469185ec59c9d62dce52b5d -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/imewei
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@200b2e6835cdbbf95469185ec59c9d62dce52b5d -
Trigger Event:
push
-
Statement type: