model of DCN pyramidal neuron
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
4.5 KiB

#!/usr/bin/python
"""
Basic test of cnmodel decorator on simple cell
Users LC_bushy.hoc and XM13 mechanisms.
"""
from __future__ import print_function
__author__ = "pbmanis"
__author__ = "pbmanis"
import sys
import numpy as np
import cnmodel.cells as cells
import cnmodel.decorator as Decorator
from cnmodel.util import pyqtgraphPlotHelpers as PH
from cnmodel.protocols import IVCurve
import pyqtgraph as pg
import timeit
class F5:
def __init__(self, filename):
# build plotting area
#
self.filename = filename
self.iv = IVCurve() # use standard IVCurve here...
self.temperature = 34
self.initdelay = 150.0
def run(self):
self.post_cell = cells.Bushy.create(
morphology=self.filename,
decorator=Decorator,
species="mouse",
modelName="XM13",
modelType="II",
)
self.post_cell.set_temperature(float(self.temperature))
self.post_cell.set_d_lambda(
freq=2000.0
) # necessary to ensure appropriate spatial
self.iv.reset()
irange = self.post_cell.i_test_range
# irange = {'pulse': (-0.6, 1.1, 0.2)} for Figure 5 of paper
irange = {"pulse": (-0.5, 1.5, 0.25)}
self.durs = (self.initdelay + 20.0, 100.0, 50.0)
self.iv.run(
irange,
self.post_cell,
durs=self.durs,
temp=float(self.temperature),
initdelay=self.initdelay,
)
def plot(self):
pg.setConfigOption("background", "w") # set background to white
pg.setConfigOption("foreground", "k")
self.app = pg.mkQApp()
wintitle = "test_decorator"
self.view = pg.GraphicsView()
self.layout = pg.GraphicsLayout() # (border=(100,100,100))
self.view.setCentralItem(self.layout)
self.view.resize(800, 600)
self.view.show()
self.plots = {}
nr1 = 6
nc = 10
for i in range(1, nr1):
self.plots["p%d" % i] = None
for i in range(1, nr1 + 1):
self.layout.addLayout(row=i, col=nc)
for i in range(1, nc + 1):
self.layout.addLayout(row=nr1 + 2, col=i)
self.plots["p1"] = self.layout.addPlot(
row=1,
col=1,
rowspan=6,
colspan=9,
labels={"left": "V (mV)", "bottom": "Time (ms)"},
)
self.plots["p2"] = self.layout.addPlot(
row=7,
col=1,
rowspan=1,
colspan=9,
labels={"left": "I (nA)", "bottom": "Time (ms)"},
)
for k in range(len(self.iv.voltage_traces)):
self.plots["p1"].plot(
self.iv.time_values,
np.array(self.iv.voltage_traces[k]),
pen=pg.mkPen("k", width=0.75),
)
self.plots["p2"].plot(
self.iv.time_values,
np.array(self.iv.current_traces[k]),
pen=pg.mkPen("k", width=0.75),
)
self.plots["p1"].setRange(
xRange=(0.0, np.sum(self.durs) - self.initdelay), yRange=(-160.0, 40.0)
)
self.plots["p2"].setRange(
xRange=(0.0, np.sum(self.durs) - self.initdelay), yRange=(-1, 1)
)
PH.noaxes(self.plots["p1"])
PH.calbar(
self.plots["p1"],
calbar=[125.0, -120.0, 10.0, 20.0],
unitNames={"x": "ms", "y": "mV"},
)
PH.noaxes(self.plots["p2"])
PH.calbar(
self.plots["p2"],
calbar=[125, 0.1, 0.0, 0.5],
unitNames={"x": "ms", "y": "nA"},
)
text = "{0:2d}\u00b0C {1:.2f}-{2:.2f} nA".format(
int(self.temperature),
np.min(self.iv.current_cmd),
np.max(self.iv.current_cmd),
)
ti = pg.TextItem(text, anchor=(1, 0))
ti.setFont(pg.QtGui.QFont("Arial", 9))
ti.setPos(120.0, -120.0)
self.plots["p1"].addItem(ti)
if __name__ == "__main__":
if len(sys.argv) == 1:
fig5 = F5("examples/LC_bushy.hoc")
else:
fn = "/Users/pbmanis/Desktop/Python/VCNModel/VCN_Cells/VCN_c{0:02d}/Morphology/VCN_c{0:02d}.hoc".format(
int(sys.argv[1])
)
fig5 = F5(fn)
start_time = timeit.default_timer()
fig5.run()
elapsed = timeit.default_timer() - start_time
print("Elapsed time for simulation: %f" % (elapsed))
fig5.plot()
if sys.flags.interactive == 0:
pg.QtGui.QApplication.exec_()