changeset 3:0ddfcb3b5ce6 draft

Uploaded
author greg
date Wed, 29 Nov 2017 09:51:57 -0500
parents 5daa2541c7fa
children efa122bf8d94
files linear_fascile_evaluation.py
diffstat 1 files changed, 28 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/linear_fascile_evaluation.py	Wed Nov 29 09:51:50 2017 -0500
+++ b/linear_fascile_evaluation.py	Wed Nov 29 09:51:57 2017 -0500
@@ -1,20 +1,24 @@
 #!/usr/bin/env python
 import argparse
-import numpy as np
-import os.path as op
-import nibabel as nib
+import shutil
+
 import dipy.core.optimize as opt
 import dipy.tracking.life as life
-import matplotlib.pyplot as plt
-import matplotlib
-
+from dipy.data import fetch_stanford_t1, read_stanford_labels, read_stanford_t1
+from dipy.viz import fvtk
 from dipy.viz.colormap import line_colors
-from dipy.viz import fvtk
+
+import matplotlib
+import matplotlib.pyplot as plt
+
 from mpl_toolkits.axes_grid1 import AxesGrid
-from dipy.data import read_stanford_labels, fetch_stanford_t1, read_stanford_t1
+
+import nibabel as nib
+
+import numpy as np
 
 parser = argparse.ArgumentParser()
-parser.add_argument('--candidates', dest='candidates', help='Candidates selection')
+parser.add_argument('--input', dest='input', help='Track Visualization Header dataset')
 parser.add_argument('--output_life_candidates', dest='output_life_candidates', help='Output life candidates')
 parser.add_argument('--output_life_optimized', dest='output_life_optimized', help='Output life optimized streamlines')
 parser.add_argument('--output_beta_histogram', dest='output_beta_histogram', help='Output beta histogram')
@@ -33,7 +37,7 @@
 data = hardi_img.get_data()
 
 # Read the candidates from file in voxel space:
-candidate_sl = [s[0] for s in nib.trackvis.read(args.candidates, points_space='voxel')[0]]
+candidate_sl = [s[0] for s in nib.trackvis.read(args.input, points_space='voxel')[0]]
 # Visualize the initial candidate group of streamlines
 # in 3D, relative to the anatomical structure of this brain.
 candidate_streamlines_actor = fvtk.streamtube(candidate_sl, line_colors(candidate_sl))
@@ -48,7 +52,8 @@
 fvtk.add(ren, cc_ROI_actor)
 fvtk.add(ren, vol_actor)
 fvtk.add(ren, vol_actor2)
-fvtk.record(ren, n_frames=1, out_path=args.output_life_candidates, size=(800, 800))
+fvtk.record(ren, n_frames=1, out_path="life_candidates.png", size=(800, 800))
+shutil.move("life_candidates.png", args.output_life_candidates)
 # Initialize a LiFE model.
 fiber_model = life.FiberModel(gtab)
 # Fit the model, producing a FiberFit class instance,
@@ -59,15 +64,17 @@
 ax.hist(fiber_fit.beta, bins=100, histtype='step')
 ax.set_xlabel('Fiber weights')
 ax.set_ylabel('# fibers')
-fig.savefig(args.output_beta_histogram)
+fig.savefig("beta_histogram.png")
+shutil.move("beta_histogram.png", args.output_beta_histogram)
 # Filter out these redundant streamlines and
 # generate an optimized group of streamlines.
-optimized_sl = list(np.array(candidate_sl)[np.where(fiber_fit.beta>0)[0]])
+optimized_sl = list(np.array(candidate_sl)[np.where(fiber_fit.beta > 0)[0]])
 ren = fvtk.ren()
 fvtk.add(ren, fvtk.streamtube(optimized_sl, line_colors(optimized_sl)))
 fvtk.add(ren, cc_ROI_actor)
 fvtk.add(ren, vol_actor)
-fvtk.record(ren, n_frames=1, out_path=args.output_life_optimized, size=(800, 800))
+fvtk.record(ren, n_frames=1, out_path="optimized.png", size=(800, 800))
+shutil.move("optimized.png", args.output_life_optimized)
 model_predict = fiber_fit.predict()
 # Focus on the error in prediction of the diffusion-weighted
 # data, and calculate the root of the mean squared error.
@@ -90,11 +97,12 @@
 # between these two alternative models of the ROI.
 fig, ax = plt.subplots(1)
 ax.hist(mean_rmse - model_rmse, bins=100, histtype='step')
-ax.text(0.2, 0.9,'Median RMSE, mean model: %.2f' % np.median(mean_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes)
-ax.text(0.2, 0.8,'Median RMSE, LiFE: %.2f' % np.median(model_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes)
+ax.text(0.2, 0.9, 'Median RMSE, mean model: %.2f' % np.median(mean_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes)
+ax.text(0.2, 0.8, 'Median RMSE, LiFE: %.2f' % np.median(model_rmse), horizontalalignment='left', verticalalignment='center', transform=ax.transAxes)
 ax.set_xlabel('RMS Error')
 ax.set_ylabel('# voxels')
-fig.savefig(args.output_error_histograms)
+fig.savefig("error_histograms.png")
+shutil.move("error_histograms.png", args.output_error_histograms)
 # Show the spatial distribution of the two error terms,
 # and of the improvement with the model fit:
 vol_model = np.ones(data.shape[:3]) * np.nan
@@ -106,7 +114,7 @@
 sl_idx = 49
 fig = plt.figure()
 fig.subplots_adjust(left=0.05, right=0.95)
-ax = AxesGrid(fig, 111, nrows_ncols = (1, 3), label_mode = "1", share_all = True, cbar_location="top", cbar_mode="each", cbar_size="10%", cbar_pad="5%")
+ax = AxesGrid(fig, 111, nrows_ncols=(1, 3), label_mode="1", share_all=True, cbar_location="top", cbar_mode="each", cbar_size="10%", cbar_pad="5%")
 ax[0].matshow(np.rot90(t1_data[sl_idx, :, :]), cmap=matplotlib.cm.bone)
 im = ax[0].matshow(np.rot90(vol_model[sl_idx, :, :]), cmap=matplotlib.cm.hot)
 ax.cbar_axes[0].colorbar(im)
@@ -119,4 +127,5 @@
 for lax in ax:
     lax.set_xticks([])
     lax.set_yticks([])
-fig.savefig(args.output_spatial_errors)
+fig.savefig("spatial_errors.png")
+shutil.move("spatial_errors.png", args.output_spatial_errors)