imagedata 3.7.2.dev1__tar.gz → 3.8.0__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 (300) hide show
  1. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/CHANGELOG.md +76 -1
  2. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/PKG-INFO +3 -2
  3. imagedata-3.8.0/VERSION.txt +1 -0
  4. imagedata-3.8.0/data/dicom/5D.zip +0 -0
  5. imagedata-3.8.0/data/dicom/6D_TE_TIME_FA.zip +0 -0
  6. imagedata-3.8.0/data/dicom/RSI_6D.zip +0 -0
  7. imagedata-3.8.0/data/dicom/ep2d_RSI_b0_500_1500_6dir.zip +0 -0
  8. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Options.rst +5 -0
  9. imagedata-3.8.0/docs/Sorting.rst +129 -0
  10. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/apps/Siemens/evidence2mask.py +25 -3
  11. imagedata-3.8.0/src/imagedata/apps/diffusion.py +410 -0
  12. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/archives/zipfilearchive.py +8 -2
  13. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/axis.py +13 -2
  14. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/cmdline.py +4 -7
  15. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/collection.py +3 -0
  16. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/formats/__init__.py +5 -58
  17. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/formats/dicomplugin.py +602 -254
  18. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/formats/itkplugin.py +8 -9
  19. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/formats/matplugin.py +8 -10
  20. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/formats/niftiplugin.py +9 -10
  21. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/header.py +78 -40
  22. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/image_data.py +3 -3
  23. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/readdata.py +7 -3
  24. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/series.py +70 -53
  25. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/transports/xnattransport.py +4 -1
  26. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/viewer.py +4 -1
  27. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata.egg-info/PKG-INFO +3 -2
  28. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata.egg-info/SOURCES.txt +4 -0
  29. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/compare_headers.py +52 -0
  30. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_dicom.py +189 -12
  31. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_dicom_color.py +1 -1
  32. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_dicom_template.py +12 -7
  33. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_series.py +25 -3
  34. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_series_ufunc.py +4 -1
  35. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_transport_filetransport.py +1 -1
  36. imagedata-3.7.2.dev1/VERSION.txt +0 -1
  37. imagedata-3.7.2.dev1/docs/Sorting.rst +0 -47
  38. imagedata-3.7.2.dev1/src/imagedata/apps/diffusion.py +0 -161
  39. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/.readthedocs.yaml +0 -0
  40. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/.travis.yml +0 -0
  41. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/CONTRIBUTING.rst +0 -0
  42. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/LICENSE.txt +0 -0
  43. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/MANIFEST.in +0 -0
  44. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/Makefile +0 -0
  45. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/README.rst +0 -0
  46. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/TI/TI_1.MR.0021.0001.2021.06.08.10.04.29.806302.203193459.IMA +0 -0
  47. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/TI/TI_1.MR.0022.0001.2021.06.08.10.04.29.806302.203195509.IMA +0 -0
  48. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/TI/TI_1.MR.0023.0001.2021.06.08.10.04.29.806302.203197559.IMA +0 -0
  49. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/TI/TI_1.MR.0024.0001.2021.06.08.10.04.29.806302.203199609.IMA +0 -0
  50. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/TI/TI_1.MR.0025.0001.2021.06.08.10.04.29.806302.203201659.IMA +0 -0
  51. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/cohort.zip +0 -0
  52. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/cor_hf.zip +0 -0
  53. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/cor_oblique.zip +0 -0
  54. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/cor_rl.zip +0 -0
  55. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0001.2019.02.07.14.42.45.461288.172175570.IMA +0 -0
  56. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0002.2019.02.07.14.42.45.461288.172174503.IMA +0 -0
  57. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0003.2019.02.07.14.42.45.461288.172175624.IMA +0 -0
  58. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0004.2019.02.07.14.42.45.461288.172174557.IMA +0 -0
  59. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0005.2019.02.07.14.42.45.461288.172175678.IMA +0 -0
  60. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0006.2019.02.07.14.42.45.461288.172174611.IMA +0 -0
  61. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0007.2019.02.07.14.42.45.461288.172175732.IMA +0 -0
  62. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0008.2019.02.07.14.42.45.461288.172174665.IMA +0 -0
  63. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0009.2019.02.07.14.42.45.461288.172175786.IMA +0 -0
  64. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0010.2019.02.07.14.42.45.461288.172174719.IMA +0 -0
  65. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0011.2019.02.07.14.42.45.461288.172175840.IMA +0 -0
  66. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0012.2019.02.07.14.42.45.461288.172174773.IMA +0 -0
  67. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0013.2019.02.07.14.42.45.461288.172175894.IMA +0 -0
  68. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0014.2019.02.07.14.42.45.461288.172174827.IMA +0 -0
  69. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0015.2019.02.07.14.42.45.461288.172175948.IMA +0 -0
  70. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0016.2019.02.07.14.42.45.461288.172174881.IMA +0 -0
  71. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0017.2019.02.07.14.42.45.461288.172176002.IMA +0 -0
  72. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0018.2019.02.07.14.42.45.461288.172174935.IMA +0 -0
  73. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0019.2019.02.07.14.42.45.461288.172176056.IMA +0 -0
  74. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0020.2019.02.07.14.42.45.461288.172174989.IMA +0 -0
  75. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0021.2019.02.07.14.42.45.461288.172176110.IMA +0 -0
  76. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0022.2019.02.07.14.42.45.461288.172175043.IMA +0 -0
  77. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0023.2019.02.07.14.42.45.461288.172176164.IMA +0 -0
  78. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0024.2019.02.07.14.42.45.461288.172175097.IMA +0 -0
  79. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0025.2019.02.07.14.42.45.461288.172176218.IMA +0 -0
  80. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0026.2019.02.07.14.42.45.461288.172175151.IMA +0 -0
  81. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0027.2019.02.07.14.42.45.461288.172176272.IMA +0 -0
  82. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0028.2019.02.07.14.42.45.461288.172175205.IMA +0 -0
  83. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0029.2019.02.07.14.42.45.461288.172176326.IMA +0 -0
  84. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0030.2019.02.07.14.42.45.461288.172175516.IMA +0 -0
  85. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0031.2019.02.07.14.42.45.461288.172175588.IMA +0 -0
  86. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0032.2019.02.07.14.42.45.461288.172174521.IMA +0 -0
  87. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0033.2019.02.07.14.42.45.461288.172175642.IMA +0 -0
  88. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0034.2019.02.07.14.42.45.461288.172174575.IMA +0 -0
  89. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0035.2019.02.07.14.42.45.461288.172175696.IMA +0 -0
  90. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0036.2019.02.07.14.42.45.461288.172174629.IMA +0 -0
  91. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0037.2019.02.07.14.42.45.461288.172175750.IMA +0 -0
  92. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0038.2019.02.07.14.42.45.461288.172174683.IMA +0 -0
  93. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0039.2019.02.07.14.42.45.461288.172175804.IMA +0 -0
  94. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0040.2019.02.07.14.42.45.461288.172174737.IMA +0 -0
  95. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0041.2019.02.07.14.42.45.461288.172175858.IMA +0 -0
  96. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0042.2019.02.07.14.42.45.461288.172174791.IMA +0 -0
  97. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0043.2019.02.07.14.42.45.461288.172175912.IMA +0 -0
  98. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0044.2019.02.07.14.42.45.461288.172174845.IMA +0 -0
  99. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0045.2019.02.07.14.42.45.461288.172175966.IMA +0 -0
  100. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0046.2019.02.07.14.42.45.461288.172174899.IMA +0 -0
  101. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0047.2019.02.07.14.42.45.461288.172176020.IMA +0 -0
  102. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0048.2019.02.07.14.42.45.461288.172174953.IMA +0 -0
  103. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0049.2019.02.07.14.42.45.461288.172176074.IMA +0 -0
  104. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0050.2019.02.07.14.42.45.461288.172175007.IMA +0 -0
  105. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0051.2019.02.07.14.42.45.461288.172176128.IMA +0 -0
  106. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0052.2019.02.07.14.42.45.461288.172175061.IMA +0 -0
  107. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0053.2019.02.07.14.42.45.461288.172176182.IMA +0 -0
  108. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0054.2019.02.07.14.42.45.461288.172175115.IMA +0 -0
  109. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0055.2019.02.07.14.42.45.461288.172176236.IMA +0 -0
  110. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0056.2019.02.07.14.42.45.461288.172175169.IMA +0 -0
  111. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0057.2019.02.07.14.42.45.461288.172176290.IMA +0 -0
  112. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0058.2019.02.07.14.42.45.461288.172175480.IMA +0 -0
  113. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0059.2019.02.07.14.42.45.461288.172176344.IMA +0 -0
  114. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0060.2019.02.07.14.42.45.461288.172175534.IMA +0 -0
  115. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0061.2019.02.07.14.42.45.461288.172175606.IMA +0 -0
  116. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0062.2019.02.07.14.42.45.461288.172174539.IMA +0 -0
  117. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0063.2019.02.07.14.42.45.461288.172175660.IMA +0 -0
  118. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0064.2019.02.07.14.42.45.461288.172174593.IMA +0 -0
  119. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0065.2019.02.07.14.42.45.461288.172175714.IMA +0 -0
  120. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0066.2019.02.07.14.42.45.461288.172174647.IMA +0 -0
  121. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0067.2019.02.07.14.42.45.461288.172175768.IMA +0 -0
  122. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0068.2019.02.07.14.42.45.461288.172174701.IMA +0 -0
  123. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0069.2019.02.07.14.42.45.461288.172175822.IMA +0 -0
  124. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0070.2019.02.07.14.42.45.461288.172174755.IMA +0 -0
  125. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0071.2019.02.07.14.42.45.461288.172175876.IMA +0 -0
  126. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0072.2019.02.07.14.42.45.461288.172174809.IMA +0 -0
  127. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0073.2019.02.07.14.42.45.461288.172175930.IMA +0 -0
  128. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0074.2019.02.07.14.42.45.461288.172174863.IMA +0 -0
  129. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0075.2019.02.07.14.42.45.461288.172175984.IMA +0 -0
  130. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0076.2019.02.07.14.42.45.461288.172174917.IMA +0 -0
  131. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0077.2019.02.07.14.42.45.461288.172176038.IMA +0 -0
  132. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0078.2019.02.07.14.42.45.461288.172174971.IMA +0 -0
  133. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0079.2019.02.07.14.42.45.461288.172176092.IMA +0 -0
  134. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0080.2019.02.07.14.42.45.461288.172175025.IMA +0 -0
  135. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0081.2019.02.07.14.42.45.461288.172176146.IMA +0 -0
  136. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0082.2019.02.07.14.42.45.461288.172175079.IMA +0 -0
  137. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0083.2019.02.07.14.42.45.461288.172176200.IMA +0 -0
  138. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0084.2019.02.07.14.42.45.461288.172175133.IMA +0 -0
  139. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0085.2019.02.07.14.42.45.461288.172176254.IMA +0 -0
  140. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0086.2019.02.07.14.42.45.461288.172175187.IMA +0 -0
  141. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0087.2019.02.07.14.42.45.461288.172176308.IMA +0 -0
  142. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0088.2019.02.07.14.42.45.461288.172175498.IMA +0 -0
  143. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0089.2019.02.07.14.42.45.461288.172176362.IMA +0 -0
  144. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0090.2019.02.07.14.42.45.461288.172175552.IMA +0 -0
  145. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/lena_color.dcm +0 -0
  146. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/sag_ap.zip +0 -0
  147. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/sag_hf.zip +0 -0
  148. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/sag_oblique.zip +0 -0
  149. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/srdoc103.zip +0 -0
  150. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time00/Image_00019.dcm +0 -0
  151. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time00/Image_00020.dcm +0 -0
  152. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time00/Image_00021.dcm +0 -0
  153. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time01/Image_00019.dcm +0 -0
  154. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time01/Image_00020.dcm +0 -0
  155. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time01/Image_00021.dcm +0 -0
  156. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time02/Image_00019.dcm +0 -0
  157. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time02/Image_00020.dcm +0 -0
  158. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time/time02/Image_00021.dcm +0 -0
  159. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time.zip +0 -0
  160. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00000.dcm +0 -0
  161. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00001.dcm +0 -0
  162. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00002.dcm +0 -0
  163. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00003.dcm +0 -0
  164. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00004.dcm +0 -0
  165. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00005.dcm +0 -0
  166. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00006.dcm +0 -0
  167. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00007.dcm +0 -0
  168. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/time_all/Image_00008.dcm +0 -0
  169. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/tra_oblique.zip +0 -0
  170. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/dicom/tra_rl.zip +0 -0
  171. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/itk/time/Image_00000.mha +0 -0
  172. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/itk/time/Image_00001.mha +0 -0
  173. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/itk/time/Image_00002.mha +0 -0
  174. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/itk/time.zip +0 -0
  175. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/lena_color.gif +0 -0
  176. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/lena_color.jpg +0 -0
  177. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/mat/time/Image_00000.mat +0 -0
  178. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/mat/time.zip +0 -0
  179. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/cor_hf.nii.gz +0 -0
  180. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/cor_oblique.nii.gz +0 -0
  181. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/cor_rl.nii.gz +0 -0
  182. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/sag_ap.nii.gz +0 -0
  183. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/sag_hf.nii.gz +0 -0
  184. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/sag_oblique.nii.gz +0 -0
  185. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/time/time_all_fl3d_dynamic_20190207140517_14.json +0 -0
  186. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/time/time_all_fl3d_dynamic_20190207140517_14.nii.gz +0 -0
  187. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/time_all/time_all_fl3d_dynamic_20190207140517_14.json +0 -0
  188. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/time_all/time_all_fl3d_dynamic_20190207140517_14.nii.gz +0 -0
  189. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/time_all.zip +0 -0
  190. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/tra_oblique.nii.gz +0 -0
  191. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/nifti/tra_rl.nii.gz +0 -0
  192. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/pdf/A_Lovers_Complaint.pdf +0 -0
  193. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/pdf/pages/A_Lovers_Complaint_1.pdf +0 -0
  194. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/pdf/pages/A_Lovers_Complaint_2.pdf +0 -0
  195. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/pdf/pages/A_Lovers_Complaint_3.pdf +0 -0
  196. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/pdf/pages/A_Lovers_Complaint_4.pdf +0 -0
  197. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/pdf/pages/A_Lovers_Complaint_5.pdf +0 -0
  198. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/pdf/pages/A_Lovers_Complaint_6.pdf +0 -0
  199. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/text.txt +0 -0
  200. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/tree/file0 +0 -0
  201. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/tree/file1 +0 -0
  202. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/tree/file2 +0 -0
  203. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/vertices/vertices2d.pickle +0 -0
  204. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/vertices/vertices3d.pickle +0 -0
  205. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/data/vertices/vertices4d.pickle +0 -0
  206. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReference.rst +0 -0
  207. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceApps.rst +0 -0
  208. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceAppsDiffusion.rst +0 -0
  209. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceArchives.rst +0 -0
  210. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceCollections.rst +0 -0
  211. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceFormats.rst +0 -0
  212. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceImagedata.rst +0 -0
  213. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceSeries.rst +0 -0
  214. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceTransports.rst +0 -0
  215. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/APIReferenceViewer.rst +0 -0
  216. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Collections.rst +0 -0
  217. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Colors.rst +0 -0
  218. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/CommandLine.rst +0 -0
  219. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/DICOMAttributes.rst +0 -0
  220. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/DeveloperDocumentation.rst +0 -0
  221. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Examples.rst +0 -0
  222. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Figure_Architecture.png +0 -0
  223. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Input_output.rst +0 -0
  224. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Installation.rst +0 -0
  225. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Introduction.rst +0 -0
  226. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Makefile +0 -0
  227. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Non_image_dicom_objects.rst +0 -0
  228. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Notebook.rst +0 -0
  229. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Plugin_Architecture.docx +0 -0
  230. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Plugin_Architecture.png +0 -0
  231. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Plugins.rst +0 -0
  232. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/README +0 -0
  233. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Tutorial.rst +0 -0
  234. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/UserGuide.rst +0 -0
  235. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/Viewing.rst +0 -0
  236. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/conf.py +0 -0
  237. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/fuse_mask_blend.png +0 -0
  238. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/index.rst +0 -0
  239. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/make.bat +0 -0
  240. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/requirements.txt +0 -0
  241. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/modules.rst +0 -0
  242. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/setup.rst +0 -0
  243. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/src.imagedata.apps.Siemens.rst +0 -0
  244. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/src.imagedata.apps.rst +0 -0
  245. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/src.imagedata.archives.rst +0 -0
  246. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/src.imagedata.formats.dicomlib.rst +0 -0
  247. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/src.imagedata.formats.rst +0 -0
  248. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/src.imagedata.rst +0 -0
  249. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/src.imagedata.transports.rst +0 -0
  250. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/src.rst +0 -0
  251. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/source/tests.rst +0 -0
  252. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/docs/transformation.tex +0 -0
  253. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/paper.bib +0 -0
  254. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/paper.md +0 -0
  255. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/pylintrc +0 -0
  256. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/pyproject.toml +0 -0
  257. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/setup.cfg +0 -0
  258. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/__init__.py +0 -0
  259. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/__init__.py +0 -0
  260. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/apps/Siemens/ROI.py +0 -0
  261. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/apps/Siemens/__init__.py +0 -0
  262. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/apps/Siemens/draw_antialiased.py +0 -0
  263. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/apps/Siemens/evidence_main.py +0 -0
  264. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/apps/__init__.py +0 -0
  265. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/archives/__init__.py +0 -0
  266. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/archives/abstractarchive.py +0 -0
  267. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/archives/filesystemarchive.py +0 -0
  268. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/formats/abstractplugin.py +0 -0
  269. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/formats/dicomlib/__init__.py +0 -0
  270. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/formats/dicomlib/uid.py +0 -0
  271. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/list_plugins.py +0 -0
  272. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/transports/__init__.py +0 -0
  273. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/transports/abstracttransport.py +0 -0
  274. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/transports/dicomtransport.py +0 -0
  275. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata/transports/filetransport.py +0 -0
  276. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata.egg-info/dependency_links.txt +0 -0
  277. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata.egg-info/entry_points.txt +0 -0
  278. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata.egg-info/requires.txt +0 -0
  279. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/src/imagedata.egg-info/top_level.txt +0 -0
  280. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/techstack.md +0 -0
  281. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/techstack.yml +0 -0
  282. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/__init__.py +0 -0
  283. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/context.py +0 -0
  284. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_archive_file.py +0 -0
  285. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_archive_zip.py +0 -0
  286. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_axis.py +0 -0
  287. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_collections.py +0 -0
  288. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_dicom_zip.py +0 -0
  289. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_itk.py +0 -0
  290. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_itk_template.py +0 -0
  291. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_itk_zip.py +0 -0
  292. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_mat.py +0 -0
  293. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_mat_zip.py +0 -0
  294. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_nifti.py +0 -0
  295. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_formats_nifti_zip.py +0 -0
  296. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_transport_dicomtransport.py +0 -0
  297. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_transport_xnattransport.py +0 -0
  298. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_version.py +0 -0
  299. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tests/test_viewer.py +0 -0
  300. {imagedata-3.7.2.dev1 → imagedata-3.8.0}/tox.ini +0 -0
