"""
Template for single compartment HH model of cortical interneuron
Coded: Ruben A. Tikidji-Hamburyan
"""
import os,sys,csv
from numpy import *
from numpy import random as rnd
import scipy as sp
import matplotlib
matplotlib.rcParams["savefig.directory"] = ""
from matplotlib.pyplot import *
try:
import cPickle as pkl
except:
import pickle as pkl
from neuron import h
class In:
def __init__(self, init=-64.9736783327):
self.soma = h.Section()
self.soma.L = 20.
self.soma.diam = 2./np.pi
self.soma.nseg = 1
self.soma.insert('hh')
#self.soma.gnabar_hh = 1.2
#self.soma.gkbar_hh = 0.36
#self.soma.gl_hh = 0.003/2.
#self.soma.gnabar_hh *= 2.8
#self.soma.gkbar_hh *= 2.8
#self.soma.gl_hh *= 2.8
self.soma.v = init
#Spike Recorder
self.spks = h.Vector()
self.recorder = h.NetCon(self.soma(0.5)._ref_v,None,sec=self.soma)
self.recorder.threshold = 0.
self.recorder.record(self.spks)
#Synapses
self.isyn = h.Exp2Syn(0.5, sec=self.soma)
self.isyn.e = -75.0
self.isyn.tau1 = 1.
self.isyn.tau2 = 3.0
self.esyn = h.Exp2Syn(0.5, sec=self.soma)
self.esyn.e = 0.0
self.esyn.tau1 = 0.8
self.esyn.tau2 = 1.2
#Recorders
self.rec = {}
#output connection point
self.output = self.soma(0.5)._ref_v
def setrecorder(self,name):
if type(name) is int or type(name) is float or type(name) is list or type(name) is tuple or type(name) is str:
raise TypeError("first argument should be only dict")
for n in name:
vec = h.Vector()
try:
exec "vec.record(self."+name[n]+")"
except:
print "Cannot set a recorder for self."+name[n]
self.rec[n] = vec
def getEtoIspace(self,conduct=False):
if conduct:
return (self.esyn.tau2 - self.esyn.tau1)/(self.isyn.tau2 - self.isyn.tau1)
else:
#return (self.esyn.tau2 - self.esyn.tau1)*abs(self.esyn.e-self.soma(0.5).v)/(self.isyn.tau2 - self.isyn.tau1)/abs(self.isyn.e-self.soma(0.5).v)
return (self.esyn.tau2 - self.esyn.tau1)*abs(self.esyn.e+64.9736783327)/(self.isyn.tau2 - self.isyn.tau1)/abs(self.isyn.e+64.9736783327)
if __name__ == "__main__":
#h.celsius = 20.
iin = In()
iin.setrecorder({"volt":"soma(0.5)._ref_v"})
stim = h.IClamp(0.5,sec=iin.soma)
stim.amp = 0.003
stim.delay = 100.
stim.dur = 300.
trec = h.Vector()
trec.record(h._ref_t)
h.finitialize()
h.fcurrent()
h.frecord_init()
while h.t < 500. :h.fadvance()
plot(trec,iin.rec["volt"])
c = array(iin.spks)
print float(c.shape[0])/300.*1000, iin.soma(0.5).v
show()