imagedata 3.6.0__tar.gz → 3.6.0.dev12__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 (291) hide show
  1. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/CHANGELOG.md +0 -16
  2. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/PKG-INFO +1 -2
  3. imagedata-3.6.0.dev12/VERSION.txt +1 -0
  4. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/pyproject.toml +0 -1
  5. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/__init__.py +1 -0
  6. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/archives/__init__.py +5 -6
  7. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/archives/filesystemarchive.py +16 -22
  8. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/archives/zipfilearchive.py +29 -39
  9. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/collections.py +4 -0
  10. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/formats/__init__.py +4 -1
  11. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/formats/abstractplugin.py +23 -23
  12. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/formats/dicomplugin.py +94 -207
  13. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/formats/itkplugin.py +27 -35
  14. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/formats/matplugin.py +16 -25
  15. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/formats/niftiplugin.py +75 -31
  16. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/header.py +2 -0
  17. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/readdata.py +39 -58
  18. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/series.py +28 -40
  19. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/transports/__init__.py +5 -1
  20. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/transports/dicomtransport.py +5 -7
  21. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/transports/filetransport.py +4 -5
  22. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/transports/xnattransport.py +7 -9
  23. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/viewer.py +3 -7
  24. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata.egg-info/PKG-INFO +1 -2
  25. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata.egg-info/requires.txt +0 -1
  26. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_dicom.py +20 -24
  27. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_dicom_template.py +17 -35
  28. imagedata-3.6.0/VERSION.txt +0 -1
  29. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/.readthedocs.yaml +0 -0
  30. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/.travis.yml +0 -0
  31. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/CONTRIBUTING.rst +0 -0
  32. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/LICENSE.txt +0 -0
  33. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/MANIFEST.in +0 -0
  34. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/Makefile +0 -0
  35. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/README.rst +0 -0
  36. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/TI/TI_1.MR.0021.0001.2021.06.08.10.04.29.806302.203193459.IMA +0 -0
  37. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/TI/TI_1.MR.0022.0001.2021.06.08.10.04.29.806302.203195509.IMA +0 -0
  38. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/TI/TI_1.MR.0023.0001.2021.06.08.10.04.29.806302.203197559.IMA +0 -0
  39. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/TI/TI_1.MR.0024.0001.2021.06.08.10.04.29.806302.203199609.IMA +0 -0
  40. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/TI/TI_1.MR.0025.0001.2021.06.08.10.04.29.806302.203201659.IMA +0 -0
  41. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/cohort.zip +0 -0
  42. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/cor_hf.zip +0 -0
  43. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/cor_oblique.zip +0 -0
  44. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/cor_rl.zip +0 -0
  45. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0001.2019.02.07.14.42.45.461288.172175570.IMA +0 -0
  46. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0002.2019.02.07.14.42.45.461288.172174503.IMA +0 -0
  47. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0003.2019.02.07.14.42.45.461288.172175624.IMA +0 -0
  48. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0004.2019.02.07.14.42.45.461288.172174557.IMA +0 -0
  49. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0005.2019.02.07.14.42.45.461288.172175678.IMA +0 -0
  50. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0006.2019.02.07.14.42.45.461288.172174611.IMA +0 -0
  51. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0007.2019.02.07.14.42.45.461288.172175732.IMA +0 -0
  52. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0008.2019.02.07.14.42.45.461288.172174665.IMA +0 -0
  53. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0009.2019.02.07.14.42.45.461288.172175786.IMA +0 -0
  54. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0010.2019.02.07.14.42.45.461288.172174719.IMA +0 -0
  55. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0011.2019.02.07.14.42.45.461288.172175840.IMA +0 -0
  56. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0012.2019.02.07.14.42.45.461288.172174773.IMA +0 -0
  57. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0013.2019.02.07.14.42.45.461288.172175894.IMA +0 -0
  58. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0014.2019.02.07.14.42.45.461288.172174827.IMA +0 -0
  59. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0015.2019.02.07.14.42.45.461288.172175948.IMA +0 -0
  60. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0016.2019.02.07.14.42.45.461288.172174881.IMA +0 -0
  61. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0017.2019.02.07.14.42.45.461288.172176002.IMA +0 -0
  62. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0018.2019.02.07.14.42.45.461288.172174935.IMA +0 -0
  63. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0019.2019.02.07.14.42.45.461288.172176056.IMA +0 -0
  64. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0020.2019.02.07.14.42.45.461288.172174989.IMA +0 -0
  65. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0021.2019.02.07.14.42.45.461288.172176110.IMA +0 -0
  66. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0022.2019.02.07.14.42.45.461288.172175043.IMA +0 -0
  67. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0023.2019.02.07.14.42.45.461288.172176164.IMA +0 -0
  68. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0024.2019.02.07.14.42.45.461288.172175097.IMA +0 -0
  69. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0025.2019.02.07.14.42.45.461288.172176218.IMA +0 -0
  70. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0026.2019.02.07.14.42.45.461288.172175151.IMA +0 -0
  71. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0027.2019.02.07.14.42.45.461288.172176272.IMA +0 -0
  72. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0028.2019.02.07.14.42.45.461288.172175205.IMA +0 -0
  73. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0029.2019.02.07.14.42.45.461288.172176326.IMA +0 -0
  74. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0030.2019.02.07.14.42.45.461288.172175516.IMA +0 -0
  75. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0031.2019.02.07.14.42.45.461288.172175588.IMA +0 -0
  76. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0032.2019.02.07.14.42.45.461288.172174521.IMA +0 -0
  77. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0033.2019.02.07.14.42.45.461288.172175642.IMA +0 -0
  78. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0034.2019.02.07.14.42.45.461288.172174575.IMA +0 -0
  79. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0035.2019.02.07.14.42.45.461288.172175696.IMA +0 -0
  80. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0036.2019.02.07.14.42.45.461288.172174629.IMA +0 -0
  81. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0037.2019.02.07.14.42.45.461288.172175750.IMA +0 -0
  82. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0038.2019.02.07.14.42.45.461288.172174683.IMA +0 -0
  83. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0039.2019.02.07.14.42.45.461288.172175804.IMA +0 -0
  84. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0040.2019.02.07.14.42.45.461288.172174737.IMA +0 -0
  85. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0041.2019.02.07.14.42.45.461288.172175858.IMA +0 -0
  86. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0042.2019.02.07.14.42.45.461288.172174791.IMA +0 -0
  87. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0043.2019.02.07.14.42.45.461288.172175912.IMA +0 -0
  88. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0044.2019.02.07.14.42.45.461288.172174845.IMA +0 -0
  89. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0045.2019.02.07.14.42.45.461288.172175966.IMA +0 -0
  90. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0046.2019.02.07.14.42.45.461288.172174899.IMA +0 -0
  91. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0047.2019.02.07.14.42.45.461288.172176020.IMA +0 -0
  92. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0048.2019.02.07.14.42.45.461288.172174953.IMA +0 -0
  93. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0049.2019.02.07.14.42.45.461288.172176074.IMA +0 -0
  94. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0050.2019.02.07.14.42.45.461288.172175007.IMA +0 -0
  95. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0051.2019.02.07.14.42.45.461288.172176128.IMA +0 -0
  96. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0052.2019.02.07.14.42.45.461288.172175061.IMA +0 -0
  97. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0053.2019.02.07.14.42.45.461288.172176182.IMA +0 -0
  98. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0054.2019.02.07.14.42.45.461288.172175115.IMA +0 -0
  99. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0055.2019.02.07.14.42.45.461288.172176236.IMA +0 -0
  100. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0056.2019.02.07.14.42.45.461288.172175169.IMA +0 -0
  101. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0057.2019.02.07.14.42.45.461288.172176290.IMA +0 -0
  102. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0058.2019.02.07.14.42.45.461288.172175480.IMA +0 -0
  103. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0059.2019.02.07.14.42.45.461288.172176344.IMA +0 -0
  104. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0060.2019.02.07.14.42.45.461288.172175534.IMA +0 -0
  105. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0061.2019.02.07.14.42.45.461288.172175606.IMA +0 -0
  106. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0062.2019.02.07.14.42.45.461288.172174539.IMA +0 -0
  107. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0063.2019.02.07.14.42.45.461288.172175660.IMA +0 -0
  108. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0064.2019.02.07.14.42.45.461288.172174593.IMA +0 -0
  109. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0065.2019.02.07.14.42.45.461288.172175714.IMA +0 -0
  110. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0066.2019.02.07.14.42.45.461288.172174647.IMA +0 -0
  111. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0067.2019.02.07.14.42.45.461288.172175768.IMA +0 -0
  112. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0068.2019.02.07.14.42.45.461288.172174701.IMA +0 -0
  113. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0069.2019.02.07.14.42.45.461288.172175822.IMA +0 -0
  114. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0070.2019.02.07.14.42.45.461288.172174755.IMA +0 -0
  115. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0071.2019.02.07.14.42.45.461288.172175876.IMA +0 -0
  116. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0072.2019.02.07.14.42.45.461288.172174809.IMA +0 -0
  117. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0073.2019.02.07.14.42.45.461288.172175930.IMA +0 -0
  118. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0074.2019.02.07.14.42.45.461288.172174863.IMA +0 -0
  119. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0075.2019.02.07.14.42.45.461288.172175984.IMA +0 -0
  120. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0076.2019.02.07.14.42.45.461288.172174917.IMA +0 -0
  121. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0077.2019.02.07.14.42.45.461288.172176038.IMA +0 -0
  122. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0078.2019.02.07.14.42.45.461288.172174971.IMA +0 -0
  123. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0079.2019.02.07.14.42.45.461288.172176092.IMA +0 -0
  124. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0080.2019.02.07.14.42.45.461288.172175025.IMA +0 -0
  125. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0081.2019.02.07.14.42.45.461288.172176146.IMA +0 -0
  126. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0082.2019.02.07.14.42.45.461288.172175079.IMA +0 -0
  127. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0083.2019.02.07.14.42.45.461288.172176200.IMA +0 -0
  128. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0084.2019.02.07.14.42.45.461288.172175133.IMA +0 -0
  129. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0085.2019.02.07.14.42.45.461288.172176254.IMA +0 -0
  130. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0086.2019.02.07.14.42.45.461288.172175187.IMA +0 -0
  131. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0087.2019.02.07.14.42.45.461288.172176308.IMA +0 -0
  132. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0088.2019.02.07.14.42.45.461288.172175498.IMA +0 -0
  133. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0089.2019.02.07.14.42.45.461288.172176362.IMA +0 -0
  134. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/dwi/PHANTOM_T1.MR._.0007.0090.2019.02.07.14.42.45.461288.172175552.IMA +0 -0
  135. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/lena_color.dcm +0 -0
  136. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/sag_ap.zip +0 -0
  137. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/sag_hf.zip +0 -0
  138. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/sag_oblique.zip +0 -0
  139. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time00/Image_00019.dcm +0 -0
  140. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time00/Image_00020.dcm +0 -0
  141. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time00/Image_00021.dcm +0 -0
  142. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time01/Image_00019.dcm +0 -0
  143. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time01/Image_00020.dcm +0 -0
  144. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time01/Image_00021.dcm +0 -0
  145. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time02/Image_00019.dcm +0 -0
  146. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time02/Image_00020.dcm +0 -0
  147. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time/time02/Image_00021.dcm +0 -0
  148. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time.zip +0 -0
  149. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00000.dcm +0 -0
  150. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00001.dcm +0 -0
  151. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00002.dcm +0 -0
  152. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00003.dcm +0 -0
  153. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00004.dcm +0 -0
  154. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00005.dcm +0 -0
  155. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00006.dcm +0 -0
  156. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00007.dcm +0 -0
  157. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/time_all/Image_00008.dcm +0 -0
  158. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/tra_oblique.zip +0 -0
  159. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/dicom/tra_rl.zip +0 -0
  160. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/itk/time/Image_00000.mha +0 -0
  161. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/itk/time/Image_00001.mha +0 -0
  162. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/itk/time/Image_00002.mha +0 -0
  163. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/itk/time.zip +0 -0
  164. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/lena_color.gif +0 -0
  165. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/lena_color.jpg +0 -0
  166. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/mat/time/Image_00000.mat +0 -0
  167. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/mat/time.zip +0 -0
  168. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/cor_hf.nii.gz +0 -0
  169. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/cor_oblique.nii.gz +0 -0
  170. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/cor_rl.nii.gz +0 -0
  171. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/sag_ap.nii.gz +0 -0
  172. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/sag_hf.nii.gz +0 -0
  173. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/sag_oblique.nii.gz +0 -0
  174. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/time/time_all_fl3d_dynamic_20190207140517_14.json +0 -0
  175. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/time/time_all_fl3d_dynamic_20190207140517_14.nii.gz +0 -0
  176. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/time_all/time_all_fl3d_dynamic_20190207140517_14.json +0 -0
  177. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/time_all/time_all_fl3d_dynamic_20190207140517_14.nii.gz +0 -0
  178. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/time_all.zip +0 -0
  179. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/tra_oblique.nii.gz +0 -0
  180. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/nifti/tra_rl.nii.gz +0 -0
  181. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/pdf/A_Lovers_Complaint.pdf +0 -0
  182. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/pdf/pages/A_Lovers_Complaint_1.pdf +0 -0
  183. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/pdf/pages/A_Lovers_Complaint_2.pdf +0 -0
  184. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/pdf/pages/A_Lovers_Complaint_3.pdf +0 -0
  185. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/pdf/pages/A_Lovers_Complaint_4.pdf +0 -0
  186. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/pdf/pages/A_Lovers_Complaint_5.pdf +0 -0
  187. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/pdf/pages/A_Lovers_Complaint_6.pdf +0 -0
  188. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/text.txt +0 -0
  189. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/tree/file0 +0 -0
  190. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/tree/file1 +0 -0
  191. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/tree/file2 +0 -0
  192. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/vertices/vertices2d.pickle +0 -0
  193. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/vertices/vertices3d.pickle +0 -0
  194. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/data/vertices/vertices4d.pickle +0 -0
  195. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReference.rst +0 -0
  196. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceApps.rst +0 -0
  197. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceAppsDiffusion.rst +0 -0
  198. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceArchives.rst +0 -0
  199. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceCollections.rst +0 -0
  200. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceFormats.rst +0 -0
  201. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceImagedata.rst +0 -0
  202. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceSeries.rst +0 -0
  203. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceTransports.rst +0 -0
  204. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/APIReferenceViewer.rst +0 -0
  205. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Collections.rst +0 -0
  206. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Colors.rst +0 -0
  207. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/CommandLine.rst +0 -0
  208. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/DICOMAttributes.rst +0 -0
  209. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/DeveloperDocumentation.rst +0 -0
  210. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Examples.rst +0 -0
  211. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Figure_Architecture.png +0 -0
  212. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Input_output.rst +0 -0
  213. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Installation.rst +0 -0
  214. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Introduction.rst +0 -0
  215. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Makefile +0 -0
  216. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Notebook.rst +0 -0
  217. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Options.rst +0 -0
  218. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Plugin_Architecture.docx +0 -0
  219. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Plugin_Architecture.png +0 -0
  220. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Plugins.rst +0 -0
  221. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/README +0 -0
  222. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Sorting.rst +0 -0
  223. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Tutorial.rst +0 -0
  224. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/UserGuide.rst +0 -0
  225. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/Viewing.rst +0 -0
  226. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/conf.py +0 -0
  227. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/fuse_mask_blend.png +0 -0
  228. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/index.rst +0 -0
  229. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/make.bat +0 -0
  230. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/requirements.txt +0 -0
  231. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/modules.rst +0 -0
  232. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/setup.rst +0 -0
  233. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/src.imagedata.apps.Siemens.rst +0 -0
  234. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/src.imagedata.apps.rst +0 -0
  235. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/src.imagedata.archives.rst +0 -0
  236. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/src.imagedata.formats.dicomlib.rst +0 -0
  237. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/src.imagedata.formats.rst +0 -0
  238. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/src.imagedata.rst +0 -0
  239. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/src.imagedata.transports.rst +0 -0
  240. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/src.rst +0 -0
  241. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/source/tests.rst +0 -0
  242. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/docs/transformation.tex +0 -0
  243. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/paper.bib +0 -0
  244. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/paper.md +0 -0
  245. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/pylintrc +0 -0
  246. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/setup.cfg +0 -0
  247. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/__init__.py +0 -0
  248. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/apps/Siemens/ROI.py +0 -0
  249. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/apps/Siemens/__init__.py +0 -0
  250. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/apps/Siemens/draw_antialiased.py +0 -0
  251. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/apps/Siemens/evidence2mask.py +0 -0
  252. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/apps/Siemens/evidence_main.py +0 -0
  253. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/apps/__init__.py +0 -0
  254. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/apps/diffusion.py +0 -0
  255. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/archives/abstractarchive.py +0 -0
  256. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/axis.py +0 -0
  257. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/cmdline.py +0 -0
  258. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/formats/dicomlib/__init__.py +0 -0
  259. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/formats/dicomlib/uid.py +0 -0
  260. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/image_data.py +0 -0
  261. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/list_plugins.py +0 -0
  262. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata/transports/abstracttransport.py +0 -0
  263. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata.egg-info/SOURCES.txt +0 -0
  264. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata.egg-info/dependency_links.txt +0 -0
  265. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata.egg-info/entry_points.txt +0 -0
  266. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/src/imagedata.egg-info/top_level.txt +0 -0
  267. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/techstack.md +0 -0
  268. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/techstack.yml +0 -0
  269. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/__init__.py +0 -0
  270. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/compare_headers.py +0 -0
  271. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/context.py +0 -0
  272. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_archive_file.py +0 -0
  273. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_archive_zip.py +0 -0
  274. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_axis.py +0 -0
  275. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_collections.py +0 -0
  276. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_dicom_color.py +0 -0
  277. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_dicom_zip.py +0 -0
  278. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_itk.py +0 -0
  279. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_itk_template.py +0 -0
  280. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_itk_zip.py +0 -0
  281. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_mat.py +0 -0
  282. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_mat_zip.py +0 -0
  283. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_nifti.py +0 -0
  284. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_formats_nifti_zip.py +0 -0
  285. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_series.py +0 -0
  286. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_transport_dicomtransport.py +0 -0
  287. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_transport_filetransport.py +0 -0
  288. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_transport_xnattransport.py +0 -0
  289. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_version.py +0 -0
  290. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tests/test_viewer.py +0 -0
  291. {imagedata-3.6.0 → imagedata-3.6.0.dev12}/tox.ini +0 -0