@@ -7,7 +7,82 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!--next-version-placeholder-->
9
9
 
10
- ## [v3.7.2-dev1] - 2024-10-23
10
+ ## [v3.8.0] - 2025-04-28
11
+ ### Added
12
+ * Novel sorting routine for n-dimensional DICOM datasets.
13
+ * Allow user-defined sorting criteria, and overriding default sorting.
14
+ * Sort on Trigger Time also.
15
+ * Added code to sort series on diffusion gradient direction (b-vector),
16
+ and specifically diffusion RSI data.
17
+
18
+ ### Changed
19
+ * Image tags property (tags) is now a multi-dimensional array when the image dimension > 4.
20
+ In this case the image tags will be tuples.
21
+ * diffusion.py: Added code to get diffusion b value from Siemens E11 format.
22
+ * Patient class: Limit the strict check of patient attributes to
23
+ patientName, patientID, patientBirthDate
24
+ and patientSex.
25
+ * Series.__getitem__(): Accept tuple slicing specification, like ((2,),(2,),(2,)).
26
+ * Improved some test suites to run better on Windows.
27
+
28
+ ### Fixed
29
+ * Corrected parsing windows UNC path names with leading double slash.
30
+ * ZipFileArchive: Windows: Do not complain when temporary local file cannot be removed.
31
+ * XnatTransport.open(): Corrected scan search to search for series description,
32
+ not series number.
33
+ * Viewer.viewport_set(): Fixed error where the viewport did not include the last image.
34
+ * evidence2roi: Do not raise exception for unknown roi type. Log a warning instead.
35
+
36
+ ## [v3.8.0-rc3] - 2025-04-28
37
+ * Added sort on TriggerTime
38
+
39
+ ## [v3.8.0-rc2] - 2025-04-23
40
+ * Allow user-defined sorting criteria, and overriding default sorting.
41
+
42
+ ## [v3.8.0-rc1] - 2025-04-11
43
+ * Novel sorting routine for n-dimensional DICOM datasets.
44
+
45
+ ## [v3.7.3-dev8] - 2025-03-07
46
+ * Corrected parsing windows UNC path names with leading double slash.
47
+
48
+ ## [v3.7.3-dev7] - 2025-03-07
49
+ * ZipFileArchive: Windows: Do not complain when temporary local file cannot be removed.
50
+ * Improved some test suites to run better on Windows.
51
+
52
+ ## [v3.7.3-rc0] - 2025-01-06
53
+ * Release candidate 3.7.3-rc0
54
+
55
+ ## [v3.7.3-dev6] - 2024-12-13
56
+ * Series.__getitem__(): Accept tuple slicing specification, like ((2,),(2,),(2,)).
57
+
58
+ ## [v3.7.3-dev5] - 2024-12-12
59
+ * Patient class: Limit the strict check of patient attributes to
60
+ patientName, patientID, patientBirthDate
61
+ and patientSex.
62
+
63
+ ## [v3.7.3-dev4] - 2024-12-04
64
+ * evidence2roi: Do not raise exception for unknown roi type. Log a warning instead.
65
+
66
+ ## [v3.7.3-dev3] - 2024-11-26
67
+ * Working on n-dimensional sorting.
68
+ * Added code to sort series on diffusion gradient direction (b-vector),
69
+ and specifically diffusion RSI data.
70
+
71
+ ## [v3.7.3-dev2] - 2024-11-25
72
+ * diffusion.py: Added code to get diffusion b value from Siemens E11 format.
73
+
74
+ ## [v3.7.3-dev1] - 2024-11-06
75
+ * Viewer.viewport_set(): Fixed error where the viewport did not include the last image.
76
+
77
+ ## [v3.7.3-dev0] - 2024-11-04
78
+ * XnatTransport.open(): Corrected scan search to search for series description,
79
+ not series number.
80
+
81
+ ## [v3.7.2] - 2024-10-28
82
+ * Fixed viewing in jupyter notebook using backend `widget`.
83
+ * Renamed collections.py to collection.py.
84
+ *
85
+ ## [v3.7.2-dev2] - 2024-10-25
11
86
  * Fixed viewing in jupyter notebook using backend `widget`.
