import os import pandas as pd import numpy as np from glob import glob %matplotlib inline import seaborn as sns def df_from_label(label): df = pd.read_table(label, sep=r'[\s]*', names=['Vertex', 'X', 'Y', 'Z', '?'], skiprows=2, header=None, index_col='Vertex').drop(['?'], axis=1) return df def distance(record, anchor): "Compute the distance from some label" x2 = pow(record['X'] - anchor['X'], 2) y2 = pow(record['Y'] - anchor['Y'], 2) z2 = pow(record['Z'] - anchor['Z'], 2) return np.sqrt(x2 + y2 + z2) def cog_from_df(df): df.sort_index(by=['X', 'Y', 'Z'], inplace=True) df['dist'] = df.apply(distance, axis=1, anchor=df.median()) df.sort_index(by='dist', inplace=True) return df.ix[df.index[0]] template = '/scratch/burnsss1/freesurfer-subjects/fsaverage/label/lh.*.label' data = [] for label in glob(template): roi_from_label = os.path.basename(label).replace('lh.', '').replace('.label', '') record = dict(label=roi_from_label) cog = cog_from_df(df_from_label(label)) record['X'], record['Y'], record['Z'] = int(cog['X']), int(cog['Y']), int(cog['Z']) data.append(record) df = pd.DataFrame(data) df.index = df.label del df['label'] df.head() df.sort_index(by=['Y', 'X', 'Z'], ascending=False, inplace=True) df.head() print '\n'.join(df.index)