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.
Files changed (321) hide show
  1. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.github/workflows/docs.yml +3 -7
  2. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.github/workflows/tests.yml +3 -3
  3. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.zenodo.json +1 -1
  4. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/CHANGELOG.md +34 -0
  5. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/CITATION.cff +2 -2
  6. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/MANIFEST.in +12 -13
  7. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/PKG-INFO +32 -51
  8. simind_python_connector-2.0.2/README.md +79 -0
  9. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/python/Dockerfile +1 -1
  10. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/pytomography/Dockerfile +1 -1
  11. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/sirf/Dockerfile +1 -1
  12. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/stir/Dockerfile +0 -1
  13. simind_python_connector-2.0.2/docs/_docs.py +291 -0
  14. simind_python_connector-2.0.2/docs/_static/examples/basic_simulation/basic_simulation.png +0 -0
  15. simind_python_connector-2.0.2/docs/_static/examples/cil_rdp_svrg/reconstructions.png +0 -0
  16. simind_python_connector-2.0.2/docs/_static/examples/cil_rdp_svrg/recovery.png +0 -0
  17. simind_python_connector-2.0.2/docs/_static/examples/cil_scatter/reconstructions.png +0 -0
  18. simind_python_connector-2.0.2/docs/_static/examples/cil_scatter/recovery.png +0 -0
  19. simind_python_connector-2.0.2/docs/_static/examples/density_conversion/density_conversion.png +0 -0
  20. simind_python_connector-2.0.2/docs/_static/examples/mc_scatter_osem/reconstructions.png +0 -0
  21. simind_python_connector-2.0.2/docs/_static/examples/mc_scatter_osem/recovery.png +0 -0
  22. simind_python_connector-2.0.2/docs/_static/examples/multi_window/multi_window.png +0 -0
  23. simind_python_connector-2.0.2/docs/_static/examples/phantom_library/phantom_library.png +0 -0
  24. simind_python_connector-2.0.2/docs/_static/examples/pytomography_osem/pytomography_osem.png +0 -0
  25. simind_python_connector-2.0.2/docs/_static/examples/residual_correction/reconstructions.png +0 -0
  26. simind_python_connector-2.0.2/docs/_static/examples/residual_correction/recovery.png +0 -0
  27. simind_python_connector-2.0.2/docs/_static/examples/scatter_normalisation/recovery.png +0 -0
  28. simind_python_connector-2.0.2/docs/_static/examples/scatter_normalisation/scale_scatter.png +0 -0
  29. simind_python_connector-2.0.2/docs/_static/examples/scattwin_vs_penetrate/decomposition.png +0 -0
  30. simind_python_connector-2.0.2/docs/_static/examples/sirf_osem/sirf_osem.png +0 -0
  31. simind_python_connector-2.0.2/docs/_static/examples/stir_osem/stir_osem.png +0 -0
  32. simind_python_connector-2.0.2/docs/_static/examples/y90_ct_conversion/maps.png +0 -0
  33. simind_python_connector-2.0.2/docs/_static/examples/y90_ct_conversion/registration.png +0 -0
  34. simind_python_connector-2.0.2/docs/_static/examples/y90_effective_energy/attenuation_maps.png +0 -0
  35. simind_python_connector-2.0.2/docs/_static/examples/y90_effective_energy/detected_spectrum.png +0 -0
  36. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/api.rst +0 -2
  37. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/backends.rst +2 -14
  38. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/changelog.rst +79 -159
  39. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/conf.py +1 -41
  40. simind_python_connector-2.0.2/docs/contributing.rst +98 -0
  41. simind_python_connector-2.0.2/docs/datasets.rst +62 -0
  42. simind_python_connector-2.0.2/docs/example_pages/_template.rst.txt +19 -0
  43. simind_python_connector-2.0.2/docs/example_pages/basic_simulation.rst +19 -0
  44. simind_python_connector-2.0.2/docs/example_pages/cil_rdp_svrg.rst +31 -0
  45. simind_python_connector-2.0.2/docs/example_pages/cil_scatter.rst +29 -0
  46. simind_python_connector-2.0.2/docs/example_pages/custom_configuration.rst +11 -0
  47. simind_python_connector-2.0.2/docs/example_pages/density_conversion.rst +18 -0
  48. simind_python_connector-2.0.2/docs/example_pages/dicom_recipe.rst +36 -0
  49. simind_python_connector-2.0.2/docs/example_pages/index.rst +44 -0
  50. simind_python_connector-2.0.2/docs/example_pages/mc_scatter_osem.rst +29 -0
  51. simind_python_connector-2.0.2/docs/example_pages/multi_window.rst +21 -0
  52. simind_python_connector-2.0.2/docs/example_pages/phantom_library.rst +18 -0
  53. simind_python_connector-2.0.2/docs/example_pages/pytomography_osem.rst +21 -0
  54. simind_python_connector-2.0.2/docs/example_pages/residual_correction.rst +33 -0
  55. simind_python_connector-2.0.2/docs/example_pages/scatter_normalisation.rst +39 -0
  56. simind_python_connector-2.0.2/docs/example_pages/scattwin_vs_penetrate.rst +21 -0
  57. simind_python_connector-2.0.2/docs/example_pages/sirf_osem.rst +21 -0
  58. simind_python_connector-2.0.2/docs/example_pages/stir_osem.rst +21 -0
  59. simind_python_connector-2.0.2/docs/example_pages/y90_ct_conversion.rst +46 -0
  60. simind_python_connector-2.0.2/docs/example_pages/y90_effective_energy.rst +29 -0
  61. simind_python_connector-2.0.2/docs/example_pages.json +114 -0
  62. simind_python_connector-2.0.2/docs/examples/_nema.py +572 -0
  63. simind_python_connector-2.0.2/docs/examples/_scatter_normalisation.py +49 -0
  64. simind_python_connector-2.0.2/docs/examples/_y90.py +220 -0
  65. simind_python_connector-2.0.2/docs/examples/_y90_spectrum.py +151 -0
  66. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/backends/plot_07a_stir_adaptor_osem.py +25 -99
  67. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/backends/plot_07b_sirf_adaptor_osem.py +24 -89
  68. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/backends/plot_07c_pytomography_adaptor_osem.py +38 -88
  69. simind_python_connector-2.0.2/docs/examples/cil/plot_14_cil_scatter.py +203 -0
  70. simind_python_connector-2.0.2/docs/examples/cil/plot_15_cil_rdp_svrg.py +259 -0
  71. simind_python_connector-2.0.2/docs/examples/getting_started/plot_01_basic_simulation.py +109 -0
  72. simind_python_connector-2.0.2/docs/examples/getting_started/plot_03_multi_window.py +130 -0
  73. simind_python_connector-2.0.2/docs/examples/getting_started/plot_04_custom_config.py +42 -0
  74. simind_python_connector-2.0.2/docs/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +193 -0
  75. simind_python_connector-2.0.2/docs/examples/getting_started/plot_06_schneider_density_conversion.py +101 -0
  76. simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_11_mc_scatter_osem.py +200 -0
  77. simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_12_scatter_normalisation.py +266 -0
  78. simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_13_residual_correction.py +252 -0
  79. simind_python_connector-2.0.2/docs/examples/phantoms/plot_09_phantom_library.py +88 -0
  80. simind_python_connector-2.0.2/docs/examples/real_data/README.rst +21 -0
  81. simind_python_connector-2.0.2/docs/examples/real_data/plot_17_y90_effective_energy.py +308 -0
  82. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/geometry.rst +19 -52
  83. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/index.rst +1 -2
  84. simind_python_connector-2.0.2/docs/installation.rst +92 -0
  85. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/intro.rst +5 -11
  86. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/normalisation.rst +20 -6
  87. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/phantoms.rst +6 -10
  88. simind_python_connector-2.0.2/docs/reconstruction.rst +226 -0
  89. simind_python_connector-2.0.2/docs/simind_validation.md +191 -0
  90. simind_python_connector-2.0.2/docs/spectub_cache_interference.md +13 -0
  91. simind_python_connector-2.0.2/docs/testing.rst +124 -0
  92. simind_python_connector-2.0.2/docs/tutorial.rst +121 -0
  93. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/usage.rst +24 -49
  94. simind_python_connector-2.0.2/examples/README.rst +5 -0
  95. simind_python_connector-2.0.2/examples/_nema.py +572 -0
  96. simind_python_connector-2.0.2/examples/_python_connector_helpers.py +57 -0
  97. simind_python_connector-2.0.2/examples/_scatter_normalisation.py +49 -0
  98. simind_python_connector-2.0.2/examples/_y90.py +220 -0
  99. simind_python_connector-2.0.2/examples/_y90_spectrum.py +151 -0
  100. simind_python_connector-2.0.2/examples/backends/plot_07a_stir_adaptor_osem.py +159 -0
  101. simind_python_connector-2.0.2/examples/backends/plot_07b_sirf_adaptor_osem.py +153 -0
  102. simind_python_connector-2.0.2/examples/backends/plot_07c_pytomography_adaptor_osem.py +159 -0
  103. simind_python_connector-2.0.2/examples/cil/README.rst +2 -0
  104. simind_python_connector-2.0.2/examples/cil/plot_14_cil_scatter.py +203 -0
  105. simind_python_connector-2.0.2/examples/cil/plot_15_cil_rdp_svrg.py +259 -0
  106. simind_python_connector-2.0.2/examples/getting_started/plot_01_basic_simulation.py +109 -0
  107. simind_python_connector-2.0.2/examples/getting_started/plot_03_multi_window.py +130 -0
  108. simind_python_connector-2.0.2/examples/getting_started/plot_04_custom_config.py +42 -0
  109. simind_python_connector-2.0.2/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +193 -0
  110. simind_python_connector-2.0.2/examples/getting_started/plot_06_schneider_density_conversion.py +101 -0
  111. simind_python_connector-2.0.2/examples/mc_scatter/README.rst +2 -0
  112. simind_python_connector-2.0.2/examples/mc_scatter/plot_11_mc_scatter_osem.py +200 -0
  113. simind_python_connector-2.0.2/examples/mc_scatter/plot_12_scatter_normalisation.py +266 -0
  114. simind_python_connector-2.0.2/examples/mc_scatter/plot_13_residual_correction.py +252 -0
  115. simind_python_connector-2.0.2/examples/phantoms/README.rst +2 -0
  116. simind_python_connector-2.0.2/examples/phantoms/plot_09_phantom_library.py +88 -0
  117. simind_python_connector-2.0.2/examples/real_data/README.rst +21 -0
  118. simind_python_connector-2.0.2/examples/real_data/plot_17_y90_effective_energy.py +308 -0
  119. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/pyproject.toml +3 -4
  120. simind_python_connector-2.0.2/scripts/check_docs.py +52 -0
  121. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/release.sh +1 -1
  122. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/run_all_examples.py +9 -18
  123. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/run_container_examples.sh +1 -2
  124. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/run_container_validation.sh +0 -1
  125. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/run_validation.sh +21 -48
  126. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/validation_report.py +23 -6
  127. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/__init__.py +1 -1
  128. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/python_connector.py +2 -2
  129. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/corrections.py +56 -14
  130. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/osem.py +5 -1
  131. simind_python_connector-2.0.2/simind_python_connector/utils/projection_metrics.py +153 -0
  132. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector.egg-info/SOURCES.txt +80 -17
  133. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_cil_sirf.py +21 -0
  134. simind_python_connector-2.0.2/tests/recon/test_corrections.py +636 -0
  135. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_osem_sirf.py +39 -0
  136. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_container_scripts.py +17 -0
  137. simind_python_connector-2.0.2/tests/test_docs_check.py +179 -0
  138. simind_python_connector-2.0.2/tests/test_examples_backend_separation.py +60 -0
  139. simind_python_connector-2.0.2/tests/test_examples_navigation.py +56 -0
  140. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_marker_policy.py +0 -1
  141. simind_python_connector-2.0.2/tests/test_nema_examples.py +437 -0
  142. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_packaging_resources.py +9 -6
  143. simind_python_connector-2.0.2/tests/test_projection_metrics.py +186 -0
  144. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_release_regressions_simind.py +8 -10
  145. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_release_tools.py +2 -5
  146. simind_python_connector-2.0.2/tests/test_scatter_normalisation_options.py +38 -0
  147. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_validation_framework.py +27 -6
  148. simind_python_connector-2.0.2/tests/test_y90_ct_conversion.py +235 -0
  149. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_y90_spectra.py +0 -48
  150. simind_python_connector-2.0.2/tests/validation/__init__.py +0 -0
  151. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/conftest.py +0 -13
  152. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_phantoms.py +0 -4
  153. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_recon.py +7 -8
  154. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_runtime_switches.py +11 -71
  155. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_scale_to_reference.py +2 -8
  156. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_versions.py +0 -15
  157. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/uv.lock +3 -18
  158. simind_python_connector-2.0.1/README.md +0 -98
  159. simind_python_connector-2.0.1/docs/_gallery.py +0 -65
  160. simind_python_connector-2.0.1/docs/contributing.rst +0 -129
  161. simind_python_connector-2.0.1/docs/datasets.rst +0 -95
  162. simind_python_connector-2.0.1/docs/examples.rst +0 -36
  163. simind_python_connector-2.0.1/docs/installation.rst +0 -148
  164. simind_python_connector-2.0.1/docs/reconstruction.rst +0 -295
  165. simind_python_connector-2.0.1/docs/simind_validation.md +0 -210
  166. simind_python_connector-2.0.1/docs/spectub_cache_interference.md +0 -143
  167. simind_python_connector-2.0.1/docs/testing.rst +0 -295
  168. simind_python_connector-2.0.1/docs/tutorial.rst +0 -217
  169. simind_python_connector-2.0.1/examples/backends/README.rst +0 -2
  170. simind_python_connector-2.0.1/examples/backends/plot_08a_stir_adaptor_from_dicom.py +0 -86
  171. simind_python_connector-2.0.1/examples/backends/plot_08b_sirf_adaptor_from_dicom.py +0 -80
  172. simind_python_connector-2.0.1/examples/backends/plot_08c_pytomography_adaptor_from_dicom.py +0 -76
  173. simind_python_connector-2.0.1/examples/cil/plot_14_cil_scatter.py +0 -365
  174. simind_python_connector-2.0.1/examples/cil/plot_15_cil_rdp_svrg.py +0 -438
  175. simind_python_connector-2.0.1/examples/getting_started/README.rst +0 -2
  176. simind_python_connector-2.0.1/examples/getting_started/plot_01_basic_simulation.py +0 -109
  177. simind_python_connector-2.0.1/examples/getting_started/plot_02_runtime_switch_comparison.py +0 -131
  178. simind_python_connector-2.0.1/examples/getting_started/plot_03_multi_window.py +0 -146
  179. simind_python_connector-2.0.1/examples/getting_started/plot_04_custom_config.py +0 -122
  180. simind_python_connector-2.0.1/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +0 -525
  181. simind_python_connector-2.0.1/examples/getting_started/plot_06_schneider_density_conversion.py +0 -226
  182. simind_python_connector-2.0.1/examples/mc_scatter/plot_11_mc_scatter_osem.py +0 -376
  183. simind_python_connector-2.0.1/examples/mc_scatter/plot_12_scatter_normalisation.py +0 -558
  184. simind_python_connector-2.0.1/examples/mc_scatter/plot_13_residual_correction.py +0 -430
  185. simind_python_connector-2.0.1/examples/phantoms/plot_09_phantom_library.py +0 -159
  186. simind_python_connector-2.0.1/examples/phantoms/plot_10_nema_osem.py +0 -256
  187. simind_python_connector-2.0.1/examples/real_data/README.rst +0 -53
  188. simind_python_connector-2.0.1/examples/real_data/plot_16a_stir_ct_conversion.py +0 -772
  189. simind_python_connector-2.0.1/examples/real_data/plot_16b_sirf_ct_conversion.py +0 -742
  190. simind_python_connector-2.0.1/examples/real_data/plot_16c_pytomography_ct_conversion.py +0 -851
  191. simind_python_connector-2.0.1/examples/real_data/plot_17_y90_effective_energy.py +0 -1036
  192. simind_python_connector-2.0.1/examples/real_data/plot_18_y90_mc_scatter.py +0 -2584
  193. simind_python_connector-2.0.1/scripts/build_gallery.sh +0 -79
  194. simind_python_connector-2.0.1/scripts/check_gallery_current.py +0 -29
  195. simind_python_connector-2.0.1/tests/recon/test_corrections.py +0 -179
  196. simind_python_connector-2.0.1/tests/test_examples_backend_separation.py +0 -77
  197. simind_python_connector-2.0.1/tests/test_gallery_config.py +0 -114
  198. simind_python_connector-2.0.1/tests/test_y90_ct_conversion.py +0 -673
  199. simind_python_connector-2.0.1/tests/test_y90_reconstruction.py +0 -772
  200. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.github/workflows/containers.yml +0 -0
  201. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.github/workflows/publish.yml +0 -0
  202. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/.readthedocs.yaml +0 -0
  203. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/LICENSE +0 -0
  204. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/README.md +0 -0
  205. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/compose.yaml +0 -0
  206. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/constraints.txt +0 -0
  207. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/import_guard/sitecustomize.py +0 -0
  208. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docker/python/install_mpich_compat.sh +0 -0
  209. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/LICENSE +0 -0
  210. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/docs/_static/.gitkeep +0 -0
  211. /simind_python_connector-2.0.1/tests/recon/__init__.py → /simind_python_connector-2.0.2/docs/_static/examples/.gitkeep +0 -0
  212. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/README.rst +0 -0
  213. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/_python_connector_helpers.py +0 -0
  214. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/cil/README.rst +0 -0
  215. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/mc_scatter/README.rst +0 -0
  216. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2/docs}/examples/phantoms/README.rst +0 -0
  217. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/check_simind_mpi.py +0 -0
  218. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/check_wheel_resources.py +0 -0
  219. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/fix.sh +0 -0
  220. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/make_y90_bundle.py +0 -0
  221. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/scripts/prepare_release.py +0 -0
  222. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/setup.cfg +0 -0
  223. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/builders/__init__.py +0 -0
  224. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/builders/_native.py +0 -0
  225. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/builders/acquisition_builder.py +0 -0
  226. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/builders/image_builder.py +0 -0
  227. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/AnyScan.yaml +0 -0
  228. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/Discovery670.yaml +0 -0
  229. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/Example.yaml +0 -0
  230. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/MLD001_SCAN0.yaml +0 -0
  231. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/__init__.py +0 -0
  232. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/configs/input.smc +0 -0
  233. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/__init__.py +0 -0
  234. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/_native_adaptor.py +0 -0
  235. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/base.py +0 -0
  236. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/pytomography_adaptor.py +0 -0
  237. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/sirf_adaptor.py +0 -0
  238. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/connectors/stir_adaptor.py +0 -0
  239. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/converters/__init__.py +0 -0
  240. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/converters/attenuation.py +0 -0
  241. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/converters/simind_to_stir.py +0 -0
  242. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/core/__init__.py +0 -0
  243. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/core/config.py +0 -0
  244. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/core/executor.py +0 -0
  245. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/core/types.py +0 -0
  246. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/data/Schneider2000.json +0 -0
  247. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/data/__init__.py +0 -0
  248. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/data/bone.atn +0 -0
  249. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/data/h2o.atn +0 -0
  250. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/datasets.py +0 -0
  251. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/normalisation.py +0 -0
  252. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/phantoms.py +0 -0
  253. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/__init__.py +0 -0
  254. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/cil.py +0 -0
  255. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/diagnostics.py +0 -0
  256. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/projector.py +0 -0
  257. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/recon/updates.py +0 -0
  258. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/utils/__init__.py +0 -0
  259. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/utils/interfile.py +0 -0
  260. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/simind_python_connector/utils/simind_utils.py +0 -0
  261. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/__init__.py +0 -0
  262. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/conftest.py +0 -0
  263. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/golden/circular.hs +0 -0
  264. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/golden/ignored_substrings.hs +0 -0
  265. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/golden/orbit.hs +0 -0
  266. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/golden/penetrate_component_12.hs +0 -0
  267. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/fixtures/minimal_variable_sections.smc +0 -0
  268. {simind_python_connector-2.0.1/tests/validation → simind_python_connector-2.0.2/tests/recon}/__init__.py +0 -0
  269. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/conftest.py +0 -0
  270. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/fakes.py +0 -0
  271. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_cil_functions.py +0 -0
  272. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_diagnostics.py +0 -0
  273. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_import_boundary.py +0 -0
  274. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_projector.py +0 -0
  275. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_residual.py +0 -0
  276. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_residual_cil.py +0 -0
  277. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_residual_sirf.py +0 -0
  278. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/recon/test_updates.py +0 -0
  279. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_acquisition_builder_unit.py +0 -0
  280. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_attenuation_utils.py +0 -0
  281. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_builders_lifetime.py +0 -0
  282. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_builders_native.py +0 -0
  283. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_configure_phantom.py +0 -0
  284. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_connector_backend_separation.py +0 -0
  285. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_container_library_isolation.py +0 -0
  286. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_converter_golden.py +0 -0
  287. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_datasets.py +0 -0
  288. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_dicom_builder.py +0 -0
  289. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_energy_window_filename_simind.py +0 -0
  290. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_executor.py +0 -0
  291. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_ground_truth_sirf.py +0 -0
  292. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_image_builder_unit.py +0 -0
  293. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_import_side_effects.py +0 -0
  294. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_integration.py +0 -0
  295. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_interfile.py +0 -0
  296. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_make_y90_bundle.py +0 -0
  297. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_measured_geometry_simind.py +0 -0
  298. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_native_adaptors.py +0 -0
  299. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_nema_phantom.py +0 -0
  300. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_non_square_slices_simind.py +0 -0
  301. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_normalisation.py +0 -0
  302. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_phantoms.py +0 -0
  303. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_phantoms_simind.py +0 -0
  304. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_python_connector.py +0 -0
  305. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_pytomography_adaptor.py +0 -0
  306. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_runtime_switches.py +0 -0
  307. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_schneider_density.py +0 -0
  308. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_simind_mpi.py +0 -0
  309. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_simind_to_stir_converter.py +0 -0
  310. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_simulation_config.py +0 -0
  311. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_template_geometry_sirf.py +0 -0
  312. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_utils_small.py +0 -0
  313. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/test_voxelise.py +0 -0
  314. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_activity.py +0 -0
  315. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_anisotropic_voxels.py +0 -0
  316. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_backend_agreement.py +0 -0
  317. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_cil.py +0 -0
  318. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_interfile.py +0 -0
  319. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_measured_geometry.py +0 -0
  320. {simind_python_connector-2.0.1 → simind_python_connector-2.0.2}/tests/validation/test_mpi.py +0 -0
  321. {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 without executing examples
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 the generated gallery indexes are committed
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 gallery outputs are current
39
- run: python scripts/check_gallery_current.py
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 and not macos_v9" --cov=simind_python_connector --cov-report=xml
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:
@@ -31,5 +31,5 @@
31
31
  ],