12
87
 
13
88
  ## [v3.7.2-dev0] - 2024-10-10
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: imagedata
3
- Version: 3.7.2.dev1
3
+ Version: 3.8.0
4
4
  Summary: Read/write medical image data
5
5
  Author-email: Erling Andersen <Erling.Andersen@Helse-Bergen.NO>
6
6
  Maintainer-email: Erling Andersen <Erling.Andersen@Helse-Bergen.NO>
@@ -63,6 +63,7 @@ Requires-Dist: pillow>=10.0.0
63
63
  Requires-Dist: xnat
64
64
  Requires-Dist: matplotlib>=3.8.0
65
65
  Requires-Dist: opencv-python-headless
66
+ Dynamic: license-file
66
67
 
67
68
  #########
68
69
  imagedata
@@ -0,0 +1 @@
1
+ 3.8.0
Binary file
Binary file
@@ -61,6 +61,11 @@ The following plugin options are known at the time of writing:
61
61
  | | | |times for dynamic |
62
62
  | | | |series |
63
63
  +-------------------------+-------------------------+-----+-----------------------+
64
+ |read |ignore_series_uid |str |Ignore Series Instance |
65
+ | | | |UID, i.e. do not sort |
66
+ | | | |images into different |
67
+ | | | |Series |
68
+ +-------------------------+-------------------------+-----+-----------------------+
64
69
  |read |input_serinsuid |str |Filter input files on |
