def test_multivox_mapmri(): gtab = get_3shell_gtab() data = np.random.random([20, 30, 1, gtab.gradients.shape[0]]) radial_order = 4 map_model = MapmriModel(gtab, radial_order=radial_order) mapfit = map_model.fit(data) c_map = mapfit.mapmri_coeff assert_equal(c_map.shape[0:3], data.shape[0:3]) assert_equal(np.alltrue(np.isreal(c_map)), True)
def test_multivox_shore(): gtab = get_3shell_gtab() data = np.random.random([20, 30, 1, gtab.gradients.shape[0]]) radial_order = 4 zeta = 700 asm = ShoreModel(gtab, radial_order=radial_order, zeta=zeta, lambdaN=1e-8, lambdaL=1e-8) asmfit = asm.fit(data) c_shore=asmfit.shore_coeff assert_equal(c_shore.shape[0:3], data.shape[0:3]) assert_equal(np.alltrue(np.isreal(c_shore)), True)
def setup(): data.gtab = get_3shell_gtab() data.mevals = np.array(([0.0017, 0.0003, 0.0003], [0.0017, 0.0003, 0.0003])) data.angl = [(0, 0), (60, 0)] data.S, data.sticks = MultiTensor( data.gtab, data.mevals, S0=100.0, angles=data.angl, fractions=[50, 50], snr=None) data.sh_order = 6 data.lambda_lb = 1e-8 data.lambda_csd = 1.0 sphere = get_sphere('repulsion100') data.sphere = sphere.vertices[0:int(sphere.vertices.shape[0]/2), :]
def get_test_data(): gtab = get_3shell_gtab() evals_list = [ np.array([1.7E-3, 0.4E-3, 0.4E-3]), np.array([6.0E-4, 4.0E-4, 4.0E-4]), np.array([3.0E-3, 3.0E-3, 3.0E-3]) ] s0 = [0.8, 1, 4] signals = [single_tensor(gtab, x[0], x[1]) for x in zip(s0, evals_list)] tissues = [0, 0, 2, 0, 1, 0, 0, 1, 2] # wm=0, gm=1, csf=2 data = [add_noise(signals[tissue], 80, s0[0]) for tissue in tissues] data = np.asarray(data).reshape((3, 3, 1, len(signals[0]))) evals = [evals_list[tissue] for tissue in tissues] evals = np.asarray(evals).reshape((3, 3, 1, 3)) tissues = np.asarray(tissues).reshape((3, 3, 1)) masks = [np.where(tissues == x, 1, 0) for x in range(3)] responses = [np.concatenate((x[0], [x[1]])) for x in zip(evals_list, s0)] return (gtab, data, masks, responses)
def test_multivox_forecast(): gtab = get_3shell_gtab() mevals = np.array(([0.0017, 0.0003, 0.0003], [0.0017, 0.0003, 0.0003])) angl1 = [(0, 0), (60, 0)] angl2 = [(90, 0), (45, 90)] angl3 = [(0, 0), (90, 0)] S = np.zeros((3, 1, 1, len(gtab.bvals))) S[0, 0, 0], _ = multi_tensor(gtab, mevals, S0=1.0, angles=angl1, fractions=[50, 50], snr=None) S[1, 0, 0], _ = multi_tensor(gtab, mevals, S0=1.0, angles=angl2, fractions=[50, 50], snr=None) S[2, 0, 0], _ = multi_tensor(gtab, mevals, S0=1.0, angles=angl3, fractions=[50, 50], snr=None) fm = ForecastModel(gtab, sh_order=8, dec_alg='CSD') f_fit = fm.fit(S) S_predict = f_fit.predict() assert_equal(S_predict.shape, S.shape) mse1 = np.sum((S_predict[0, 0, 0] - S[0, 0, 0])**2) / len(gtab.bvals) assert_almost_equal(mse1, 0.0, 3) mse2 = np.sum((S_predict[1, 0, 0] - S[1, 0, 0])**2) / len(gtab.bvals) assert_almost_equal(mse2, 0.0, 3) mse3 = np.sum((S_predict[2, 0, 0] - S[2, 0, 0])**2) / len(gtab.bvals) assert_almost_equal(mse3, 0.0, 3)
def test_MultiShellDeconvModel_response(): gtab = get_3shell_gtab() sh_order = 8 response = multi_shell_fiber_response(sh_order, [0, 1000, 2000, 3500], wm_response, gm_response, csf_response) model_1 = MultiShellDeconvModel(gtab, response, sh_order=sh_order) responses = np.array([wm_response, gm_response, csf_response]) model_2 = MultiShellDeconvModel(gtab, responses, sh_order=sh_order) response_1 = model_1.response.response response_2 = model_2.response.response npt.assert_array_almost_equal(response_1, response_2, 0) npt.assert_raises(ValueError, MultiShellDeconvModel, gtab, np.ones((4, 3, 4))) npt.assert_raises(ValueError, MultiShellDeconvModel, gtab, np.ones((3, 3, 4)), iso=3)
def test_multivox_shore(): gtab = get_3shell_gtab() data = np.random.random([20, 30, 1, gtab.gradients.shape[0]]) radial_order = 4 zeta = 700 asm = ShoreModel(gtab, radial_order=radial_order, zeta=zeta, lambdaN=1e-8, lambdaL=1e-8) with warnings.catch_warnings(): warnings.filterwarnings("ignore", message=descoteaux07_legacy_msg, category=PendingDeprecationWarning) asmfit = asm.fit(data) c_shore = asmfit.shore_coeff npt.assert_equal(c_shore.shape[0:3], data.shape[0:3]) npt.assert_equal(np.alltrue(np.isreal(c_shore)), True)
def test_mapmri_odf(): gtab = get_3shell_gtab() # load symmetric 724 sphere sphere = get_sphere('symmetric724') # load icosahedron sphere sphere2 = create_unit_sphere(5) evals = np.array(([0.0017, 0.0003, 0.0003], [0.0017, 0.0003, 0.0003])) data, golden_directions = MultiTensor(gtab, evals, S0=1.0, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) map_model = MapmriModel(gtab, radial_order=4) # symmetric724 mapfit = map_model.fit(data) odf = mapfit.odf(sphere) directions, _, _ = peak_directions(odf, sphere, .35, 25) assert_equal(len(directions), 2) assert_almost_equal(angular_similarity(directions, golden_directions), 2, 1) # 5 subdivisions odf = mapfit.odf(sphere2) directions, _, _ = peak_directions(odf, sphere2, .35, 25) assert_equal(len(directions), 2) assert_almost_equal(angular_similarity(directions, golden_directions), 2, 1) sb_dummies = sticks_and_ball_dummies(gtab) for sbd in sb_dummies: data, golden_directions = sb_dummies[sbd] mapfit = map_model.fit(data) odf = mapfit.odf(sphere2) directions, _, _ = peak_directions(odf, sphere2, .35, 25) if len(directions) <= 3: assert_equal(len(directions), len(golden_directions)) if len(directions) > 3: assert_equal(gfa(odf) < 0.1, True)
def test_mapmri_odf(): gtab = get_3shell_gtab() # load symmetric 724 sphere sphere = get_sphere('symmetric724') # load icosahedron sphere sphere2 = create_unit_sphere(5) evals = np.array(([0.0017, 0.0003, 0.0003], [0.0017, 0.0003, 0.0003])) data, golden_directions = MultiTensor( gtab, evals, S0=1.0, angles=[(0, 0), (90, 0)], fractions=[50, 50], snr=None) map_model = MapmriModel(gtab, radial_order=4) # symmetric724 mapfit = map_model.fit(data) odf = mapfit.odf(sphere) directions, _, _ = peak_directions(odf, sphere, .35, 25) assert_equal(len(directions), 2) assert_almost_equal( angular_similarity(directions, golden_directions), 2, 1) # 5 subdivisions odf = mapfit.odf(sphere2) directions, _, _ = peak_directions(odf, sphere2, .35, 25) assert_equal(len(directions), 2) assert_almost_equal( angular_similarity(directions, golden_directions), 2, 1) sb_dummies = sticks_and_ball_dummies(gtab) for sbd in sb_dummies: data, golden_directions = sb_dummies[sbd] mapfit = map_model.fit(data) odf = mapfit.odf(sphere2) directions, _, _ = peak_directions(odf, sphere2, .35, 25) if len(directions) <= 3: assert_equal(len(directions), len(golden_directions)) if len(directions) > 3: assert_equal(gfa(odf) < 0.1, True)
def test_multi_shell_fiber_response(): gtab = get_3shell_gtab() sh_order = 8 response = multi_shell_fiber_response(sh_order, [0, 1000, 2000, 3500], wm_response, gm_response, csf_response) npt.assert_equal(response.response.shape, (4, 7)) with warnings.catch_warnings(record=True) as w: response = multi_shell_fiber_response(sh_order, [1000, 2000, 3500], wm_response, gm_response, csf_response) # Test that the number of warnings raised is greater than 1, with # deprecation warnings being raised from using legacy SH bases as well # as a warning from multi_shell_fiber_response npt.assert_(len(w) > 1) # The last warning in list is the one from multi_shell_fiber_response npt.assert_(issubclass(w[-1].category, UserWarning)) npt.assert_( """No b0 given. Proceeding either way.""" in str(w[-1].message)) npt.assert_equal(response.response.shape, (3, 7))
def test_MSDeconvFit(): gtab = get_3shell_gtab() mevals = np.array([wm_response[0, :3], wm_response[0, :3]]) angles = [(0, 0), (60, 0)] S_wm, sticks = multi_tensor(gtab, mevals, wm_response[0, 3], angles=angles, fractions=[30., 70.], snr=None) S_gm = gm_response[0, 3] * np.exp(-gtab.bvals * gm_response[0, 0]) S_csf = csf_response[0, 3] * np.exp(-gtab.bvals * csf_response[0, 0]) sh_order = 8 response = multi_shell_fiber_response(sh_order, [0, 1000, 2000, 3500], wm_response, gm_response, csf_response) model = MultiShellDeconvModel(gtab, response) vf = [0.325, 0.2, 0.475] signal = sum(i * j for i, j in zip(vf, [S_csf, S_gm, S_wm])) fit = model.fit(signal) # Testing volume fractions npt.assert_array_almost_equal(fit.volume_fractions, vf, 1)
def test_multivox_forecast(): gtab = get_3shell_gtab() mevals = np.array(([0.0017, 0.0003, 0.0003], [0.0017, 0.0003, 0.0003])) angl1 = [(0, 0), (60, 0)] angl2 = [(90, 0), (45, 90)] angl3 = [(0, 0), (90, 0)] S = np.zeros((3, 1, 1, len(gtab.bvals))) S[0, 0, 0], sticks = MultiTensor( gtab, mevals, S0=1.0, angles=angl1, fractions=[50, 50], snr=None) S[1, 0, 0], sticks = MultiTensor( gtab, mevals, S0=1.0, angles=angl2, fractions=[50, 50], snr=None) S[2, 0, 0], sticks = MultiTensor( gtab, mevals, S0=1.0, angles=angl3, fractions=[50, 50], snr=None) fm = ForecastModel(gtab, sh_order=8, dec_alg='CSD') f_fit = fm.fit(S) S_predict = f_fit.predict() assert_equal(S_predict.shape, S.shape) mse1 = np.sum((S_predict[0, 0, 0]-S[0, 0, 0])**2) / len(gtab.bvals) assert_almost_equal(mse1, 0.0, 3) mse2 = np.sum((S_predict[1, 0, 0]-S[1, 0, 0])**2) / len(gtab.bvals) assert_almost_equal(mse2, 0.0, 3) mse3 = np.sum((S_predict[2, 0, 0]-S[2, 0, 0])**2) / len(gtab.bvals) assert_almost_equal(mse3, 0.0, 3)
def test_compartments(): # test for failure if no. of compartments less than 2 gtab = get_3shell_gtab() sh_order = 8 response = sim_response(sh_order, [0, 1000, 2000, 3500]) npt.assert_raises(ValueError, MultiShellDeconvModel, gtab, response, iso=1)