In [6]:
import numpy as np
import nibabel as nib
import dsiadapt as dsi
from dipy.viz import fvtk
from dipy.data import get_sphere
import dsitool as dst
%pylab inline
np.set_printoptions(threshold=numpy.nan)
In [7]:
## Load ODF sphere directions
sphere = get_sphere('symmetric724')
sphere = sphere.subdivide(2)
In [8]:
files = np.array(['DSI11_invivo_cc', 'DSI11_exvivo_cc', 'DSI15_exvivo_cc', 'DSI17_exvivo_cc'])
In [9]:
# Load fov and mdd needed for ODF reconstruction
# fov and mdd data are generated by script s-figure2-pdf
# The four elements are in order to in vivo DSI11, ex vivo DSI11, ex vivo DSI15, ex vivo DSI17
fovarr = np.load('results/fov.npy');
mddarr = np.load('results/mdd.npy');
In [10]:
qgridsz = 201;
pdfwgtorder = 2;
for ii in np.arange(files.shape[0]):
filename = files[ii]
gtab = dst.loadgtab(filename);
fov = fovarr[ii];
mdd = mddarr[ii];
fwidth = np.inf;
integdistance = np.min([mdd, fov/2]);
rend = np.round(integdistance / fov * qgridsz);
for downratio in np.array([1., 2., 3.]):
data = dst.loaddata(filename);
datadown = dst.downsample(data, gtab, downratio);
dsimodel = dsi.DiffusionSpectrumModel(gtab, qgrid_size=qgridsz, filter_width=fwidth, r_start=0, r_end=rend, r_step=0.2);
dsifit = dsimodel.fit(datadown);
odf = dsifit.odf(sphere, pdfwgtorder);
odfvox = odf[2, 0, 0]
pdf = dsifit.pdf(normalized=False, clipped=False);
pdfvox = pdf[2, 0, 0]
pdfvox = pdfvox / pdfvox.max()
pdfslice = np.rot90(pdfvox[:, :, qgridsz//2 + 1])
pdfslice_clipped = np.clip(pdfslice, 0, pdfslice.max())
pdfslice_clipped_fov = pdfslice_clipped[qgridsz//2-qgridsz//(2*downratio): qgridsz//2+qgridsz//(2*downratio)+1, qgridsz//2-qgridsz//(2*downratio): qgridsz//2+qgridsz//(2*downratio)+1];
pdfslice_clipped_fov_weighted = dst.weight(pdfslice_clipped_fov, pdfwgtorder);
# save odf
r = fvtk.ren();
fvtk.add(r, fvtk.sphere_funcs(odfvox, sphere));
odfname = 'figure/figure7/' + filename + '_odf_sub' + str(downratio) + '.png';
fvtk.record(r, n_frames=1, out_path=odfname, size=(600,600))
#fvtk.show(r)
# save pdf
fig = figure()
imshow(pdfslice_clipped);
circle = Circle((qgridsz//2, qgridsz//2), radius = rend, color = 'r', fill=False, linestyle = 'dashed', linewidth=3.)
rect = Rectangle((qgridsz//2-qgridsz//(2*downratio), qgridsz//2-qgridsz//(2*downratio)), qgridsz//downratio, qgridsz//downratio, fill=False, color='w', linestyle = 'solid', linewidth=3.)
fig.gca().add_artist(circle)
fig.gca().add_artist(rect)
axis('off');
pdfname = 'figure/figure7/' + filename + '_pdf_sub' + str(downratio) + '.png';
savefig(pdfname, dpi = 600)
# save weighted pdf
fig = figure()
imshow(pdfslice_clipped_fov_weighted);
circle = Circle((qgridsz//(2*downratio), qgridsz//(2*downratio)), radius = rend, color = 'r', fill=False, linestyle = 'dashed', linewidth=3.)
fig.gca().add_artist(circle)
fig.gca().add_artist(rect)
axis('off');
pdfname = 'figure/figure7/' + filename + '_weightedpdf_sub' + str(downratio) + '.png';
savefig(pdfname, dpi = 600)