# code by sam neymotin & ernie forzano
from neuron import h
h.load_file("stdrun.hoc")
from pylab import *
import sys
import pickle
import numpy
h.install_vecst() # for samp and other NQS/vecst functions
from conf import *
import os
# check if data exists - if not, run simulations, saving output data
dataDict = {'SPI6': 'SPI6','morph':'PTcell'}
for k, v in list(dataDict.items()) :
if not os.path.exists('data/'+ k +'.pkl'):
os.system('python sim.py ' + v +'.cfg')
ion()
rcParams['lines.markersize'] = 15
rcParams['lines.linewidth'] = 4
rcParams['font.size'] = 45
tl = tight_layout
#
def drtxt (ax,lett,tx=-0.075,ty=1.03,fsz=45): text(tx,ty,lett,fontweight='bold',transform=ax.transAxes,fontsize=fsz)
def naxbin (ax,nb): ax.locator_params(nbins=nb);
lmodel = ['Detailed', 'Simple']
lmodelpath = ['data/morph.pkl','data/SPI6.pkl']
lclr = ['r', 'b']
dmod = {}
for m,p in zip(lmodel,lmodelpath): dmod[m] = pickle.load(open(p))
# determine config file name
def setfcfg ():
fcfg = "PTcell.cfg" # default config file name
for i in range(len(sys.argv)):
if sys.argv[i].endswith(".cfg") and os.path.exists(sys.argv[i]):
fcfg = sys.argv[i]
#print "config file is " , fcfg
return fcfg
fcfg=setfcfg() # config file name
dconf = readconf(fcfg)
dprm = dconf['params']
dfixed = dconf['fixed']
sampr = dconf['sampr'] # sampling rate
I = numpy.load(dconf['lstimamp'])
evolts = numpy.load(dconf['evolts']) # experimental voltage traces
tt = numpy.array(dmod[lmodel[0]]['vt'])
tte = linspace(0, 1e3*evolts.shape[0]/sampr, evolts.shape[0])
#
def indexof (a,f):
for i,val in enumerate(a):
if abs(val-f) < 0.01: return i
return -1
mytstop = dconf['tstop']
mybase = dconf['baset']
stimdel = dconf['stimdel']
stimdur = dconf['stimdur']
evolts = numpy.load(dconf['evolts']) # experimental voltage traces
ISubth = I[0:6]
ISup = I[6:] # subthresh right before threshold & superthreshold traces
#
def drawsuptraces ():
tx,ty=-.05,1.02; offy = amin(tt[0]) - 30
cdx = 1
ncol = len(lmodel) + 1
ax=subplot(1,ncol,cdx); ax.set_xticks([]); ax.set_yticks([]);
plot([1420,1520],[590,590],'k',linewidth=12)
plot([1520,1520],[580,590],'k',linewidth=12)
ypos = offy
ltxt = ['','a','b','c','d']
for j,i in enumerate(ISup):
idx = indexof(I,i)
plot(tte,evolts[:,idx] + ypos,'k')
if j > 0: ypos += 95
else: ypos += 15
text(tx,ty,ltxt[cdx],fontweight='bold',transform=ax.transAxes);
title('Experiment',fontweight='bold')
cdx += 1
for mdx,m in enumerate(lmodel):
ax=subplot(1,ncol,cdx); title(m,fontweight='bold')
text(tx,ty,ltxt[cdx],fontweight='bold',transform=ax.transAxes);
ypos = offy
for j,i in enumerate(ISup):
plot(tt, dmod[m][i] + ypos,lclr[mdx])
if j > 0: ypos += 95
else: ypos += 15
cdx += 1
ax.set_xticks([]); ax.set_yticks([]);
for i in range(1,ncol+1,1):
ax=subplot(1,ncol,i)
xlim((400,1600));
ylim((-125,600));
drawsuptraces()