Exemple #1
0
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)
Exemple #3
0
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), :]
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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))
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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)