In [1]:
import numpy as np
import nibabel as nib
import osmosis.model.isotropic as mdm
import osmosis.utils as ozu
import dsitool as dst
import matplotlib
font = {'family' : 'normal',
'weight' : 'bold',
'size' : 50}
matplotlib.rc('font', **font)
%pylab inline
np.set_printoptions(threshold=np.nan)
In [2]:
files_fit = np.array(['DSI17_exvivo_cc', 'DSI11_invivo_cc'])
files_mean = np.array(['DSI17_exvivo_wm', 'DSI11_invivo_wm'])
models = [mdm.single_exp_rs, mdm.bi_exp_rs, mdm.single_exp_nf_rs]
labels = ['mono-exp', 'bi-exp', 'mono-exp + noise floor']
colors = ['r', 'g', 'c']
In [4]:
for ii in np.arange(files_fit.shape[0]):
filename = files_fit[ii]
data = dst.loaddata(filename);
data = data.astype(float)
gtab = dst.loadgtab(filename);
bvals = gtab.bvals
bvecs = gtab.bvecs
mask = np.ones((data.shape[0], data.shape[1], data.shape[2]))
mask = mask > 0.5
params = []
for isotropic_model, label in zip(models, labels):
param_out, fit_out, _ = mdm.isotropic_params(data, bvals, bvecs, mask, isotropic_model, signal = "relative_signal")
params.append(param_out)
filename = files_mean[ii]
data_wm = dst.loaddata(filename);
data_wm = data_wm.astype(float);
data_wm = np.reshape(data_wm, (data_wm.shape[0]*data_wm.shape[1]*data_wm.shape[2], data_wm.shape[3]))
data_wm_mean = np.mean(data_wm, axis=0)
uniqmean, uniqbvals = dst.uniquebvals(data_wm_mean, bvals)
fig = figure();
fig.set_size_inches([8, 6])
sort_idx = np.argsort(bvals)
plot(bvals[sort_idx]/1000., data[0,0,0][sort_idx]/data[0,0,0,0], 'o')
for model, p, l, c in zip(models, params, labels, colors):
plot(bvals[sort_idx]/1000., model(bvals[sort_idx]/1000., *p[0]), color=c, label=l, linewidth=2)
plot(uniqbvals/1000., uniqmean/uniqmean[0], '-s', color='y', markersize=10, linewidth=2, label='mean signal over WM')
xlim([0, bvals.max()//1000 * 1.05])
ylim([0, 1.2])
legend()
fitname = 'figure/figure3/' + filename + '_fit.png';
savefig(fitname, dpi=600)