import nibabel as ni import numpy as np import osmosis.model.analysis as oza import osmosis.model.sparse_deconvolution as ssd import osmosis.model.dti as dti import osmosis.viz.mpl as mpl import matplotlib.pyplot as plt %matplotlib inline import os import osmosis as oz import osmosis.io as oio oio.data_path = os.path.join(oz.__path__[0], 'data') subject = 'SUB1' data_1k_1, data_1k_2 = oio.get_dwi_data(1000, subject) data_2k_1, data_2k_2 = oio.get_dwi_data(2000, subject) data_4k_1, data_4k_2 = oio.get_dwi_data(4000, subject) wm_mask = np.zeros(ni.load(data_1k_1[0]).shape[:3]) wm_nifti = ni.load(oio.data_path + '/%s/%s_wm_mask.nii.gz'%(subject, subject)).get_data() wm_mask[np.where(wm_nifti==1)] = 1 # Start working on a small chunk: #wm_mask = np.zeros(wm_mask.shape) #wm_mask[40:42, 40:42, 40:42] = 1 ad_rd = oio.get_ad_rd(subject, 2000) SD_2k_1_nnls_demean = ssd.SparseDeconvolutionModel(*data_2k_1, mask=wm_mask, params_file ='temp', axial_diffusivity=ad_rd[0]['AD'], radial_diffusivity=ad_rd[0]['RD'], solver='nnls') SD_2k_2_nnls_demean = ssd.SparseDeconvolutionModel(*data_2k_2, mask=wm_mask, params_file ='temp', axial_diffusivity=ad_rd[1]['AD'], radial_diffusivity=ad_rd[1]['RD'], solver='nnls') SD_2k_1_nnls = ssd.SparseDeconvolutionModel(*data_2k_1, mask=wm_mask, params_file ='temp', axial_diffusivity=ad_rd[0]['AD'], radial_diffusivity=ad_rd[0]['RD'], solver='nnls', demean=False) SD_2k_2_nnls = ssd.SparseDeconvolutionModel(*data_2k_2, mask=wm_mask, params_file ='temp', axial_diffusivity=ad_rd[1]['AD'], radial_diffusivity=ad_rd[1]['RD'], solver='nnls', demean=False) SD_2k_1_EN_demean = ssd.SparseDeconvolutionModel(*data_2k_1, mask=wm_mask, params_file ='temp', axial_diffusivity=ad_rd[0]['AD'], radial_diffusivity=ad_rd[0]['RD']) SD_2k_2_EN_demean = ssd.SparseDeconvolutionModel(*data_2k_2, mask=wm_mask, params_file ='temp', axial_diffusivity=ad_rd[1]['AD'], radial_diffusivity=ad_rd[1]['RD']) SD_2k_1_EN = ssd.SparseDeconvolutionModel(*data_2k_1, mask=wm_mask, params_file ='temp', axial_diffusivity=ad_rd[0]['AD'], radial_diffusivity=ad_rd[0]['RD'], demean=False) SD_2k_2_EN = ssd.SparseDeconvolutionModel(*data_2k_2, mask=wm_mask, params_file ='temp', axial_diffusivity=ad_rd[1]['AD'], radial_diffusivity=ad_rd[1]['RD'], demean=False) rrmse_2k_nnls = oza.cross_predict(SD_2k_1_nnls, SD_2k_2_nnls) rrmse_2k_nnls_demean = oza.cross_predict(SD_2k_1_nnls_demean, SD_2k_2_nnls_demean) rrmse_2k_EN = oza.cross_predict(SD_2k_1_EN, SD_2k_2_EN) rrmse_2k_EN_demean = oza.cross_predict(SD_2k_1_EN, SD_2k_2_EN_demean) #print(rrmse_2k_nnls[np.where(wm_mask==1)]) #print(rrmse_2k_nnls_demean[np.where(wm_mask==1)]) #print(rrmse_2k_EN_demean[np.where(wm_mask==1)]) #print(rrmse_2k_EN[np.where(wm_mask==1)]) rrmse_2k_nnls_demean[np.isfinite(rrmse_2k_nnls_demean)] fig = mpl.probability_hist(rrmse_2k_nnls[np.isfinite(rrmse_2k_nnls)], label='NNLS') fig = mpl.probability_hist(rrmse_2k_nnls_demean[np.isfinite(rrmse_2k_nnls_demean)], fig=fig, label='NNLS (demean)') fig.axes[0].plot([1,1], fig.axes[0].get_ylim(), '--k') fig.axes[0].plot([1/np.sqrt(2),1/np.sqrt(2)], fig.axes[0].get_ylim(), '--k') fig.axes[0].set_xlim([0.6,1.4]) plt.legend() fig = mpl.probability_hist(rrmse_2k_EN[np.isfinite(rrmse_2k_EN)], label='Elastic Net') fig = mpl.probability_hist(rrmse_2k_EN_demean[np.isfinite(rrmse_2k_EN_demean)], fig=fig, label='Elastic Net (demean)') fig.axes[0].plot([1,1], fig.axes[0].get_ylim(), '--k') fig.axes[0].plot([1/np.sqrt(2),1/np.sqrt(2)], fig.axes[0].get_ylim(), '--k') fig.axes[0].set_xlim([0.6,1.4]) plt.legend() whos a = 1 fig = mpl.probability_hist(rrmse_2k_nnls[np.isfinite(rrmse_2k_nnls)], label='NNLS') fig = mpl.probability_hist(rrmse_2k_EN[np.isfinite(rrmse_2k_EN)], fig=fig, label='Elastic Net ') fig.axes[0].plot([1,1], fig.axes[0].get_ylim(), '--k') fig.axes[0].plot([1/np.sqrt(2),1/np.sqrt(2)], fig.axes[0].get_ylim(), '--k') fig.axes[0].set_xlim([0.6,1.4]) plt.legend()