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.
- {pytomography-3.3.0 → pytomography-3.3.2}/PKG-INFO +9 -3
- {pytomography-3.3.0 → pytomography-3.3.2}/README.md +6 -1
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/index.rst +1 -1
- {pytomography-3.3.0 → pytomography-3.3.2}/pyproject.toml +1 -1
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/ct_table.csv +6 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/dicom.py +15 -9
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/shared/dicom.py +6 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/SPECT/spect_system_matrix.py +2 -2
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/simind_mc.py +16 -11
- {pytomography-3.3.0 → pytomography-3.3.2}/.github/workflows/publish-to-test-pypi.yml +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/.gitignore +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/.readthedocs.yaml +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/LICENSE +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/Makefile +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/make.bat +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/_static/code_toggle.js +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/_static/css/code_toggle.css +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/_static/css/custom.css +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/conf.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/data_tables/collimator_data.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/developers_guide.md +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/external_data.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/gallery.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/CT_slice.png +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/PT1.png +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/ac225_patient_dual.jpg +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/coordinate_conventions.png +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/emission.png +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/example_scanner_sm.png +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/figure2.jpg +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/figure4.jpg +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/figure4_left_hoz.jpg +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/figure5.jpg +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/images/pytomo_front_title.png +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/index2.md +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/install.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/CT_slice.png +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/conventions.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/p_simind_multiorgan.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/p_subsample_data.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/run_all_notebooks.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/script_to_generate_eta_for_petsird.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_CT_GEN3.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_CT_microct.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_CardiacReorientation.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_GE_HDF5.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_DIP.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_LM.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_SINO.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_lm.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_lmTOF.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_sino.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_sinoTOF.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETSIRD.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_ac225_dicom_recon.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_ac225_simind_recon.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_algorithms.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_dicom_algorithms.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_dicomdata.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_dicommultibed.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_dualpeak.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_examplesystemmatrix.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_fbp.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_plotting.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_quantitative.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_siminddata.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_siminddata_multiorgan.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_spect_mc.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_spect_mc2.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_starguide.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_uncertainty_spect.ipynb +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage_ct.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage_dev.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage_pet.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/docs/source/usage/usage_spect.rst +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/algorithms/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/algorithms/dip_recon.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/algorithms/fbp.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/algorithms/preconditioned_gradient_ascent.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/callbacks/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/callbacks/callback.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/callbacks/data_saving.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/adipose.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/air.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/aluminum.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/bonecortical.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/boneequivplastic.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/breast.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/lead.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/lungtissue.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/muscle.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/tissueequivplastic.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/tungsten.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/water.csv +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/collim.col +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/pet_colors.txt +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/pet_scanner_info.txt +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/simind.smc +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/CT/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/CT/dicom_ct_pd.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/clinical.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/gate.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/petsird.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/_binary.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/_dtypes.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/_ndjson.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/binary.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/ndjson.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/protocols.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/types.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/prd/yardl_types.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/PET/shared.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/attenuation_map.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/shared.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/SPECT/simind.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/shared/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/shared/dicom_creation.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/io/shared/interfile.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/likelihood.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/mse_objective.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/poisson_log_likelihood.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/CT/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/CT/ct_conebeam_flatpanel_metadata.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/CT/ct_gen3_metadata.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/pet_sinogram_metadata.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/pet_tof_metadata.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/petlm_metadata.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/SPECT/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/SPECT/spect_metadata.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/SPECT/starguide_metadata.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/metadata.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/priors/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/priors/nearest_neighbour.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/priors/prior.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/CT/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/CT/ct_conebeam_flatpanel_system_matrix.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/CT/ct_gen3_system_matrix.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/PET/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/PET/pet_sinogram_system_matrix.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/PET/petlm_system_matrix.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/SPECT/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/SPECT/starguide_system_matrix.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/shared/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/shared/kem_system_matrix.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/shared/motion_correction_system_matrix.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/system_matrix.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/tests/test_multi_bed_recon.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/SPECT/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/SPECT/attenuation.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/SPECT/cutoff.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/SPECT/psf.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/filters.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/kem.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/motion.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/shared/spatial.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/transforms/transform.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/__init__.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/cardiac_spect.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/fourier_filters.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/misc.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/nist_data.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/plot_utils.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/scatter.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/spatial.py +0 -0
- {pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/utils/sss.py +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pytomography
|
|
3
|
-
Version: 3.3.
|
|
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
|

|
|
45
46
|

|
|
46
47
|
|
|
47
|
-
|
|
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
|

|
|
8
8
|

|
|
9
9
|
|
|
10
|
-
|
|
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://
|
|
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
|
|
@@ -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
|
-
|
|
83
|
-
radial_positions_detector = ds.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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-
|
|
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])
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/SPECT/spect_system_matrix.py
RENAMED
|
@@ -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
|
|
53
|
-
img_cutoff =
|
|
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
|
|
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
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_CardiacReorientation.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_PETGATE_scat_sinoTOF.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/docs/source/notebooks/t_siminddata_multiorgan.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/adipose.csv
RENAMED
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/air.csv
RENAMED
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/aluminum.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/breast.csv
RENAMED
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/lead.csv
RENAMED
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/lungtissue.csv
RENAMED
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/muscle.csv
RENAMED
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/tungsten.csv
RENAMED
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/data/NIST_attenuation_data/water.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/likelihoods/poisson_log_likelihood.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/PET/pet_sinogram_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/metadata/SPECT/starguide_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/CT/ct_gen3_system_matrix.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/PET/petlm_system_matrix.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytomography-3.3.0 → pytomography-3.3.2}/src/pytomography/projectors/shared/kem_system_matrix.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|