Source code for sekupy.io.connectivity
from sekupy.dataset.collections import SampleAttributesCollection
from sekupy.dataset.base import Dataset
from sklearn.preprocessing import LabelEncoder
from sekupy.io.base import add_attributes, load_attributes, load_filelist
from sekupy.io.subjects import add_subjectname
from sekupy.utils.atlas import get_atlas_info
import numpy as np
import logging
logger = logging.getLogger(__name__)
# TODO : Document
[docs]
def load_mat_data(path, subj, folder, **kwargs):
from scipy.io import loadmat
meg_transformer = {'connectivity': conn_transformer,
'power': power_transformer,
'timevarying': time_transformer
}
key = kwargs['mat_key']
transformer = meg_transformer[kwargs['transformer']]
# load data from mat
filelist = load_filelist(path, subj, folder, **kwargs)
data = []
info = {'file': []}
for f in filelist:
logger.info("Loading %s..." %(f))
mat = loadmat(f)
datum = mat[key]
logger.debug(datum.shape)
data.append(mat[key])
info['file'] += [f for _ in range(datum.shape[0])]
data, info['parcels'] = transformer(data)
return data, info
[docs]
def load_mat_ds(path, subj, folder, **kwargs):
logger.debug(kwargs)
data, info = load_mat_data(path, subj, folder, **kwargs)
# load attributes
attr = load_attributes(path, subj, folder, **kwargs)
if (attr is None) or (data is None):
return None
attr, labels = edit_attr(attr, data.shape)
logger.debug(data.shape)
logger.debug(attr)
ds = Dataset.from_wizard(data, attr.targets, flatten=False)
ds = add_subjectname(ds, subj)
ds = add_attributes(ds, attr)
ds = add_labels(ds, info['parcels'], **kwargs)
#ds.fa['roi_labels'] = labels
ds.fa['matrix_values'] = np.ones(data.shape[1], dtype=np.int8)
ds.sa['chunks'] = LabelEncoder().fit_transform(ds.sa['name'])
ds.sa['file'] = info['file']
return ds
[docs]
def add_labels(ds, parcels, **kwargs):
info = get_atlas_info(kwargs['atlas'])
labels = info[4]
labels = labels[:parcels]
if kwargs['transformer'] == 'connectivity':
idx_from, idx_to = np.triu_indices(parcels, k=1)
nodes_from = [labels[i] for i in idx_from]
nodes_to = [labels[i] for i in idx_to]
ds.fa['nodes_1'] = nodes_from
ds.fa['nodes_2'] = nodes_to
elif kwargs['transformer'] == 'power':
ds.fa['nodes'] = labels
elif kwargs['transformer'] == 'timevarying':
n_nodes = len(labels)
idx_from, idx_to = np.triu_indices(n_nodes, k=1)
nodes_from = [labels[i] for i in idx_from]
nodes_to = [labels[i] for i in idx_to]
network_from = []
ds.fa['nodes_1'] = nodes_from
ds.fa['nodes_2'] = nodes_to
pass
# TODO: Power labels
return ds
[docs]
def edit_attr(attr, shape):
factor = int(shape[0]/len(attr.targets))
attr_ = dict()
for key in attr.keys():
attr_[key] = []
for label in attr[key]:
attr_[key] += [label for i in range(factor)]
return SampleAttributesCollection(attr_), None