32
32
  "access_right": "open",
33
33
  "license": "apache-2.0",
34
- "version": "2.0.1"
34
+ "version": "2.0.2"
35
35
  }
@@ -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-24
15
- version: 2.0.1
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, gallery example sources, release and
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. The rendered gallery under
10
- # docs/auto_examples (pages, images, notebooks, checksums and execution times),
11
- # Sphinx build trees and generated execution-time files are not shipped.
12
- # Rendered documentation is built from the tagged repository; the sdist keeps
13
- # only the sources from which it is generated. Local-only agent notes, audits,
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, not generated gallery output.
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
- prune docs/auto_examples
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, gallery, validation and container scripts.
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.1
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
- See the [workflow tutorial](docs/tutorial.rst) for an ordered path through a
62
- core simulation, known-activity NEMA phantom, reconstruction, scatter
63
- correction, and measured-data calibration. The [gallery](docs/auto_examples/index.rst)
64
- has every tutorial with its figures and printed output. Rendered documentation,
65
- including the gallery, is built from the tagged repository; source distributions
66
- contain the example sources rather than the generated gallery. The
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-v9/simind
83
- export PATH=/path/to/simind-v9:$PATH
84
- export SMC_DIR=/path/to/simind-v9/smc_dir/
85
- export SIMIND_VERSION=9
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
- Select version `8` or `9` explicitly. The connector uses this choice to place
89
- voxel source and density maps in the same physical coordinates; the default
90
- is version 8. A constructor's `simind_version` overrides `SIMIND_VERSION`.
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=9
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 used by your workflow; see
118
- [installation](docs/installation.rst). The NEMA examples need the optional
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/plot_01`–`plot_06`: core NumPy simulations, windows, configurations, scoring,
124
- and density conversion.
125
- - `examples/backends/plot_07a` / `07b` / `07c`: STIR / SIRF / PyTomography adaptors.
126
- - `examples/backends/plot_08a` / `08b` / `08c`: DICOM setup for STIR / SIRF / PyTomography.
127
- - `examples/phantoms/plot_09` / `plot_10`: the SIMIND analytic phantom library,
128
- and a known-activity NEMA/IEC simulation reconstructed with SIRF OSEM.
129
- - `examples/mc_scatter/plot_11`–`plot_13`: Monte Carlo scatter in SIRF OSEM,
130
- scatter normalisation, and residual correction.
131
- - `examples/cil/plot_14` / `plot_15`: CIL scatter correction, and an
132
- RDP-regularised SVRG reconstruction.
133
- - `examples/real_data/plot_16a` / `16b` / `16c`: CT-to-SPECT conversion with
134
- STIR / SIRF / PyTomography for the measured Y-90 phantom.
135
- - `examples/real_data/plot_17`: the Y-90 effective attenuation energy with SIRF.
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", "sphinx_gallery"):
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
@@ -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", "sphinx_gallery"):
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", "sphinx_gallery"):
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
@@ -39,7 +39,6 @@ import stir # noqa: F401
39
39
  import pytest # noqa: F401
40
40
  import phantomgen # noqa: F401
41
41
  import pooch # noqa: F401
42
- import sphinx_gallery # noqa: F401
43
42
  from simind_python_connector.utils import _import_stir_extra
44
43
 
45
44
  _import_stir_extra()