API Documentation
Top-Level Package
simind-python-connector connector/adaptor API.
Core
- class simind_python_connector.core.config.SimulationConfig(filepath)[source]
Bases:
objectSimulationConfig Class with YAML import/export capabilities
This class is designed to parse, manipulate, and save simulation configuration files. It provides easy access to configuration parameters, including index-based data, simulation flags, text variables, and associated data files. Now includes YAML export/import for better visualization and editing.
- __init__(filepath)[source]
Initialize the SimulationConfig instance.
- Parameters:
filepath (str) – Path to the simulation configuration file.
- to_yaml_dict()[source]
Convert the configuration to a structured dictionary suitable for YAML export.
- Returns:
Organized configuration data
- Return type:
- export_yaml(filepath)[source]
Export the configuration to a YAML file.
- Parameters:
filepath (str) – Path for the output YAML file
- import_yaml(filepath)[source]
Import configuration from a YAML file.
- Parameters:
filepath (str) – Path to the input YAML file
- validate_parameters()[source]
Basic parameter validation based on typical SIMIND ranges.
NOTE: This provides basic sanity checks only. Consult official SIMIND documentation for complete parameter validation rules and constraints.
- get_simind_version_info()[source]
Extract version information from comment or suggest manual verification.
- print_config()[source]
Print the configuration details, including comments, basic change data, flags, text variables, and data files.
- class simind_python_connector.core.config.RuntimeSwitches[source]
Bases:
object- property combined_switch_dict
Minimal SIMIND process runner used by connector-first APIs.
Connectors and Adaptors
Connector/adaptor APIs.
- class simind_python_connector.connectors.BaseConnector[source]
Bases:
ABCMinimal interface for all SIMIND connector styles.
- abstract run(*args, **kwargs)[source]
Execute simulation and return connector-native outputs.
- Return type:
- simind_python_connector.connectors.NumpyConnector
alias of
SimindPythonConnector
- class simind_python_connector.connectors.PyTomographySimindAdaptor(config_source, output_dir, output_prefix='output', photon_multiplier=1, voxel_size_mm=4.0, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Bases:
BaseConnectorSIMIND adaptor that consumes and returns PyTomography-native tensors.
Public tensor convention for this connector is object space
(x, y, z). Internal SIMIND input files are written in SIMIND image order(z, y, x).- __init__(config_source, output_dir, output_prefix='output', photon_multiplier=1, voxel_size_mm=4.0, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
- class simind_python_connector.connectors.ProjectionResult(projection, header_path, data_path, metadata)[source]
Bases:
objectProjection array together with the header and binary file references.
- __init__(projection, header_path, data_path, metadata)
- class simind_python_connector.connectors.RuntimeOperator(switches=<factory>, orbit_file=None)[source]
Bases:
objectRuntime modifiers applied when invoking SIMIND.
- __init__(switches=<factory>, orbit_file=None)
- class simind_python_connector.connectors.SirfSimindAdaptor(config_source, output_dir, output_prefix='output', photon_multiplier=1, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Bases:
BaseConnectorAdaptor consuming/returning SIRF-native objects.
- __init__(config_source, output_dir, output_prefix='output', photon_multiplier=1, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
- class simind_python_connector.connectors.SimindPythonConnector(config_source, output_dir, output_prefix='output', quantization_scale=1.0)[source]
Bases:
BaseConnectorPure Python connector for SIMIND with NumPy-first outputs.
- configure_voxel_phantom(source, mu_map, voxel_size_mm=4.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Configure voxel geometry and write source/density input files.
- set_energy_windows(lower_bounds, upper_bounds, scatter_orders)[source]
Write a SIMIND window file for this connector run.
- Return type:
- run(runtime_operator=None)[source]
Run SIMIND and return projection outputs as NumPy arrays.
- Return type:
- class simind_python_connector.connectors.StirSimindAdaptor(config_source, output_dir, output_prefix='output', photon_multiplier=1, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Bases:
BaseConnectorAdaptor consuming/returning STIR-native objects.
- __init__(config_source, output_dir, output_prefix='output', photon_multiplier=1, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Backend-agnostic SIMIND connector returning NumPy projection outputs.
- simind_python_connector.connectors.python_connector.NumpyConnector
alias of
SimindPythonConnector
- class simind_python_connector.connectors.python_connector.ProjectionResult(projection, header_path, data_path, metadata)[source]
Bases:
objectProjection array together with the header and binary file references.
- __init__(projection, header_path, data_path, metadata)
- class simind_python_connector.connectors.python_connector.RuntimeOperator(switches=<factory>, orbit_file=None)[source]
Bases:
objectRuntime modifiers applied when invoking SIMIND.
- __init__(switches=<factory>, orbit_file=None)
- class simind_python_connector.connectors.python_connector.SimindPythonConnector(config_source, output_dir, output_prefix='output', quantization_scale=1.0)[source]
Bases:
BaseConnectorPure Python connector for SIMIND with NumPy-first outputs.
- configure_voxel_phantom(source, mu_map, voxel_size_mm=4.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Configure voxel geometry and write source/density input files.
- set_energy_windows(lower_bounds, upper_bounds, scatter_orders)[source]
Write a SIMIND window file for this connector run.
- Return type:
- run(runtime_operator=None)[source]
Run SIMIND and return projection outputs as NumPy arrays.
- Return type:
STIR adaptor implemented on top of the connector-first NumPy pipeline.
- class simind_python_connector.connectors.stir_adaptor.StirSimindAdaptor(config_source, output_dir, output_prefix='output', photon_multiplier=1, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Bases:
BaseConnectorAdaptor consuming/returning STIR-native objects.
- __init__(config_source, output_dir, output_prefix='output', photon_multiplier=1, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
SIRF adaptor implemented on top of the connector-first NumPy pipeline.
- class simind_python_connector.connectors.sirf_adaptor.SirfSimindAdaptor(config_source, output_dir, output_prefix='output', photon_multiplier=1, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Bases:
BaseConnectorAdaptor consuming/returning SIRF-native objects.
- __init__(config_source, output_dir, output_prefix='output', photon_multiplier=1, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
PyTomography/SIMIND adaptor.
This adaptor does not depend on SIRF/STIR objects for inputs or outputs. It accepts torch tensors, configures SIMIND directly, executes the simulation, and returns torch tensors for projection outputs.
- class simind_python_connector.connectors.pytomography_adaptor.PyTomographySimindAdaptor(config_source, output_dir, output_prefix='output', photon_multiplier=1, voxel_size_mm=4.0, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Bases:
BaseConnectorSIMIND adaptor that consumes and returns PyTomography-native tensors.
Public tensor convention for this connector is object space
(x, y, z). Internal SIMIND input files are written in SIMIND image order(z, y, x).- __init__(config_source, output_dir, output_prefix='output', photon_multiplier=1, voxel_size_mm=4.0, quantization_scale=1.0, scoring_routine=ScoringRoutine.SCATTWIN)[source]
Converters
Attenuation coefficient conversion utilities.
This module provides functions to convert Hounsfield Units (HU) to attenuation coefficients and densities based on both bilinear and Schneider piecewise models.
- simind_python_connector.converters.attenuation.get_package_data_path(filename)[source]
Get the path to a data file in the package.
- simind_python_connector.converters.attenuation.interpolate_attenuation_coefficient(filename, energy)[source]
Interpolate attenuation coefficient from tabulated data.
- simind_python_connector.converters.attenuation.get_attenuation_coefficient(material, energy, file_path=None)[source]
Get attenuation coefficient for a given material and energy.
- simind_python_connector.converters.attenuation.hu_to_attenuation(image_array, photon_energy, file_path=None)[source]
Convert Hounsfield Units to attenuation coefficients.
- simind_python_connector.converters.attenuation.hu_to_density(image_array)[source]
Convert Hounsfield Units to density values.
- Parameters:
image_array (np.ndarray) – Array of HU values
- Returns:
Density map in g/cm^3
- Return type:
np.ndarray
- simind_python_connector.converters.attenuation.attenuation_to_density(attenuation_array, photon_energy, file_path=None)[source]
Convert attenuation coefficients to density values.
This is an approximate inverse of the attenuation calculation.
- simind_python_connector.converters.attenuation.load_schneider_data()[source]
Load Schneider2000 tissue data from JSON file.
- Returns:
Schneider tissue data with HU ranges and densities
- Return type:
- simind_python_connector.converters.attenuation.hu_to_density_schneider_piecewise(image_array)[source]
Convert HU to density using exact Schneider2000 piecewise segments.
Simple step function: any HU value between HU_lo and HU_hi gets the exact density for that tissue segment.
- Parameters:
image_array (np.ndarray) – Array of HU values
- Returns:
Density map in g/cm^3
- Return type:
np.ndarray
- simind_python_connector.converters.attenuation.hu_to_density_schneider(image_array)[source]
Convert Hounsfield Units to density using Schneider2000 interpolated lookup table.
Uses the center point of each HU range for intelligent interpolation, providing smooth transitions between tissue segments.
- Parameters:
image_array (np.ndarray) – Array of HU values
- Returns:
Density map in g/cm^3
- Return type:
np.ndarray
- simind_python_connector.converters.attenuation.get_schneider_tissue_info(hu_value)[source]
Get tissue information for a specific HU value using Schneider data.
- Parameters:
hu_value (float) – Hounsfield Unit value
- Returns:
Tissue information including name, density, and HU range
- Return type:
Example
>>> info = get_schneider_tissue_info(50) >>> print(f"Tissue: {info['name']}, Density: {info['density_g_cm3']:.3f} g/cm³")
- simind_python_connector.converters.attenuation.compare_density_methods(image_array)[source]
Compare density conversion results between bilinear and Schneider methods.
- Parameters:
image_array (np.ndarray) – Array of HU values
- Returns:
Comparison results including density maps and statistics
- Return type:
DICOM to STIR conversion is handles in the AcquisitionBuilder Class
- class simind_python_connector.converters.simind_to_stir.ConversionConfig(radius_scale_factor=10.0, angle_offset=180.0, default_number_format='float', ignored_patterns=None)[source]
Bases:
objectConfiguration for SIMIND to STIR conversion.
- __init__(radius_scale_factor=10.0, angle_offset=180.0, default_number_format='float', ignored_patterns=None)
- class simind_python_connector.converters.simind_to_stir.ConversionRule[source]
Bases:
objectBase class for conversion rules.
- class simind_python_connector.converters.simind_to_stir.RadiusConversionRule(scale_factor=1.0)[source]
Bases:
ConversionRuleConvert radius values with scaling.
- class simind_python_connector.converters.simind_to_stir.OrbitFileRule(input_file_dir=None)[source]
Bases:
ConversionRuleProcess non-circular orbit file reference and insert Radii array.
- class simind_python_connector.converters.simind_to_stir.StartAngleConversionRule(angle_offset=180.0)[source]
Bases:
ConversionRuleConvert start angle with offset.
- class simind_python_connector.converters.simind_to_stir.RotationDirectionRule[source]
Bases:
ConversionRuleTrack rotation direction for context.
- class simind_python_connector.converters.simind_to_stir.NumberFormatRule[source]
Bases:
ConversionRuleConvert number format specifications.
- class simind_python_connector.converters.simind_to_stir.OrbitConversionRule[source]
Bases:
ConversionRuleConvert orbit specifications.
- class simind_python_connector.converters.simind_to_stir.ImageDurationRule[source]
Bases:
ConversionRuleConvert image duration to STIR format.
- class simind_python_connector.converters.simind_to_stir.EnergyWindowRule(window_type)[source]
Bases:
ConversionRuleConvert energy window specifications.
- class simind_python_connector.converters.simind_to_stir.DataFileNameRule(override_filename=None)[source]
Bases:
ConversionRuleConvert data file name references.
- class simind_python_connector.converters.simind_to_stir.IgnorePatternRule(patterns)[source]
Bases:
ConversionRuleAdd semicolon to ignored pattern lines.
- class simind_python_connector.converters.simind_to_stir.SimindToStirConverter(config=None)[source]
Bases:
objectEnhanced SIMIND to STIR converter with configurable rules and editing capabilities.
- convert_file(input_filename, output_filename=None, data_file=None, return_object=False)[source]
Convert a SIMIND header file to STIR format.
- Return type:
Union[AcquisitionData,AcquisitionDataInterface,None]- Returns:
Backend-agnostic acquisition data if return_object=True, None otherwise
- create_penetrate_headers_from_template(h00_file, output_prefix, output_dir)[source]
Create multiple STIR headers for penetrate routine from single .h00 template.
The penetrate routine creates only one .h00 file pointing to a non-existent .a00, but multiple .bXX binary files. This method creates separate .hs headers for each .bXX file.
- Parameters:
- Return type:
- Returns:
Dictionary mapping component names to AcquisitionData objects
- find_penetrate_h00_file(output_prefix, output_dir)[source]
Find the single .h00 file created by penetrate routine.
- edit_parameter(filename, parameter, value, return_object=False)[source]
Edit a parameter in a header file.
- Return type:
Optional[AcquisitionData]
- add_parameter(filename, parameter, value, line_number=0, return_object=False)[source]
Add a parameter at a specific line number in an Interfile header file.
- Return type:
Optional[AcquisitionData]
- validate_and_fix_scaling_factors(filename, image_data, tolerance=0.1)[source]
Validate scaling factors against image voxel sizes and fix if they differ within tolerance.
Utilities
- simind_python_connector.utils.stir_utils.parse_sinogram(template_sinogram)[source]
Parse sinogram metadata without colliding temp files.
Accepts either a path to an interfile header or an acquisition object that exposes
get_infoorwrite. The parser reuses the sharedparse_interfile_headerhelper for consistent behaviour.
- simind_python_connector.utils.stir_utils.parse_interfile(filename)[source]
Parse STIR interfile and return dictionary of key-value pairs.
This function is kept for backward compatibility. New code should use parse_interfile_header() from interfile_parser module.
- Parameters:
filename – Path to interfile file
- Returns:
Dictionary of key-value pairs
- simind_python_connector.utils.stir_utils.get_sirf_attenuation_from_simind(attn_filename, photopeak_energy=0.12, attn_type='mu')[source]
Reads attenuation data from simind attenuation file and returns SIRF ImageData object
- Parameters:
attn_filename (string) – file name of simind attenuation file header
new_filename (string) – file name of new attenuation file header
attn_type (str, optional) – unit of attenuation binary file. Defaults to ‘mu’.
- Returns:
SIRF ImageData object containing attenuation data
- Return type:
image
- simind_python_connector.utils.stir_utils.convert_value(val)[source]
Attempt to convert a string to int or float. Also converts a list of numbers if enclosed in { }. Otherwise, returns the stripped string.
- simind_python_connector.utils.stir_utils.harmonize_stir_attributes(attributes)[source]
Apply canonical naming and derived values to raw STIR attributes.
- Return type:
- simind_python_connector.utils.stir_utils.extract_attributes_from_stir(header_filepath)[source]
Extract attributes from a STIR header file (.hs).
- Return type:
- simind_python_connector.utils.stir_utils.extract_attributes_from_stir_headerfile(filename)[source]
Parse a STIR header file and extract relevant attributes.
- Return type:
- simind_python_connector.utils.stir_utils.create_stir_image(matrix_dim, voxel_size, backend=None)[source]
Create a uniform (zeros) STIR image object.
- simind_python_connector.utils.stir_utils.create_stir_acqdata(proj_matrix, num_projections, pixel_size, backend=None)[source]
Create a uniform (zeros) STIR acquisition object.
- Parameters:
- Returns:
Backend acquisition object created by
STIRSPECTAcquisitionDataBuilder.
- simind_python_connector.utils.stir_utils.create_simple_phantom()[source]
Create a simple cylindrical phantom with a hot sphere.
- simind_python_connector.utils.stir_utils.create_attenuation_map(phantom)[source]
Create a simple attenuation map from the phantom.
- exception simind_python_connector.utils.simind_utils.SimindError[source]
Bases:
ExceptionBase exception for SIMIND-related errors.
- exception simind_python_connector.utils.simind_utils.SimindNotFoundError[source]
Bases:
SimindErrorRaised when SIMIND executable is not found.
- simind_python_connector.utils.simind_utils.create_window_file(lower_bounds, upper_bounds, scatter_orders, output_filename='input', energy_window=None, lower_ew=None, upper_ew=None)[source]
Creates a window file for simind simulation
- Parameters:
lower_bounds (list) – lower bounds of energy windows
upper_bounds (list) – upper bounds of energy windows
scatter_orders (list) – scatter orders of energy windows
output_filename (str, optional) – name of output file. Defaults to ‘input’.
energy_window (!) – energy window type can be dew or dew. Defaults to None.
lower_ew (!) – lower energy window lower and upper bounds. Defaults to None.
upper_ew (!) – upper energy window lower and upper bounds. Defaults to None.
this (! Note that dual and triple energy windows are not yet supported by)
yourself (wrapper. Please define your own energy windows and work out)
- simind_python_connector.utils.io_utils.temporary_directory()[source]
Context manager for creating and cleaning up a temporary directory.
Utilities for loading Interfile projection data directly into NumPy.
- class simind_python_connector.utils.interfile_numpy.InterfileArray(array, header_path, data_path, metadata)[source]
Bases:
objectNumPy payload and file references parsed from an Interfile header.
- __init__(array, header_path, data_path, metadata)