65
70
  | | | |specified |
66
71
  | | | |Series Instance UID |
@@ -0,0 +1,129 @@
1
+ .. _Sorting:
2
+
3
+ Sorting
4
+ =======
5
+
6
+ When reading data files to construct a Series instance, the images will be sorted into a
7
+ multidimensional array.
8
+ In particular, DICOM series typically comes as 2D slice images.
9
+ These images are sorted into 3D volumes on the basis of their geometrical information
10
+ (image position, or slice location).
11
+
12
+ The following example loads a 3D volume from 'dicom/volume' and sorts the images into
13
+ a 3D volume of 40 slices.
14
+
15
+ .. code-block:: python
16
+
17
+ img = Series('dicom/volume')
18
+ print(img.shape)
19
+ >>> (40, 192, 152)
20
+
21
+ 4D data can be read by sorting the volumes on some DICOM attribute. In the following example, a
22
+ 4D dataset is loaded and volumes are sorted according to Acquisition Time. Notice that there
23
+ are 10 time steps and 40 slices in the dataset.
24
+
25
+ .. code-block:: python
26
+
27
+ img = Series('dicom/time', input_order='time')
28
+ print(img.shape)
29
+ >>> (10, 40, 192, 152)
30
+
31
+ Several sort criteria are predefined:
32
+
33
+ * none: No sorting (2D/3D datasets only)
34
+ * auto: Determine sorting criteria automatically (default) (see below)
35
+ * time: Sort on Acquisition Time
36
+ * triggertime: Sort on Trigger Time
37
+ * b: Sort on MR diffusion b-value
38
+ * bvector: Sort on MR diffusion b vector
39
+ * fa: Sort on MR Flip Angle
40
+ * te: Sort on MR Echo Time
41
+
42
+ Auto-sorting
43
+ ------------
44
+
45
+ `Imagedata` can determine the sorting automatically in some typical cases,
46
+ attempting to sort on `time`, `b`-value, echo time or flip angle.
47
+
48
+ The exact list of sorting criteria can be set using the `auto_sort` list.
49
+ The default auto sort list is ['time', 'triggertime', 'b', 'fa', 'te'].
50
+
51
+ .. code-block:: python
52
+
53
+ img = Series('dicomdata', auto_sort=['time', 'b'])
54
+
55
+ User-defined sorting criteria
56
+ -----------------------------
57
+
58
+ When your data does not match any of these sort criteria, a new sort criteria can be defined.
59
+ E.g., sorting MR images on Inversion Time ('ti'), a new sort criteria 'ti' is coupled to the
60
+ DICOM attribute Inversion Time:
61
+
62
+ .. code-block:: python
63
+
64
+ img = Series('dicom/time', input_order='ti', ti='InversionTime')
65
+ print(img.shape)
66
+ >>> (10, 40, 192, 152)
67
+
68
+ More advanced extraction of sorting values can be implemented creating a
69
+ user function which returns a value for each Dataset:
70
+
71
+ .. code-block:: python
72
+
73
+ def get_TI(im: Dataset) -> float:
74
+ return float(im.data_element('InversionTime').value)
75
+
76
+ img = Series('dicom/TIdata', input_order='ti', ti=get_TI)
77
+
78
+ A similar user function to calculate time in seconds from Trigger Time (ms).
79
+ Notice how the get_TriggerTime() function overloads the standard `time`
80
+ definition. This allow to treat the acquired series as a time series with
81
+ the `timeline` property.
82
+
83
+ NOTICE: Trigger Time is now implemented in the standard library.
84
+ This discussion remains here to document the possible uses.
85
+
86
+ .. code-block:: python
87
+
88
+ def get_TriggerTime(im: Dataset) -> float:
89
+ return float(im.data_element('TriggerTime').value / 1000.)
90
+
91
+ img = Series('dicom/triggerTime', input_order='time', time=get_TriggerTime)
92
+ img.timeline
93
+
94
+ Auto-sorting either on Acquisition Time or Trigger Time can be implemented.
95
+ In this case, the resulting series will not have the `timeline` property when
96
+ Trigger Time is the sorting criteria:
97
+
98
+ .. code-block:: python
99
+
100
+ img = Series('dicomdata', auto_sort=['time', 'trigger'],
101
+ input_order='trigger', trigger=get_TriggerTime)
102
+ )
103
+
104
+ N-dimensional sorting
105
+ ---------------------
106
+
107
+ While 4D data can be sorted automatically, higher dimensions must be defined explicitly.
108
+ The `input_order` parameter can be a comma-separated list of sorting criteria.
109
+
110
+ A dynamic dual-echo MR acquisition can be sorted on time and echo time into a 5D Series object, like:
111
+
112
+ .. code-block:: python
113
+
114
+ img = Series('dyn_dual_echo', input_order='time,te')
115
+
116
+ In particular, MR RSI diffusion data can be sorted on `b` value and `b` vector:
117
+
118
+ .. code-block:: python
119
+
120
+ img = Series('diff_rsi', input_order='b,bvector')
121
+ tags = img.tags[0]
122
+ for idx in np.ndindex(tags.shape):
123
+ try:
124
+ b, bvector = tags[idx]
125
+ except TypeError:
126
+ continue
127
+ rsi = img[idx]
128
+ print(b, bvector, rsi.shape)
129
+
@@ -135,8 +135,28 @@ def evidence2roi(im, uid_table=None, content=None):
135
135
  roi_name = finding[(0x0029, 0x1030)].value
