Skip to main content

High-performance TPX3 pixel detector data processing for neutron imaging

Project description

rustpix

CI Documentation Crates.io PyPI DOI License: MIT

High-performance pixel detector data processing for neutron imaging. Supports Timepix3 (TPX3) with 96M+ hits/sec throughput. Features multiple clustering algorithms, centroid extraction, and Python bindings.

Features

  • Fast TPX3 Processing: Parallel packet parsing with memory-mapped I/O
  • Multiple Clustering Algorithms:
    • ABS (Adjacency-Based Search) - 8-connectivity clustering
    • DBSCAN - Density-based with spatial indexing
    • Graph - Union-find connected components
    • Grid - Parallel grid-based clustering
  • Streaming Architecture: Process files larger than RAM
  • Python Bindings: Thin wrappers with NumPy integration
  • CLI Tool: Command-line interface for batch processing
  • GUI Application: Interactive analysis with real-time visualization
  • Multiple Output Formats: HDF5, Arrow, CSV

Installation

Python (pip)

pip install rustpix

macOS (Homebrew)

brew tap ornlneutronimaging/rustpix
brew install --cask rustpix  # GUI app

Rust (cargo)

# CLI tool
cargo install rustpix-cli

# Library
cargo add rustpix-core rustpix-algorithms

From Source

# Using pixi (recommended)
git clone https://github.com/ornlneutronimaging/rustpix
cd rustpix
pixi install
pixi run build

# Or with cargo
cargo build --release --workspace

Quick Start

Python

import rustpix

# Process TPX3 file to neutron events
config = rustpix.ClusteringConfig(radius=5.0, temporal_window_ns=75.0)
neutrons = rustpix.process_tpx3_neutrons(
    "data.tpx3",
    clustering_config=config,
    algorithm="abs"
)

# Convert to NumPy
data = neutrons.to_numpy()
print(f"Found {len(data['x'])} neutron events")

Command Line

# Process file
rustpix process input.tpx3 -o output.h5

# Show file info
rustpix info input.tpx3

# Benchmark algorithms
rustpix benchmark input.tpx3

GUI Application

Launch the GUI for interactive analysis:

# macOS (Homebrew)
open -a Rustpix

# From source
pixi run gui
cargo run -p rustpix-gui --release

Workspace Structure

Crate Description
rustpix-core Core traits and types
rustpix-tpx TPX3 packet parser and hit types
rustpix-algorithms Clustering algorithms (ABS, DBSCAN, Graph, Grid)
rustpix-io File I/O with memory-mapped reading
rustpix-python Python bindings (PyO3)
rustpix-cli Command-line interface
rustpix-gui GUI application (egui)

Python API

Read Hits

import rustpix

# Read all hits
hits = rustpix.read_tpx3_hits("input.tpx3")
hits_np = hits.to_numpy()

# Stream hits in batches
for batch in rustpix.stream_tpx3_hits("input.tpx3"):
    process(batch.to_numpy())

Process Neutrons

# Configure clustering
clustering = rustpix.ClusteringConfig(
    radius=5.0,
    temporal_window_ns=75.0,
    min_cluster_size=1
)

# Configure centroid extraction
extraction = rustpix.ExtractionConfig(
    super_resolution_factor=8.0,
    weighted_by_tot=True,
    min_tot_threshold=10
)

# Stream processing (low memory)
for batch in rustpix.process_tpx3_neutrons(
    "input.tpx3",
    clustering_config=clustering,
    extraction_config=extraction,
    algorithm="abs"
):
    save_batch(batch.to_numpy())

# Batch processing (collect all)
neutrons = rustpix.process_tpx3_neutrons(
    "input.tpx3",
    clustering_config=clustering,
    extraction_config=extraction,
    algorithm="abs",
    collect=True
)

CLI Usage

# Process with custom parameters
rustpix process input.tpx3 -o output.csv \
    --algorithm dbscan \
    --spatial-epsilon 2.0 \
    --temporal-epsilon 500

# Show file information
rustpix info input.tpx3

# Benchmark different algorithms
rustpix benchmark input.tpx3 --iterations 5

