Skip to main content

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.

PyPI version Python versions License

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:

  1. scanners.yaml: Scanner technical specifications
  2. radionuclides.yaml: Radionuclide properties
  3. protocols.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 class
  • create_reconstruction_args(): Convert configurations to reconstruction parameters

Convenience Functions

  • get_y90_spect_params(scanner, data_path): Quick Y-90 SPECT parameters
  • get_y90_pet_params(scanner, data_path): Quick Y-90 PET parameters

Utilities

  • get_default_config_dir(): Get path to package default configurations
  • create_user_config_template(): Create user configuration template
  • validate_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

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. 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

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

sirf_config-0.1.0.tar.gz (28.1 kB view details)

Uploaded Source

Built Distribution

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

sirf_config-0.1.0-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

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

Hashes for sirf_config-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d3b02940bf9e1e1a7d0275b4c9b417a6f7aaf86b0e81cee293ad6c88df505d49
MD5 c4977ff040e7aa34200f66c66bb55e96
BLAKE2b-256 07cc3bc7ef844a5b09cc415efb3c0d0f2b7943f50afa62f021d23a323be5ab03

See more details on using hashes here.

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

Hashes for sirf_config-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 052ffa74e0f14c5e98f610562ba5f06e15b1962917fafb9fd14ecc4b967b23be
MD5 994e9a2e33e35cfbe7872693c1ab7899
BLAKE2b-256 7d67d214384db41603a35eda9983fedc5f30641be0392de3a0c0df996f47973b

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