def test_hat_and_lcr(): hemi = hemi_icosahedron.subdivide(3) m, n = sph_harm_ind_list(8) with warnings.catch_warnings(): warnings.filterwarnings("ignore", message=descoteaux07_legacy_msg, category=PendingDeprecationWarning) B = real_sh_descoteaux_from_index(m, n, hemi.theta[:, None], hemi.phi[:, None]) H = hat(B) B_hat = np.dot(H, B) assert_array_almost_equal(B, B_hat) R = lcr_matrix(H) d = np.arange(len(hemi.theta)) r = d - np.dot(H, d) lev = np.sqrt(1 - H.diagonal()) r /= lev r -= r.mean() r2 = np.dot(R, d) assert_array_almost_equal(r, r2) r3 = np.dot(d, R.T) assert_array_almost_equal(r, r3)
def __init__(self, data, model, sphere, sh_order=None, tol=1e-2): if sh_order is None: if hasattr(model, "sh_order"): sh_order = model.sh_order else: sh_order = default_SH self.where_dwi = shm.lazy_index(~model.gtab.b0s_mask) if not isinstance(self.where_dwi, slice): msg = ("For optimal bootstrap tracking consider reordering the " "diffusion volumes so that all the b0 volumes are at the " "beginning") warn(msg) x, y, z = model.gtab.gradients[self.where_dwi].T r, theta, phi = cart2sphere(x, y, z) b_range = (r.max() - r.min()) / r.min() if b_range > tol: raise ValueError("BootOdfGen only supports single shell data") B, m, n = shm.real_sym_sh_basis(sh_order, theta, phi) H = shm.hat(B) R = shm.lcr_matrix(H) self.data = np.asarray(data, "float64") self.model = model self.sphere = sphere self.H = H self.R = R
def test_hat_and_lcr(): hemi = hemi_icosahedron.subdivide(3) m, n = sph_harm_ind_list(8) B = real_sph_harm(m, n, hemi.theta[:, None], hemi.phi[:, None]) H = hat(B) B_hat = np.dot(H, B) assert_array_almost_equal(B, B_hat) R = lcr_matrix(H) d = np.arange(len(hemi.theta)) r = d - np.dot(H, d) lev = np.sqrt(1 - H.diagonal()) r /= lev r -= r.mean() r2 = np.dot(R, d) assert_array_almost_equal(r, r2) r3 = np.dot(d, R.T) assert_array_almost_equal(r, r3)
def test_hat_and_lcr(): v, e, f = create_half_unit_sphere(6) m, n = sph_harm_ind_list(8) r, pol, azi = cart2sphere(*v.T) B = real_sph_harm(m, n, azi[:, None], pol[:, None]) H = hat(B) B_hat = np.dot(H, B) assert_array_almost_equal(B, B_hat) R = lcr_matrix(H) d = np.arange(len(azi)) r = d - np.dot(H, d) lev = np.sqrt(1 - H.diagonal()) r /= lev r -= r.mean() r2 = np.dot(R, d) assert_array_almost_equal(r, r2) r3 = np.dot(d, R.T) assert_array_almost_equal(r, r3)
delta_b, delta_q = fit_matrix # setup sampling matrix sphere = small_sphere theta = sphere.theta phi = sphere.phi sampling_matrix, _, _ = shm.real_sym_sh_basis(sh_order, theta, phi) ## from BootPmfGen __init__ # setup H and R matrices # TODO: figure out how to get H, R matrices from direction getter object x, y, z = model.gtab.gradients[dwi_mask].T r, theta, phi = shm.cart2sphere(x, y, z) B, _, _ = shm.real_sym_sh_basis(sh_order, theta, phi) H = shm.hat(B) R = shm.lcr_matrix(H) # create floating point copy of data dataf = np.asarray(data, dtype=float) print('streamline gen') global_chunk_size = args.chunk_size * args.ngpus nchunks = (seed_mask.shape[0] + global_chunk_size - 1) // global_chunk_size #streamline_generator = LocalTracking(boot_dg, tissue_classifier, seed_mask, affine=np.eye(4), step_size=.5) gpu_tracker = cuslines.GPUTracker(args.max_angle, args.min_signal, args.tc_threshold, args.step_size, dataf, H,