#!/usr/bin/env python# This program creates a Davison mitral cell model along with tables to pull dataimport sys
import math
# The PYTHONPATH should contain the location of moose.py and _moose.so# files. Putting ".." with the assumption that moose.py and _moose.so# has been generated in ${MOOSE_SOURCE_DIRECTORY}/pymoose/ (as default# pymoose build does) and this file is located in# ${MOOSE_SOURCE_DIRECTORY}/pymoose/examples# sys.path.append('../..')try:
from neuron import *
except ImportError:
print"ERROR: Could not import neuron. Please add the directory containing neuron.py in your PYTHONPATH"import sys
sys.exit(1)
from pylab import *
h.load_file("stdlib.hoc")
h.load_file("stdrun.hoc") # for h.stop ,etc.
h.xopen("/home/aditya/nrn-7.1/share/nrn/lib/hoc/celbild/celtopol.hoc")
h.xopen("/home/aditya/nrn-7.1/share/nrn/lib/hoc/celbild/celgeom.hoc")
h.xopen("/home/aditya/nrn-7.1/share/nrn/lib/hoc/celbild/inhomofn.hoc")
h.xopen("/home/aditya/nrn-7.1/share/nrn/lib/hoc/celbild/psubset.hoc")
h.xopen("/home/aditya/nrn-7.1/share/nrn/lib/hoc/celbild/celset.hoc")
h.xopen("/home/aditya/nrn-7.1/share/nrn/lib/hoc/celbild/celmemb.hoc")
h.xopen("/home/aditya/nrn-7.1/share/nrn/lib/hoc/celbild/celmang.hoc")
h.xopen("/home/aditya/nrn-7.1/share/nrn/lib/hoc/celbild/celbild1.hoc")
# USING PHYSIOLOGICAL UNITS AS NEURON USES THEM
TSTOP = 1600.0# ms # 500ms delay, 600ms current injection, 500ms decay timeclassPGTest:
def__init__(self):
print"NeuroML import of Cell..."
cellb = h.CellBuild() # Cell Builder # This requires all the above xopen loading of files!
neuromlFile = "../PG_aditya2010_neuroML_L1_L2.xml"#neuromlFile = "Level2.xml"
cellb.manage.neuroml(neuromlFile)
cellb.continuous = 1
cellb.cexport() # export the cell from Cell Builder to neuron top levelprint"Loaded NeuroML from: ", neuromlFile
self.PGsoma = h.soma
##### NOTE: soma is mapped from a cable, hence it is a section, not a segment! Hence soma.pas does not work.##### soma(0.5) refers to a segment, hence soma(0.5).pas works.##### Can also do for seg in soma.allseg(), but I typically ensure we have only one segment per section.
self.stim = h.IClamp(0.5, sec=self.PGsoma) # current clamp in soma
self.somavecV = h.Vector()
self.vect = h.Vector()
defrun(self):
self.stim.amp = 0.01# nA i.e 10pA
self.stim.delay = 500#ms
self.stim.dur = 600#ms
h.tstop = TSTOP
h.dt = 0.001# ms
self.somavecV.record(self.PGsoma(0.5)._ref_v)
self.vect.record(h._ref_t)
h.run()
if __name__ == "__main__":
pg = PGTest()
print"soma diameter = ",pg.PGsoma.diam," microns."print"soma length = ",pg.PGsoma.L," microns."print"Specific axial resistance RA = ",pg.PGsoma.Ra," Ohm-cm."
soma_crosssectionA = 3.14159*(pg.PGsoma.diam/2.0)**2 * 1e-8# cm^2 from micron^2
soma_surfaceA = 3.14159*pg.PGsoma.diam*pg.PGsoma.L * 1e-8# cm^2 from micron^2print"soma Rm = ",(1.0/pg.PGsoma(0.5).pas.g)/soma_surfaceA," Ohms."print"soma Cm = ",pg.PGsoma.cm*soma_surfaceA*1e-6," Farads."# Farads from microFaradsprint"soma Ra = ",pg.PGsoma.Ra * pg.PGsoma.L*1e-4/soma_crosssectionA," Ohms."print"soma Na gmax = ",pg.PGsoma(0.5).Na_rat_ms.gmax*soma_surfaceA," Siemens."print"soma K gmax = ",pg.PGsoma(0.5).KDR_ms.gmax*soma_surfaceA," Siemens."
pg.run()
plot(pg.somavecV,',-r')
show()