@@ -7,22 +7,6 @@ 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.6.0] - 2024-06-27
11
- * Final release 3.6.0.
12
-
13
- ## [v3.6.0-rc4] - 2024-06-25
14
- ### Changed
15
- * Depend on pylibjpeg.
16
- * Standardized logging to log proper module and function names.
17
- ### Fixed
18
- * Honor the `skip_broken_series` option.
19
-
20
- ## [v3.6.0-rc3] - 2024-06-21
21
- * Release candidate 3.
22
-
23
- ## [v3.6.0-rc2] - 2024-06-20
24
- * Release candidate 2.
25
-
26
10
  ## [v3.6.0-rc0] - 2024-06-17
27
11
  * Release candidate 0.
28
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imagedata
3
- Version: 3.6.0
3
+ Version: 3.6.0.dev12
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>
@@ -47,7 +47,6 @@ Requires-Python: <3.13,>=3.9
47
47
  Description-Content-Type: text/x-rst
48
48
  License-File: LICENSE.txt
49
49
  Requires-Dist: pydicom>=2.4.0
50
- Requires-Dist: pylibjpeg[all]
51
50
  Requires-Dist: pynetdicom<2,>=1.2.0
52
51
  Requires-Dist: itk-io>=5.4.0
53
52
  Requires-Dist: scikit-build-core
