Module providing Consciousness Exploration Tools for PyTorch.
Note
Click here to download the full example code
Create circo-like graphs¶
Credit: A Grigis
All the plots are perfomred with graph-tools embeded in a Singularity singularity container. Please install first Singularity.
# sphinx_gallery_thumbnail_path = '_static/carousel/circo.png'
import os
import numpy as np
import matplotlib.pyplot as plt
from nilearn import datasets
from nilearn.input_data import NiftiMapsMasker
from nilearn.connectome import ConnectivityMeasure
from consciousnet.plotting import plot_circo, plot_graph
Out:
/home/docs/checkouts/readthedocs.org/user_builds/consciousnet/envs/latest/lib/python3.6/site-packages/nilearn/datasets/__init__.py:89: FutureWarning: Fetchers from the nilearn.datasets module will be updated in version 0.9 to return python strings instead of bytes and Pandas dataframes instead of Numpy arrays.
"Numpy arrays.", FutureWarning)
Connectivity dataset¶
First generate a connectivty matrix using the ROIs defined in the MSDL template.
def threshold_adj(adj, threshold):
# Get number of connections to filter
n_nodes = len(adj)
n_conn_to_filter = int((threshold / 100.) * (n_nodes * (n_nodes - 1) / 2))
# For threshold operations, zero out lower triangle (including diagonal)
adj[np.tril_indices(n_nodes)] = 0
# Following code is similar to bctpy
indices = np.where(adj)
sorted_indices = np.argsort(adj[indices])[::-1]
adj[(indices[0][sorted_indices][n_conn_to_filter:],
indices[1][sorted_indices][n_conn_to_filter:])] = 0
# Just to get a symmetrical matrix
adj = adj + adj.T
# Diagonals need connection of 1 for graph operations
adj[np.diag_indices(n_nodes)] = 1.0
return adj
def imshow(image_file):
image = plt.imread(image_file)
fig, ax = plt.subplots()
im = ax.imshow(image)
ax.axis("off")
tmpdir = "/tmp/circo"
if not os.path.isdir(tmpdir):
os.mkdir(tmpdir)
atlas = datasets.fetch_atlas_msdl(data_dir=tmpdir)
atlas_filename = atlas["maps"]
labels = atlas["labels"]
networks = atlas["networks"]
networks = [elem.decode("utf-8") for elem in networks]
data = datasets.fetch_development_fmri(n_subjects=1, data_dir=tmpdir)
fmri_filenames = data.func[0]
masker = NiftiMapsMasker(maps_img=atlas_filename, standardize=True,
verbose=5)
time_series = masker.fit_transform(fmri_filenames, confounds=data.confounds)
correlation_measure = ConnectivityMeasure(kind="correlation")
correlation_matrix = correlation_measure.fit_transform([time_series])[0]
correlation_matrix = threshold_adj(np.abs(correlation_matrix), 50)
np.fill_diagonal(correlation_matrix, 0)
correlation_matrix[correlation_matrix > 0.55] = (
correlation_matrix[correlation_matrix > 0.55] * 1.1)
correlation_matrix[correlation_matrix > 0.85] = (
correlation_matrix[correlation_matrix > 0.85] * 2.5)
correlation_matrix /= correlation_matrix.max()
Out:
Dataset created in /tmp/circo/msdl_atlas
Downloading data from https://team.inria.fr/parietal/files/2015/01/MSDL_rois.zip ...
...done. (1 seconds, 0 min)
Extracting data from /tmp/circo/msdl_atlas/5d25e157f36214b8ca9a12fd417aac1c/MSDL_rois.zip..... done.
/home/docs/checkouts/readthedocs.org/user_builds/consciousnet/envs/latest/lib/python3.6/site-packages/numpy/lib/npyio.py:2349: VisibleDeprecationWarning: Reading unicode strings without specifying the encoding argument is deprecated. Set the encoding, use None for the system default.
output = genfromtxt(fname, **kwargs)
Dataset created in /tmp/circo/development_fmri
Dataset created in /tmp/circo/development_fmri/development_fmri
Downloading data from https://osf.io/yr3av/download ...
...done. (1 seconds, 0 min)
Downloading data from https://osf.io/download/5c8ff3df4712b400183b7092/ ...
...done. (1 seconds, 0 min)
Downloading data from https://osf.io/download/5c8ff3e04712b400193b5bdf/ ...
...done. (1 seconds, 0 min)
[NiftiMapsMasker.fit_transform] loading regions from /tmp/circo/msdl_atlas/MSDL_rois/msdl_rois.nii
/home/docs/checkouts/readthedocs.org/user_builds/consciousnet/envs/latest/lib/python3.6/site-packages/nilearn/image/image.py:1057: FutureWarning: The parameter "sessions" will be removed in 0.9.0 release of Nilearn. Please use the parameter "runs" instead.
ensure_finite=ensure_finite)
Resampling maps
[NiftiMapsMasker.transform_single_imgs] Loading data from /tmp/circo/development_fmri/development_fmri/sub-pixar123_task-pixar_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz
[NiftiMapsMasker.transform_single_imgs] Extracting region signals
[NiftiMapsMasker.transform_single_imgs] Cleaning extracted signals
Connectivity display¶
Now display the connectivity as a graph or a circular flow chart.
adj = correlation_matrix.tolist()
names = labels
hemi_map = {"R": 0, "L": 1}
hemi_groups = [hemi_map.get(elem[0], 2) for elem in names]
colors = [
"#FFC020", "#64064", "#146432", "#3CDC3C", "#14DC3C", "#A08CB4",
"#DC1414", "#DC3C14", "#DCB4DC", "#9696C8", "#B42878", "#234B32",
"#141E8C", "#E18C8C", "#C8234B", "#50148C", "#B4DC8C", "#A06432",
"#64190", "#196428", "#78643C", "#50A014", "#14B48C", "#4B327D",
"#DC3CDC", "#7D64A0", "#8CDCDC", "#3C14DC", "#DCB48C", "#DC14A",
"#14DCA0", "#8C148C", "#DC1464", "#464646"]
colors = [tuple(int(elem.lstrip("#")[i: i + 2], 16) / 255. for i in (0, 2, 4))
for elem in colors]
color_map = dict((key, colors[cnt]) for cnt, key in enumerate(set(networks)))
group_names = networks
group_colors = [color_map[elem] for elem in group_names]
circo_file = plot_circo(
adj=adj, names=names, hemi_groups=hemi_groups, group_names=group_names,
group_colors=group_colors, outdir=tmpdir, with_labels=False)
print(circo_file)
circo_file = plot_circo(
adj=adj, names=names, hemi_groups=hemi_groups, group_names=group_names,
group_colors=group_colors, outdir=tmpdir, with_labels=True)
print(circo_file)
graph_file = plot_graph(
adj=adj, names=names, hemi_groups=hemi_groups, outdir=tmpdir)
print(graph_file)
Out:
Executing: singularity exec --no-home --cleanenv --bind /tmp/circo:/out /tmp/circo/graphtools-latest.simg python /out/generate_circo.py
/tmp/circo/circo.png
Executing: singularity exec --no-home --cleanenv --bind /tmp/circo:/out /tmp/circo/graphtools-latest.simg python /out/generate_circo.py
/tmp/circo/circo.png
Executing: singularity exec --no-home --cleanenv --bind /tmp/circo:/out /tmp/circo/graphtools-latest.simg python /out/generate_graph.py
/tmp/circo/graph.png
Total running time of the script: ( 1 minutes 27.988 seconds)
Follow us