swh:1:snp:a5ba33b1128348eae7522a0a37ee96a529d8d998
Tip revision: 0cc496ef13b5db7a51b3a1d2c7b06403916bacb7 authored by Ling KANG on 10 March 2023, 03:33:14 UTC
Create LICENSE
Create LICENSE
Tip revision: 0cc496e
inspect_simulation.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
inspect_simulation.py
---------------------
Script to plot simulated network activity of
2D rate model of motor cortex, see paper
Kang, Ranft & Hakim. eLife (2023).
To load specific simulation output change parameters/
filename accordingly.
Created March 2023
Author: L. Kang, kangling2017@gmail.com
"""
import numpy as np
import matplotlib.pyplot as plt
import scipy.signal
plt.rcParams.update({'font.size': 14,
'font.family': 'Times New Roman',
'text.usetex': False})
def function_find_delete_list(N,width):
'''
Find the effective modules (See the introduction of the network in the paper).
Parameters
----------
N : int
The length of the array.
width : int
The length of the fixed modules of the array.
Returns
-------
list
The list of effective modules.
'''
delete_list=[]
for i in range(sur_width):
for j0 in range(i*N,(i+1)*N):
delete_list.append(j0)
for j1 in range(N):
jj1=j1*N+i
delete_list.append(jj1)
for i in range(N-sur_width,N):
for j0 in range(i*N,(i+1)*N):
delete_list.append(j0)
for j1 in range(N):
jj1=j1*N+i
delete_list.append(jj1)
return delete_list
# Network and simulation parameters
N = 28 # linear size of grid
fix_width = 2 # number of rows of midules with fixed firing rates
sim_width = 5 # number of rows (from center) of modules kept for analysis
# (5 corresponds to central 10x10 grid)
sur_width = int(N/2-fix_width-sim_width) # surplus modules simulated but not considered
# remove data not used for analysis using 'delete_list'
delete_list=[]
delete_list=function_find_delete_list(N-2*fix_width,sur_width)
# Model parameters (example data corresponds to parameters SN of the
# paper, see also Table 1); change accordingly for simulation data with
# different parameters
N_noise = 2e4 # Finite-size noise, N_E,N_I=N_noise*[0.8,0.2]
l = 2.0 # Excitatory connectivity range
D = 1.3 # Propagation delay between to nearest E-I modules (ms)
omega_ie = 1.0 # Recurrent synaptic coupling strength (E to I)
omega_ei = 2.08 # Recurrent synaptic coupling strength (I to E)
omega_ee = 0.96 # Recurrent synaptic coupling strength (E to E)
omega_ii = 0.87 # Recurrent synaptic coupling strength (I to I)
nu = 3 # External input amplitude fluctuations (Hz)
eta_c = 0.4 # Proportion of global external inputs
tau_ext = 25 # Correlation time of external input fluctuations (ms)
# Load data
# ---------
filename = str("%d"% N)+"_"+str("%.2f"% D)+"_"+str("%d"%N_noise)+"_"+str("%.2f"%l)+"_"+str("%.2f"%omega_ee)+"_"+str("%.2f"%omega_ei)+"_"+str("%.2f"%omega_ie)+"_"+str("%.2f"%omega_ii)+"_"+str("%.2f"%nu)+"_"+str("%.2f"%eta_c)+"_"+str("%.2f"%tau_ext)
# Excitatory Current
data_current = np.loadtxt(filename+"_current_tau_fix_e.txt",delimiter=',',usecols=range((N-2*fix_width)*(N-2*fix_width)))
data_current1=np.delete(data_current,delete_list,axis=1) #Data shape [T]*[10*10]
# Inhhibitory Current
data_current_i = np.loadtxt(filename+"_current_tau_fix_i.txt",delimiter=',',usecols=range((N-2*fix_width)*(N-2*fix_width)))
data_current_i1=np.delete(data_current_i,delete_list,axis=1)
# common input
data_external_input= np.loadtxt(filename+"_current_tau_fix_xi_g.txt",delimiter=',')
# Plot simulated data
# -------------------
# create figure
fig = plt.figure(figsize = (8,9))
shape = (2,1)
rowspan = 1
colspan = 1
ax = plt.subplot2grid(shape, (0,0),rowspan ,colspan )
# plot excitatory current for all modules in a color plot
sp = ax.imshow(data_current1.T,aspect = 'auto' )
ax.set_xlabel('Time(ms)')
ax.set_ylabel('Position')
plt.colorbar(sp,label = '$I_E$')
# plot exc. and inh. current for a single module
model_id = 1
ax = plt.subplot2grid(shape, (1,0),rowspan ,colspan )
ax.plot(np.arange(len(data_current[:,model_id])),data_current1[:,model_id],label='$I_E$ of module '+str(model_id) )
ax.plot(np.arange(len(data_current[:,model_id])),data_current_i1[:,model_id],label='$I_I$ of module '+str(model_id) )
ax.set_xlabel('Time(ms)')
ax.legend()
# Export data as .npy for wave analysis script
# --------------------------------------------
np.save(filename+"_current_tau_fix_e.npy", data_current )
np.save(filename+"_current_tau_fix_xi_g.npy", data_external_input )