@@ -0,0 +1 @@
1
+ 3.6.0-dev12
@@ -30,7 +30,6 @@ keywords = [
30
30
  license = {file = "LICENSE.txt"}
31
31
  dependencies = [
32
32
  "pydicom>=2.4.0",
33
- "pylibjpeg[all]",
34
33
  "pynetdicom>=1.2.0, <2",
35
34
  "itk-io>=5.4.0",
36
35
  "scikit-build-core",
@@ -1,5 +1,6 @@
1
1
  """imagedata"""
2
2
 
3
+ from os.path import join
3
4
  import logging
4
5
  from importlib import import_module
5
6
  from importlib.metadata import version, entry_points
@@ -36,7 +36,6 @@ def find_plugin(pfind, url, mode="r", opts=None):
36
36
 
37
37
  def find_mimetype_plugin(mimetype, url, mode="r", read_directory_only=False, opts=None):
38
38
  """Return plugin for given file type."""
39
- _name: str = '{}.{}'.format(__name__, find_mimetype_plugin.__name__)
40
39
  if opts is None:
41
40
  opts = {}
42
41
  from .. import plugins
@@ -68,16 +67,16 @@ def find_mimetype_plugin(mimetype, url, mode="r", read_directory_only=False, opt
68
67
  except AttributeError:
69
68
  pass
70
69
  for pname, ptype, pclass in plugins['archive']:
71
- logger.debug("{}: compare '{}' to {}".format(
72
- _name, mimetype, pclass.mimetypes))
70
+ logger.debug("imagedata.archive.find_mimetype_plugin: compare '{}' to {}".format(
71
+ mimetype, pclass.mimetypes))
73
72
  if mimetype in pclass.mimetypes:
74
- logger.debug("{}: {}, mode: {}".format(
75
- _name, ptype, mode))
73
+ logger.debug("imagedata.archives.find_mimetype_plugin: {}, mode: {}".format(
74
+ ptype, mode))
76
75
  return pclass(url=url, transport=transport, mode=mode, opts=opts)
77
76
  # if os.path.isfile(_path):
78
77
  # if os.path.exists(_path):
79
78
  if urldict.scheme == "file":
80
- logger.debug("{}: filesystem".format(_name))
79
+ logger.debug("imagedata.archives.find_mimetype_plugin: filesystem")
81
80
  try:
82
81
  return find_plugin('filesystem', url, mode, opts=opts)
83
82
  except ArchivePluginNotFound:
@@ -64,17 +64,16 @@ class FilesystemArchive(AbstractArchive, ABC):
64
64
  super(FilesystemArchive, self).__init__(
65
65
  self.name, self.description,
66
66
  self.authors, self.version, self.url, self.mimetypes)
67
- _name: str = '{}.{}'.format(__name__, self.__init__.__name__)
68
- logger.debug("{}: url: {}".format(_name, url))
67
+ logger.debug("FilesystemArchive.__init__ url: {}".format(url))
69
68
 
70
69
  self._parse_url(url)
71
70
  self._get_transport(transport, url, mode, read_directory_only)
72
71
  self.__mode = mode
73
72
 
74
- logger.debug("{}: {}".format(_name, type(self.transport)))
73
+ logger.debug("FilesystemArchive __init__: {}".format(type(self.transport)))
75
74
 
76
- logger.debug("{}: path: {}".format(_name, self.__path))
77
- logger.debug("{}: open zipfile mode {}".format(_name, self.__mode))
75
+ logger.debug("FilesystemArchive path: {}".format(self.__path))
76
+ logger.debug("FilesystemArchive open zipfile mode %s" % self.__mode)
78
77
 
79
78
  self._set_basedir(mode)
80
79
 
@@ -102,7 +101,6 @@ class FilesystemArchive(AbstractArchive, ABC):
102
101
  access the parent directory.
103
102
  """
104
103
 
105
- _name: str = '{}.{}'.format(__name__, self._get_transport.__name__)
106
104
  if transport is not None:
107
105
  self.transport = transport
108
106
  return
@@ -110,9 +108,8 @@ class FilesystemArchive(AbstractArchive, ABC):
110
108
  raise ValueError('url not given')
111
109
 
112
110
  url_tuple = urllib.parse.urlsplit(url, scheme='file')
113
- logger.debug('{}: scheme: {}, netloc: {}'.format(
114
- _name, url_tuple.scheme, url_tuple.path
115
- ))
111
+ logger.debug('FilesystemArchive._get_transport: scheme: %s, netloc: %s' %
112
+ (url_tuple.scheme, url_tuple.path))
116
113
 
117
114
  try:
118
115
  self.transport = Transport(
@@ -134,30 +131,29 @@ class FilesystemArchive(AbstractArchive, ABC):
134
131
  def _set_basedir(self, mode):
135
132
  # If the URL refers to a single file, let directory_name refer to the
136
133
  # directory and basename to the file
137
- _name: str = '{}.{}'.format(__name__, self._set_basedir.__name__)
138
- logger.debug("{}: verify : {}".format(_name, self.__path))
134
+ logger.debug("FilesystemArchive __init__ verify : {}".format(self.__path))
139
135
  if mode[0] == 'r' and self.transport.isfile(self.__path):
140
136
  self.__dirname = os.path.dirname(self.__path)
141
137
  _basename = os.path.basename(self.__path)
142
138
  if len(_basename):
143
139
  self.__basename = _basename
144
- logger.debug("{}: directory_name : {}".format(_name, self.__dirname))
145
- logger.debug("{}: basename: {}".format(_name, self.__basename))
140
+ logger.debug("FilesystemArchive __init__ directory_name : {}".format(self.__dirname))
141
+ logger.debug("FilesystemArchive __init__ basename: {}".format(self.__basename))
146
142
  return
147
143
  elif mode[0] == 'w' and not self.transport.exists(self.__path):
148
144
  self.__dirname = os.path.dirname(self.__path)
149
145
  _basename = os.path.basename(self.__path)
150
146
  if len(_basename):
151
147
  self.__basename = _basename
152
- logger.debug("{}: directory_name : {}".format(_name, self.__dirname))
153
- logger.debug("{}: basename: {}".format(_name, self.__basename))
148
+ logger.debug("FilesystemArchive __init__ directory_name : {}".format(self.__dirname))
149
+ logger.debug("FilesystemArchive __init__ basename: {}".format(self.__basename))
154
150
  return
155
151
 
156
152
  # The URL refers to a directory. Let directory_name refer to the directory
157
153
  self.__dirname = self.__path
158
154
  self.__basename = None
159
- logger.debug("{}: scan directory_name : {}".format(_name, self.__dirname))
160
- logger.debug("{}: scan basename: {}".format(_name, self.__basename))
155
+ logger.debug("FilesystemArchive __init__ scan directory_name : {}".format(self.__dirname))
156
+ logger.debug("FilesystemArchive __init__ scan basename: {}".format(self.__basename))
161
157
 
162
158
  def use_query(self):
163
159
  """Does the plugin need the ?query part of the url?"""
@@ -398,13 +394,12 @@ class FilesystemArchive(AbstractArchive, ABC):
398
394
  ReadOnlyError: when the archive is read-only.
399
395
  WriteOnFile: when attempting to write a file to a file.
400
396
  """
401
- _name: str = '{}.{}'.format(__name__, self.writedata.__name__)
402
397
  if self.__mode[0] == 'r':
403
398
  raise ReadOnlyError("Archive is read-only.")
404
399
  if len(self.__basename) > 0:
405
400
  raise WriteOnFile("Do not know how to write a file to a file.")
406
401
  fname = os.path.join(self.__dirname, filename)
407
- logger.debug("{}: fname {}".format(_name, fname))
402
+ logger.debug("writedata: fname {}".format(fname))
408
403
  with self.transport.open(fname, 'wb') as f:
409
404
  f.write(data)
410
405
 
@@ -457,9 +452,8 @@ class FilesystemArchive(AbstractArchive, ABC):
457
452
  def __enter__(self):
458
453
  """Enter context manager.
459
454
  """
460
- _name: str = '{}.{}'.format(__name__, self.__enter__.__name__)
461
- logger.debug("{}: {} mode {}".format(
462
- _name, type(self.transport), self.__mode))
455
+ logger.debug("FilesystemArchive __enter__: {} mode {}".format(
456
+ type(self.transport), self.__mode))
463
457
  return self
464
458
 
465
459
  def __exit__(self, exc_type, exc_val, exc_tb):
@@ -59,21 +59,18 @@ class WriteFileIO(io.FileIO):
59
59
 
60
60
  def close(self):
61
61
  """Close file, copy it to archive, then delete local file."""
62
- _name: str = '{}.{}'.format(__name__, self.close.__name__)
63
- logger.debug("{}:".format(_name))
62
+ logger.debug("ZipfileArchive.WriteFileIO.close:")
64
63
  ret = super(WriteFileIO, self).close()
65
64
  if isinstance(self.__local_file, str):
66
65
  self.__archive.write(self.__local_file, self.__filename)
67
66
  os.remove(self.__local_file)
68
67
  else:
69
68
  self.__local_file.close()
70
- logger.debug("{}: zip {} as {}".format(
71
- _name, self.__local_file.name, self.__filename)
72
- )
69
+ logger.debug("ZipfileArchive.WriteFileIO.close: zip %s as %s" %
70
+ (self.__local_file.name, self.__filename))
73
71
  self.__archive.write(self.__local_file.name, self.__filename)
74
- logger.debug("{}: remove {}".format(
75
- _name, self.__local_file.name)
76
- )
72
+ logger.debug("ZipfileArchive.WriteFileIO.close: remove %s" %
73
+ self.__local_file.name)
77
74
  os.remove(self.__local_file.name)
78
75
  return ret
79
76
 
@@ -121,9 +118,8 @@ class ZipfileArchive(AbstractArchive, ABC):
121
118
  super(ZipfileArchive, self).__init__(
122
119
  self.name, self.description,
123
120
  self.authors, self.version, self.url, self.mimetypes)
124
- _name: str = '{}.{}'.format(__name__, self.__init__.__name__)
125
121
  self.opts = opts
126
- logger.debug("{}: url: {}".format(_name, url))
122
+ logger.debug("ZipfileArchive.__init__ url: {}".format(url))
127
123
  if os.name == 'nt' and fnmatch.fnmatch(url, '[A-Za-z]:\\*'):
128
124
  # Windows: Parse without x:, then reattach drive letter
129
125
  urldict = urllib.parse.urlsplit(url[2:], scheme="file")
@@ -143,9 +139,8 @@ class ZipfileArchive(AbstractArchive, ABC):
143
139
  # self.__path: zipfile name
144
140
  try:
145
141
  netloc = urldict.netloc + self.__path
146
- logger.debug('{}: scheme: {}, netloc: {}'.format(
147
- _name, urldict.scheme, netloc
148
- ))
142
+ logger.debug('ZipfileArchive.__init__: scheme: %s, netloc: %s' %
143
+ (urldict.scheme, netloc))
149
144
  self.transport = Transport(
150
145
  urldict.scheme,
151
146
  netloc=urldict.netloc,
@@ -157,19 +152,19 @@ class ZipfileArchive(AbstractArchive, ABC):
157
152
  self.__mode = mode
158
153
  self.__files = {}
159
154
 
160
- logger.debug("{}: path: {}".format(_name, self.__path))
155
+ logger.debug("ZipfileArchive path: {}".format(self.__path))
161
156
  self.__fp = self.transport.open(
162
157
  self.__path, mode=self.__mode + "b")
163
- logger.debug("{}: self.__fp: {}".format(_name, type(self.__fp)))
164
- logger.debug("{}: open zipfile mode {}".format(_name, self.__mode))
158
+ logger.debug("ZipfileArchive self.__fp: {}".format(type(self.__fp)))
159
+ logger.debug("ZipfileArchive open zipfile mode %s" % self.__mode)
165
160
  self.__archive = zipfile.ZipFile(
166
161
  self.__fp,
167
162
  mode=self.__mode,
168
163
  compression=zipfile.ZIP_DEFLATED)
169
164
  # Extract the archive
170
165
  self.__tmpdir = tempfile.mkdtemp()
171
- logger.debug("{}: Extract zipfile {} to {}".format(
172
- _name, self.__archive, self.__tmpdir))
166
+ logger.debug("Extract zipfile {} to {}".format(
167
+ self.__archive, self.__tmpdir))
173
168
  # Get filelist in self.__files
174
169
  for fname in self.__archive.namelist():
175
170
  try:
@@ -177,7 +172,7 @@ class ZipfileArchive(AbstractArchive, ABC):
177
172
  except AttributeError:
178
173
  _is_dir = fname[-1] == '/'
179
174
  except Exception as e:
180
- logger.error('{}: {}'.format(_name, e))
175
+ logger.error('ZipfileArchive: {}'.format(e))
181
176
  raise
182
177
  if not _is_dir:
183
178
  self.__files[fname] = Member(fname,
@@ -201,7 +196,6 @@ class ZipfileArchive(AbstractArchive, ABC):
201
196
  Raises:
202
197
  FileNotFoundError: When no matching file is found.
203
198
  """
204
- _name: str = '{}.{}'.format(__name__, self.getnames.__name__)
205
199
  if files is not None and issubclass(type(files), str):
206
200
  wanted_files = [files]
207
201
  else:
@@ -210,21 +204,21 @@ class ZipfileArchive(AbstractArchive, ABC):
210
204
  (issubclass(type(wanted_files), list) and (
211
205
  len(wanted_files) == 0 or
212
206
  len(wanted_files) > 0 and wanted_files[0] == '*')):
213
- logger.debug('{}: found files {}'.format(_name, len(self.__files)))
207
+ logger.debug('ZipfileArchive.getnames: found files {}'.format(len(self.__files)))
214
208
  return sorted(self.__files.keys())
215
209
  else:
216
210
  filelist = list()
217
211
  for filename in self.__files:
218
- logger.debug('{}: member {}'.format(_name, filename))
212
+ logger.debug('ZipfileArchive.getnames: member {}'.format(filename))
219
213
  for required_filename in wanted_files:
220
- logger.debug('{}: required {}'.format(_name, required_filename))
214
+ logger.debug('ZipfileArchive.getnames: required {}'.format(required_filename))
221
215
  if required_filename[-1] == '/':
222
216
  required_filename = required_filename[:-1]
223
217
  if fnmatch.fnmatchcase(filename, required_filename):
224
218
  filelist.append(filename)
225
219
  elif fnmatch.fnmatchcase(filename, required_filename + '/*'):
226
220
  filelist.append(filename)
227
- logger.debug('{}: found files {}'.format(_name, len(filelist)))
221
+ logger.debug('ZipfileArchive.getnames: found files {}'.format(len(filelist)))
228
222
  if len(filelist) < 1:
229
223
  raise FileNotFoundError('No such file: {}'.format(wanted_files))
230
224
  return filelist
@@ -274,11 +268,10 @@ class ZipfileArchive(AbstractArchive, ABC):
274
268
  PermissionError: When archive is read-only.
275
269
  """
276
270
 
277
- _name: str = '{}.{}'.format(__name__, self.open.__name__)
278
271
  if isinstance(member, str):
279
272
  member = Member(member)
280
- logger.debug('{}: mode {}'.format(_name, mode))
281
- logger.debug('{}: member {}'.format(_name, member.filename))
273
+ logger.debug('ZipfileArchive.open: mode %s' % mode)
274
+ logger.debug('ZipfileArchive.open: member %s' % member.filename)
282
275
  if mode[0] == 'r':
283
276
  if member.filename not in self.__files:
284
277
  raise FileNotFoundError(
@@ -298,7 +291,8 @@ class ZipfileArchive(AbstractArchive, ABC):
298
291
  if ext >= 0:
299
292
  suffix = member.filename[ext:]
300
293
  local_file = tempfile.NamedTemporaryFile(suffix=suffix, delete=False)
301
- logger.debug('{}: mode {} file {}'.format(_name, mode, local_file))
294
+ logger.debug('ZipfileArchive.open: mode %s file %s' % (
295
+ mode, local_file))
302
296
  fh = WriteFileIO(self.__archive, member, local_file)
303
297
  # Update info on member file
304
298
  self.__files[member.filename] = Member(member.filename,
@@ -433,17 +427,16 @@ class ZipfileArchive(AbstractArchive, ABC):
433
427
  local_file: named local file
434
428
  filename: filename in the archive
435
429
  """
436
- _name: str = '{}.{}'.format(__name__, self.add_localfile.__name__)
437
430
  if self.__mode[0] == 'r':
438
431
  raise PermissionError(
439
432
  'Cannot write on an archive opened for read')
440
433
  member = Member(filename, info={'unpacked': True},
441
434
  local_file=local_file)
442
435
  self.__archive.write(local_file, arcname=filename)
443
- logger.debug('{}: local {} as {}'.format(
444
- _name, local_file, filename))
436
+ logger.debug('ZipfileArchive.add_localfile: local {} as {}'.format(
437
+ local_file, filename))
445
438
  self.__files[filename] = member
446
- logger.debug('{}: {}'.format(_name, self.__archive.namelist()))
439
+ logger.debug('{}'.format(self.__archive.namelist()))
447
440
 
448
441
  def writedata(self, filename, data):
449
442
  """Write data to a named file in the archive.
@@ -462,11 +455,10 @@ class ZipfileArchive(AbstractArchive, ABC):
462
455
  def close(self):
463
456
  """Close zip file.
464
457
  """
465
- _name: str = '{}.{}'.format(__name__, self.close.__name__)
466
458
  self.__archive.close()
467
459
  self.__fp.close()
468
460
  shutil.rmtree(self.__tmpdir)
469
- logger.debug('{}: {}'.format(_name, self.__tmpdir))
461
+ logger.debug('ZipfileArchive.close: {}'.format(self.__tmpdir))
470
462
  self.transport.close()
471
463
 
472
464
  def is_file(self, member):
@@ -511,14 +503,12 @@ class ZipfileArchive(AbstractArchive, ABC):
511
503
  def __enter__(self):
512
504
  """Enter context manager.
513
505
  """
514
- _name: str = '{}.{}'.format(__name__, self.__enter__.__name__)
515
- logger.debug("{}: {} mode {}".format(
516
- _name, type(self.transport), self.__mode))
506
+ logger.debug("ZipfileArchive __enter__: {} mode {}".format(
507
+ type(self.transport), self.__mode))
517
508
  return self
518
509
 
519
510
  def __exit__(self, exc_type, exc_val, exc_tb):
520
511
  """Leave context manager, cleaning up any open files.
521
512
  """
522
- _name: str = '{}.{}'.format(__name__, self.__exit__.__name__)
523
- logger.debug('{}:'.format(_name))
513
+ logger.debug('ZipfileArchive.__exit__:')
524
514
  self.close()
@@ -9,6 +9,8 @@ The Cohort class is a collection of Patient objects.
9
9
  """
10
10
 
11
11
  from datetime import datetime, date, time
12
+ from collections import UserDict
13
+ import logging
12
14
  import argparse
13
15
  from pathlib import Path
14
16
 
@@ -16,6 +18,8 @@ from .series import Series
16
18
  from .readdata import read as r_read
17
19
  from .formats import UnknownInputError
18
20
 
21
+ logger = logging.getLogger(__name__)
22
+
19
23
 
20
24
  def _get_attribute(_data, _attr):
21
25
  # Get attribute from first instance in _data
@@ -3,11 +3,14 @@
3
3
  Standard plugins provides support for DICOM and Nifti image file formats.
4
4
  """
5
5
 
6
- # Copyright (c) 2013-2024 Erling Andersen, Haukeland University Hospital, Bergen, Norway
6
+ # Copyright (c) 2013-2022 Erling Andersen, Haukeland University Hospital, Bergen, Norway
7
7
 
8
+ import logging
8
9
  import sys
10
+
9
11
  import numpy as np
10
12
 
13
+ logger = logging.getLogger(__name__)
11
14
 
12
15
  (SORT_ON_SLICE,
13
16
  SORT_ON_TAG) = range(2)
@@ -107,16 +107,15 @@ class AbstractPlugin(object, metaclass=ABCMeta):
107
107
  - si[tag,slice,rows,columns]: numpy array
108
108
  """
109
109
 
110
- _name: str = '{}.{}'.format(__name__, self.read.__name__)
111
110
  hdr = Header()
112
111
  hdr.input_format = self.name
113
112
  hdr.input_order = input_order
114
113
 
115
114
  # image_list: list of tuples (hdr,si)
116
- logger.debug("{}: sources {}".format(_name, sources))
115
+ logger.debug("AbstractPlugin.read: sources {}".format(sources))
117
116
  image_list = list()
118
117
  for source in sources:
119
- logger.debug("{}: source: {} {}".format(_name, type(source), source))
118
+ logger.debug("AbstractPlugin.read: source: {} {}".format(type(source), source))
120
119
  archive: AbstractArchive = source['archive']
121
120
  scan_files = source['files']
122
121
  if scan_files is None or len(scan_files) == 0:
@@ -130,16 +129,16 @@ class AbstractPlugin(object, metaclass=ABCMeta):
130
129
  # scan_files = archive.getnames()
131
130
  # logger.debug("AbstractPlugin.read: scan_files {}".format(scan_files))
132
131
  for file_handle in archive.getmembers(scan_files):
133
- logger.debug("{}: file_handle {}".format(_name, file_handle.filename))
132
+ logger.debug("AbstractPlugin.read: file_handle {}".format(file_handle.filename))
134
133
  if self._need_local_file():
135
- logger.debug("{}: need local file {}".format(
136
- _name, file_handle.filename))
134
+ logger.debug("AbstractPlugin.read: need local file {}".format(
135
+ file_handle.filename))
137
136
  f = archive.to_localfile(file_handle)
138
- logger.debug("{}: local file {}".format(_name, f))
137
+ logger.debug("AbstractPlugin.read: local file {}".format(f))
139
138
  info, si = self._read_image(f, opts, hdr)
140
139
  else:
141
140
  f = archive.open(file_handle, mode='rb')
142
- logger.debug("{}: file {}".format(_name, f))
141
+ logger.debug("AbstractPlugin.read: file {}".format(f))
143
142
  try:
144
143
  info, si = self._read_image(f, opts, hdr)
145
144
  except NotImageError:
@@ -153,10 +152,10 @@ class AbstractPlugin(object, metaclass=ABCMeta):
153
152
  raise ValueError('No image data read')
154
153
  info, si = image_list[0]
155
154
  self._reduce_shape(si)
156
- logger.debug('{}: reduced si {}'.format(_name, si.shape))
155
+ logger.debug('AbstractPlugin.read: reduced si {}'.format(si.shape))
157
156
  shape = (len(image_list),) + si.shape
158
157
  dtype = si.dtype
159
- logger.debug('{}: shape {}'.format(_name, shape))
158
+ logger.debug('AbstractPlugin.read: shape {}'.format(shape))
160
159
  si = np.zeros(shape, dtype)
161
160
  i = 0
162
161
  for info, img in image_list:
@@ -165,31 +164,31 @@ class AbstractPlugin(object, metaclass=ABCMeta):
165
164
  else:
166
165
  si[i] = img
167
166
  i += 1
168
- logger.debug('{}: si {}'.format(_name, si.shape))
167
+ logger.debug('AbstractPlugin.read: si {}'.format(si.shape))
169
168
 
170
169
  # Simplify shape
171
170
  self._reduce_shape(si)
172
- logger.debug('{}: reduced si {}'.format(_name, si.shape))
171
+ logger.debug('AbstractPlugin.read: reduced si {}'.format(si.shape))
173
172
 
174
173
  _shape = si.shape
175
- logger.debug('{}: _shape {}'.format(_name, _shape))
174
+ logger.debug('AbstractPlugin.read: _shape {}'.format(_shape))
176
175
  _ndim = len(_shape)
177
176
  nz = 1
178
177
  if _ndim > 2:
179
178
  nz = _shape[-3]
180
- logger.debug('{}: slices {}'.format(_name, nz))
179
+ logger.debug('AbstractPlugin.read: slices {}'.format(nz))
181
180
 
182
- logger.debug('{}: calling _set_tags'.format(_name))
181
+ logger.debug('AbstractPlugin.read: calling _set_tags')
183
182
  self._set_tags(image_list, hdr, si)
184
183
  # logger.debug('AbstractPlugin.read: return _set_tags: {}'.format(hdr))
185
184
 
186
- logger.info("{}: Data shape read: {}".format(_name, shape_to_str(si.shape)))
185
+ logger.info("Data shape read: {}".format(shape_to_str(si.shape)))
187
186
 
188
187
  # Add any DICOM template
189
188
  if pre_hdr is not None:
190
189
  hdr.update(pre_hdr)
191
190
 
192
- logger.debug('{}: hdr {}'.format(_name, hdr))
191
+ logger.debug('AbstractPlugin.read: hdr {}'.format(hdr))
193
192
  return {0: hdr}, {0: si}
194
193
 
195
194
  def _need_local_file(self):
@@ -489,8 +488,8 @@ class AbstractPlugin(object, metaclass=ABCMeta):
489
488
  flipud: Whether matrix is transposed
490
489
  """
491
490
 
492
- _name: str = '{}.{}'.format(__name__, self._reorder_to_dicom.__name__)
493
- logger.debug('{}: shape in {}'.format(_name, data.shape))
491
+ logger.debug('AbstractPlugin._reorder_to_dicom: shape in {}'.format(
492
+ data.shape))
494
493
  if data.ndim == 5:
495
494
  rows, columns, slices, tags, d5 = data.shape
496
495
  if flipud:
@@ -546,7 +545,8 @@ class AbstractPlugin(object, metaclass=ABCMeta):
546
545
  # si[:] = data[:]
547
546
  else:
548
547
  raise ValueError('Dimension %d is not implemented' % data.ndim)
549
- logger.debug('{}: shape out {}'.format(_name, si.shape))
548
+ logger.debug('AbstractPlugin._reorder_to_dicom: shape out {}'.format(
549
+ si.shape))
550
550
  return si
551
551
 
552
552
  def _reorder_from_dicom(self, data, flip=False, flipud=False):
@@ -574,8 +574,7 @@ class AbstractPlugin(object, metaclass=ABCMeta):
574
574
  flipud: Whether matrix is transposed
575
575
  """
576
576
 
577
- _name: str = '{}.{}'.format(__name__, self._reorder_from_dicom.__name__)
578
- logger.debug('{}: shape in {}'.format(_name, data.shape))
577
+ logger.debug('AbstractPlugin._reorder_from_dicom: shape in {}'.format(data.shape))
579
578
  if data.ndim == 5:
580
579
  d5, tags, slices, rows, columns = data.shape
581
580
  if flipud:
@@ -627,7 +626,8 @@ class AbstractPlugin(object, metaclass=ABCMeta):
627
626
  # si[:] = data[:]
628
627
  else:
629
628
  raise ValueError('Dimension %d is not implemented' % data.ndim)
630
- logger.debug('{}: shape out {}'.format(_name, si.shape))
629
+ logger.debug('AbstractPlugin._reorder_from_dicom: shape out {}'.format(
630
+ si.shape))
631
631
  return si
632
632
 
633
633
  @staticmethod