def test_is_singleframe_diffusion_imaging(self): assert convert_philips._is_singleframe_diffusion_imaging( convert_philips._get_grouped_dicoms(read_dicom_directory(test_data.PHILIPS_DTI))) assert not convert_philips._is_singleframe_diffusion_imaging( convert_philips._get_grouped_dicoms(read_dicom_directory(test_data.PHILIPS_ANATOMICAL))) assert not convert_philips._is_singleframe_diffusion_imaging( convert_philips._get_grouped_dicoms(read_dicom_directory(test_data.PHILIPS_FMRI)))
def test_is_4d(self): diffusion_group = convert_ge._get_grouped_dicoms(read_dicom_directory(test_data.GE_DTI)) _4d_group = convert_ge._get_grouped_dicoms(read_dicom_directory(test_data.GE_FMRI)) anatomical_group = convert_ge._get_grouped_dicoms(read_dicom_directory(test_data.GE_ANATOMICAL)) self.assertTrue(convert_ge._is_4d(diffusion_group)) self.assertTrue(convert_ge._is_4d(_4d_group)) self.assertFalse(convert_ge._is_4d(anatomical_group))
def test_4d(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI), None) self.assertTrue(results.get('NII_FILE') is None) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.SIEMENS_FMRI)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.SIEMENS_FMRI_IMPLICIT)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.SIEMENS_CLASSIC_FMRI)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) finally: shutil.rmtree(tmp_output_dir)
def test_diffusion_images(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_DTI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti(results['NII_FILE'], ground_thruth_filenames( test_data.GE_DTI)[0]) is True assert compare_bval(results['BVAL_FILE'], ground_thruth_filenames( test_data.GE_DTI)[2]) is True assert compare_bvec(results['BVEC_FILE'], ground_thruth_filenames( test_data.GE_DTI)[3]) is True convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_DTI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[0]) is True assert compare_bval( results['BVAL_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[2]) is True assert compare_bvec( results['BVEC_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[3]) is True finally: shutil.rmtree(tmp_output_dir)
def test_anatomical(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_ANATOMICAL), None) self.assertTrue(results.get('NII_FILE') is None) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_ANATOMICAL), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.GE_ANATOMICAL)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_ANATOMICAL_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.GE_ANATOMICAL_IMPLICIT)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) finally: shutil.rmtree(tmp_output_dir)
def test_anatomical(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_philips.dicom_to_nifti(read_dicom_directory(test_data.PHILIPS_ANATOMICAL), None) self.assertTrue(results.get('NII_FILE') is None) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_philips.dicom_to_nifti(read_dicom_directory(test_data.PHILIPS_ANATOMICAL), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.PHILIPS_ANATOMICAL)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_philips.dicom_to_nifti(read_dicom_directory(test_data.PHILIPS_ANATOMICAL_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.PHILIPS_ANATOMICAL_IMPLICIT)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_philips.dicom_to_nifti(read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.PHILIPS_ENHANCED_ANATOMICAL)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) self.assertRaises(ConversionError, convert_philips.dicom_to_nifti, read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) finally: shutil.rmtree(tmp_output_dir)
def test_is_diffusion_imaging(self): diffusion_group = convert_ge._get_grouped_dicoms(read_dicom_directory(test_data.GE_DTI)) _4d_group = convert_ge._get_grouped_dicoms(read_dicom_directory(test_data.GE_FMRI)) anatomical_group = convert_ge._get_grouped_dicoms(read_dicom_directory(test_data.GE_ANATOMICAL)) assert convert_ge._is_diffusion_imaging(diffusion_group) assert not convert_ge._is_diffusion_imaging(_4d_group) assert not convert_ge._is_diffusion_imaging(anatomical_group)
def test_is_mosaic(self): # test wit directory assert convert_siemens._is_mosaic( read_dicom_directory(test_data.SIEMENS_DTI)) assert convert_siemens._is_mosaic( read_dicom_directory(test_data.SIEMENS_FMRI)) assert not convert_siemens._is_mosaic( read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)) assert not convert_siemens._is_mosaic( read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)) assert not convert_siemens._is_mosaic( read_dicom_directory(test_data.SIEMENS_ANATOMICAL)) # test with grouped dicoms assert convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms( read_dicom_directory(test_data.SIEMENS_DTI))) assert convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms( read_dicom_directory(test_data.SIEMENS_FMRI))) assert not convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms( read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI))) assert not convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms( read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI))) assert not convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms( read_dicom_directory(test_data.SIEMENS_ANATOMICAL)))
def test_4d(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_siemens.dicom_to_nifti( read_dicom_directory(test_data.SIEMENS_FMRI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.SIEMENS_FMRI)[0]) is True results = convert_siemens.dicom_to_nifti( read_dicom_directory(test_data.SIEMENS_FMRI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames( test_data.SIEMENS_FMRI_IMPLICIT)[0]) is True results = convert_siemens.dicom_to_nifti( read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames( test_data.SIEMENS_CLASSIC_FMRI)[0]) is True results = convert_siemens.dicom_to_nifti( read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames( test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT)[0]) is True finally: shutil.rmtree(tmp_output_dir)
def test_anatomical(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_philips.dicom_to_nifti( read_dicom_directory(test_data.PHILIPS_ANATOMICAL), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames( test_data.PHILIPS_ANATOMICAL)[0]) is True results = convert_philips.dicom_to_nifti( read_dicom_directory(test_data.PHILIPS_ANATOMICAL_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames( test_data.PHILIPS_ANATOMICAL_IMPLICIT)[0]) is True results = convert_philips.dicom_to_nifti( read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames( test_data.PHILIPS_ENHANCED_ANATOMICAL)[0]) is True self.assertRaises( ConversionError, convert_philips.dicom_to_nifti, read_dicom_directory( test_data.PHILIPS_ENHANCED_ANATOMICAL_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) finally: shutil.rmtree(tmp_output_dir)
def test_is_slice_increment_inconsistent(self): self.assertFalse( is_slice_increment_inconsistent( sort_dicoms(read_dicom_directory(test_data.GE_ANATOMICAL)))) self.assertTrue( is_slice_increment_inconsistent( sort_dicoms( read_dicom_directory(test_data.FAILING_SLICEINCREMENT))))
def test_validate_sliceincrement(self): validate_slice_increment( sort_dicoms(read_dicom_directory(test_data.GE_ANATOMICAL))) self.assertRaises( ConversionValidationError, validate_slice_increment, sort_dicoms(read_dicom_directory( test_data.FAILING_SLICEINCREMENT)))
def test_is_philips(self): assert convert_philips.is_philips( read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not convert_philips.is_philips( read_dicom_directory(test_data.SIEMENS_ANATOMICAL)) assert not convert_philips.is_philips( read_dicom_directory(test_data.GE_ANATOMICAL)) assert not convert_philips.is_philips( read_dicom_directory(test_data.GENERIC_ANATOMICAL))
def test_get_vendor(self): assert convert_dicom._get_vendor( read_dicom_directory(test_data.SIEMENS_ANATOMICAL)) == convert_dicom.Vendor.SIEMENS assert convert_dicom._get_vendor(read_dicom_directory(test_data.GE_ANATOMICAL)) == convert_dicom.Vendor.GE assert convert_dicom._get_vendor( read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) == convert_dicom.Vendor.PHILIPS assert convert_dicom._get_vendor( read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL)) == convert_dicom.Vendor.PHILIPS assert convert_dicom._get_vendor( read_dicom_directory(test_data.GENERIC_ANATOMICAL)) == convert_dicom.Vendor.GENERIC
def test_is_ge(self): assert not convert_ge.is_ge( read_dicom_directory(test_data.SIEMENS_ANATOMICAL)) assert convert_ge.is_ge(read_dicom_directory(test_data.GE_ANATOMICAL)) assert not convert_ge.is_ge( read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not convert_ge.is_ge( read_dicom_directory(test_data.GENERIC_ANATOMICAL)) assert not convert_ge.is_ge( read_dicom_directory(test_data.HITACHI_ANATOMICAL))
def test_is_singleframe_diffusion_imaging(self): assert convert_philips._is_singleframe_diffusion_imaging( convert_philips._get_grouped_dicoms( read_dicom_directory(test_data.PHILIPS_DTI))) assert not convert_philips._is_singleframe_diffusion_imaging( convert_philips._get_grouped_dicoms( read_dicom_directory(test_data.PHILIPS_ANATOMICAL))) assert not convert_philips._is_singleframe_diffusion_imaging( convert_philips._get_grouped_dicoms( read_dicom_directory(test_data.PHILIPS_FMRI)))
def test_is_classic_4d(self): assert not convert_siemens._is_classic_4d( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_DTI))) assert not convert_siemens._is_classic_4d( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_FMRI))) assert convert_siemens._is_classic_4d( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI))) assert convert_siemens._is_classic_4d( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI))) assert not convert_siemens._is_classic_4d( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_ANATOMICAL)))
def test_is_diffusion_imaging(self): assert convert_siemens._is_diffusion_imaging( read_dicom_directory(test_data.SIEMENS_DTI)[0]) assert not convert_siemens._is_diffusion_imaging( read_dicom_directory(test_data.SIEMENS_FMRI)[0]) assert convert_siemens._is_diffusion_imaging( read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)[0]) assert not convert_siemens._is_diffusion_imaging( read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)[0]) assert not convert_siemens._is_diffusion_imaging( read_dicom_directory(test_data.SIEMENS_ANATOMICAL)[0])
def test_is_4d(self): assert convert_siemens._is_4d( read_dicom_directory(test_data.SIEMENS_DTI)) assert convert_siemens._is_4d( read_dicom_directory(test_data.SIEMENS_FMRI)) assert not convert_siemens._is_4d( read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)) assert not convert_siemens._is_4d( read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)) assert not convert_siemens._is_4d( read_dicom_directory(test_data.SIEMENS_ANATOMICAL))
def test_validate_slicecount_disabled(self): tmp_output_dir = tempfile.mkdtemp() try: self.assertRaises(ConversionValidationError, dicom_to_nifti, read_dicom_directory(test_data.FAILING_SLICECOUNT), os.path.join(tmp_output_dir, 'test.nii.gz')) dicom2nifti.disable_validate_slicecount() dicom_to_nifti(read_dicom_directory(test_data.FAILING_SLICECOUNT), os.path.join(tmp_output_dir, 'test.nii.gz')) finally: shutil.rmtree(tmp_output_dir)
def test_validate_slicecount_disabled(self): tmp_output_dir = tempfile.mkdtemp() try: self.assertRaises( ConversionValidationError, dicom_to_nifti, read_dicom_directory(test_data.FAILING_SLICECOUNT), os.path.join(tmp_output_dir, 'test.nii.gz')) dicom2nifti.disable_validate_slicecount() dicom_to_nifti(read_dicom_directory(test_data.FAILING_SLICECOUNT), os.path.join(tmp_output_dir, 'test.nii.gz')) finally: shutil.rmtree(tmp_output_dir)
def test_anatomical(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_ge.dicom_to_nifti(read_dicom_directory(test_data.GE_ANATOMICAL), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.GE_ANATOMICAL)[0]) == True results = convert_ge.dicom_to_nifti(read_dicom_directory(test_data.GE_ANATOMICAL_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.GE_ANATOMICAL_IMPLICIT)[0]) == True finally: shutil.rmtree(tmp_output_dir)
def test_validate_orientation_disabled(self): tmp_output_dir = tempfile.mkdtemp() try: dicom2nifti.disable_validate_orthogonal() # this will also fail on this data dicom2nifti.disable_validate_slice_increment() # this will also fail on this data dicom2nifti.disable_validate_slicecount() self.assertRaises(ConversionValidationError, dicom_to_nifti, read_dicom_directory(test_data.FAILING_ORIENTATION), os.path.join(tmp_output_dir, 'test.nii.gz')) dicom2nifti.disable_validate_orientation() dicom_to_nifti(read_dicom_directory(test_data.FAILING_ORIENTATION), os.path.join(tmp_output_dir, 'test.nii.gz')) finally: shutil.rmtree(tmp_output_dir)
def test_anatomical(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_generic.dicom_to_nifti(read_dicom_directory(test_data.GE_ANATOMICAL), None) self.assertTrue(results.get('NII_FILE') is None) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_generic.dicom_to_nifti(read_dicom_directory(test_data.GE_ANATOMICAL), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.GE_ANATOMICAL)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) finally: shutil.rmtree(tmp_output_dir)
def test_diffusion_images(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_DTI), None) self.assertTrue(results.get('NII_FILE') is None) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) self.assertTrue(results.get('BVAL_FILE') is None) self.assertTrue(isinstance(results['BVAL'], numpy.ndarray)) self.assertTrue(results.get('BVEC_FILE') is None) self.assertTrue(isinstance(results['BVEC'], numpy.ndarray)) results = convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_DTI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.GE_DTI)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) assert_compare_bval(results['BVAL_FILE'], ground_thruth_filenames(test_data.GE_DTI)[2]) self.assertTrue(isinstance(results['BVAL'], numpy.ndarray)) assert_compare_bval(results['BVEC_FILE'], ground_thruth_filenames(test_data.GE_DTI)[3]) self.assertTrue(isinstance(results['BVEC'], numpy.ndarray)) convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_DTI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) assert_compare_bval( results['BVAL_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[2]) self.assertTrue(isinstance(results['BVAL'], numpy.ndarray)) assert_compare_bval( results['BVEC_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[3]) self.assertTrue(isinstance(results['BVEC'], numpy.ndarray)) finally: shutil.rmtree(tmp_output_dir)
def test_validate_orientation_disabled(self): tmp_output_dir = tempfile.mkdtemp() try: dicom2nifti.disable_validate_orthogonal( ) # this will also fail on this data dicom2nifti.disable_validate_slice_increment( ) # this will also fail on this data dicom2nifti.disable_validate_slicecount() self.assertRaises( ConversionValidationError, dicom_to_nifti, read_dicom_directory(test_data.FAILING_ORIENTATION), os.path.join(tmp_output_dir, 'test.nii.gz')) dicom2nifti.disable_validate_orientation() dicom_to_nifti(read_dicom_directory(test_data.FAILING_ORIENTATION), os.path.join(tmp_output_dir, 'test.nii.gz')) finally: shutil.rmtree(tmp_output_dir)
def test_is_mosaic(self): # test wit directory assert convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_DTI)) assert convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_FMRI)) assert not convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)) assert not convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)) assert not convert_siemens._is_mosaic(read_dicom_directory(test_data.SIEMENS_ANATOMICAL)) # test with grouped dicoms assert convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_DTI))) assert convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_FMRI))) assert not convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI))) assert not convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI))) assert not convert_siemens._is_mosaic( convert_siemens._classic_get_grouped_dicoms(read_dicom_directory(test_data.SIEMENS_ANATOMICAL)))
def test_diffusion_images_old(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_ge.dicom_to_nifti(read_dicom_directory(test_data.GE_DTI_OLD), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.GE_DTI_OLD)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) finally: shutil.rmtree(tmp_output_dir)
def test_4d(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_philips.dicom_to_nifti( read_dicom_directory(test_data.PHILIPS_FMRI), None) self.assertTrue(results.get('NII_FILE') is None) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_philips.dicom_to_nifti( read_dicom_directory(test_data.PHILIPS_FMRI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.PHILIPS_FMRI)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_philips.dicom_to_nifti( read_dicom_directory(test_data.PHILIPS_FMRI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.PHILIPS_FMRI_IMPLICIT)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) results = convert_philips.dicom_to_nifti( read_dicom_directory(test_data.PHILIPS_ENHANCED_FMRI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.PHILIPS_ENHANCED_FMRI)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) self.assertRaises( ConversionError, convert_philips.dicom_to_nifti, read_dicom_directory(test_data.PHILIPS_ENHANCED_FMRI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) finally: shutil.rmtree(tmp_output_dir)
def test_is_multiframe_dicom(self): assert common.is_multiframe_dicom(read_dicom_directory(test_data.PHILIPS_ENHANCED_DTI)) assert not common.is_multiframe_dicom(read_dicom_directory(test_data.PHILIPS_DTI)) assert common.is_multiframe_dicom(read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL)) assert not common.is_multiframe_dicom(read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert common.is_multiframe_dicom(read_dicom_directory(test_data.PHILIPS_ENHANCED_FMRI)) assert not common.is_multiframe_dicom(read_dicom_directory(test_data.PHILIPS_FMRI))
def test_is_multiframe_anatomical(self): assert not convert_philips._is_multiframe_anatomical(read_dicom_directory(test_data.PHILIPS_ENHANCED_DTI)) assert not convert_philips._is_multiframe_anatomical(read_dicom_directory(test_data.PHILIPS_DTI)) assert convert_philips._is_multiframe_anatomical(read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL)) assert not convert_philips._is_multiframe_anatomical(read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not convert_philips._is_multiframe_anatomical(read_dicom_directory(test_data.PHILIPS_ENHANCED_FMRI)) assert not convert_philips._is_multiframe_anatomical(read_dicom_directory(test_data.PHILIPS_FMRI))
def test_is_singleframe_4d(self): assert not convert_philips._is_singleframe_4d(read_dicom_directory(test_data.PHILIPS_ENHANCED_DTI)) assert convert_philips._is_singleframe_4d(read_dicom_directory(test_data.PHILIPS_DTI)) assert not convert_philips._is_singleframe_4d(read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL)) assert not convert_philips._is_singleframe_4d(read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not convert_philips._is_singleframe_4d(read_dicom_directory(test_data.PHILIPS_ENHANCED_FMRI)) assert convert_philips._is_singleframe_4d(read_dicom_directory(test_data.PHILIPS_FMRI))
def test_not_a_volume(self): tmp_output_dir = tempfile.mkdtemp() try: settings.disable_validate_orthogonal() with self.assertRaises(ConversionError) as exception: convert_generic.dicom_to_nifti(read_dicom_directory(test_data.FAILING_NOTAVOLUME), os.path.join(tmp_output_dir, 'test.nii.gz')) self.assertEqual(str(exception.exception), 'NOT_A_VOLUME') finally: settings.enable_validate_orthogonal() shutil.rmtree(tmp_output_dir)
def test_not_a_volume(self): tmp_output_dir = tempfile.mkdtemp() try: settings.disable_validate_orthogonal() with self.assertRaises(ConversionError) as exception: convert_generic.dicom_to_nifti( read_dicom_directory(test_data.FAILING_NOTAVOLUME), os.path.join(tmp_output_dir, 'test.nii.gz')) self.assertEqual(str(exception.exception), 'NOT_A_VOLUME') finally: settings.enable_validate_orthogonal() shutil.rmtree(tmp_output_dir)
def test_anatomical_implicit(self): tmp_output_dir = tempfile.mkdtemp() try: settings.disable_validate_multiframe_implicit() results = convert_philips.dicom_to_nifti(read_dicom_directory( test_data.PHILIPS_ENHANCED_ANATOMICAL_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.PHILIPS_ENHANCED_ANATOMICAL_IMPLICIT)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) settings.enable_validate_multiframe_implicit() finally: shutil.rmtree(tmp_output_dir)
def test_diffusion_images_old(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_ge.dicom_to_nifti( read_dicom_directory(test_data.GE_DTI_OLD), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti( results['NII_FILE'], ground_thruth_filenames(test_data.GE_DTI_OLD)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) finally: shutil.rmtree(tmp_output_dir)
def test_diffusion_images(self): tmp_output_dir = tempfile.mkdtemp() try: results = convert_ge.dicom_to_nifti(read_dicom_directory(test_data.GE_DTI), None) self.assertTrue(results.get('NII_FILE') is None) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) self.assertTrue(results.get('BVAL_FILE') is None) self.assertTrue(isinstance(results['BVAL'], numpy.ndarray)) self.assertTrue(results.get('BVEC_FILE') is None) self.assertTrue(isinstance(results['BVEC'], numpy.ndarray)) results = convert_ge.dicom_to_nifti(read_dicom_directory(test_data.GE_DTI), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.GE_DTI)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) assert_compare_bval(results['BVAL_FILE'], ground_thruth_filenames(test_data.GE_DTI)[2]) self.assertTrue(isinstance(results['BVAL'], numpy.ndarray)) assert_compare_bval(results['BVEC_FILE'], ground_thruth_filenames(test_data.GE_DTI)[3]) self.assertTrue(isinstance(results['BVEC'], numpy.ndarray)) convert_ge.dicom_to_nifti(read_dicom_directory(test_data.GE_DTI_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) assert_compare_bval(results['BVAL_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[2]) self.assertTrue(isinstance(results['BVAL'], numpy.ndarray)) assert_compare_bval(results['BVEC_FILE'], ground_thruth_filenames(test_data.GE_DTI_IMPLICIT)[3]) self.assertTrue(isinstance(results['BVEC'], numpy.ndarray)) finally: shutil.rmtree(tmp_output_dir)
def test_is_multiframe_diffusion_imaging(self): assert convert_philips._is_multiframe_diffusion_imaging(read_dicom_directory(test_data.PHILIPS_ENHANCED_DTI)) assert not convert_philips._is_multiframe_diffusion_imaging(read_dicom_directory(test_data.PHILIPS_DTI)) assert not convert_philips._is_multiframe_diffusion_imaging(read_dicom_directory( test_data.PHILIPS_ENHANCED_ANATOMICAL)) assert not convert_philips._is_multiframe_diffusion_imaging(read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not convert_philips._is_multiframe_diffusion_imaging(read_dicom_directory( test_data.PHILIPS_ENHANCED_FMRI)) assert not convert_philips._is_multiframe_diffusion_imaging(read_dicom_directory(test_data.PHILIPS_FMRI))
def test_anatomical_implicit(self): tmp_output_dir = tempfile.mkdtemp() try: settings.disable_validate_multiframe_implicit() results = convert_philips.dicom_to_nifti( read_dicom_directory( test_data.PHILIPS_ENHANCED_ANATOMICAL_IMPLICIT), os.path.join(tmp_output_dir, 'test.nii.gz')) assert compare_nifti( results['NII_FILE'], ground_thruth_filenames( test_data.PHILIPS_ENHANCED_ANATOMICAL_IMPLICIT)[0]) is True settings.enable_validate_multiframe_implicit() finally: shutil.rmtree(tmp_output_dir)
def dicom_series_to_nifti(original_dicom_directory, output_file, reorient_nifti=True): """ Converts dicom single series (see pydicom) to nifty, mimicking SPM Examples: See unit test will return a dictionary containing - the NIFTI under key 'NIFTI' - the NIFTI file path under 'NII_FILE' - the BVAL file path under 'BVAL_FILE' (only for dti) - the BVEC file path under 'BVEC_FILE' (only for dti) IMPORTANT: If no specific sequence type can be found it will default to anatomical and try to convert. You should check that the data you are trying to convert is supported by this code Inspired by http://nipy.sourceforge.net/nibabel/dicom/spm_dicom.html Inspired by http://code.google.com/p/pydicom/source/browse/source/dicom/contrib/pydicom_series.py :param reorient_nifti: if True the nifti affine and data will be updated so the data is stored LAS oriented :param output_file: file path to write to :param original_dicom_directory: directory with the dicom files for a single series/scan """ # copy files so we can can modify without altering the original temp_directory = tempfile.mkdtemp() try: dicom_directory = os.path.join(temp_directory, 'dicom') shutil.copytree(original_dicom_directory, dicom_directory) decompress_directory(dicom_directory) dicom_input = common.read_dicom_directory(dicom_directory) return dicom_array_to_nifti(dicom_input, output_file, reorient_nifti) except AttributeError as exception: reraise(tp=ConversionError, value=ConversionError(str(exception)), tb=sys.exc_info()[2]) finally: # remove the copied data shutil.rmtree(temp_directory)
def test_single_slice(self): tmp_output_dir = tempfile.mkdtemp() try: settings.disable_validate_slicecount() results = convert_generic.dicom_to_nifti( read_dicom_directory(test_data.GE_ANATOMICAL_SINGLE_SLICE), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti( results['NII_FILE'], ground_thruth_filenames( test_data.GE_ANATOMICAL_SINGLE_SLICE)[0]) self.assertTrue( isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) finally: settings.enable_validate_slicecount() shutil.rmtree(tmp_output_dir)
def test_is_multiframe_anatomical(self): assert not convert_philips._is_multiframe_anatomical( read_dicom_directory(test_data.PHILIPS_ENHANCED_DTI)) assert not convert_philips._is_multiframe_anatomical( read_dicom_directory(test_data.PHILIPS_DTI)) assert convert_philips._is_multiframe_anatomical( read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL)) assert not convert_philips._is_multiframe_anatomical( read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not convert_philips._is_multiframe_anatomical( read_dicom_directory(test_data.PHILIPS_ENHANCED_FMRI)) assert not convert_philips._is_multiframe_anatomical( read_dicom_directory(test_data.PHILIPS_FMRI))
def test_is_multiframe_diffusion_imaging(self): assert convert_philips._is_multiframe_diffusion_imaging( read_dicom_directory(test_data.PHILIPS_ENHANCED_DTI)) assert not convert_philips._is_multiframe_diffusion_imaging( read_dicom_directory(test_data.PHILIPS_DTI)) assert not convert_philips._is_multiframe_diffusion_imaging( read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL)) assert not convert_philips._is_multiframe_diffusion_imaging( read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not convert_philips._is_multiframe_diffusion_imaging( read_dicom_directory(test_data.PHILIPS_ENHANCED_FMRI)) assert not convert_philips._is_multiframe_diffusion_imaging( read_dicom_directory(test_data.PHILIPS_FMRI))
def test_is_singleframe_4d(self): assert not convert_philips._is_singleframe_4d( read_dicom_directory(test_data.PHILIPS_ENHANCED_DTI)) assert convert_philips._is_singleframe_4d( read_dicom_directory(test_data.PHILIPS_DTI)) assert not convert_philips._is_singleframe_4d( read_dicom_directory(test_data.PHILIPS_ENHANCED_ANATOMICAL)) assert not convert_philips._is_singleframe_4d( read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not convert_philips._is_singleframe_4d( read_dicom_directory(test_data.PHILIPS_ENHANCED_FMRI)) assert convert_philips._is_singleframe_4d( read_dicom_directory(test_data.PHILIPS_FMRI))
def dicom_series_to_nifti(original_dicom_directory, output_file=None, reorient_nifti=True): """ Converts dicom single series (see pydicom) to nifty, mimicking SPM Examples: See unit test will return a dictionary containing - the NIFTI under key 'NIFTI' - the NIFTI file path under 'NII_FILE' - the BVAL file path under 'BVAL_FILE' (only for dti) - the BVEC file path under 'BVEC_FILE' (only for dti) IMPORTANT: If no specific sequence type can be found it will default to anatomical and try to convert. You should check that the data you are trying to convert is supported by this code Inspired by http://nipy.sourceforge.net/nibabel/dicom/spm_dicom.html Inspired by http://code.google.com/p/pydicom/source/browse/source/dicom/contrib/pydicom_series.py :param reorient_nifti: if True the nifti affine and data will be updated so the data is stored LAS oriented :param output_file: file path to write to if not set to None :param original_dicom_directory: directory with the dicom files for a single series/scan :return nibabel image """ # copy files so we can can modify without altering the original temp_directory = tempfile.mkdtemp() try: dicom_directory = os.path.join(temp_directory, 'dicom') shutil.copytree(original_dicom_directory, dicom_directory) dicom_input = common.read_dicom_directory(dicom_directory) return dicom_array_to_nifti(dicom_input, output_file, reorient_nifti) except AttributeError as exception: reraise( tp=ConversionError, value=ConversionError(str(exception)), tb=sys.exc_info()[2]) finally: # remove the copied data shutil.rmtree(temp_directory)
def test_inconsistent_slice_increment_resampling(self): tmp_output_dir = tempfile.mkdtemp() try: settings.disable_validate_orthogonal() settings.disable_validate_slice_increment() settings.enable_resampling() settings.set_resample_padding(0) settings.set_resample_spline_interpolation_order(1) results = convert_generic.dicom_to_nifti(read_dicom_directory(test_data.FAILING_SLICEINCREMENT_2), os.path.join(tmp_output_dir, 'test.nii.gz')) assert_compare_nifti(results['NII_FILE'], ground_thruth_filenames(test_data.FAILING_SLICEINCREMENT_2)[0]) self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image)) finally: settings.disable_resampling() settings.enable_validate_slice_increment() settings.enable_validate_orientation() shutil.rmtree(tmp_output_dir)
def test_validate_slicecount(self): validate_slicecount(read_dicom_directory(test_data.GE_ANATOMICAL)) self.assertRaises(ConversionValidationError, validate_slicecount, read_dicom_directory(test_data.FAILING_SLICECOUNT))
def test_is_diffusion_imaging(self): assert convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_DTI)[0]) assert not convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_FMRI)[0]) assert convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)[0]) assert not convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)[0]) assert not convert_siemens._is_diffusion_imaging(read_dicom_directory(test_data.SIEMENS_ANATOMICAL)[0])
def test_validate_orientation(self): validate_orientation(read_dicom_directory(test_data.GE_ANATOMICAL)) self.assertRaises(ConversionValidationError, validate_orientation, read_dicom_directory(test_data.FAILING_ORIENTATION))
def test_is_4d(self): assert convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_DTI)) assert convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_FMRI)) assert not convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI)) assert not convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI)) assert not convert_siemens._is_4d(read_dicom_directory(test_data.SIEMENS_ANATOMICAL))
def test_is_ge(self): assert not common.is_ge(read_dicom_directory(test_data.SIEMENS_ANATOMICAL)) assert common.is_ge(read_dicom_directory(test_data.GE_ANATOMICAL)) assert not common.is_ge(read_dicom_directory(test_data.PHILIPS_ANATOMICAL)) assert not common.is_ge(read_dicom_directory(test_data.GENERIC_ANATOMICAL)) assert not common.is_ge(read_dicom_directory(test_data.HITACHI_ANATOMICAL))
def test_validate_sliceincrement(self): validate_slice_increment(sort_dicoms(read_dicom_directory(test_data.GE_ANATOMICAL))) self.assertRaises(ConversionValidationError, validate_slice_increment, sort_dicoms(read_dicom_directory(test_data.FAILING_SLICEINCREMENT)))
def test_validate_orthogonal(self): validate_orthogonal(read_dicom_directory(test_data.GE_ANATOMICAL)) self.assertRaises(ConversionValidationError, validate_orthogonal, read_dicom_directory(test_data.FAILING_ORHTOGONAL))