simind-python-connector 2.0.1__tar.gz → 2.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.github/workflows/docs.yml +3 -7
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.github/workflows/tests.yml +3 -3
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.zenodo.json +1 -1
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/CHANGELOG.md +34 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/CITATION.cff +2 -2
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/MANIFEST.in +12 -13
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/PKG-INFO +32 -51
- simind_python_connector-2.0.2/README.md +79 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/python/Dockerfile +1 -1
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/pytomography/Dockerfile +1 -1
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/sirf/Dockerfile +1 -1
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/stir/Dockerfile +0 -1
- simind_python_connector-2.0.2/docs/_docs.py +291 -0
- simind_python_connector-2.0.2/docs/_static/examples/basic_simulation/basic_simulation.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/cil_rdp_svrg/reconstructions.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/cil_rdp_svrg/recovery.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/cil_scatter/reconstructions.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/cil_scatter/recovery.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/density_conversion/density_conversion.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/mc_scatter_osem/reconstructions.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/mc_scatter_osem/recovery.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/multi_window/multi_window.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/phantom_library/phantom_library.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/pytomography_osem/pytomography_osem.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/residual_correction/reconstructions.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/residual_correction/recovery.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/scatter_normalisation/recovery.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/scatter_normalisation/scale_scatter.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/scattwin_vs_penetrate/decomposition.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/sirf_osem/sirf_osem.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/stir_osem/stir_osem.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/y90_ct_conversion/maps.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/y90_ct_conversion/registration.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/y90_effective_energy/attenuation_maps.png +0 -0
- simind_python_connector-2.0.2/docs/_static/examples/y90_effective_energy/detected_spectrum.png +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/api.rst +0 -2
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/backends.rst +2 -14
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/changelog.rst +79 -159
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/conf.py +1 -41
- simind_python_connector-2.0.2/docs/contributing.rst +98 -0
- simind_python_connector-2.0.2/docs/datasets.rst +62 -0
- simind_python_connector-2.0.2/docs/example_pages/_template.rst.txt +19 -0
- simind_python_connector-2.0.2/docs/example_pages/basic_simulation.rst +19 -0
- simind_python_connector-2.0.2/docs/example_pages/cil_rdp_svrg.rst +31 -0
- simind_python_connector-2.0.2/docs/example_pages/cil_scatter.rst +29 -0
- simind_python_connector-2.0.2/docs/example_pages/custom_configuration.rst +11 -0
- simind_python_connector-2.0.2/docs/example_pages/density_conversion.rst +18 -0
- simind_python_connector-2.0.2/docs/example_pages/dicom_recipe.rst +36 -0
- simind_python_connector-2.0.2/docs/example_pages/index.rst +44 -0
- simind_python_connector-2.0.2/docs/example_pages/mc_scatter_osem.rst +29 -0
- simind_python_connector-2.0.2/docs/example_pages/multi_window.rst +21 -0
- simind_python_connector-2.0.2/docs/example_pages/phantom_library.rst +18 -0
- simind_python_connector-2.0.2/docs/example_pages/pytomography_osem.rst +21 -0
- simind_python_connector-2.0.2/docs/example_pages/residual_correction.rst +33 -0
- simind_python_connector-2.0.2/docs/example_pages/scatter_normalisation.rst +39 -0
- simind_python_connector-2.0.2/docs/example_pages/scattwin_vs_penetrate.rst +21 -0
- simind_python_connector-2.0.2/docs/example_pages/sirf_osem.rst +21 -0
- simind_python_connector-2.0.2/docs/example_pages/stir_osem.rst +21 -0
- simind_python_connector-2.0.2/docs/example_pages/y90_ct_conversion.rst +46 -0
- simind_python_connector-2.0.2/docs/example_pages/y90_effective_energy.rst +29 -0
- simind_python_connector-2.0.2/docs/example_pages.json +114 -0
- simind_python_connector-2.0.2/docs/examples/_nema.py +572 -0
- simind_python_connector-2.0.2/docs/examples/_scatter_normalisation.py +49 -0
- simind_python_connector-2.0.2/docs/examples/_y90.py +220 -0
- simind_python_connector-2.0.2/docs/examples/_y90_spectrum.py +151 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/backends/plot_07a_stir_adaptor_osem.py +25 -99
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/backends/plot_07b_sirf_adaptor_osem.py +24 -89
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/backends/plot_07c_pytomography_adaptor_osem.py +38 -88
- simind_python_connector-2.0.2/docs/examples/cil/plot_14_cil_scatter.py +203 -0
- simind_python_connector-2.0.2/docs/examples/cil/plot_15_cil_rdp_svrg.py +259 -0
- simind_python_connector-2.0.2/docs/examples/getting_started/plot_01_basic_simulation.py +109 -0
- simind_python_connector-2.0.2/docs/examples/getting_started/plot_03_multi_window.py +130 -0
- simind_python_connector-2.0.2/docs/examples/getting_started/plot_04_custom_config.py +42 -0
- simind_python_connector-2.0.2/docs/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +193 -0
- simind_python_connector-2.0.2/docs/examples/getting_started/plot_06_schneider_density_conversion.py +101 -0
- simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_11_mc_scatter_osem.py +200 -0
- simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_12_scatter_normalisation.py +266 -0
- simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_13_residual_correction.py +252 -0
- simind_python_connector-2.0.2/docs/examples/phantoms/plot_09_phantom_library.py +88 -0
- simind_python_connector-2.0.2/docs/examples/real_data/README.rst +21 -0
- simind_python_connector-2.0.2/docs/examples/real_data/plot_17_y90_effective_energy.py +308 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/geometry.rst +19 -52
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/index.rst +1 -2
- simind_python_connector-2.0.2/docs/installation.rst +92 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/intro.rst +5 -11
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/normalisation.rst +20 -6
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/phantoms.rst +6 -10
- simind_python_connector-2.0.2/docs/reconstruction.rst +226 -0
- simind_python_connector-2.0.2/docs/simind_validation.md +191 -0
- simind_python_connector-2.0.2/docs/spectub_cache_interference.md +13 -0
- simind_python_connector-2.0.2/docs/testing.rst +124 -0
- simind_python_connector-2.0.2/docs/tutorial.rst +121 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/usage.rst +24 -49
- simind_python_connector-2.0.2/examples/README.rst +5 -0
- simind_python_connector-2.0.2/examples/_nema.py +572 -0
- simind_python_connector-2.0.2/examples/_python_connector_helpers.py +57 -0
- simind_python_connector-2.0.2/examples/_scatter_normalisation.py +49 -0
- simind_python_connector-2.0.2/examples/_y90.py +220 -0
- simind_python_connector-2.0.2/examples/_y90_spectrum.py +151 -0
- simind_python_connector-2.0.2/examples/backends/plot_07a_stir_adaptor_osem.py +159 -0
- simind_python_connector-2.0.2/examples/backends/plot_07b_sirf_adaptor_osem.py +153 -0
- simind_python_connector-2.0.2/examples/backends/plot_07c_pytomography_adaptor_osem.py +159 -0
- simind_python_connector-2.0.2/examples/cil/README.rst +2 -0
- simind_python_connector-2.0.2/examples/cil/plot_14_cil_scatter.py +203 -0
- simind_python_connector-2.0.2/examples/cil/plot_15_cil_rdp_svrg.py +259 -0
- simind_python_connector-2.0.2/examples/getting_started/plot_01_basic_simulation.py +109 -0
- simind_python_connector-2.0.2/examples/getting_started/plot_03_multi_window.py +130 -0
- simind_python_connector-2.0.2/examples/getting_started/plot_04_custom_config.py +42 -0
- simind_python_connector-2.0.2/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +193 -0
- simind_python_connector-2.0.2/examples/getting_started/plot_06_schneider_density_conversion.py +101 -0
- simind_python_connector-2.0.2/examples/mc_scatter/README.rst +2 -0
- simind_python_connector-2.0.2/examples/mc_scatter/plot_11_mc_scatter_osem.py +200 -0
- simind_python_connector-2.0.2/examples/mc_scatter/plot_12_scatter_normalisation.py +266 -0
- simind_python_connector-2.0.2/examples/mc_scatter/plot_13_residual_correction.py +252 -0
- simind_python_connector-2.0.2/examples/phantoms/README.rst +2 -0
- simind_python_connector-2.0.2/examples/phantoms/plot_09_phantom_library.py +88 -0
- simind_python_connector-2.0.2/examples/real_data/README.rst +21 -0
- simind_python_connector-2.0.2/examples/real_data/plot_17_y90_effective_energy.py +308 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/pyproject.toml +3 -4
- simind_python_connector-2.0.2/scripts/check_docs.py +52 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/release.sh +1 -1
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/run_all_examples.py +9 -18
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/run_container_examples.sh +1 -2
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/run_container_validation.sh +0 -1
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/run_validation.sh +21 -48
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/validation_report.py +23 -6
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/__init__.py +1 -1
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/python_connector.py +2 -2
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/corrections.py +56 -14
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/osem.py +5 -1
- simind_python_connector-2.0.2/simind_python_connector/utils/projection_metrics.py +153 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector.egg-info/SOURCES.txt +80 -17
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_cil_sirf.py +21 -0
- simind_python_connector-2.0.2/tests/recon/test_corrections.py +636 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_osem_sirf.py +39 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_container_scripts.py +17 -0
- simind_python_connector-2.0.2/tests/test_docs_check.py +179 -0
- simind_python_connector-2.0.2/tests/test_examples_backend_separation.py +60 -0
- simind_python_connector-2.0.2/tests/test_examples_navigation.py +56 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_marker_policy.py +0 -1
- simind_python_connector-2.0.2/tests/test_nema_examples.py +437 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_packaging_resources.py +9 -6
- simind_python_connector-2.0.2/tests/test_projection_metrics.py +186 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_release_regressions_simind.py +8 -10
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_release_tools.py +2 -5
- simind_python_connector-2.0.2/tests/test_scatter_normalisation_options.py +38 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_validation_framework.py +27 -6
- simind_python_connector-2.0.2/tests/test_y90_ct_conversion.py +235 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_y90_spectra.py +0 -48
- simind_python_connector-2.0.2/tests/validation/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/conftest.py +0 -13
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_phantoms.py +0 -4
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_recon.py +7 -8
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_runtime_switches.py +11 -71
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_scale_to_reference.py +2 -8
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_versions.py +0 -15
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/uv.lock +3 -18
- simind_python_connector-2.0.1/README.md +0 -98
- simind_python_connector-2.0.1/docs/_gallery.py +0 -65
- simind_python_connector-2.0.1/docs/contributing.rst +0 -129
- simind_python_connector-2.0.1/docs/datasets.rst +0 -95
- simind_python_connector-2.0.1/docs/examples.rst +0 -36
- simind_python_connector-2.0.1/docs/installation.rst +0 -148
- simind_python_connector-2.0.1/docs/reconstruction.rst +0 -295
- simind_python_connector-2.0.1/docs/simind_validation.md +0 -210
- simind_python_connector-2.0.1/docs/spectub_cache_interference.md +0 -143
- simind_python_connector-2.0.1/docs/testing.rst +0 -295
- simind_python_connector-2.0.1/docs/tutorial.rst +0 -217
- simind_python_connector-2.0.1/examples/backends/README.rst +0 -2
- simind_python_connector-2.0.1/examples/backends/plot_08a_stir_adaptor_from_dicom.py +0 -86
- simind_python_connector-2.0.1/examples/backends/plot_08b_sirf_adaptor_from_dicom.py +0 -80
- simind_python_connector-2.0.1/examples/backends/plot_08c_pytomography_adaptor_from_dicom.py +0 -76
- simind_python_connector-2.0.1/examples/cil/plot_14_cil_scatter.py +0 -365
- simind_python_connector-2.0.1/examples/cil/plot_15_cil_rdp_svrg.py +0 -438
- simind_python_connector-2.0.1/examples/getting_started/README.rst +0 -2
- simind_python_connector-2.0.1/examples/getting_started/plot_01_basic_simulation.py +0 -109
- simind_python_connector-2.0.1/examples/getting_started/plot_02_runtime_switch_comparison.py +0 -131
- simind_python_connector-2.0.1/examples/getting_started/plot_03_multi_window.py +0 -146
- simind_python_connector-2.0.1/examples/getting_started/plot_04_custom_config.py +0 -122
- simind_python_connector-2.0.1/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +0 -525
- simind_python_connector-2.0.1/examples/getting_started/plot_06_schneider_density_conversion.py +0 -226
- simind_python_connector-2.0.1/examples/mc_scatter/plot_11_mc_scatter_osem.py +0 -376
- simind_python_connector-2.0.1/examples/mc_scatter/plot_12_scatter_normalisation.py +0 -558
- simind_python_connector-2.0.1/examples/mc_scatter/plot_13_residual_correction.py +0 -430
- simind_python_connector-2.0.1/examples/phantoms/plot_09_phantom_library.py +0 -159
- simind_python_connector-2.0.1/examples/phantoms/plot_10_nema_osem.py +0 -256
- simind_python_connector-2.0.1/examples/real_data/README.rst +0 -53
- simind_python_connector-2.0.1/examples/real_data/plot_16a_stir_ct_conversion.py +0 -772
- simind_python_connector-2.0.1/examples/real_data/plot_16b_sirf_ct_conversion.py +0 -742
- simind_python_connector-2.0.1/examples/real_data/plot_16c_pytomography_ct_conversion.py +0 -851
- simind_python_connector-2.0.1/examples/real_data/plot_17_y90_effective_energy.py +0 -1036
- simind_python_connector-2.0.1/examples/real_data/plot_18_y90_mc_scatter.py +0 -2584
- simind_python_connector-2.0.1/scripts/build_gallery.sh +0 -79
- simind_python_connector-2.0.1/scripts/check_gallery_current.py +0 -29
- simind_python_connector-2.0.1/tests/recon/test_corrections.py +0 -179
- simind_python_connector-2.0.1/tests/test_examples_backend_separation.py +0 -77
- simind_python_connector-2.0.1/tests/test_gallery_config.py +0 -114
- simind_python_connector-2.0.1/tests/test_y90_ct_conversion.py +0 -673
- simind_python_connector-2.0.1/tests/test_y90_reconstruction.py +0 -772
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.github/workflows/containers.yml +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.github/workflows/publish.yml +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.readthedocs.yaml +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/LICENSE +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/README.md +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/compose.yaml +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/constraints.txt +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/import_guard/sitecustomize.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/python/install_mpich_compat.sh +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/LICENSE +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/_static/.gitkeep +0 -0
- /simind_python_connector-2.0.1/tests/recon/__init__.py → /simind_python_connector-2.0.2/docs/_static/examples/.gitkeep +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/README.rst +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/_python_connector_helpers.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/cil/README.rst +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/mc_scatter/README.rst +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/phantoms/README.rst +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/check_simind_mpi.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/check_wheel_resources.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/fix.sh +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/make_y90_bundle.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/prepare_release.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/setup.cfg +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/builders/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/builders/_native.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/builders/acquisition_builder.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/builders/image_builder.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/AnyScan.yaml +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/Discovery670.yaml +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/Example.yaml +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/MLD001_SCAN0.yaml +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/input.smc +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/_native_adaptor.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/base.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/pytomography_adaptor.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/sirf_adaptor.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/stir_adaptor.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/converters/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/converters/attenuation.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/converters/simind_to_stir.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/core/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/core/config.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/core/executor.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/core/types.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/data/Schneider2000.json +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/data/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/data/bone.atn +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/data/h2o.atn +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/datasets.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/normalisation.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/phantoms.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/cil.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/diagnostics.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/projector.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/updates.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/utils/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/utils/interfile.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/utils/simind_utils.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/conftest.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/golden/circular.hs +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/golden/ignored_substrings.hs +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/golden/orbit.hs +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/golden/penetrate_component_12.hs +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/minimal_variable_sections.smc +0 -0
- {simind_python_connector-2.0.1/tests/validation → simind_python_connector-2.0.2/tests/recon}/__init__.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/conftest.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/fakes.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_cil_functions.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_diagnostics.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_import_boundary.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_projector.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_residual.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_residual_cil.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_residual_sirf.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_updates.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_acquisition_builder_unit.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_attenuation_utils.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_builders_lifetime.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_builders_native.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_configure_phantom.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_connector_backend_separation.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_container_library_isolation.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_converter_golden.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_datasets.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_dicom_builder.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_energy_window_filename_simind.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_executor.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_ground_truth_sirf.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_image_builder_unit.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_import_side_effects.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_integration.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_interfile.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_make_y90_bundle.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_measured_geometry_simind.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_native_adaptors.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_nema_phantom.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_non_square_slices_simind.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_normalisation.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_phantoms.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_phantoms_simind.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_python_connector.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_pytomography_adaptor.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_runtime_switches.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_schneider_density.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_simind_mpi.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_simind_to_stir_converter.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_simulation_config.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_template_geometry_sirf.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_utils_small.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_voxelise.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_activity.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_anisotropic_voxels.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_backend_agreement.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_cil.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_interfile.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_measured_geometry.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_mpi.py +0 -0
- {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_mu_map.py +0 -0
|
@@ -37,15 +37,11 @@ jobs:
|
|
|
37
37
|
echo "Tag $GITHUB_REF_NAME does not match version v${version}"
|
|
38
38
|
exit 1
|
|
39
39
|
fi
|
|
40
|
-
- name: Build the documentation
|
|
41
|
-
env:
|
|
42
|
-
SIMIND_GALLERY_BACKEND: ""
|
|
40
|
+
- name: Build the documentation
|
|
43
41
|
run: |
|
|
44
42
|
python -m sphinx -b html -W --keep-going docs docs/_build/html
|
|
45
|
-
- name: Check
|
|
46
|
-
run:
|
|
47
|
-
git status --porcelain -- docs/auto_examples
|
|
48
|
-
test -z "$(git status --porcelain -- docs/auto_examples)"
|
|
43
|
+
- name: Check authored documentation inventory and figures
|
|
44
|
+
run: python scripts/check_docs.py --html-dir docs/_build/html
|
|
49
45
|
- name: Upload the built documentation
|
|
50
46
|
uses: actions/upload-artifact@v4
|
|
51
47
|
with:
|
|
@@ -35,11 +35,11 @@ jobs:
|
|
|
35
35
|
run: |
|
|
36
36
|
ruff check .
|
|
37
37
|
ruff format --check .
|
|
38
|
-
- name: Check
|
|
39
|
-
run: python scripts/
|
|
38
|
+
- name: Check authored documentation inventory
|
|
39
|
+
run: python scripts/check_docs.py
|
|
40
40
|
- name: Run CI-friendly tests
|
|
41
41
|
run: |
|
|
42
|
-
python -m pytest -m "not integration and not requires_sirf and not requires_stir and not requires_simind and not requires_pytomography and not requires_cil and not ci_skip and not validation
|
|
42
|
+
python -m pytest -m "not integration and not requires_sirf and not requires_stir and not requires_simind and not requires_pytomography and not requires_cil and not ci_skip and not validation" --cov=simind_python_connector --cov-report=xml
|
|
43
43
|
- name: Upload coverage to Codecov
|
|
44
44
|
uses: codecov/codecov-action@v4
|
|
45
45
|
with:
|
|
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.0.2] - 2026-11-10
|
|
11
|
+
|
|
12
|
+
A v8 compatibility, documentation and correctness release on the 2.0.1 code
|
|
13
|
+
base. It states the supported engine, replaces the generated gallery with
|
|
14
|
+
short authored tutorials, and fixes the pixel-wise Dewaraja scatter estimator
|
|
15
|
+
and the STIR OSEM image output.
|
|
16
|
+
|
|
17
|
+
### Compatibility
|
|
18
|
+
- SIMIND v8 is the supported engine. v9 remains experimental and unvalidated:
|
|
19
|
+
the v9.0 Linux build can abort or return silently corrupted projections, so
|
|
20
|
+
v9 qualification is planned for 2.1.0.
|
|
21
|
+
- The v9 failure-expectation tests, the v9 validation tables and the support
|
|
22
|
+
claims that depended on them are removed.
|
|
23
|
+
|
|
24
|
+
### Documentation
|
|
25
|
+
- Each tutorial is now a short authored page: the explanation, the figures and
|
|
26
|
+
the result, with the runnable script linked rather than reproduced.
|
|
27
|
+
- The example set is consolidated: 02 into 01, 08A/08B/08C into one DICOM
|
|
28
|
+
recipe, 10 into 11, and 16A/16B/16C into one CT case study. Example 18 is
|
|
29
|
+
removed.
|
|
30
|
+
- The generated gallery and its provenance machinery are removed. Figures come
|
|
31
|
+
from recorded runs and were not regenerated for the rewrite.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
- The Dewaraja pixel-wise scatter fraction pre-smooths the Monte Carlo
|
|
35
|
+
scatter and the total before dividing, removing the low bias that came from
|
|
36
|
+
dividing two noisy fields.
|
|
37
|
+
- STIR OSEM no longer writes one Interfile image per subiteration into the
|
|
38
|
+
working directory; only the returned image is kept.
|
|
39
|
+
|
|
40
|
+
### Known limitations
|
|
41
|
+
- Example 13's residual arm and example 15's instability remain documented
|
|
42
|
+
limited results, not validated improvements.
|
|
43
|
+
|
|
10
44
|
## [2.0.1] - 2026-10-24
|
|
11
45
|
|
|
12
46
|
The supported successor to 1.2.0, the current public release, and the
|
|
@@ -11,8 +11,8 @@ authors:
|
|
|
11
11
|
- family-names: Thielemans
|
|
12
12
|
given-names: Kris
|
|
13
13
|
orcid: "https://orcid.org/0000-0001-6353-9538"
|
|
14
|
-
date-released: 2026-10
|
|
15
|
-
version: 2.0.
|
|
14
|
+
date-released: 2026-11-10
|
|
15
|
+
version: 2.0.2
|
|
16
16
|
url: "https://github.com/samdporter/simind-python-connector"
|
|
17
17
|
doi: 10.5281/zenodo.19605198
|
|
18
18
|
license: Apache-2.0
|
|
@@ -2,16 +2,15 @@
|
|
|
2
2
|
# --------------------------
|
|
3
3
|
# The sdist ships the complete source tree needed to install the package, build
|
|
4
4
|
# the documentation, run the examples and run the shipped test suite: package
|
|
5
|
-
# sources and bundled data, Sphinx sources,
|
|
5
|
+
# sources and bundled data, Sphinx sources, example sources, release and
|
|
6
6
|
# container scripts, tests and their fixtures, and the CI/docker support files
|
|
7
7
|
# those tests read.
|
|
8
8
|
#
|
|
9
|
-
# Generated output is deliberately excluded.
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
# build artefacts and simulation data are never shipped.
|
|
9
|
+
# Generated output is deliberately excluded. Sphinx build trees and generated
|
|
10
|
+
# execution-time files are not shipped. Rendered documentation is built from
|
|
11
|
+
# the tagged repository; the sdist keeps only the sources from which it is
|
|
12
|
+
# generated. Local-only agent notes, audits, build artefacts and simulation
|
|
13
|
+
# data are never shipped.
|
|
15
14
|
|
|
16
15
|
include README.md
|
|
17
16
|
include LICENSE
|
|
@@ -26,19 +25,19 @@ include .readthedocs.yaml
|
|
|
26
25
|
recursive-include simind_python_connector/data *.atn *.json
|
|
27
26
|
recursive-include simind_python_connector/configs *.smc *.yaml
|
|
28
27
|
|
|
29
|
-
# Documentation sources
|
|
30
|
-
recursive-include docs *.rst *.md *.py LICENSE
|
|
28
|
+
# Documentation sources and the authored-page inventory.
|
|
29
|
+
recursive-include docs *.rst *.rst.txt *.md *.py LICENSE
|
|
30
|
+
include docs/example_pages.json
|
|
31
|
+
recursive-include docs/_static/examples *
|
|
31
32
|
include docs/_static/.gitkeep
|
|
32
|
-
|
|
33
|
-
prune docs/examples
|
|
33
|
+
include docs/examples
|
|
34
34
|
prune docs/_build
|
|
35
35
|
prune docs/_generated
|
|
36
|
-
exclude docs/sg_execution_times.rst
|
|
37
36
|
|
|
38
37
|
# Example sources and their READMEs/helpers.
|
|
39
38
|
recursive-include examples *.py *.rst
|
|
40
39
|
|
|
41
|
-
# Release,
|
|
40
|
+
# Release, docs-check, validation and container scripts.
|
|
42
41
|
recursive-include scripts *.py *.sh
|
|
43
42
|
|
|
44
43
|
# Container definitions and the import guard used by the isolation tests.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simind-python-connector
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: Python SIMIND Monte Carlo connector with STIR/SIRF/PyTomography adaptors
|
|
5
5
|
Author-email: Sam Porter <sam.porter.18@ucl.ac.uk>, Rebecca Gillen <rebecca.gillen.18@ucl.ac.uk>, "Efstathios (Stahis) Varzakis" <efstathios.varzakis.22@ucl.ac.uk>
|
|
6
6
|
Maintainer-email: Sam Porter <sam.porter.18@ucl.ac.uk>
|
|
@@ -33,8 +33,8 @@ Requires-Dist: scipy; extra == "dev"
|
|
|
33
33
|
Requires-Dist: ruff; extra == "dev"
|
|
34
34
|
Requires-Dist: sphinx; extra == "dev"
|
|
35
35
|
Requires-Dist: sphinx-rtd-theme; extra == "dev"
|
|
36
|
+
Requires-Dist: Pillow; extra == "dev"
|
|
36
37
|
Requires-Dist: sphinx-autodoc-typehints; extra == "dev"
|
|
37
|
-
Requires-Dist: sphinx-gallery<0.23,>=0.22; extra == "dev"
|
|
38
38
|
Requires-Dist: pooch>=1.8; extra == "dev"
|
|
39
39
|
Requires-Dist: myst-parser; extra == "dev"
|
|
40
40
|
Requires-Dist: pre-commit; extra == "dev"
|
|
@@ -58,15 +58,12 @@ SIMIND project and Lund University.
|
|
|
58
58
|
|
|
59
59
|
## Start here
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
[documentation](https://simind-python-connector.readthedocs.io/) explains
|
|
68
|
-
installation, geometry, normalisation, backend options, and the
|
|
69
|
-
[observed SIMIND output-component mapping](docs/simind_validation.md).
|
|
61
|
+
The [workflow tutorial](docs/tutorial.rst) walks through a core simulation,
|
|
62
|
+
known-activity NEMA phantom, reconstruction, scatter correction, and
|
|
63
|
+
measured-data calibration; the [example pages](docs/example_pages/index.rst)
|
|
64
|
+
collect the tutorials and figures. The
|
|
65
|
+
[documentation](https://simind-python-connector.readthedocs.io/) covers
|
|
66
|
+
installation, geometry, normalisation and backends.
|
|
70
67
|
|
|
71
68
|
Install the package and example plotting dependencies:
|
|
72
69
|
|
|
@@ -79,15 +76,15 @@ Select a SIMIND executable and its matching data directory. The binary and
|
|
|
79
76
|
`simind` on `PATH`; set `SMC_DIR` when required by your installation.
|
|
80
77
|
|
|
81
78
|
```bash
|
|
82
|
-
export SIMIND_BIN=/path/to/simind-
|
|
83
|
-
export PATH=/path/to/simind-
|
|
84
|
-
export SMC_DIR=/path/to/simind-
|
|
85
|
-
export SIMIND_VERSION=
|
|
79
|
+
export SIMIND_BIN=/path/to/simind-v8/simind
|
|
80
|
+
export PATH=/path/to/simind-v8:$PATH
|
|
81
|
+
export SMC_DIR=/path/to/simind-v8/smc_dir/
|
|
82
|
+
export SIMIND_VERSION=8
|
|
86
83
|
```
|
|
87
84
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
SIMIND v8 is the supported engine. A constructor's `simind_version` overrides
|
|
86
|
+
`SIMIND_VERSION`; v9 selection is experimental. See
|
|
87
|
+
[installation](docs/installation.rst).
|
|
91
88
|
|
|
92
89
|
Use the installed connector directly:
|
|
93
90
|
|
|
@@ -96,7 +93,7 @@ import numpy as np
|
|
|
96
93
|
from simind_python_connector import SimindPythonConnector, configs
|
|
97
94
|
|
|
98
95
|
connector = SimindPythonConnector(
|
|
99
|
-
configs.get("Example.yaml"), "output/basic", "case01", simind_version=
|
|
96
|
+
configs.get("Example.yaml"), "output/basic", "case01", simind_version=8
|
|
100
97
|
)
|
|
101
98
|
source = np.zeros((32, 32, 32), dtype=np.float32)
|
|
102
99
|
source[12:20, 12:20, 12:20] = 1
|
|
@@ -107,42 +104,26 @@ outputs = connector.run()
|
|
|
107
104
|
print(outputs["tot_w1"].projection.shape)
|
|
108
105
|
```
|
|
109
106
|
|
|
110
|
-
Run a complete core simulation example from a source checkout:
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
python examples/getting_started/plot_01_basic_simulation.py
|
|
114
|
-
```
|
|
115
|
-
|
|
116
107
|
The core connector does not require STIR, SIRF, or PyTomography. Install only
|
|
117
|
-
the optional backend
|
|
118
|
-
[installation](docs/installation.rst)
|
|
119
|
-
phantomgen package; the install command is in the tutorial.
|
|
108
|
+
the optional backend your workflow uses; the NEMA examples also need
|
|
109
|
+
phantomgen. See [installation](docs/installation.rst) and the tutorial.
|
|
120
110
|
|
|
121
111
|
## Example map
|
|
122
112
|
|
|
123
|
-
- `examples/getting_started/
|
|
124
|
-
|
|
125
|
-
- `examples/backends
|
|
126
|
-
|
|
127
|
-
- `examples/
|
|
128
|
-
|
|
129
|
-
- `examples/
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
The real-data pages are rendered case studies on restricted Y-90 input, not
|
|
138
|
-
reproducible tutorials. See [datasets](docs/datasets.rst) for the availability
|
|
139
|
-
statement.
|
|
140
|
-
|
|
141
|
-
Lower `quantization_scale`, fewer projections, or a mostly-zero source map can
|
|
142
|
-
make smoke runs faster. These settings reduce history statistics; they do not
|
|
143
|
-
set projection counts. For quantitative output, use known activity and
|
|
144
|
-
acquisition time or normalise against a measured or analytic reference. Keep
|
|
145
|
-
`NN >= 1`.
|
|
113
|
+
- `examples/getting_started/` and `examples/phantoms/`: core simulations,
|
|
114
|
+
windows, configurations, scoring, density conversion and phantoms.
|
|
115
|
+
- `examples/backends/`: STIR, SIRF and PyTomography adaptors, plus the DICOM
|
|
116
|
+
projection recipe in `docs/example_pages/dicom_recipe.rst`.
|
|
117
|
+
- `examples/mc_scatter/` and `examples/cil/`: Monte Carlo scatter and
|
|
118
|
+
residual correction, including CIL.
|
|
119
|
+
- `examples/real_data/` and `docs/example_pages/y90_*.rst`: restricted Y-90
|
|
120
|
+
CT conversion and effective attenuation energy, from data that are not
|
|
121
|
+
redistributed; see [datasets](docs/datasets.rst).
|
|
122
|
+
|
|
123
|
+
Lower `quantization_scale`, fewer projections, or a mostly-zero source map make
|
|
124
|
+
smoke runs faster without changing projection counts. For quantitative output,
|
|
125
|
+
use known activity and acquisition time or normalise against a measured or
|
|
126
|
+
analytic reference. Keep `NN >= 1`.
|
|
146
127
|
|
|
147
128
|
## License
|
|
148
129
|
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# simind-python-connector
|
|
2
|
+
|
|
3
|
+
Python tools for running SIMIND and using its projections with STIR, SIRF, and
|
|
4
|
+
PyTomography. Python 3.10 or newer is required. SIMIND is licensed separately
|
|
5
|
+
and is not included with this package; this project is independent of the
|
|
6
|
+
SIMIND project and Lund University.
|
|
7
|
+
|
|
8
|
+
## Start here
|
|
9
|
+
|
|
10
|
+
The [workflow tutorial](docs/tutorial.rst) walks through a core simulation,
|
|
11
|
+
known-activity NEMA phantom, reconstruction, scatter correction, and
|
|
12
|
+
measured-data calibration; the [example pages](docs/example_pages/index.rst)
|
|
13
|
+
collect the tutorials and figures. The
|
|
14
|
+
[documentation](https://simind-python-connector.readthedocs.io/) covers
|
|
15
|
+
installation, geometry, normalisation and backends.
|
|
16
|
+
|
|
17
|
+
Install the package and example plotting dependencies:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pip install "simind-python-connector[examples]"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Select a SIMIND executable and its matching data directory. The binary and
|
|
24
|
+
`smc_dir` must come from the same release. Set `SIMIND_BIN` explicitly or put
|
|
25
|
+
`simind` on `PATH`; set `SMC_DIR` when required by your installation.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
export SIMIND_BIN=/path/to/simind-v8/simind
|
|
29
|
+
export PATH=/path/to/simind-v8:$PATH
|
|
30
|
+
export SMC_DIR=/path/to/simind-v8/smc_dir/
|
|
31
|
+
export SIMIND_VERSION=8
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
SIMIND v8 is the supported engine. A constructor's `simind_version` overrides
|
|
35
|
+
`SIMIND_VERSION`; v9 selection is experimental. See
|
|
36
|
+
[installation](docs/installation.rst).
|
|
37
|
+
|
|
38
|
+
Use the installed connector directly:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
import numpy as np
|
|
42
|
+
from simind_python_connector import SimindPythonConnector, configs
|
|
43
|
+
|
|
44
|
+
connector = SimindPythonConnector(
|
|
45
|
+
configs.get("Example.yaml"), "output/basic", "case01", simind_version=8
|
|
46
|
+
)
|
|
47
|
+
source = np.zeros((32, 32, 32), dtype=np.float32)
|
|
48
|
+
source[12:20, 12:20, 12:20] = 1
|
|
49
|
+
connector.configure_voxel_phantom(source, np.zeros_like(source), voxel_size_mm=4)
|
|
50
|
+
connector.set_energy_windows([126], [154], [0])
|
|
51
|
+
connector.add_runtime_switch("NN", 1)
|
|
52
|
+
outputs = connector.run()
|
|
53
|
+
print(outputs["tot_w1"].projection.shape)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The core connector does not require STIR, SIRF, or PyTomography. Install only
|
|
57
|
+
the optional backend your workflow uses; the NEMA examples also need
|
|
58
|
+
phantomgen. See [installation](docs/installation.rst) and the tutorial.
|
|
59
|
+
|
|
60
|
+
## Example map
|
|
61
|
+
|
|
62
|
+
- `examples/getting_started/` and `examples/phantoms/`: core simulations,
|
|
63
|
+
windows, configurations, scoring, density conversion and phantoms.
|
|
64
|
+
- `examples/backends/`: STIR, SIRF and PyTomography adaptors, plus the DICOM
|
|
65
|
+
projection recipe in `docs/example_pages/dicom_recipe.rst`.
|
|
66
|
+
- `examples/mc_scatter/` and `examples/cil/`: Monte Carlo scatter and
|
|
67
|
+
residual correction, including CIL.
|
|
68
|
+
- `examples/real_data/` and `docs/example_pages/y90_*.rst`: restricted Y-90
|
|
69
|
+
CT conversion and effective attenuation energy, from data that are not
|
|
70
|
+
redistributed; see [datasets](docs/datasets.rst).
|
|
71
|
+
|
|
72
|
+
Lower `quantization_scale`, fewer projections, or a mostly-zero source map make
|
|
73
|
+
smoke runs faster without changing projection counts. For quantitative output,
|
|
74
|
+
use known activity and acquisition time or normalise against a measured or
|
|
75
|
+
analytic reference. Keep `NN >= 1`.
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
Apache 2.0. See [LICENSE](LICENSE).
|
|
@@ -32,7 +32,7 @@ RUN python -m pip install --upgrade pip \
|
|
|
32
32
|
&& pip install "phantomgen @ git+https://github.com/varzakis/phantomgen@d9196118d5caef3f1bd2c27e5732bc03b48aed2a" \
|
|
33
33
|
&& python - <<'PY'
|
|
34
34
|
import importlib
|
|
35
|
-
for module in ("numpy", "matplotlib", "pytest", "phantomgen", "pooch"
|
|
35
|
+
for module in ("numpy", "matplotlib", "pytest", "phantomgen", "pooch"):
|
|
36
36
|
importlib.import_module(module)
|
|
37
37
|
print("Core Python modules available")
|
|
38
38
|
PY
|
{simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/pytomography/Dockerfile
RENAMED
|
@@ -39,7 +39,7 @@ RUN python -m pip install --upgrade pip \
|
|
|
39
39
|
&& pip install "phantomgen @ git+https://github.com/varzakis/phantomgen@d9196118d5caef3f1bd2c27e5732bc03b48aed2a" \
|
|
40
40
|
&& python - <<'PY'
|
|
41
41
|
import importlib
|
|
42
|
-
for module in ("torch", "pytomography", "pytest", "phantomgen", "pooch"
|
|
42
|
+
for module in ("torch", "pytomography", "pytest", "phantomgen", "pooch"):
|
|
43
43
|
importlib.import_module(module)
|
|
44
44
|
print("PyTomography modules available")
|
|
45
45
|
PY
|
|
@@ -36,7 +36,7 @@ RUN python -m pip install --upgrade pip \
|
|
|
36
36
|
&& pip install "phantomgen @ git+https://github.com/varzakis/phantomgen@d9196118d5caef3f1bd2c27e5732bc03b48aed2a" \
|
|
37
37
|
&& python - <<'PY'
|
|
38
38
|
import importlib
|
|
39
|
-
for module in ("sirf.STIR", "pytest", "cil", "sirf.contrib.partitioner", "phantomgen", "pooch"
|
|
39
|
+
for module in ("sirf.STIR", "pytest", "cil", "sirf.contrib.partitioner", "phantomgen", "pooch"):
|
|
40
40
|
importlib.import_module(module)
|
|
41
41
|
print("SIRF Python modules available")
|
|
42
42
|
PY
|