def test_mask(): with TemporaryDirectory() as out_dir: data_path, _, _ = get_fnames('small_25') volume, affine = load_nifti(data_path) mask_flow = MaskFlow() mask_flow.run(data_path, 10, out_dir=out_dir, ub=9) assert_false(mask_flow.last_generated_outputs) mask_flow.run(data_path, 10, out_dir=out_dir) mask_path = mask_flow.last_generated_outputs['out_mask'] mask_data, mask_affine = load_nifti(mask_path) npt.assert_equal(mask_data.shape, volume.shape) npt.assert_array_almost_equal(mask_affine, affine)
def test_mask(): with TemporaryDirectory() as out_dir: data_path, _, _ = get_data('small_25') vol_img = nib.load(data_path) volume = vol_img.get_data() mask_flow = MaskFlow() mask_flow.run(data_path, 10, out_dir=out_dir, ub=9) assert_false(mask_flow.last_generated_outputs) mask_flow.run(data_path, 10, out_dir=out_dir) mask_path = mask_flow.last_generated_outputs['out_mask'] mask_img = nib.load(mask_path) mask_data = mask_img.get_data() assert_true(mask_data.shape == volume.shape) nt.assert_array_almost_equal(mask_img.affine, vol_img.affine) assert_true(mask_data.dtype == np.uint8)
def test_det_track(): with TemporaryDirectory() as out_dir: data_path, bval_path, bvec_path = get_data('small_64D') vol_img = nib.load(data_path) volume = vol_img.get_data() mask = np.ones_like(volume[:, :, :, 0]) mask_img = nib.Nifti1Image(mask.astype(np.uint8), vol_img.affine) mask_path = join(out_dir, 'tmp_mask.nii.gz') nib.save(mask_img, mask_path) reconst_csd_flow = ReconstCSDFlow() reconst_csd_flow.run(data_path, bval_path, bvec_path, mask_path, out_dir=out_dir, extract_pam_values=True) pam_path = reconst_csd_flow.last_generated_outputs['out_pam'] gfa_path = reconst_csd_flow.last_generated_outputs['out_gfa'] # Create seeding mask by thresholding the gfa mask_flow = MaskFlow() mask_flow.run(gfa_path, 0.8, out_dir=out_dir) seeds_path = mask_flow.last_generated_outputs['out_mask'] # Put identity in gfa path to prevent impossible to use # local tracking because of affine containing shearing. gfa_img = nib.load(gfa_path) save_nifti(gfa_path, gfa_img.get_data(), np.eye(4), gfa_img.header) # Test tracking with pam no sh det_track_pam = DetTrackPAMFlow() assert_equal(det_track_pam.get_short_name(), 'det_track') det_track_pam.run(pam_path, gfa_path, seeds_path) tractogram_path = \ det_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh det_track_pam.run(pam_path, gfa_path, seeds_path, use_sh=True) tractogram_path = \ det_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path))
def test_det_track(): with TemporaryDirectory() as out_dir: data_path, bval_path, bvec_path = get_data('small_64D') vol_img = nib.load(data_path) volume = vol_img.get_data() mask = np.ones_like(volume[:, :, :, 0]) mask_img = nib.Nifti1Image(mask.astype(np.uint8), vol_img.affine) mask_path = join(out_dir, 'tmp_mask.nii.gz') nib.save(mask_img, mask_path) reconst_csd_flow = ReconstCSDFlow() reconst_csd_flow.run(data_path, bval_path, bvec_path, mask_path, out_dir=out_dir, extract_pam_values=True) pam_path = reconst_csd_flow.last_generated_outputs['out_pam'] gfa_path = reconst_csd_flow.last_generated_outputs['out_gfa'] # Create seeding mask by thresholding the gfa mask_flow = MaskFlow() mask_flow.run(gfa_path, 0.8, out_dir=out_dir) seeds_path = mask_flow.last_generated_outputs['out_mask'] # Put identity in gfa path to prevent impossible to use # local tracking because of affine containing shearing. gfa_img = nib.load(gfa_path) save_nifti(gfa_path, gfa_img.get_data(), np.eye(4), gfa_img.header) # Test tracking with pam no sh det_track_pam = DetTrackPAMFlow() assert_equal(det_track_pam.get_short_name(), 'det_track') det_track_pam.run(pam_path, gfa_path, seeds_path) tractogram_path = \ det_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh det_track_pam.run(pam_path, gfa_path, seeds_path, use_sh=True) tractogram_path = \ det_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path))
def test_particle_filtering_traking_workflows(): with TemporaryDirectory() as out_dir: dwi_path, bval_path, bvec_path = get_fnames('small_64D') vol_img = nib.load(dwi_path) volume = vol_img.get_data() # Create some mask mask = np.ones_like(volume[:, :, :, 0]) mask_img = nib.Nifti1Image(mask.astype(np.uint8), vol_img.affine) mask_path = join(out_dir, 'tmp_mask.nii.gz') nib.save(mask_img, mask_path) simple_wm = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 1, 0, 0], [0, 0, 1, 0, 1, 0, 1, 0, 0, 0], [0, 0, 1, 0, 1, 1, 0, 1, 0, 0], [0, 0, 0, 1, 1, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ]) simple_wm = np.dstack([np.zeros(simple_wm.shape), np.zeros(simple_wm.shape), simple_wm, simple_wm, simple_wm, simple_wm, simple_wm, simple_wm, np.zeros(simple_wm.shape), np.zeros(simple_wm.shape)]) simple_gm = np.array([[0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 1, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 1, 0, 1, 0], [0, 1, 1, 0, 1, 1, 1, 0, 1, 1], [0, 0, 0, 1, 0, 0, 0, 1, 1, 0], ]) simple_gm = np.dstack([np.zeros(simple_gm.shape), np.zeros(simple_gm.shape), simple_gm, simple_gm, simple_gm, simple_gm, simple_gm, simple_gm, np.zeros(simple_gm.shape), np.zeros(simple_gm.shape)]) simple_csf = np.ones(simple_wm.shape) - simple_wm - simple_gm wm_path = join(out_dir, 'tmp_wm.nii.gz') gm_path = join(out_dir, 'tmp_gm.nii.gz') csf_path = join(out_dir, 'tmp_csf.nii.gz') for path, arr in zip([wm_path, gm_path, csf_path], [simple_wm, simple_gm, simple_csf]): nib.save(nib.Nifti1Image(arr.astype(np.uint8), vol_img.affine), path) # CSD Reconstruction reconst_csd_flow = ReconstCSDFlow() reconst_csd_flow.run(dwi_path, bval_path, bvec_path, mask_path, out_dir=out_dir, extract_pam_values=True) pam_path = reconst_csd_flow.last_generated_outputs['out_pam'] gfa_path = reconst_csd_flow.last_generated_outputs['out_gfa'] # Create seeding mask by thresholding the gfa mask_flow = MaskFlow() mask_flow.run(gfa_path, 0.8, out_dir=out_dir) seeds_path = mask_flow.last_generated_outputs['out_mask'] # Test tracking pf_track_pam = PFTrackingPAMFlow() assert_equal(pf_track_pam.get_short_name(), 'track_pft') pf_track_pam.run(pam_path, wm_path, gm_path, csf_path, seeds_path) tractogram_path = \ pf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test that tracking returns seeds pf_track_pam = PFTrackingPAMFlow() pf_track_pam._force_overwrite = True pf_track_pam.run(pam_path, wm_path, gm_path, csf_path, seeds_path, save_seeds=True) tractogram_path = \ pf_track_pam.last_generated_outputs['out_tractogram'] assert_true(tractogram_has_seeds(tractogram_path)) assert_true(seeds_are_same_space_as_streamlines(tractogram_path))
def test_local_fiber_tracking_workflow(): with TemporaryDirectory() as out_dir: data_path, bval_path, bvec_path = get_fnames('small_64D') vol_img = nib.load(data_path) volume = vol_img.get_data() mask = np.ones_like(volume[:, :, :, 0]) mask_img = nib.Nifti1Image(mask.astype(np.uint8), vol_img.affine) mask_path = join(out_dir, 'tmp_mask.nii.gz') nib.save(mask_img, mask_path) reconst_csd_flow = ReconstCSDFlow() reconst_csd_flow.run(data_path, bval_path, bvec_path, mask_path, out_dir=out_dir, extract_pam_values=True) pam_path = reconst_csd_flow.last_generated_outputs['out_pam'] gfa_path = reconst_csd_flow.last_generated_outputs['out_gfa'] # Create seeding mask by thresholding the gfa mask_flow = MaskFlow() mask_flow.run(gfa_path, 0.8, out_dir=out_dir) seeds_path = mask_flow.last_generated_outputs['out_mask'] mask_path = mask_flow.last_generated_outputs['out_mask'] # Put identity in gfa path to prevent impossible to use # local tracking because of affine containing shearing. gfa_img = nib.load(gfa_path) save_nifti(gfa_path, gfa_img.get_data(), np.eye(4), gfa_img.header) # Test tracking with pam no sh lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True assert_equal(lf_track_pam.get_short_name(), 'track_local') lf_track_pam.run(pam_path, gfa_path, seeds_path) tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with binary tissue classifier lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, mask_path, seeds_path, use_binary_mask=True) tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="eudx") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and deterministic getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="deterministic") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and probabilistic getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="probabilistic") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and closest peaks getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="closestpeaks") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test that tracking returns seeds lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="deterministic", save_seeds=True) tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_true(tractogram_has_seeds(tractogram_path)) assert_true(seeds_are_same_space_as_streamlines(tractogram_path))
def test_local_fiber_tracking_workflow(): with TemporaryDirectory() as out_dir: data_path, bval_path, bvec_path = get_fnames('small_64D') vol_img = nib.load(data_path) volume = vol_img.get_data() mask = np.ones_like(volume[:, :, :, 0]) mask_img = nib.Nifti1Image(mask.astype(np.uint8), vol_img.affine) mask_path = join(out_dir, 'tmp_mask.nii.gz') nib.save(mask_img, mask_path) reconst_csd_flow = ReconstCSDFlow() reconst_csd_flow.run(data_path, bval_path, bvec_path, mask_path, out_dir=out_dir, extract_pam_values=True) pam_path = reconst_csd_flow.last_generated_outputs['out_pam'] gfa_path = reconst_csd_flow.last_generated_outputs['out_gfa'] # Create seeding mask by thresholding the gfa mask_flow = MaskFlow() mask_flow.run(gfa_path, 0.8, out_dir=out_dir) seeds_path = mask_flow.last_generated_outputs['out_mask'] # Put identity in gfa path to prevent impossible to use # local tracking because of affine containing shearing. gfa_img = nib.load(gfa_path) save_nifti(gfa_path, gfa_img.get_data(), np.eye(4), gfa_img.header) # Test tracking with pam no sh lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True assert_equal(lf_track_pam.get_short_name(), 'track_local') lf_track_pam.run(pam_path, gfa_path, seeds_path) tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="eudx") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and deterministic getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="deterministic") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and probabilistic getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="probabilistic") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and closestpeaks getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="closestpeaks") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path))
def test_particule_filtering_traking_workflows(): with TemporaryDirectory() as out_dir: dwi_path, bval_path, bvec_path = get_fnames('small_64D') vol_img = nib.load(dwi_path) volume = vol_img.get_data() # Create some mask mask = np.ones_like(volume[:, :, :, 0]) mask_img = nib.Nifti1Image(mask.astype(np.uint8), vol_img.affine) mask_path = join(out_dir, 'tmp_mask.nii.gz') nib.save(mask_img, mask_path) simple_wm = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 1, 0, 0], [0, 0, 1, 0, 1, 0, 1, 0, 0, 0], [0, 0, 1, 0, 1, 1, 0, 1, 0, 0], [0, 0, 0, 1, 1, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ]) simple_wm = np.dstack([np.zeros(simple_wm.shape), np.zeros(simple_wm.shape), simple_wm, simple_wm, simple_wm, simple_wm, simple_wm, simple_wm, np.zeros(simple_wm.shape), np.zeros(simple_wm.shape)]) simple_gm = np.array([[0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 1, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 1, 0, 1, 0], [0, 1, 1, 0, 1, 1, 1, 0, 1, 1], [0, 0, 0, 1, 0, 0, 0, 1, 1, 0], ]) simple_gm = np.dstack([np.zeros(simple_gm.shape), np.zeros(simple_gm.shape), simple_gm, simple_gm, simple_gm, simple_gm, simple_gm, simple_gm, np.zeros(simple_gm.shape), np.zeros(simple_gm.shape)]) simple_csf = np.ones(simple_wm.shape) - simple_wm - simple_gm wm_path = join(out_dir, 'tmp_wm.nii.gz') gm_path = join(out_dir, 'tmp_gm.nii.gz') csf_path = join(out_dir, 'tmp_csf.nii.gz') for path, arr in zip([wm_path, gm_path, csf_path], [simple_wm, simple_gm, simple_csf]): nib.save(nib.Nifti1Image(arr.astype(np.uint8), vol_img.affine), path) # CSD Reconstruction reconst_csd_flow = ReconstCSDFlow() reconst_csd_flow.run(dwi_path, bval_path, bvec_path, mask_path, out_dir=out_dir, extract_pam_values=True) pam_path = reconst_csd_flow.last_generated_outputs['out_pam'] gfa_path = reconst_csd_flow.last_generated_outputs['out_gfa'] # Create seeding mask by thresholding the gfa mask_flow = MaskFlow() mask_flow.run(gfa_path, 0.8, out_dir=out_dir) seeds_path = mask_flow.last_generated_outputs['out_mask'] # Test tracking pf_track_pam = PFTrackingPAMFlow() assert_equal(pf_track_pam.get_short_name(), 'track_pft') pf_track_pam.run(pam_path, wm_path, gm_path, csf_path, seeds_path) tractogram_path = \ pf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path))
def test_local_fiber_tracking_workflow(): with TemporaryDirectory() as out_dir: data_path, bval_path, bvec_path = get_fnames('small_64D') volume, affine = load_nifti(data_path) mask = np.ones_like(volume[:, :, :, 0], dtype=np.uint8) mask_path = join(out_dir, 'tmp_mask.nii.gz') save_nifti(mask_path, mask, affine) reconst_csd_flow = ReconstCSDFlow() reconst_csd_flow.run(data_path, bval_path, bvec_path, mask_path, out_dir=out_dir, extract_pam_values=True) pam_path = reconst_csd_flow.last_generated_outputs['out_pam'] gfa_path = reconst_csd_flow.last_generated_outputs['out_gfa'] # Create seeding mask by thresholding the gfa mask_flow = MaskFlow() mask_flow.run(gfa_path, 0.8, out_dir=out_dir) seeds_path = mask_flow.last_generated_outputs['out_mask'] mask_path = mask_flow.last_generated_outputs['out_mask'] gfa_img, gfa_affine = load_nifti(gfa_path) save_nifti(gfa_path, gfa_img, gfa_affine) # Test tracking with pam no sh lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True assert_equal(lf_track_pam.get_short_name(), 'track_local') lf_track_pam.run(pam_path, gfa_path, seeds_path) tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with binary stopping criterion lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, mask_path, seeds_path, use_binary_mask=True) tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="eudx") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and deterministic getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="deterministic") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and probabilistic getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="probabilistic") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test tracking with pam with sh and closest peaks getter lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="closestpeaks") tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test that tracking returns seeds lf_track_pam = LocalFiberTrackingPAMFlow() lf_track_pam._force_overwrite = True lf_track_pam.run(pam_path, gfa_path, seeds_path, tracking_method="deterministic", save_seeds=True) tractogram_path = \ lf_track_pam.last_generated_outputs['out_tractogram'] assert_true(tractogram_has_seeds(tractogram_path)) assert_true(seeds_are_same_space_as_streamlines(tractogram_path))
def test_particle_filtering_traking_workflows(): with TemporaryDirectory() as out_dir: dwi_path, bval_path, bvec_path = get_fnames('small_64D') volume, affine = load_nifti(dwi_path) # Create some mask mask = np.ones_like(volume[:, :, :, 0], dtype=np.uint8) mask_path = join(out_dir, 'tmp_mask.nii.gz') save_nifti(mask_path, mask, affine) simple_wm = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 1, 0, 0], [0, 0, 1, 0, 1, 0, 1, 0, 0, 0], [0, 0, 1, 0, 1, 1, 0, 1, 0, 0], [0, 0, 0, 1, 1, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ]) simple_wm = np.dstack([np.zeros(simple_wm.shape), np.zeros(simple_wm.shape), simple_wm, simple_wm, simple_wm, simple_wm, simple_wm, simple_wm, np.zeros(simple_wm.shape), np.zeros(simple_wm.shape)]) simple_gm = np.array([[0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 1, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 1, 0, 1, 0], [0, 1, 1, 0, 1, 1, 1, 0, 1, 1], [0, 0, 0, 1, 0, 0, 0, 1, 1, 0], ]) simple_gm = np.dstack([np.zeros(simple_gm.shape), np.zeros(simple_gm.shape), simple_gm, simple_gm, simple_gm, simple_gm, simple_gm, simple_gm, np.zeros(simple_gm.shape), np.zeros(simple_gm.shape)]) simple_csf = np.ones(simple_wm.shape) - simple_wm - simple_gm wm_path = join(out_dir, 'tmp_wm.nii.gz') gm_path = join(out_dir, 'tmp_gm.nii.gz') csf_path = join(out_dir, 'tmp_csf.nii.gz') for path, arr in zip([wm_path, gm_path, csf_path], [simple_wm, simple_gm, simple_csf]): save_nifti(path, arr.astype(np.uint8), affine) # CSD Reconstruction reconst_csd_flow = ReconstCSDFlow() with warnings.catch_warnings(): warnings.filterwarnings( "ignore", message=descoteaux07_legacy_msg, category=PendingDeprecationWarning) reconst_csd_flow.run(dwi_path, bval_path, bvec_path, mask_path, out_dir=out_dir, extract_pam_values=True) pam_path = reconst_csd_flow.last_generated_outputs['out_pam'] gfa_path = reconst_csd_flow.last_generated_outputs['out_gfa'] # Create seeding mask by thresholding the gfa mask_flow = MaskFlow() mask_flow.run(gfa_path, 0.8, out_dir=out_dir) seeds_path = mask_flow.last_generated_outputs['out_mask'] # Test tracking pf_track_pam = PFTrackingPAMFlow() assert_equal(pf_track_pam.get_short_name(), 'track_pft') with warnings.catch_warnings(): warnings.filterwarnings( "ignore", message=descoteaux07_legacy_msg, category=PendingDeprecationWarning) pf_track_pam.run(pam_path, wm_path, gm_path, csf_path, seeds_path) tractogram_path = \ pf_track_pam.last_generated_outputs['out_tractogram'] assert_false(is_tractogram_empty(tractogram_path)) # Test that tracking returns seeds pf_track_pam = PFTrackingPAMFlow() pf_track_pam._force_overwrite = True with warnings.catch_warnings(): warnings.filterwarnings( "ignore", message=descoteaux07_legacy_msg, category=PendingDeprecationWarning) pf_track_pam.run(pam_path, wm_path, gm_path, csf_path, seeds_path, save_seeds=True) tractogram_path = \ pf_track_pam.last_generated_outputs['out_tractogram'] assert_true(tractogram_has_seeds(tractogram_path)) assert_true(seeds_are_same_space_as_streamlines(tractogram_path))