Configuration management for SIRF SPECT/PET reconstruction workflows
Project description
SIRF Config
A Python package for managing scanner and reconstruction configurations for SIRF SPECT/PET workflows.
Features
- Centralized Configuration: Manage scanner specifications, radionuclide properties, and reconstruction protocols in YAML files
- Type Safety: Full type hints and validation for configuration parameters
- Extensible: Easy to add new scanners, radionuclides, and protocols
- SIRF Integration: Drop-in replacement for manual parameter management in SIRF workflows
- Default Configurations: Includes configurations for common scanners (GE Discovery, Mediso AnyScan Trio)
Quick Start
Installation
pip install sirf-config
Basic Usage
from sirf_config import get_y90_spect_params, ConfigLoader
# Quick Y-90 SPECT reconstruction parameters
params = get_y90_spect_params('ge_670', '/path/to/data')
print(params)
# {'data_path': '/path/to/data', 'num_subsets': 12, 'num_epochs': 5,
# 'resolution_model': (1.68, 0.03, False), 'smoothing_kernel': (6.8, 6.8, 6.8)}
# Advanced configuration management
config = ConfigLoader()
available_scanners = config.list_scanners()
protocol_config = config.get_protocol_config('y90_mediso_spect')
Command Line Usage
Create a user configuration template:
python -m sirf_config.utils --create-template ./my_configs
Validate configuration files:
python -m sirf_config.utils --validate ./my_configs
List available configurations:
python -m sirf_config.utils --list-configs
Supported Scanners
The package includes default configurations for:
SPECT Scanners
- GE Discovery 670:
ge_discovery_670 - Mediso AnyScan Trio:
mediso_anyscan_trio_spect
PET Scanners
- GE Discovery 690:
ge_discovery_690 - Mediso AnyScan Trio:
mediso_anyscan_trio_pet
Radionuclides
- Yttrium-90:
y90(bremsstrahlung imaging)
Configuration Structure
The package uses three YAML configuration files:
scanners.yaml: Scanner technical specificationsradionuclides.yaml: Radionuclide propertiesprotocols.yaml: Pre-configured scanner+radionuclide combinations
Example Scanner Configuration
scanners:
ge_discovery_670:
name: "GE Discovery 670"
modality: "SPECT"
psf:
sigma_0: 1.68 # mm
alpha: 0.03
full_3d: false
bremsstrahlung:
smoothing_fwhm: [6.8, 6.8, 6.8] # mm isotropic
default_params:
num_subsets: 12
num_epochs: 2
Integration with SIRF Scripts
SPECT Reconstruction
#!/usr/bin/env python3
import argparse
from sirf_config import get_y90_spect_params
from sirf.STIR import *
parser = argparse.ArgumentParser()
parser.add_argument('--scanner', type=str, help='Scanner: ge_670, mediso')
parser.add_argument('--data_path', type=str, required=True)
args = parser.parse_args()
# Get configuration parameters
params = get_y90_spect_params(args.scanner, args.data_path)
# Use in SIRF reconstruction
spect_mat = SPECTUBMatrix()
spect_mat.set_resolution_model(*params['resolution_model'])
# ... rest of reconstruction
PET Reconstruction
from sirf_config import get_y90_pet_params
params = get_y90_pet_params('ge_690', '/path/to/data')
gauss = SeparableGaussianImageFilter()
gauss.set_fwhms(params['psf_kernel'])
Adding Custom Configurations
1. Create Custom Configuration Directory
from sirf_config import create_user_config_template
config_dir = create_user_config_template('./my_custom_configs')
2. Edit Configuration Files
Add your scanner to scanners.yaml:
scanners:
my_custom_scanner:
name: "My Custom Scanner"
modality: "SPECT"
psf:
sigma_0: 1.5
alpha: 0.025
full_3d: false
default_params:
num_subsets: 16
num_epochs: 3
Add a protocol to protocols.yaml:
protocols:
y90_my_custom_spect:
scanner: "my_custom_scanner"
radionuclide: "y90"
description: "Y-90 SPECT on My Custom Scanner"
reconstruction_params:
num_subsets: 16
num_epochs: 5
resolution_model: [1.5, 0.025, false]
smoothing_kernel: [7.0, 7.0, 7.0]
3. Use Custom Configurations
from sirf_config import ConfigLoader
config = ConfigLoader('./my_custom_configs')
params = config.get_reconstruction_params('y90_my_custom_spect')
API Reference
Core Classes
ConfigLoader: Main configuration management classcreate_reconstruction_args(): Convert configurations to reconstruction parameters
Convenience Functions
get_y90_spect_params(scanner, data_path): Quick Y-90 SPECT parametersget_y90_pet_params(scanner, data_path): Quick Y-90 PET parameters
Utilities
get_default_config_dir(): Get path to package default configurationscreate_user_config_template(): Create user configuration templatevalidate_config_files(): Validate configuration file syntax and structure
Development
Setting Up Development Environment
git clone https://github.com/yourusername/sirf-config.git
cd sirf-config
pip install -e ".[dev]"
Running Tests
pytest
Code Formatting
black src/
isort src/
flake8 src/
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Citation
If you use this package in your research, please cite:
@software{sirf_config,
title={SIRF Config: Configuration Management for SIRF Workflows},
author={Your Name},
year={2025},
url={https://github.com/yourusername/sirf-config}
}
Acknowledgments
- Built for use with SIRF (Synergistic Image Reconstruction Framework)
- Supports medical imaging workflows for SPECT and PET reconstruction
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 sirf_config-0.1.0.tar.gz.
File metadata
- Download URL: sirf_config-0.1.0.tar.gz
- Upload date:
- Size: 28.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3b02940bf9e1e1a7d0275b4c9b417a6f7aaf86b0e81cee293ad6c88df505d49
|
|
| MD5 |
c4977ff040e7aa34200f66c66bb55e96
|
|
| BLAKE2b-256 |
07cc3bc7ef844a5b09cc415efb3c0d0f2b7943f50afa62f021d23a323be5ab03
|
File details
Details for the file sirf_config-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sirf_config-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
052ffa74e0f14c5e98f610562ba5f06e15b1962917fafb9fd14ecc4b967b23be
|
|
| MD5 |
994e9a2e33e35cfbe7872693c1ab7899
|
|
| BLAKE2b-256 |
7d67d214384db41603a35eda9983fedc5f30641be0392de3a0c0df996f47973b
|