/tests/test_siemens.py

https://github.com/icometrix/dicom2nifti · Python · 206 lines · 170 code · 28 blank · 8 comment · 7 complexity · 144598d3c609a278b1d79109649aaf94 MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. """
  3. dicom2nifti
  4. @author: abrys
  5. """
  6. import os
  7. import shutil
  8. import tempfile
  9. import unittest
  10. import nibabel
  11. import numpy
  12. import dicom2nifti.compressed_dicom as compressed_dicom
  13. import pydicom
  14. import tests.test_data as test_data
  15. import dicom2nifti.convert_siemens as convert_siemens
  16. import dicom2nifti.common as common
  17. from dicom2nifti.common import read_dicom_directory
  18. from tests.test_tools import assert_compare_nifti, assert_compare_bval, assert_compare_bvec, ground_thruth_filenames
  19. class TestConversionSiemens(unittest.TestCase):
  20. def test_diffusion_imaging(self):
  21. tmp_output_dir = tempfile.mkdtemp()
  22. try:
  23. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_DTI),
  24. None)
  25. self.assertTrue(results.get('NII_FILE') is None)
  26. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  27. self.assertTrue(results.get('BVAL_FILE') is None)
  28. self.assertTrue(isinstance(results['BVAL'], numpy.ndarray))
  29. self.assertTrue(results.get('BVEC_FILE') is None)
  30. self.assertTrue(isinstance(results['BVEC'], numpy.ndarray))
  31. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_DTI),
  32. os.path.join(tmp_output_dir, 'test.nii.gz'))
  33. assert_compare_nifti(results['NII_FILE'],
  34. ground_thruth_filenames(test_data.SIEMENS_DTI)[0])
  35. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  36. assert_compare_bval(results['BVAL_FILE'],
  37. ground_thruth_filenames(test_data.SIEMENS_DTI)[2])
  38. self.assertTrue(isinstance(results['BVAL'], numpy.ndarray))
  39. assert_compare_bval(results['BVEC_FILE'],
  40. ground_thruth_filenames(test_data.SIEMENS_DTI)[3])
  41. self.assertTrue(isinstance(results['BVEC'], numpy.ndarray))
  42. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_DTI_IMPLICIT),
  43. os.path.join(tmp_output_dir, 'test.nii.gz'))
  44. assert_compare_nifti(results['NII_FILE'],
  45. ground_thruth_filenames(test_data.SIEMENS_DTI_IMPLICIT)[0])
  46. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  47. assert_compare_bval(results['BVAL_FILE'],
  48. ground_thruth_filenames(test_data.SIEMENS_DTI_IMPLICIT)[2])
  49. self.assertTrue(isinstance(results['BVAL'], numpy.ndarray))
  50. assert_compare_bval(results['BVEC_FILE'],
  51. ground_thruth_filenames(test_data.SIEMENS_DTI_IMPLICIT)[3])
  52. self.assertTrue(isinstance(results['BVEC'], numpy.ndarray))
  53. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI),
  54. os.path.join(tmp_output_dir, 'test.nii.gz'))
  55. assert_compare_nifti(results['NII_FILE'],
  56. ground_thruth_filenames(test_data.SIEMENS_CLASSIC_DTI)[0])
  57. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  58. assert_compare_bval(results['BVAL_FILE'],
  59. ground_thruth_filenames(test_data.SIEMENS_CLASSIC_DTI)[2])
  60. self.assertTrue(isinstance(results['BVAL'], numpy.ndarray))
  61. assert_compare_bval(results['BVEC_FILE'],
  62. ground_thruth_filenames(test_data.SIEMENS_CLASSIC_DTI)[3])
  63. self.assertTrue(isinstance(results['BVEC'], numpy.ndarray))
  64. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI_IMPLICIT),
  65. os.path.join(tmp_output_dir, 'test.nii.gz'))
  66. assert_compare_nifti(results['NII_FILE'],
  67. ground_thruth_filenames(test_data.SIEMENS_CLASSIC_DTI_IMPLICIT)[0])
  68. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  69. assert_compare_bval(results['BVAL_FILE'],
  70. ground_thruth_filenames(test_data.SIEMENS_CLASSIC_DTI_IMPLICIT)[2])
  71. self.assertTrue(isinstance(results['BVAL'], numpy.ndarray))
  72. assert_compare_bval(results['BVEC_FILE'],
  73. ground_thruth_filenames(test_data.SIEMENS_CLASSIC_DTI_IMPLICIT)[3])
  74. self.assertTrue(isinstance(results['BVEC'], numpy.ndarray))
  75. finally:
  76. shutil.rmtree(tmp_output_dir)
  77. def test_4d(self):
  78. tmp_output_dir = tempfile.mkdtemp()
  79. try:
  80. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI),
  81. None)
  82. self.assertTrue(results.get('NII_FILE') is None)
  83. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  84. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI),
  85. os.path.join(tmp_output_dir, 'test.nii.gz'))
  86. assert_compare_nifti(results['NII_FILE'],
  87. ground_thruth_filenames(test_data.SIEMENS_FMRI)[0])
  88. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  89. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI_IMPLICIT),
  90. os.path.join(tmp_output_dir, 'test.nii.gz'))
  91. assert_compare_nifti(results['NII_FILE'],
  92. ground_thruth_filenames(test_data.SIEMENS_FMRI_IMPLICIT)[0])
  93. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  94. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI),
  95. os.path.join(tmp_output_dir, 'test.nii.gz'))
  96. assert_compare_nifti(results['NII_FILE'],
  97. ground_thruth_filenames(test_data.SIEMENS_CLASSIC_FMRI)[0])
  98. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  99. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT),
  100. os.path.join(tmp_output_dir, 'test.nii.gz'))
  101. assert_compare_nifti(results['NII_FILE'],
  102. ground_thruth_filenames(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT)[0])
  103. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  104. finally:
  105. shutil.rmtree(tmp_output_dir)
  106. def test_anatomical(self):
  107. tmp_output_dir = tempfile.mkdtemp()
  108. try:
  109. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_ANATOMICAL),
  110. None)
  111. self.assertTrue(results.get('NII_FILE') is None)
  112. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  113. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_ANATOMICAL),
  114. os.path.join(tmp_output_dir, 'test.nii.gz'))
  115. assert_compare_nifti(results['NII_FILE'],
  116. ground_thruth_filenames(test_data.SIEMENS_ANATOMICAL)[0])
  117. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  118. results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_ANATOMICAL_IMPLICIT),
  119. os.path.join(tmp_output_dir, 'test.nii.gz'))
  120. assert_compare_nifti(results['NII_FILE'],
  121. ground_thruth_filenames(test_data.SIEMENS_ANATOMICAL_IMPLICIT)[0])
  122. self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
  123. finally:
  124. shutil.rmtree(tmp_output_dir)
  125. def test_is_mosaic(self):
  126. # test wit directory
  127. assert convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_DTI))
  128. assert convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_FMRI))
  129. assert not convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI))
  130. assert not convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI))
  131. assert not convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_ANATOMICAL))
  132. # test with grouped dicoms
  133. assert convert_siemens._is_mosaic(
  134. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_DTI)))
  135. assert convert_siemens._is_mosaic(
  136. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_FMRI)))
  137. assert not convert_siemens._is_mosaic(
  138. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)))
  139. assert not convert_siemens._is_mosaic(
  140. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)))
  141. assert not convert_siemens._is_mosaic(
  142. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_ANATOMICAL)))
  143. def test_is_4d(self):
  144. assert convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_DTI))
  145. assert convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_FMRI))
  146. assert not convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI))
  147. assert not convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI))
  148. assert not convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_ANATOMICAL))
  149. def test_is_diffusion_imaging(self):
  150. assert convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_DTI)[0])
  151. assert not convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_FMRI)[0])
  152. assert convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)[0])
  153. assert not convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)[0])
  154. assert not convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_ANATOMICAL)[0])
  155. def test_is_classic_4d(self):
  156. assert not convert_siemens._is_classic_4d(
  157. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_DTI)))
  158. assert not convert_siemens._is_classic_4d(
  159. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_FMRI)))
  160. assert convert_siemens._is_classic_4d(
  161. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)))
  162. assert convert_siemens._is_classic_4d(
  163. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)))
  164. assert not convert_siemens._is_classic_4d(
  165. convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_ANATOMICAL)))
  166. def test_is_siemens(self):
  167. assert not common.is_siemens(read_dicom_directory(test_data.PHILIPS_ANATOMICAL))
  168. assert common.is_siemens(read_dicom_directory(test_data.SIEMENS_ANATOMICAL))
  169. assert not common.is_siemens(read_dicom_directory(test_data.GE_ANATOMICAL))
  170. assert not common.is_siemens(read_dicom_directory(test_data.GENERIC_ANATOMICAL))
  171. assert not common.is_siemens(read_dicom_directory(test_data.HITACHI_ANATOMICAL))
  172. def test_get_asconv_headers(self):
  173. mosaic = compressed_dicom.read_file(os.path.join(test_data.SIEMENS_FMRI, 'IM-0001-0001.dcm'))
  174. asconv_headers = convert_siemens._get_asconv_headers(mosaic)
  175. assert len(asconv_headers) == 64022
  176. if __name__ == '__main__':
  177. unittest.main()