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.
227 lines
5.6 KiB
227 lines
5.6 KiB
import os, pickle, pprint |
|
import numpy as np |
|
import neuron |
|
|
|
import cnmodel |
|
import cnmodel.cells as cells |
|
from cnmodel.util import UserTester, reset |
|
from cnmodel.protocols import IVCurve |
|
|
|
""" |
|
Cell-type tests |
|
""" |
|
|
|
|
|
def test_bushy(): |
|
reset(raiseError=False) |
|
cell = cells.Bushy.create(species="guineapig", modelType="II") |
|
CellTester("bushy_guineapig-typeII", cell) |
|
|
|
|
|
def test_bushy21(): |
|
reset(raiseError=False) |
|
cell = cells.Bushy.create(species="guineapig", modelType="II-I") |
|
CellTester("bushy_guineapig-typeII-I", cell) |
|
|
|
|
|
def test_bushy_mouse(): |
|
reset(raiseError=False) |
|
cell = cells.Bushy.create(species="mouse", modelType="II") |
|
CellTester("bushy-mouse-typeII", cell) |
|
|
|
|
|
def test_tstellate(): |
|
reset(raiseError=False) |
|
cell = cells.TStellate.create(species="guineapig", modelType="I-c") |
|
CellTester("tstellate_guineapig-typeI-c", cell) |
|
|
|
|
|
def test_tstellate_mouse(): |
|
reset(raiseError=False) |
|
cell = cells.TStellate.create(species="mouse", modelType="I-c") |
|
CellTester("tstellate_mouse-typeI-c", cell) |
|
|
|
|
|
def test_tstellatet(): |
|
reset(raiseError=False) |
|
cell = cells.TStellate.create(species="guineapig", modelType="I-t") |
|
CellTester("tstellate_guineapig-typeI-t", cell) |
|
|
|
|
|
# not implemented yet |
|
# def test_tstellatet_mouse(): |
|
# reset(raiseError=False) |
|
# cell = cells.TStellate.create(species='mouse', modelType='I-t') |
|
# CellTester('tstellate_mouse-typeI-t', cell) |
|
|
|
|
|
def test_dstellate(): |
|
reset(raiseError=False) |
|
cell = cells.DStellate.create(species="guineapig", modelType="I-II") |
|
CellTester("dstellate_guineapig-typeI-II", cell) |
|
|
|
|
|
def test_dstellate_mouse(): |
|
reset(raiseError=False) |
|
cell = cells.DStellate.create(species="mouse", modelType="I-II") |
|
CellTester("dstellate_mouse-typeI-II", cell) |
|
|
|
|
|
def test_octopus(): |
|
reset(raiseError=False) |
|
cell = cells.Octopus.create(species="guineapig", modelType="II-o") |
|
CellTester("octopus_guineapig-typeII-o", cell) |
|
|
|
|
|
def test_pyramidal(): |
|
reset(raiseError=False) |
|
cell = cells.Pyramidal.create(species="rat", modelType="I") |
|
CellTester("pyramidal_rat_I", cell) |
|
|
|
|
|
def test_tuberculoventral(): |
|
reset(raiseError=False) |
|
cell = cells.Tuberculoventral.create(species="mouse", modelType="TVmouse") |
|
CellTester("tuberculoventral_mouse_I", cell) |
|
|
|
|
|
def test_cartwheel(): |
|
reset(raiseError=False) |
|
cell = cells.Cartwheel.create(species="mouse", modelType="I") |
|
CellTester("cartwheel_rat_I", cell) |
|
|
|
|
|
def test_sgc_basal_middle(): |
|
reset(raiseError=False) |
|
cell = cells.SGC.create(species="mouse", modelType="bm") |
|
CellTester("SGC_rat_bm", cell) |
|
|
|
|
|
def test_sgc_apical(): |
|
reset(raiseError=False) |
|
cell = cells.SGC.create(species="mouse", modelType="a") |
|
CellTester("SGC_rat_a", cell) |
|
|
|
|
|
# |
|
# Supporting functions |
|
# |
|
|
|
|
|
class CellTester(UserTester): |
|
data_dir = "cell_data" |
|
|
|
def run_test(self, cell): |
|
# run I/V test on cell |
|
V0 = cell.find_i0(showinfo=True) |
|
rmrintau = cell.compute_rmrintau(auto_initialize=False, vrange=None) |
|
iv = IVCurve() |
|
self.iv = iv |
|
iv.run(cell.i_test_range, cell) |
|
if self.audit: |
|
iv.show(cell) |
|
|
|
info = dict( |
|
temp=iv.temp, |
|
icmd=iv.current_cmd, |
|
spikes=iv.spike_times(), |
|
rmp=iv.rest_vm(), |
|
rm_taum=iv.input_resistance_tau(), |
|
vpeak=iv.peak_vm(), |
|
vss=iv.steady_vm(), |
|
rmrintau=rmrintau, |
|
) |
|
return info |
|
|
|
def assert_test_info(self, *args, **kwds): |
|
try: |
|
super(CellTester, self).assert_test_info(*args, **kwds) |
|
finally: |
|
if hasattr(self, "iv") and hasattr(self.iv, "win"): |
|
self.iv.win.hide() |
|
|
|
|
|
# def result_file(key): |
|
# """ |
|
# Return a file name to be used for storing / retrieving test results |
|
# given *key*. |
|
# """ |
|
# path = os.path.dirname(__file__) |
|
# return os.path.join(path, 'cell_data', key + '.pk') |
|
|
|
# def load_cell_info(key): |
|
# """ |
|
# Load prior test results for *key*. |
|
# If there are no prior results, return None. |
|
# """ |
|
# fn = result_file(key) |
|
# if os.path.isfile(fn): |
|
# return pickle.load(open(fn, 'rb')) |
|
# return None |
|
|
|
# def save_cell_info(info, key): |
|
# """ |
|
# Store test results for *key*. |
|
# """ |
|
# fn = result_file(key) |
|
# dirname = os.path.dirname(fn) |
|
# if not os.path.isdir(dirname): |
|
# os.mkdir(dirname) |
|
# pickle.dump(info, open(fn, 'wb')) |
|
|
|
|
|
# The following is superseeded by the built in unit tests. |
|
# def CellTester(key): |
|
# """ |
|
# Test *cell* and raise exception if the results do not match prior |
|
# data. |
|
# """ |
|
# audit = cnmodel.AUDIT_TESTS |
|
|
|
## run I/V test on cell |
|
# iv = IVCurve() |
|
# iv.run(cell.i_test_range, cell) |
|
# iv.show(cell) |
|
|
|
# try: |
|
# info = dict( |
|
# icmd=iv.current_cmd, |
|
# spikes=iv.spike_times(), |
|
# rmp=iv.rest_vm(), |
|
# rm=iv.input_resistance(), |
|
# vpeak=iv.peak_vm(), |
|
# vss=iv.steady_vm(), |
|
# ) |
|
|
|
# expect = load_cell_info(key) |
|
|
|
# if expect is not None: |
|
|
|
## Check test structures are the same |
|
# assert len(info) == len(expect) |
|
# for k in info: |
|
# assert k in expect |
|
|
|
## Check data matches |
|
# for k in info: |
|
# if isinstance(info[k], list): |
|
# assert len(info[k]) == len(expect[k]) |
|
# for i in range(len(info[k])): |
|
# assert np.allclose(info[k][i], expect[k][i]) |
|
# else: |
|
# assert np.allclose(info[k], expect[k]) |
|
# else: |
|
# if not audit: |
|
# raise Exception("No prior test results for cell type '%s'. " |
|
# "Run test.py --audit store new test data." % key) |
|
|
|
# print "\n=== New test results for %s: ===\n" % key |
|
# pprint.pprint(info) |
|
# print "Store new test results? [y/n]", |
|
# yn = raw_input() |
|
# if yn.lower().startswith('y'): |
|
# save_cell_info(info, key) |
|
# else: |
|
# raise Exception("Rejected test results for '%s'" % key) |
|
# finally: |
|
# iv.win.hide()
|
|
|