def test_cartesian_normalization(radial_order=4, time_order=2): gtab_4d = generate_gtab4D() l1, l2, l3 = [0.0015, 0.0003, 0.0003] S = generate_signal_crossing(gtab_4d, l1, l2, l3) qtdmri_mod_aniso = qtdmri.QtdmriModel(gtab_4d, radial_order=radial_order, time_order=time_order, cartesian=True, normalization=False) qtdmri_mod_aniso_norm = qtdmri.QtdmriModel(gtab_4d, radial_order=radial_order, time_order=time_order, cartesian=True, normalization=True) qtdmri_fit_aniso = qtdmri_mod_aniso.fit(S) qtdmri_fit_aniso_norm = qtdmri_mod_aniso_norm.fit(S) assert_array_almost_equal(qtdmri_fit_aniso.fitted_signal(), qtdmri_fit_aniso_norm.fitted_signal()) rt_grid = qtdmri.create_rt_space_grid(5, 20e-3, 5, 0.02, .05) pdf_aniso = qtdmri_fit_aniso.pdf(rt_grid) pdf_aniso_norm = qtdmri_fit_aniso_norm.pdf(rt_grid) assert_array_almost_equal(pdf_aniso / pdf_aniso.max(), pdf_aniso_norm / pdf_aniso.max()) norm_laplacian = qtdmri_fit_aniso.norm_of_laplacian_signal() norm_laplacian_norm = qtdmri_fit_aniso_norm.norm_of_laplacian_signal() assert_array_almost_equal(norm_laplacian / norm_laplacian, norm_laplacian_norm / norm_laplacian)
def test_spherical_normalization(radial_order=4, time_order=2): gtab_4d = generate_gtab4D() l1, l2, l3 = [0.0015, 0.0003, 0.0003] S = generate_signal_crossing(gtab_4d, l1, l2, l3) qtdmri_mod_aniso = qtdmri.QtdmriModel(gtab_4d, radial_order=radial_order, time_order=time_order, cartesian=False, normalization=False) qtdmri_mod_aniso_norm = qtdmri.QtdmriModel(gtab_4d, radial_order=radial_order, time_order=time_order, cartesian=False, normalization=True) qtdmri_fit = qtdmri_mod_aniso.fit(S) qtdmri_fit_norm = qtdmri_mod_aniso_norm.fit(S) assert_array_almost_equal(qtdmri_fit.fitted_signal(), qtdmri_fit_norm.fitted_signal()) rt_grid = qtdmri.create_rt_space_grid(5, 20e-3, 5, 0.02, .05) pdf = qtdmri_fit.pdf(rt_grid) pdf_norm = qtdmri_fit_norm.pdf(rt_grid) assert_array_almost_equal(pdf / pdf.max(), pdf_norm / pdf.max()) norm_laplacian = qtdmri_fit.norm_of_laplacian_signal() norm_laplacian_norm = qtdmri_fit_norm.norm_of_laplacian_signal() assert_array_almost_equal(norm_laplacian / norm_laplacian, norm_laplacian_norm / norm_laplacian)
def test_anisotropic_isotropic_equivalence(radial_order=4, time_order=2): # generate qt-scheme and arbitary synthetic crossing data. gtab_4d = generate_gtab4D() l1, l2, l3 = [0.0015, 0.0003, 0.0003] S = generate_signal_crossing(gtab_4d, l1, l2, l3) # initialize both cartesian and spherical models without any kind of # regularization qtdmri_mod_aniso = qtdmri.QtdmriModel(gtab_4d, radial_order=radial_order, time_order=time_order, cartesian=True, anisotropic_scaling=False) qtdmri_mod_iso = qtdmri.QtdmriModel(gtab_4d, radial_order=radial_order, time_order=time_order, cartesian=False, anisotropic_scaling=False) # both implementations fit the same signal qtdmri_fit_cart = qtdmri_mod_aniso.fit(S) qtdmri_fit_sphere = qtdmri_mod_iso.fit(S) # same signal fit assert_array_almost_equal(qtdmri_fit_cart.fitted_signal(), qtdmri_fit_sphere.fitted_signal()) # same PDF reconstruction rt_grid = qtdmri.create_rt_space_grid(5, 20e-3, 5, 0.02, .05) pdf_aniso = qtdmri_fit_cart.pdf(rt_grid) pdf_iso = qtdmri_fit_sphere.pdf(rt_grid) assert_array_almost_equal(pdf_aniso / pdf_aniso.max(), pdf_iso / pdf_aniso.max()) # same norm of the laplacian norm_laplacian_aniso = qtdmri_fit_cart.norm_of_laplacian_signal() norm_laplacian_iso = qtdmri_fit_sphere.norm_of_laplacian_signal() assert_almost_equal(norm_laplacian_aniso / norm_laplacian_aniso, norm_laplacian_iso / norm_laplacian_aniso) # all q-space index is the same for arbitrary tau tau = 0.02 assert_almost_equal(qtdmri_fit_cart.rtop(tau), qtdmri_fit_sphere.rtop(tau)) assert_almost_equal(qtdmri_fit_cart.rtap(tau), qtdmri_fit_sphere.rtap(tau)) assert_almost_equal(qtdmri_fit_cart.rtpp(tau), qtdmri_fit_sphere.rtpp(tau)) assert_almost_equal(qtdmri_fit_cart.msd(tau), qtdmri_fit_sphere.msd(tau)) assert_almost_equal(qtdmri_fit_cart.qiv(tau), qtdmri_fit_sphere.qiv(tau)) # ODF estimation is the same sphere = get_sphere() assert_array_almost_equal(qtdmri_fit_cart.odf(sphere, tau, s=0), qtdmri_fit_sphere.odf(sphere, tau, s=0))
def test_spherical_normalization(radial_order=4, time_order=2): gtab_4d = generate_gtab4D() l1, l2, l3 = [0.0015, 0.0003, 0.0003] S = generate_signal_crossing(gtab_4d, l1, l2, l3) qtdmri_mod_aniso = qtdmri.QtdmriModel(gtab_4d, radial_order=radial_order, time_order=time_order, cartesian=False, normalization=False) qtdmri_mod_aniso_norm = qtdmri.QtdmriModel(gtab_4d, radial_order=radial_order, time_order=time_order, cartesian=False, normalization=True) with warnings.catch_warnings(): warnings.filterwarnings("ignore", message=descoteaux07_legacy_msg, category=PendingDeprecationWarning) qtdmri_fit = qtdmri_mod_aniso.fit(S) qtdmri_fit_norm = qtdmri_mod_aniso_norm.fit(S) assert_array_almost_equal(qtdmri_fit.fitted_signal(), qtdmri_fit_norm.fitted_signal()) rt_grid = qtdmri.create_rt_space_grid(5, 20e-3, 5, 0.02, .05) with warnings.catch_warnings(): warnings.filterwarnings("ignore", message=descoteaux07_legacy_msg, category=PendingDeprecationWarning) pdf = qtdmri_fit.pdf(rt_grid) pdf_norm = qtdmri_fit_norm.pdf(rt_grid) assert_array_almost_equal(pdf / pdf.max(), pdf_norm / pdf.max()) norm_laplacian = qtdmri_fit.norm_of_laplacian_signal() norm_laplacian_norm = qtdmri_fit_norm.norm_of_laplacian_signal() assert_array_almost_equal(norm_laplacian / norm_laplacian, norm_laplacian_norm / norm_laplacian)