""" Template for single compartment Olufsen model of pyramidal neuron 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 Py: def __init__(self, init=-66.5910933966): self.soma = h.Section() self.soma.L = 100. self.soma.diam = 10./np.pi self.soma.nseg = 1 self.soma.insert('Ecellchann') 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 = 2. self.isyn.tau2 = 5.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 must 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 setparameters(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 must be only dict") for n in name: try: exec "self.{} = {}".format(n, name[n]) except: print "Cannot set a parameter self.{} to {}.".format(n,name[n]) 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+66.5910933966)/(self.isyn.tau2 - self.isyn.tau1)/abs(self.isyn.e+66.5910933966) #def setparallelcontext(self, gid, pd): #s if __name__ == "__main__": py = Py() py.setrecorder({"volt":"soma(0.5)._ref_v"}) stim = h.IClamp(0.5,sec=py.soma) stim.amp = 0.1 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,py.rec['volt']) c = array(py.spks) print float(c.shape[0])/300.*1000, py.soma(0.5).v show()