MLI-PKJ network firing rates across multiple trials

The goal of this experiment is to randomly construct the MLI-PKJ network several times and calculate the mean firing rates of MLIs and PKJs of all neurons in all randomly created networks to plot a histogram of firing rates.


In [1]:
%load_ext autoreload
%autoreload 2
import datetime
import os
import gc
from brian import *
import sys
sys.path.append('../../')
from neuron_models import *
import cPickle
from itertools import repeat
import multiprocessing
import time
set_global_preferences(useweave=True, usenewpropagate=True, usecodegen=True, usecodegenweave=True)
defaultclock.dt = .25*ms


/home/bill/anaconda/lib/python2.7/site-packages/brian/utils/sparse_patch/__init__.py:39: UserWarning: Couldn't find matching sparse matrix patch for scipy version 0.13.0, but in most cases this shouldn't be a problem.
  warnings.warn("Couldn't find matching sparse matrix patch for scipy version %s, but in most cases this shouldn't be a problem." % scipy.__version__)

In [2]:
def run_net(T):
    seed(int(os.getpid()*time.time()))
    reinit()
    reinit_default_clock()
    clear(True)
    gc.collect()
    
    N_MLI = 160
    N_PKJ = 16
    MLI = MLIGroup(N_MLI)
    PKJ = PurkinjeCellGroup(N_PKJ)
    
    # synaptic weights
    w_mli_pkj = 1.25
    w_mli_mli = 1.
    w_pkj_mli = 1.
    
    # Synapses
    S_MLI_PKJ = Synapses(MLI,PKJ,model='w:1',pre='g_inh+=PKJ.g_inh_*w')
    S_MLI_MLI = Synapses(MLI,MLI,model='w:1',pre='g_inh+=MLI.g_inh_*w')
    S_PKJ_MLI = Synapses(PKJ,MLI,model='w:1',pre='g_inh+=MLI.g_inh_*w')

    connect_mli_pkj(S_MLI_PKJ,pkj_dist=8,syn_prob=.25)
    connect_mli_mli(S_MLI_MLI,dist=80,syn_prob=.05)
    S_PKJ_MLI[:,:] = '((j/(N_MLI/N_PKJ)-i)%N_PKJ <= 2) & ((j/(N_MLI/N_PKJ)-i)%N_PKJ > 0) & (j%(N_MLI/N_PKJ)<3) & (rand()<.5)'
    S_MLI_PKJ.w[:,:] = 'rand()*w_mli_pkj'
    S_MLI_MLI.w[:,:] = 'rand()*w_mli_mli'
    S_PKJ_MLI.w[:,:] = 'rand()*w_pkj_mli'
    
    @network_operation(Clock(dt=defaultclock.dt))
    def random_current():
        MLI.I = gamma(3.966333,0.006653,size=len(MLI)) * nA
        PKJ.I = gamma(0.430303,0.195962,size=len(PKJ)) * nA
        
    MS_MLI = SpikeMonitor(MLI)
    MS_PKJ = SpikeMonitor(PKJ)
    
    run(T)
    
    return MS_MLI.spiketimes, MS_PKJ.spiketimes

In [3]:
pool = multiprocessing.Pool()
results = pool.map(run_net, repeat(30*second,20))


brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater
brian.stateupdater: WARNING  Using codegen CStateUpdater

In [4]:
MLI_spiketimes, PKJ_spiketimes = [], []
for mli_spikes, pkj_spikes in results:
    for ind, spiketimes in mli_spikes.iteritems():
        MLI_spiketimes.append(spiketimes)
    for ind, spiketimes in pkj_spikes.iteritems():
        PKJ_spiketimes.append(spiketimes)

In [5]:
# plot histogram
fig = figure(figsize=(16,4), dpi=600)
ax = fig.add_subplot(121)
ax.hist(nan_to_num([mean(diff(spikes))**-1 for spikes in MLI_spiketimes]),15,color='#8C2318', edgecolor='w')
simpleaxis(ax)
tick_params(labelsize=20)
xlabel('Mean firing rate (Hz)', fontsize=20)
ylabel('Number of cells', fontsize=20, labelpad=10)
#title('MLI mean firing rates', fontsize=20)

ax = fig.add_subplot(122)
counts, bins, _ = ax.hist(nan_to_num([mean(diff(spikes))**-1 for spikes in PKJ_spiketimes]),15,color='#0B486B',edgecolor='w')
simpleaxis(ax)
tick_params(labelsize=20)
xlabel('Mean firing rate (Hz)', fontsize=20)
ylabel('Number of cells', fontsize=20, labelpad=10)
#title('PKJ mean firing rates', fontsize=20)
#yticks(range(int(counts.max()+1)))

fig.subplots_adjust(wspace=.3)


/home/bill/anaconda/lib/python2.7/site-packages/numpy/core/_methods.py:57: RuntimeWarning: invalid value encountered in double_scalars
  ret = ret / float(rcount)

In [ ]: