pytomography 3.3.0__tar.gz → 3.3.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 (177) hide show
  1. {pytomography-3.3.0 → pytomography-3.3.2}/PKG-INFO +9 -3
  2. {pytomography-3.3.0 → pytomography-3.3.2}/README.md +6 -1
  3. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/index.rst +1 -1
  4. {pytomography-3.3.0 → pytomography-3.3.2}/pyproject.toml +1 -1
  5. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/ct_table.csv +6 -0
  6. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/dicom.py +15 -9
  7. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/shared/dicom.py +6 -0
  8. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/SPECT/spect_system_matrix.py +2 -2
  9. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/simind_mc.py +16 -11
  10. {pytomography-3.3.0 → pytomography-3.3.2}/.github/workflows/publish-to-test-pypi.yml +0 -0
  11. {pytomography-3.3.0 → pytomography-3.3.2}/.gitignore +0 -0
  12. {pytomography-3.3.0 → pytomography-3.3.2}/.readthedocs.yaml +0 -0
  13. {pytomography-3.3.0 → pytomography-3.3.2}/LICENSE +0 -0
  14. {pytomography-3.3.0 → pytomography-3.3.2}/docs/Makefile +0 -0
  15. {pytomography-3.3.0 → pytomography-3.3.2}/docs/make.bat +0 -0
  16. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/_static/code_toggle.js +0 -0
  17. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/_static/css/code_toggle.css +0 -0
  18. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/_static/css/custom.css +0 -0
  19. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/conf.py +0 -0
  20. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/data_tables/collimator_data.rst +0 -0
  21. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/developers_guide.md +0 -0
  22. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/external_data.rst +0 -0
  23. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/gallery.rst +0 -0
  24. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/CT_slice.png +0 -0
  25. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/PT1.png +0 -0
  26. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/ac225_patient_dual.jpg +0 -0
  27. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/coordinate_conventions.png +0 -0
  28. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/emission.png +0 -0
  29. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/example_scanner_sm.png +0 -0
  30. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/figure2.jpg +0 -0
  31. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/figure4.jpg +0 -0
  32. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/figure4_left_hoz.jpg +0 -0
  33. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/figure5.jpg +0 -0
  34. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/pytomo_front_title.png +0 -0
  35. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/index2.md +0 -0
  36. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/install.rst +0 -0
  37. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/CT_slice.png +0 -0
  38. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/conventions.ipynb +0 -0
  39. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/p_simind_multiorgan.py +0 -0
  40. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/p_subsample_data.py +0 -0
  41. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/run_all_notebooks.py +0 -0
  42. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/script_to_generate_eta_for_petsird.py +0 -0
  43. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_CT_GEN3.ipynb +0 -0
  44. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_CT_microct.ipynb +0 -0
  45. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_CardiacReorientation.ipynb +0 -0
  46. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_GE_HDF5.ipynb +0 -0
  47. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_DIP.ipynb +0 -0
  48. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_LM.ipynb +0 -0
  49. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_SINO.ipynb +0 -0
  50. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_lm.ipynb +0 -0
  51. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_lmTOF.ipynb +0 -0
  52. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_sino.ipynb +0 -0
  53. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_sinoTOF.ipynb +0 -0
  54. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETSIRD.ipynb +0 -0
  55. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_ac225_dicom_recon.ipynb +0 -0
  56. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_ac225_simind_recon.ipynb +0 -0
  57. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_algorithms.ipynb +0 -0
  58. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_dicom_algorithms.ipynb +0 -0
  59. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_dicomdata.ipynb +0 -0
  60. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_dicommultibed.ipynb +0 -0
  61. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_dualpeak.ipynb +0 -0
  62. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_examplesystemmatrix.ipynb +0 -0
  63. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_fbp.ipynb +0 -0
  64. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_plotting.ipynb +0 -0
  65. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_quantitative.ipynb +0 -0
  66. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_siminddata.ipynb +0 -0
  67. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_siminddata_multiorgan.ipynb +0 -0
  68. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_spect_mc.ipynb +0 -0
  69. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_spect_mc2.ipynb +0 -0
  70. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_starguide.ipynb +0 -0
  71. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_uncertainty_spect.ipynb +0 -0
  72. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage.rst +0 -0
  73. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage_ct.rst +0 -0
  74. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage_dev.rst +0 -0
  75. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage_pet.rst +0 -0
  76. {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage_spect.rst +0 -0
  77. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/__init__.py +0 -0
  78. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/algorithms/__init__.py +0 -0
  79. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/algorithms/dip_recon.py +0 -0
  80. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/algorithms/fbp.py +0 -0
  81. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/algorithms/preconditioned_gradient_ascent.py +0 -0
  82. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/callbacks/__init__.py +0 -0
  83. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/callbacks/callback.py +0 -0
  84. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/callbacks/data_saving.py +0 -0
  85. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/adipose.csv +0 -0
  86. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/air.csv +0 -0
  87. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/aluminum.csv +0 -0
  88. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/bonecortical.csv +0 -0
  89. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/boneequivplastic.csv +0 -0
  90. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/breast.csv +0 -0
  91. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/lead.csv +0 -0
  92. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/lungtissue.csv +0 -0
  93. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/muscle.csv +0 -0
  94. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/tissueequivplastic.csv +0 -0
  95. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/tungsten.csv +0 -0
  96. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/water.csv +0 -0
  97. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/collim.col +0 -0
  98. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/pet_colors.txt +0 -0
  99. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/pet_scanner_info.txt +0 -0
  100. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/simind.smc +0 -0
  101. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/CT/__init__.py +0 -0
  102. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/CT/dicom_ct_pd.py +0 -0
  103. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/__init__.py +0 -0
  104. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/clinical.py +0 -0
  105. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/gate.py +0 -0
  106. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/petsird.py +0 -0
  107. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/__init__.py +0 -0
  108. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/_binary.py +0 -0
  109. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/_dtypes.py +0 -0
  110. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/_ndjson.py +0 -0
  111. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/binary.py +0 -0
  112. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/ndjson.py +0 -0
  113. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/protocols.py +0 -0
  114. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/types.py +0 -0
  115. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/yardl_types.py +0 -0
  116. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/shared.py +0 -0
  117. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/__init__.py +0 -0
  118. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/attenuation_map.py +0 -0
  119. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/shared.py +0 -0
  120. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/simind.py +0 -0
  121. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/__init__.py +0 -0
  122. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/shared/__init__.py +0 -0
  123. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/shared/dicom_creation.py +0 -0
  124. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/shared/interfile.py +0 -0
  125. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/__init__.py +0 -0
  126. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/likelihood.py +0 -0
  127. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/mse_objective.py +0 -0
  128. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/poisson_log_likelihood.py +0 -0
  129. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/CT/__init__.py +0 -0
  130. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/CT/ct_conebeam_flatpanel_metadata.py +0 -0
  131. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/CT/ct_gen3_metadata.py +0 -0
  132. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/__init__.py +0 -0
  133. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/pet_sinogram_metadata.py +0 -0
  134. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/pet_tof_metadata.py +0 -0
  135. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/petlm_metadata.py +0 -0
  136. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/SPECT/__init__.py +0 -0
  137. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/SPECT/spect_metadata.py +0 -0
  138. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/SPECT/starguide_metadata.py +0 -0
  139. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/__init__.py +0 -0
  140. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/metadata.py +0 -0
  141. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/priors/__init__.py +0 -0
  142. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/priors/nearest_neighbour.py +0 -0
  143. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/priors/prior.py +0 -0
  144. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/CT/__init__.py +0 -0
  145. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/CT/ct_conebeam_flatpanel_system_matrix.py +0 -0
  146. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/CT/ct_gen3_system_matrix.py +0 -0
  147. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/PET/__init__.py +0 -0
  148. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/PET/pet_sinogram_system_matrix.py +0 -0
  149. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/PET/petlm_system_matrix.py +0 -0
  150. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/SPECT/__init__.py +0 -0
  151. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/SPECT/starguide_system_matrix.py +0 -0
  152. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/__init__.py +0 -0
  153. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/shared/__init__.py +0 -0
  154. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/shared/kem_system_matrix.py +0 -0
  155. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/shared/motion_correction_system_matrix.py +0 -0
  156. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/system_matrix.py +0 -0
  157. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/tests/test_multi_bed_recon.py +0 -0
  158. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/SPECT/__init__.py +0 -0
  159. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/SPECT/attenuation.py +0 -0
  160. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/SPECT/cutoff.py +0 -0
  161. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/SPECT/psf.py +0 -0
  162. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/__init__.py +0 -0
  163. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/__init__.py +0 -0
  164. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/filters.py +0 -0
  165. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/kem.py +0 -0
  166. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/motion.py +0 -0
  167. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/spatial.py +0 -0
  168. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/transform.py +0 -0
  169. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/__init__.py +0 -0
  170. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/cardiac_spect.py +0 -0
  171. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/fourier_filters.py +0 -0
  172. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/misc.py +0 -0
  173. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/nist_data.py +0 -0
  174. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/plot_utils.py +0 -0
  175. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/scatter.py +0 -0
  176. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/spatial.py +0 -0
  177. {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/sss.py +0 -0
@@ -1,10 +1,11 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: pytomography
3
- Version: 3.3.0
3
+ Version: 3.3.2
4
4
  Summary: Package to perform tomographic image reconstruction
5
5
  Project-URL: Homepage, https://github.com/qurit/PyTomography
6
6
  Project-URL: Bug Tracker, https://github.com/qurit/PyTomography/issues
7
7
  Author-email: Luke Polson <lukepolson@outlook.com>
8
+ License-File: LICENSE
8
9
  Classifier: License :: OSI Approved :: MIT License
9
10
  Classifier: Operating System :: OS Independent
10
11
  Classifier: Programming Language :: Python :: 3
@@ -44,9 +45,14 @@ Description-Content-Type: text/markdown
44
45
  ![Stars](https://img.shields.io/github/stars/qurit/PyTomography)
45
46
  ![Issues](https://img.shields.io/github/issues/qurit/PyTomography)
46
47
 
47
- ## How to get started?
48
+ # Getting Started
48
49
  We have prepared a very detailed documentation guide available at [readthedocs](https://pytomography.readthedocs.io/en/latest/). If you have any additional questions, please ask them on the [discourse website](https://pytomography.discourse.group/).
49
50
 
51
+ # Research Paper
52
+ If you use PyTomography in your own research, please cite the corresponding research paper:
53
+
54
+ **Lucas A. Polson, Roberto Fedrigo, Chenguang Li, Maziar Sabouri, Obed Dzikunu, Shadab Ahamed, Nicolas Karakatsanis, Sara Kurkowska, Peyman Sheikhzadeh, Pedro Esquinas, Arman Rahmim, and Carlos Uribe.** *PyTomography: A python library for medical image reconstruction.* SoftwareX, Volume 29, 2025, Page 102020. https://www.sciencedirect.com/science/article/pii/S235271102400390X
55
+
50
56
  # License
51
57
  This work is licensed under an MIT license, as is found in the LICENSE file.
52
58
 
@@ -7,9 +7,14 @@
7
7
  ![Stars](https://img.shields.io/github/stars/qurit/PyTomography)
8
8
  ![Issues](https://img.shields.io/github/issues/qurit/PyTomography)
9
9
 
10
- ## How to get started?
10
+ # Getting Started
11
11
  We have prepared a very detailed documentation guide available at [readthedocs](https://pytomography.readthedocs.io/en/latest/). If you have any additional questions, please ask them on the [discourse website](https://pytomography.discourse.group/).
12
12
 
13
+ # Research Paper
14
+ If you use PyTomography in your own research, please cite the corresponding research paper:
15
+
16
+ **Lucas A. Polson, Roberto Fedrigo, Chenguang Li, Maziar Sabouri, Obed Dzikunu, Shadab Ahamed, Nicolas Karakatsanis, Sara Kurkowska, Peyman Sheikhzadeh, Pedro Esquinas, Arman Rahmim, and Carlos Uribe.** *PyTomography: A python library for medical image reconstruction.* SoftwareX, Volume 29, 2025, Page 102020. https://www.sciencedirect.com/science/article/pii/S235271102400390X
17
+
13
18
  # License
14
19
  This work is licensed under an MIT license, as is found in the LICENSE file.
15
20
 
@@ -7,7 +7,7 @@ PyTomography
7
7
  ``PyTomography`` is a python library for tomographic reconstruction of medical imaging data. It provides a modularized framework for the construction and development of system matrices, likelihoods, and reconstruction algorithms.
8
8
 
9
9
  .. note::
10
- If you use PyTomography in your research, please cite `the corresponding research paper <https://arxiv.org/abs/2309.01977>`_.
10
+ If you use PyTomography in your research, please cite `the corresponding research paper <https://www.sciencedirect.com/science/article/pii/S235271102400390X>`_.
11
11
 
12
12
  ++++++++++++++++
13
13
  Getting Started
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pytomography"
7
- version = "3.3.0"
7
+ version = "3.3.2"
8
8
 
9
9
 
10
10
  authors = [
@@ -341,6 +341,9 @@ Energy,CT Energy,Model Name,Lower Coeff,Lower Constant,Upper Coeff,Upper Constan
341
341
  208,130,symbia t16,0.00014376,0.1352,0.00008787,0.1352
342
342
  208,140,infinia,0.00014328,0.1352,0.00009303,0.1352
343
343
  208,140,optima ct540,0.00014541,0.1352,0.00009102,0.1352
344
+ 218,80,symbia t2,0.00013308,0.1332,0.000061528,0.1332
345
+ 218,110,symbia t2,0.00013308,0.1332,0.000078047,0.1332
346
+ 218,130,symbia t2,0.00013308,0.1332,0.000086981,0.1332
344
347
  245,80,symbia intevo 16,0.00013481,0.1277,0.00005667,0.1277
345
348
  245,80,symbia t6,0.00013481,0.1277,0.00005667,0.1277
346
349
  245,80,symbia intevo 2,0.00013481,0.1277,0.00005667,0.1277
@@ -419,3 +422,6 @@ Energy,CT Energy,Model Name,Lower Coeff,Lower Constant,Upper Coeff,Upper Constan
419
422
  364,130,symbia t2,0.00011703,0.1102,0.00006868,0.1102
420
423
  364,140,infinia,0.00011679,0.1102,0.00007274,0.1102
421
424
  364,140,optima ct540,0.00011852,0.1102,0.00007117,0.1102
425
+ 440,80,symbia t2,0.00010195,0.10206,0.00004447,0.10206
426
+ 440,110,symbia t2,0.00010195,0.10206,0.00005641,0.10206
427
+ 440,130,symbia t2,0.00010195,0.10206,0.00006287,0.10206
@@ -79,14 +79,17 @@ def parse_projection_dataset(
79
79
  angles = np.concatenate(
80
80
  [angles, start_angle - delta_angle * np.arange(n_angles)]
81
81
  )
82
- try:
83
- radial_positions_detector = ds.DetectorInformationSequence[
84
- detector - 1
85
- ].RadialPosition
86
- except AttributeError:
87
- radial_positions_detector = ds.RotationInformationSequence[
88
- detector - 1
89
- ].RadialPosition
82
+ if ds.Manufacturer=='Mediso':
83
+ radial_positions_detector = ds.RotationInformationSequence[detector - 1].RadialPosition
84
+ else:
85
+ try:
86
+ radial_positions_detector = ds.DetectorInformationSequence[
87
+ detector - 1
88
+ ].RadialPosition
89
+ except AttributeError:
90
+ radial_positions_detector = ds.RotationInformationSequence[
91
+ detector - 1
92
+ ].RadialPosition
90
93
  if not isinstance(radial_positions_detector, collections.abc.Sequence):
91
94
  radial_positions_detector = n_angles * [radial_positions_detector]
92
95
  radii = np.concatenate([radii, radial_positions_detector])
@@ -539,8 +542,11 @@ def _get_affine_spect_projections(filename: str) -> np.array:
539
542
  dz = float(ds.PixelSpacing[1])
540
543
  if Sy == 0:
541
544
  Sx -= (ds.Rows-1) / 2 * dx
542
- Sy -= (ds.Rows-2) / 2 * dy
545
+ Sy -= (ds.Rows-1) / 2 * dy
543
546
  Sy -= ds.RotationInformationSequence[0].TableHeight
547
+ elif ds.Manufacturer=='Mediso':
548
+ Sy = -(ds.Rows-1) / 2 * dy
549
+ #Sy = Sx
544
550
  Sz -= (ds.Rows-1) * dz # location of bottom pixel
545
551
  # Difference between Siemens and GE
546
552
  # if ds.Manufacturer=='GE MEDICAL SYSTEMS':
@@ -29,6 +29,12 @@ def _get_affine_multifile(files: Sequence[str]):
29
29
  Zxyz = np.cross(Xxyz, Yxyz)
30
30
  Sx, Sy = ds.ImagePositionPatient[:2]
31
31
  Sz = compute_min_slice_loc_multifile(files)
32
+ # Adjust by table height for Mediso
33
+ try:
34
+ if ds.Manufacturer=='Mediso':
35
+ Sy = Sy - ds.TableHeight
36
+ except:
37
+ pass
32
38
  M = np.zeros((4, 4))
33
39
  M[0] = np.array([dx*Xxyz[0], dy*Yxyz[0], dz*Zxyz[0], Sx])
34
40
  M[1] = np.array([dx*Xxyz[1], dy*Yxyz[1], dz*Zxyz[1], Sy])
@@ -49,8 +49,8 @@ class SPECTSystemMatrix(SystemMatrix):
49
49
  continue
50
50
  img_cutoff = torch.ones(self.object_meta.shape).to(device)
51
51
  img_cutoff[:cutoff_idx, :, :] = 0
52
- img_cutoff = pad_object(img_cutoff, mode='replicate')
53
- img_cutoff = rotate_detector_z(img_cutoff, -self.proj_meta.angles[i])
52
+ img_cutoff = pad_object(img_cutoff)
53
+ img_cutoff = self.rotation_transform.backward(img_cutoff, 270-self.proj_meta.angles[i])
54
54
  img_cutoff = unpad_object(img_cutoff)
55
55
  object_initial *= img_cutoff
56
56
  return object_initial
@@ -204,13 +204,6 @@ def add_together(n_parallel: int, n_windows: int, temp_path: str):
204
204
  # REMOVE THESE LATER >
205
205
  subprocess.run(['mv', f'temp_output0_tot_w{i+1}.h00', f'tot_w{i+1}.h00'], cwd=temp_path)
206
206
  subprocess.run(['sed', '-i', f's/temp_output0_tot_w{i+1}.a00/tot_w{i+1}.a00/g', f'tot_w{i+1}.h00'], cwd=temp_path)
207
- # TODO: REMOVE THESE
208
- # ---------------
209
- # ---------------
210
- # ---------------
211
- subprocess.run(['cp', f'temp_output0.hct', f'/disk1/er165/lu177_SYME_jaszak_lowres/temp_output0.hct'], cwd=temp_path)
212
- subprocess.run(['cp', f'temp_output0.ict', f'/disk1/er165/lu177_SYME_jaszak_lowres/temp_output0.ict'], cwd=temp_path)
213
- subprocess.run(['cp', f'temp_output0.res', f'/disk1/er165/lu177_SYME_jaszak_lowres/temp_output0.res'], cwd=temp_path)
214
207
 
215
208
  def run_scatter_simulation(
216
209
  source_map: torch.Tensor,
@@ -255,12 +248,16 @@ def run_scatter_simulation(
255
248
  # Move simind.smc and energy_resolution.erf to TEMP directory
256
249
  module_path = os.path.dirname(os.path.abspath(__file__))
257
250
  smc_filepath = os.path.join(module_path, "../data/simind.smc")
258
- subprocess.Popen(['cp', smc_filepath, f'{temp_dir.name}/simind.smc'])
251
+ p = subprocess.Popen(['cp', smc_filepath, f'{temp_dir.name}/simind.smc'])
252
+ p.wait() # wait for copy to complete
259
253
  # Create simind commands and run simind in parallel
260
254
  simind_commands = [create_simind_command(simind_index_dict, i) for i in range(n_parallel)]
261
- procs = [subprocess.Popen([f'simind', 'simind', simind_command, 'radii_corfile.cor'], stdout=subprocess.DEVNULL, cwd=temp_dir.name) for simind_command in simind_commands]
255
+ procs = [subprocess.Popen([f'simind', 'simind', simind_command, 'radii_corfile.cor'], stdout=subprocess.DEVNULL, stderr=subprocess.PIPE, cwd=temp_dir.name) for simind_command in simind_commands]
262
256
  for p in procs:
263
257
  p.wait()
258
+ if p.returncode != 0: # Check if the process exited with an error
259
+ error_output = p.stderr.read().decode('utf-8')
260
+ print(f"Error in process {p.args}:\n{error_output}")
264
261
  time.sleep(0.1) # sometimes the last file is not written yet
265
262
  # Add together projection data from all seperate processes
266
263
  add_together(n_parallel, len(primary_window_idxs), temp_dir.name)
@@ -270,7 +267,7 @@ def run_scatter_simulation(
270
267
  temp_dir.cleanup()
271
268
  # Return data
272
269
  if return_total:
273
- return proj_simind_scatter, proj_simind_tot
270
+ return proj_simind_tot
274
271
  else:
275
272
  return proj_simind_scatter
276
273
 
@@ -309,6 +306,8 @@ class MonteCarloScatterCallback(Callback):
309
306
  final_iter: int = np.inf, # when to stop updating scatter
310
307
  post_smoothing_sigma_r: float = 0,
311
308
  post_smoothing_sigma_z: float = 0,
309
+ return_total: bool = False,
310
+ add_to_additive_term: bool = False
312
311
  ):
313
312
  self.likelihood = likelihood
314
313
  self.object_initial = object_initial
@@ -324,6 +323,8 @@ class MonteCarloScatterCallback(Callback):
324
323
  self.final_iter = final_iter
325
324
  self.post_smoothing_sigma_r = post_smoothing_sigma_r
326
325
  self.post_smoothing_sigma_z = post_smoothing_sigma_z
326
+ self.add_to_additive_term = add_to_additive_term
327
+ self.return_total = return_total
327
328
  self.run_scatter_simulation(object_initial)
328
329
 
329
330
  def run_scatter_simulation(self, object: torch.Tensor):
@@ -342,6 +343,7 @@ class MonteCarloScatterCallback(Callback):
342
343
  simind_index_dict = self.index_dict,
343
344
  n_events = self.n_events,
344
345
  n_parallel = self.n_parallel,
346
+ return_total = self.return_total
345
347
  ) / self.calibration_factor * object.sum()
346
348
  # Smooth scatter if sigmas are given
347
349
  self.scatter_MC = get_smoothed_scatter(
@@ -351,7 +353,10 @@ class MonteCarloScatterCallback(Callback):
351
353
  sigma_z = self.post_smoothing_sigma_z
352
354
  )
353
355
  # Update likelihood
354
- self.likelihood.additive_term = self.scatter_MC
356
+ if self.add_to_additive_term:
357
+ self.likelihood.additive_term += self.scatter_MC
358
+ else:
359
+ self.likelihood.additive_term = self.scatter_MC
355
360
  #print(f'Object sum: {object.sum().item()}')
356
361
  #print(f'Scatter sum: {self.scatter_MC.sum().item()}')
357
362
  #print('-----------------------------------')
File without changes
File without changes
File without changes
File without changes