import time, sys
import numpy as np
import matplotlib
matplotlib.rcParams["savefig.directory"] = ""
from matplotlib import pyplot as plt
from neuron import h
startbuild=time.time()
Ne,Ni,Ns=4000,1000,500
excw,excd = 0.009, 0.8
inhw,inhd = -0.050, 2.1
stmw,stmd = 0.025, 0.5
inspk = np.genfromtxt("../input.ssv")
class liaf:
def __init__(self):
self.cell = h.IntFire1()
self.cell.m = 0.
self.recorder = h.NetCon(self.cell,None)
self.spk = h.Vector()
self.recorder.record(self.spk)
class stim:
def __init__(self,sid):
self.s = h.VecStim()
self.nvec = inspk[np.where(inspk[:,1].astype(int) == sid),0][0]
self.vec = h.Vector(self.nvec.shape[0])
self.vec.from_python(self.nvec)
self.s.play(self.vec)
self.recorder = h.NetCon(self.s,None)
self.spk = h.Vector()
self.recorder.record(self.spk)
E=[ liaf() for x in xrange(Ne) ]
I=[ liaf() for x in xrange(Ni) ]
S=[ stim(x) for x in xrange(Ns) ]
econs,icons,scons =[],[],[]
for pre,post in np.genfromtxt("../ee.ssv").astype(int):
econs.append( h.NetCon(E[pre].cell,E[post].cell) )
for pre,post in np.genfromtxt("../ei.ssv").astype(int):
econs.append( h.NetCon(E[pre].cell,I[post].cell) )
for pri,post in np.genfromtxt("../ie.ssv").astype(int):
icons.append( h.NetCon(I[pri].cell,E[post].cell) )
for pri,post in np.genfromtxt("../ii.ssv").astype(int):
icons.append( h.NetCon(I[pri].cell,I[post].cell) )
for prs,post in np.genfromtxt("../se.ssv").astype(int):
scons.append( h.NetCon(S[prs].s ,E[post].cell) )
sys.stderr.write("====== Network Created! =======\n")
for econ in econs:
econ.weight[0],econ.delay = excw,excd
for icon in icons:
icon.weight[0],icon.delay = inhw,inhd
for scon in scons:
scon.weight[0],scon.delay = stmw,stmd
h.dt = 0.1
h.finitialize()
h.fcurrent()
h.frecord_init()
endbuild=time.time()
while h.t < 1000.:h.fadvance()
endsimulate= time.time()
print("Building time : %.2f s"%(endbuild-startbuild ))
print("Simulation time : %.2f s"%(endsimulate-endbuild))
print("Time step : %.2f ms"%(h.dt))
spkse = np.array( [ (x,ni ) for ni, nE in enumerate(E) for x in list(np.array(nE.spk)) ] )
spksi = np.array( [ (x,ni+Ne +100) for ni, nI in enumerate(I) for x in list(np.array(nI.spk)) ] )
spkss = np.array( [ (x,ni+Ne+Ni+200) for ni, nS in enumerate(S) for x in list(np.array(nS.spk)) ] )
spkse = spkse[np.where(spkse[:,0]<200)]
spksi = spksi[np.where(spksi[:,0]<200)]
spkss = spkss[np.where(spkss[:,0]<200)]
plt.plot(spkse[:,0],spkse[:,1],"k.")
plt.plot(spksi[:,0],spksi[:,1],"r.")
plt.plot(spkss[:,0],spkss[:,1],"b.")
plt.show()
exit(0)