In [1]:
import sys
import brainbox as bb
from matplotlib import pyplot as plt
import scipy.spatial.distance as dist
import scipy.cluster.hierarchy as clh

In [2]:
in_path = '/data1/abide/Out/Remote/some_failed/out'
out_path = '/data1/abide/Analysis/Remote/some_missing'
metric = 'stability_maps'

In [3]:
file_dict = bb.fileOps.grab_files(in_path, '.nii.gz', sub=metric)


I will be pulling files from /data1/abide/Out/Remote/some_failed/out/stability_maps

In [4]:
array_dict = bb.dataOps.read_files(file_dict)


I found 607 files to load.
 100.0 % done 0.00 seconds to go.
We are done

Write a function to generate subplots within subplots

Taken from stackoverflow


In [5]:
# Taken from stackexchange
def add_subplot_axes(ax,rect,axisbg='w'):
    fig = plt.gcf()
    box = ax.get_position()
    width = box.width
    height = box.height
    inax_position  = ax.transAxes.transform(rect[0:2])
    transFigure = fig.transFigure.inverted()
    infig_position = transFigure.transform(inax_position)    
    x = infig_position[0]
    y = infig_position[1]
    width *= rect[2]
    height *= rect[3]
    subax = fig.add_axes([x,y,width,height],axisbg=axisbg)
    return subax

Compute the similarity of network metrics among the subjects for all network

This could be done in parallel if Marc gives me more memory


In [6]:
result_list = []
for n_id in range(10):
    sys.stdout.write('\rRunning network {}.'.format(n_id))
    sys.stdout.flush()
    
    eucl = dist.squareform(dist.pdist(array_dict[metric][..., n_id], 'euclidean'))
    Y = clh.linkage(eucl, method='ward')
    result_list.append((eucl, Y))


Running network 9.

Visualize the things


In [8]:
f = plt.figure(figsize=(18, 50))
order_net = None
for n_id in range(10):
    n_id += 1
    sys.stdout.write('\rRunning network {}.'.format(n_id))
    sys.stdout.flush()
    (eucl, Y) = result_list[n_id-1]
    ax = f.add_subplot(5,2,n_id)
    subdend = add_subplot_axes(ax, [0, 0.71, 1, 0.29])
    submat = add_subplot_axes(ax, [0, 0, 1, 0.7])
    if order_net:
        Y = result_list[order_net][1]
    
    Z1 = clh.dendrogram(Y, ax=subdend)
    if order_net:
        subdend.matshow(np.ones((100,20)), aspect='auto')

    idx = Z1['leaves']
    tmp = eucl[idx, :]
    D = tmp[:, idx]
    a = submat.matshow(-D, aspect='auto')
    submat.set_xticks([])
    submat.set_yticks([])
    subdend.set_xticks([])
    subdend.set_yticks([])
    ax.set_xticks([])
    ax.set_yticks([])
    ax.set_title('Network {}'.format(n_id))
f.suptitle('Stability Maps')


Running network 10.
Out[8]:
<matplotlib.text.Text at 0x13b7af50>

In [7]: