# $Id: geom.py,v 1.30 2011/01/02 19:56:14 samn modified by yosefs Exp $ from pyinit import * class Synapse: def __init__(self, sect, loc, tau1, tau2, e): self.syn = h.MyExp2SynBB(loc, sec=sect) self.syn.tau1 = tau1 self.syn.tau2 = tau2 self.syn.e = e class SynapseNMDA: def __init__(self, sect, loc, tau1, tau2, tau1NMDA, tau2NMDA, r, e): self.syn = h.MyExp2SynNMDABB(loc, sec=sect) self.syn.tau1 = tau1 self.syn.tau2 = tau2 self.syn.tau1NMDA = tau1NMDA self.syn.tau2NMDA = tau2NMDA self.syn.r = r self.syn.e = e ############################################################################### # # General Cell # ############################################################################### class Cell: "General cell" def __init__(self,x,y,z,id): self.x=x self.y=y self.z=z self.id=id self.all_sec = [] self.add_comp('soma',True) self.set_morphology() self.set_conductances() self.set_synapses() self.set_inj() self.calc_area() def set_morphology(self): pass def set_conductances(self): pass def set_synapses(self): pass def set_inj(self): self.somaInj = h.IClamp(0.5, sec=self.soma) def add_comp(self, name, rec): self.__dict__[name] = h.Section() self.all_sec.append(self.__dict__[name]) # Record voltage if rec: self.__dict__[name+"_volt"] = h.Vector(int(h.tstop/h.dt)+1) self.__dict__[name+"_volt"].record(self.__dict__[name](0.5)._ref_v) def plot_volt(self, name, fig=1): figure(fig) volt = self.__dict__[name+"_volt"].to_python() plot(arange(len(volt))*h.dt, volt) def calc_area(self): self.total_area = 0 self.n = 0 for sect in self.all_sec: self.total_area += h.area(0.5,sec=sect) self.n+=1 ############################################################################# # # Winograd Cell - Saturating # ############################################################################# class WinoSat(Cell): "Winograd cell" def set_morphology(self): total_area = 3488.3129795210225 # um2 self.soma.nseg = 1 self.soma.cm = 1 # uF/cm2 diam = 18.8#sqrt(total_area) # um L = 18.8#diam/pi # um self.soma.Ra = 123 h.pt3dclear(sec=self.soma) h.pt3dadd(self.x, self.y, self.z, diam, sec=self.soma) h.pt3dadd(self.x, self.y, self.z+L, diam, sec=self.soma) def set_conductances(self): self.soma.insert('ppasi') self.soma.e_ppasi = -70 # mV self.soma.g_ppasi = .001 # S/cm2 self.soma.insert('hh3') self.soma.gnabar_hh3=0.07 self.soma.gkbar_hh3=0.007 self.soma.insert('im') self.soma.gkbar_im = 4e-6 h.taumax_im = 4000 self.soma.insert('iL') self.soma.pca_iL = 2.76e-4 self.soma.insert('cada') h.taur_cada = 20 h.depth_cada = 1 self.soma.insert('iar') self.soma.ghbar_iar=0.00002 h.cac_iar = 0.006 h.k2_iar = 1e-4 #change to 1e-5 for non-saturating model h.k4_iar = 0.008 #change to .001 self.soma.eh = -20 def set_inj(self): self.curr2 = h.Ipulse3(.5,sec=self.soma) self.curr2.delay = 10000 self.curr2.dur=4000 self.curr2.per = self.curr2.delay + self.curr2.dur self.curr2.num = 100 for i in range(0,int(self.curr2.num -1)): self.curr2.amp[i] = -.3 self.curr2.dc = .232 self.APC = h.APCounter2(.5,sec =self.soma) #self.eh = -20 ############################################################################# # # Winograd Cell - Non-Saturating # ############################################################################# class WinNonS(Cell): "Winograd cell" def set_morphology(self): total_area = 3488.3129795210225 # um2 self.soma.nseg = 1 self.soma.cm = 1 # uF/cm2 diam = 18.8#sqrt(total_area) # um L = 18.8#diam/pi # um self.soma.Ra = 123 h.pt3dclear(sec=self.soma) h.pt3dadd(self.x, self.y, self.z, diam, sec=self.soma) h.pt3dadd(self.x, self.y, self.z+L, diam, sec=self.soma) def set_conductances(self): self.soma.insert('ppasi') self.soma.e_ppasi = -70 # mV self.soma.g_ppasi = .001 # S/cm2 self.soma.insert('hh3') self.soma.gnabar_hh3=0.07 self.soma.gkbar_hh3=0.007 self.soma.insert('im') self.soma.gkbar_im = 4e-6 h.taumax_im = 4000 self.soma.insert('iL') self.soma.pca_iL = 2.76e-4 self.soma.insert('cada') h.taur_cada = 20 h.depth_cada = 1 self.soma.insert('iar') self.soma.ghbar_iar=0.00002 h.cac_iar = 0.006 h.k2_iar = 1e-5 #change to 1e-5 for non-saturating model h.k4_iar = 0.001 #change to .001 self.soma.eh = -20 def set_inj(self): self.curr2 = h.Ipulse3(.5,sec=self.soma) self.curr2.delay = 10000 self.curr2.dur=4000 self.curr2.per = self.curr2.delay + self.curr2.dur self.curr2.num = 100 for i in range(0,int(self.curr2.num -1)): self.curr2.amp[i] = -.3 self.curr2.dc = .232 self.APC = h.APCounter2(.5,sec =self.soma) #self.eh = -20 ############################################################################# # # Winograd Cell - Non-Saturating No-Ih # ############################################################################# class WinNoIh(Cell): "Winograd cell" def set_morphology(self): total_area = 3488.3129795210225 # um2 self.soma.nseg = 1 self.soma.cm = 1 # uF/cm2 diam = 18.8#sqrt(total_area) # um L = 18.8#diam/pi # um self.soma.Ra = 123 h.pt3dclear(sec=self.soma) h.pt3dadd(self.x, self.y, self.z, diam, sec=self.soma) h.pt3dadd(self.x, self.y, self.z+L, diam, sec=self.soma) def set_conductances(self): self.soma.insert('ppasi') self.soma.e_ppasi = -70 # mV self.soma.g_ppasi = .001 # S/cm2 self.soma.insert('hh3') self.soma.gnabar_hh3=0.07 self.soma.gkbar_hh3=0.007 self.soma.insert('im') self.soma.gkbar_im = 4e-6 h.taumax_im = 4000 self.soma.insert('iL') self.soma.pca_iL = 2.76e-4 self.soma.insert('cada') h.taur_cada = 20 h.depth_cada = 1 #self.soma.insert('iar') #self.soma.ghbar_iar=0.00002 #h.cac_iar = 0.006 #h.k2_iar = 1e-4 #change to 1e-5 for non-saturating model #h.k4_iar = 0.008 #change to .001 #self.soma.eh = -20 def set_inj(self): self.curr2 = h.Ipulse3(.5,sec=self.soma) self.curr2.delay = 10000 self.curr2.dur=4000 self.curr2.per = self.curr2.delay + self.curr2.dur self.curr2.num = 100 for i in range(0,int(self.curr2.num -1)): self.curr2.amp[i] = -.3 self.curr2.dc = .232 self.APC = h.APCounter2(.5,sec =self.soma) #self.eh = -20 ############################################################################### # # Basket Cell -- Bwb # ############################################################################### class Bwb(Cell): "Basket cell" def set_morphology(self): total_area = 10000 # um2 self.soma.nseg = 1 self.soma.cm = 1 # uF/cm2 diam = sqrt(total_area) # um L = diam/pi # um h.pt3dclear(sec=self.soma) h.pt3dadd(self.x, self.y, self.z, diam, sec=self.soma) h.pt3dadd(self.x, self.y, self.z+L, diam, sec=self.soma) def set_conductances(self): self.soma.insert('pas') self.soma.e_pas = -65 # mV self.soma.g_pas = 0.1e-3 # S/cm2 self.soma.insert('Nafbwb') self.soma.insert('Kdrbwb') def set_synapses(self): self.somaAMPAf = Synapse(sect=self.soma, loc=0.5, tau1=0.05, tau2=5.3, e=0) self.somaGABAf = Synapse(sect=self.soma, loc=0.5, tau1=0.07, tau2=9.1, e=-80) self.somaGABAss = Synapse(sect=self.soma, loc=0.5, tau1=20, tau2=40, e=-80)#only for septal input self.somaNMDA = SynapseNMDA(sect=self.soma, loc=0.5, tau1=0.05, tau2=5.3, tau1NMDA=15, tau2NMDA=150, r=1, e=0)