From 30964606602fcb8d41549aef94227af2312e13a5 Mon Sep 17 00:00:00 2001 From: Spokhim Date: Sun, 27 Jun 2021 20:27:14 +1000 Subject: [PATCH] Start of Reproducibility requirements --- Reproducibility.ipynb | 71 +++++++++++++++++++++++++ Reproducibility.py | 121 ++++++++++++++++++++++++++++++++++++++++++ useful_fns.py | 10 ++++ 3 files changed, 202 insertions(+) create mode 100644 Reproducibility.ipynb create mode 100644 Reproducibility.py diff --git a/Reproducibility.ipynb b/Reproducibility.ipynb new file mode 100644 index 0000000..f4f0974 --- /dev/null +++ b/Reproducibility.ipynb @@ -0,0 +1,71 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + }, + "orig_nbformat": 4, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.8.3 64-bit ('base': conda)" + }, + "interpreter": { + "hash": "c2bef7945d6dc602baac4bd299c1031251221309c766557e0058e63570412dea" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from Reproducibility import *\n", + "from useful_fns import *\n", + "\n", + "# Suppress warning messages for clarity\n", + "blockPrint()\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "Show_SCM()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ] +} \ No newline at end of file diff --git a/Reproducibility.py b/Reproducibility.py new file mode 100644 index 0000000..400bad2 --- /dev/null +++ b/Reproducibility.py @@ -0,0 +1,121 @@ +# This Python File contains all the functions to generate the appropriate sub-figures in the paper. +# Run Reproducibility.ipynb to see all the figures and how they're generated (before they are edited with inkscape for use in publication) + +import numpy as np +import matplotlib.pyplot as plt +import pandas as pd + +import pylab +import matplotlib.pyplot as plt +from scipy import stats +import inspect +import os +import csv +import time + +from tvb.simulator.lab import * +from tvb.simulator.plot.tools import * +from matplotlib.colors import ListedColormap +from turbo_colormap import * + +from scipy.io import loadmat + +### Figure 1: + +# Fig 1. b) - SCM + +def Show_SCM(): + + # Empty dict + ParamsDict = { } + ParamsDict["name"] = "MouseCortex" + #ParamsDict["G"] = np.array([G_value]) + ParamsDict["REMOVE"] = [7] + ParamsDict["BINARY"]=True + + # Load the connectivity data from a zip file. + con = connectivity.Connectivity.from_file(os.getcwd() +"/Connectomes/" + ParamsDict["name"] + ".zip") + + # Remove the ith row and column in centres, tract_lengths and weights. i.e. the specified region(s) + con.centres = np.delete(con.centres,ParamsDict["REMOVE"]) + con.weights = np.delete(con.weights,obj=ParamsDict["REMOVE"],axis=0) + con.weights = np.delete(con.weights,obj=ParamsDict["REMOVE"],axis=1) + con.tract_lengths = np.delete(con.tract_lengths,obj=ParamsDict["REMOVE"],axis=0) + con.tract_lengths = np.delete(con.tract_lengths,obj=ParamsDict["REMOVE"],axis=1) + + if ParamsDict["BINARY"]==True: + con.weights = con.weights!=0 + SCM = con.weights + + # ListedColormap(turbo_colormap_data) + #matplotlib.rcParams['figure.figsize'] = (20.0, 10.0) + SCM = 1/SCM + # Rearrange SCM + SCM = SCM [index_fg] [:,index_fg] + + cs=plt.imshow(SCM, cmap="jet", aspect='equal', interpolation='none') + #plt.title('Structural connectivity matrix', fontsize=20) + #axcb=plt.colorbar(cs) + #axcb.set_label('Weight', fontsize=20) + #plt.yticks([0,1,2,3]) + #axcb.ax.tick_params(labelsize=16) + plt.yticks(fontsize=16) + plt.xticks(fontsize=16) + plt.xlabel("Region", fontsize=20) + plt.ylabel("Region", fontsize=20) + #plt.savefig("do-not-track\\SCM.pdf",bbox_inches='tight') + plt.show() + + return + + +def Show_FCM(): + # Fig 1. g)- FCM + + annots = loadmat('do-not-track\\timeSeriesData.mat') + DataMatrix = annots['timeSeriesData'] + + # What needs to happen is to obtain each matrix (100 total for the no. of mice) + + # Create empty 3D Matrix to hold FC analysis + FCMatrix = np.empty((38,38,100)) + + for i in range(100): + # For now we only take the cortical areas, so the first 38 rows. + run = DataMatrix[0:38,:,i] + + # np.size(DataMatrix[:,:,0]) # Verify correct. + + # Run Analysis - Pearson Correlation. + FCM = np.corrcoef(run) + FCMatrix[:,:,i] = FCM + + # Average over the 100 mice. + FCAverage = FCMatrix.mean(2) + + # Plot Matrix + # For Individual slice of FC Matrix: FCMatrix[:,:,0] + np.fill_diagonal(FCAverage,np.nan) + + # Remove Frontal Pole + FCAverage = np.delete(FCAverage,obj=7,axis=0) + FCAverage = np.delete(FCAverage,obj=7,axis=1) + + # Re-arrange the order to a new order, Ben's Functional Grouping + index_fg = np.array([13,31,10,8,7,9,11,12,0,15,19,25,26,27,34,33,35,29,20,28,16,14,17,18,21,36,4,6,5,32,1,22,30,24,23,3,2]) + + FCAverage = FCAverage[index_fg] [:,index_fg] + + cs=plt.imshow(FCAverage, cmap=ListedColormap(turbo_colormap_data), aspect='equal', interpolation='none') + #plt.title('Functional connectivity matrix', fontsize=20) + axcb=plt.colorbar(cs) + axcb.set_label('Correlation', fontsize=20) + axcb.ax.tick_params(labelsize=16) + plt.yticks(fontsize=16) + plt.xticks(fontsize=16) + plt.xlabel("Region", fontsize=20) + plt.ylabel("Region", fontsize=20) + #plt.savefig("do-not-track\\FCM_exp.pdf",bbox_inches='tight') + plt.show() + + return diff --git a/useful_fns.py b/useful_fns.py index d580a27..d4b0f72 100644 --- a/useful_fns.py +++ b/useful_fns.py @@ -134,3 +134,13 @@ def current_calculator(V,G,SCM): # This returns as a tuple! Oooh! (not a list) return J_med,J_min,J_max +# Print Blocking (to make the figure outputs less confusing) +# https://stackoverflow.com/questions/8391411/how-to-block-calls-to-print + +# Disable +def blockPrint(): + sys.stdout = open(os.devnull, 'w') + +# Restore +def enablePrint(): + sys.stdout = sys.__stdout__