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.

92 lines
2.2 KiB

from neuron import h
import numpy as np
import scipy
import scipy.integrate
import scipy.stats
try:
import pyqtgraph as pg
HAVE_PG = True
except ImportError:
HAVE_PG = False
from ..util.stim import make_pulse
from .protocol import Protocol
class CurrentClamp(Protocol):
def __init__(self):
super(CurrentClamp, self).__init__()
def run(self, cell, cmd, temp=22, dt=0.025):
"""
Run a single current-clamp recording on *section*.
Parameters
----------
cell : Cell
The Cell instance to test. IClamp will be attached to
cell.soma(0.5).
cmd : array
Array of current command values
temp :
temperature of simulation (22)
dt :
timestep of simulation (0.025)
"""
self.reset()
self.cell = cell
self.current_cmd = cmd
self.dt = dt
self.temp = temp
tend = len(cmd) * dt
# Configure IClamp
istim = h.iStim(0.5, sec=cell.soma)
istim.delay = 0
istim.dur = 1e9 # these actually do not matter...
istim.iMax = 0.0
i_stim = h.Vector(cmd)
i_stim.play(istim._ref_i, h.dt, 0)
# Connect recording vectors
self["vm"] = cell.soma(0.5)._ref_v
self["i_inj"] = istim._ref_i
self["time"] = h._ref_t
# GO
h.dt = dt
h.celsius = temp
h.tstop = tend
cell.initialize()
h.frecord_init()
while h.t < h.tstop:
h.fadvance()
def show(self):
"""
Plot results from run()
"""
if not HAVE_PG:
raise Exception("Requires pyqtgraph")
#
# Generate figure with subplots
#
app = pg.mkQApp()
win = pg.GraphicsWindow()
win.resize(1000, 800)
Vplot = win.addPlot(labels={"left": "Vm (mV)", "bottom": "Time (ms)"})
win.nextRow()
Iplot = win.addPlot(labels={"left": "Iinj (nA)", "bottom": "Time (ms)"})
win.ci.layout.setRowStretchFactor(0, 10)
win.ci.layout.setRowStretchFactor(1, 5)
Vplot.plot(self["time"], self["vm"])
Iplot.plot(self["time"], self["i_inj"])
self.win = win