def test_bdg_initial_direction(): """This test the number of inital direction." """ hsph_updated = HemiSphere.from_sphere(unit_icosahedron).subdivide(2) vertices = hsph_updated.vertices bvecs = vertices bvals = np.ones(len(vertices)) * 1000 bvecs = np.insert(bvecs, 0, np.array([0, 0, 0]), axis=0) bvals = np.insert(bvals, 0, 0) gtab = gradient_table(bvals, bvecs) # test that we get one direction when we have a single tensor voxel = single_tensor(gtab).reshape([1, 1, 1, -1]) dti_model = dti.TensorModel(gtab) boot_dg = BootDirectionGetter.from_data(voxel, dti_model, 30, sh_order=6) initial_direction = boot_dg.initial_direction(np.zeros(3)) npt.assert_equal(len(initial_direction), 1) npt.assert_allclose(initial_direction[0], [1, 0, 0], atol=0.1) # test that we get multiple directions when we have a multi-tensor mevals = np.array([[1.5, 0.4, 0.4], [1.5, 0.4, 0.4]]) * 1e-3 fracs = [60, 40] voxel, primary_evecs = multi_tensor(gtab, mevals, fractions=fracs, snr=None) voxel = voxel.reshape([1, 1, 1, -1]) response = (np.array([0.0015, 0.0004, 0.0004]), 1) csd_model = ConstrainedSphericalDeconvModel(gtab, response=response, sh_order=4) boot_dg = BootDirectionGetter.from_data(voxel, csd_model, 30) initial_direction = boot_dg.initial_direction(np.zeros(3)) npt.assert_equal(len(initial_direction), 2) npt.assert_allclose(initial_direction, primary_evecs, atol=0.1)
def test_bdg_get_direction(): """This tests the direction found by the bootstrap direction getter. """ sphere = HemiSphere.from_sphere(unit_icosahedron.subdivide()) two_neighbors = sphere.edges[0] direction1 = sphere.vertices[two_neighbors[0]] direction2 = sphere.vertices[two_neighbors[1]] angle = np.rad2deg(direction1.dot(direction2)) point = np.zeros(3) prev_direction = direction2.copy() pmf = np.zeros([1, 1, 1, len(sphere.vertices)]) pmf[:, :, :, two_neighbors[0]] = 1 pmf_gen = SimplePmfGen(pmf) # test case in which no valid direction is found with default maxdir boot_dg = BootDirectionGetter(pmf_gen, angle / 2., sphere=sphere) npt.assert_equal(boot_dg.get_direction(point, prev_direction), 1) npt.assert_equal(direction2, prev_direction) # test case in which no valid direction is found with new max attempts boot_dg = BootDirectionGetter(pmf_gen, angle / 2., sphere=sphere, max_attempts=3) npt.assert_equal(boot_dg.get_direction(point, prev_direction), 1) npt.assert_equal(direction2, prev_direction) # test case in which a valid direction is found boot_dg = BootDirectionGetter(pmf_gen, angle * 2., sphere=sphere, max_attempts=1) npt.assert_equal(boot_dg.get_direction(point, prev_direction), 0) npt.assert_equal(direction1, prev_direction) # test invalid max_attempts parameters npt.assert_raises( ValueError, lambda: BootDirectionGetter( pmf_gen, angle * 2., sphere=sphere, max_attempts=0))
def test_bdg_get_direction(): """This tests the direction found by the bootstrap direction getter. """ sphere = HemiSphere.from_sphere(unit_icosahedron.subdivide()) two_neighbors = sphere.edges[0] direction1 = sphere.vertices[two_neighbors[0]] direction2 = sphere.vertices[two_neighbors[1]] angle = np.rad2deg(direction1.dot(direction2)) point = np.zeros(3) prev_direction = direction2.copy() pmf = np.zeros([1, 1, 1, len(sphere.vertices)]) pmf[:, :, :, two_neighbors[0]] = 1 pmf_gen = SimplePmfGen(pmf) # test case in which no valid direction is found with default maxdir boot_dg = BootDirectionGetter(pmf_gen, angle / 2., sphere=sphere) npt.assert_equal(boot_dg.get_direction(point, prev_direction), 1) npt.assert_equal(direction2, prev_direction) # test case in which no valid direction is found with new max attempts boot_dg = BootDirectionGetter(pmf_gen, angle / 2., sphere=sphere, max_attempts=3) npt.assert_equal(boot_dg.get_direction(point, prev_direction), 1) npt.assert_equal(direction2, prev_direction) # test case in which a valid direction is found boot_dg = BootDirectionGetter(pmf_gen, angle * 2., sphere=sphere, max_attempts=1) npt.assert_equal(boot_dg.get_direction(point, prev_direction), 0) npt.assert_equal(direction1, prev_direction) # test invalid max_attempts parameters npt.assert_raises( ValueError, lambda: BootDirectionGetter(pmf_gen, angle * 2., sphere=sphere, max_attempts=0))