136
136
  except KeyError:
137
137
  roi_name = 'NONAME'
138
+ if roi_type_value not in (
139
+ 'PolygonApplication3D', 'FreehandApplication3D',
140
+ 'MarkerApplication3D', 'EllipseApplication3D',
141
+ 'StandaloneTextApplication3D', 'DistanceLineApplication3D'
142
+ ):
143
+ # Attempt to find roi type in advanced presentation sequence (0029,1091)
144
+ try:
145
+ adv_pres_seq = finding[(0x0029, 0x1091)][0]
146
+ try:
147
+ roi_type_value = adv_pres_seq[(0x0029, 0x108e)].value.decode()
148
+ roi_name = finding[(0x0029, 0x1032)].value.decode()
149
+ except AttributeError:
150
+ roi_type_value = adv_pres_seq[(0x0029, 0x108e)].value
151
+ roi_name = finding[(0x0029, 0x1032)].value
152
+ except KeyError:
153
+ pass
138
154
  logger.info("Finding: {} {} {}".format(content['creator'], roi_name, roi_type_value))
139
- if roi_type_value == 'PolygonApplication3D' or roi_type_value == 'FreehandApplication3D':
155
+ if roi_type_value in ('PolygonApplication3D', 'FreehandApplication3D', 'ROI2D'):
156
+ polygon = _get_measurement_points(finding[(0x0029, 0x1096)], zyx=True)
157
+ rois.append(PolygonROI(polygon, roi_name, stu_ins_uid, ser_ins_uid, sop_ins_uid))
158
+ logger.debug('ROI {}: {} points'.format(meas_appl_number, len(polygon) // 3))
159
+ elif roi_type_value == 'ROI2D':
140
160
  polygon = _get_measurement_points(finding[(0x0029, 0x1096)], zyx=True)
141
161
  rois.append(PolygonROI(polygon, roi_name, stu_ins_uid, ser_ins_uid, sop_ins_uid))
142
162
  logger.debug('ROI {}: {} points'.format(meas_appl_number, len(polygon) // 3))
@@ -159,7 +179,9 @@ def evidence2roi(im, uid_table=None, content=None):
159
179
  logger.warning("DistanceLineApplication3D ROI not implemented.")
160
180
  pass
161
181
  else:
162
- raise ValueError("ROI type {} ({}) not implemented.".format(
163
- roi_type_value, type(roi_type_value)))
182
+ logging.warning(
183
+ "ROI type {} ({}) not implemented.".format(
184
+ roi_type_value, type(roi_type_value))
185
+ )
164
186
 
165
187
  return rois, content