# Convert formats
rustpix convert input.tpx3 -f hdf5 -o output.h5

Performance

  • Throughput: 96M+ hits/sec on modern hardware
  • Memory: Streaming architecture processes files larger than RAM
  • Parallel: Multi-threaded clustering with rayon
  • Optimized: SIMD-friendly data layouts (SoA)

Development

# Install dependencies with pixi
pixi install

# Run tests
pixi run test

# Format and lint
pixi run lint

# Build documentation
pixi run docs

# Run GUI in debug mode
pixi run gui-debug

Documentation

Citation

If you use rustpix in your research, please cite:

@software{rustpix2026,
  title = {rustpix: High-performance pixel detector data processing},
  author = {{ORNL Neutron Imaging Team}},
  year = {2026},
  url = {https://github.com/ornlneutronimaging/rustpix},
  doi = {10.5281/zenodo.18496371}
}

License

MIT License - see LICENSE for details.

Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.

Acknowledgments

Developed by the Neutron Imaging Team at Oak Ridge National Laboratory.

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

rustpix-1.1.2.tar.gz (131.7 kB view details)

Uploaded Source

Built Distributions

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

rustpix-1.1.2-cp311-abi3-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.11+Windows x86-64

rustpix-1.1.2-cp311-abi3-manylinux_2_28_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ x86-64

rustpix-1.1.2-cp311-abi3-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

rustpix-1.1.2-cp311-abi3-macosx_10_12_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

Details for the file rustpix-1.1.2.tar.gz.

File metadata

  • Download URL: rustpix-1.1.2.tar.gz
  • Upload date:
  • Size: 131.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustpix-1.1.2.tar.gz
Algorithm Hash digest
SHA256 105de60496aa1f878fd7056c192f8eccd5a0fba9498a07784f31ba7257c012c3
MD5 8b6a0d102de741091cef7a45b6eea47e
BLAKE2b-256 e520a4358a644568ae355a059e1011d89b95148feb7bf156752a76cb80f8c066

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustpix-1.1.2.tar.gz:

Publisher: release.yml on ornlneutronimaging/rustpix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustpix-1.1.2-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: rustpix-1.1.2-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustpix-1.1.2-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ec0e655d37af5129b9206b01fbee21fcf3fdc8977a590167cbb18d6c109ffa7a
MD5 dac0325b5a43c903bc942fb8c3a7c8f9
BLAKE2b-256 1e19e7dbea74aa8ac4ab611cf67429c31425cc0de4afeb7f50868010a13f3d58

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustpix-1.1.2-cp311-abi3-win_amd64.whl:

Publisher: release.yml on ornlneutronimaging/rustpix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustpix-1.1.2-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rustpix-1.1.2-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 73120c633fcbfaa7674714f22eb6a5344e4ebb08b1915963ec48c2a84a414b58
MD5 5aa779e0d8c8efbbfcc001b424299b4a
BLAKE2b-256 54c1d0c25268e46a14bf4118a404a173665da186d4e59cabdded1a2a9b151325

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustpix-1.1.2-cp311-abi3-manylinux_2_28_x86_64.whl:

Publisher: release.yml on ornlneutronimaging/rustpix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustpix-1.1.2-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustpix-1.1.2-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7ea280214e13a3b3200fb6273a8d24dc194e2b8c138f26531b400d1a58ccb303
MD5 fe60507cf0b38d28f030379b3fa0a89e
BLAKE2b-256 7d6ea5e470d1a8595140c200dd0a0e8afb7c5002c4aa5177b219c7adeb4c3845

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustpix-1.1.2-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on ornlneutronimaging/rustpix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustpix-1.1.2-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustpix-1.1.2-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a03e23f3caca920b4773b1a657249391ab35c2fd47028c6ac7a18e3b5b533897
MD5 9bb0ce1c9ce1e467a82541ed735733a7
BLAKE2b-256 3697405fe0d29090deee1bbcd37c812e255d465696bf8c4c7ae19d8dd074da5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustpix-1.1.2-cp311-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on ornlneutronimaging/rustpix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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