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 dmri_recon(dwi_file, bval_file, bvec_file, mask, b0_threshold, recon='csd', num_threads=2): # define input parameters csd_resp_fa_thresh = 0.5 # dropped from 0.7 # define output filenames import os out_pam = os.path.abspath('peaks.pam5') out_shm = os.path.abspath('shm.nii.gz') out_peaks_dir = os.path.abspath('peaks_dirs.nii.gz') out_peaks_values = os.path.abspath('peaks_values.nii.gz') out_peaks_indices = os.path.abspath('peaks_indices.nii.gz') out_gfa = os.path.abspath('gfa.nii.gz') # import and run/fit model if recon == 'csd': from dipy.workflows.reconst import ReconstCSDFlow csd = ReconstCSDFlow() csd.run(dwi_file, bval_file, bvec_file, mask, b0_threshold=b0_threshold, bvecs_tol=0.01, roi_center=None, roi_radius=10, fa_thr=csd_resp_fa_thresh, frf=None, extract_pam_values=True, odf_to_sh_order=8, out_dir='', out_pam=out_pam, out_shm=out_shm, out_peaks_dir=out_peaks_dir, out_peaks_values=out_peaks_values, out_peaks_indices=out_peaks_indices, out_gfa=out_gfa) elif recon == 'csa': from dipy.workflows.reconst import ReconstCSAFlow csa = ReconstCSAFlow() csa.run(dwi_file, bval_file, bvec_file, mask, odf_to_sh_order=8, b0_threshold=b0_threshold, bvecs_tol=0.01, extract_pam_values=True, out_dir='', out_pam=out_pam, out_shm=out_shm, out_peaks_dir=out_peaks_dir, out_peaks_values=out_peaks_values, out_peaks_indices=out_peaks_indices, out_gfa=out_gfa) return (out_pam, out_shm, out_peaks_dir, out_peaks_values, out_peaks_indices, out_gfa)
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))