Zebrafish Mauthner-cell model (Watanabe et al 2017)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:232813
The NEURON model files encode the channel generator and firing simulator for simulating development and differentiation of the Mauthner cell (M-cell) excitability in zebrafish. The channel generator enables us to generate arbitrary Na+ and K+ channels by changing parameters of a Hodgkin-Huxley model under emulation of two-electrode voltage-clamp recordings in Xenopus oocyte system. The firing simulator simulates current-clamp recordings to generate firing patterns of the model M-cell, which are implemented with arbitrary-generated basic Na+ and K+ conductances and low-threshold K+ channels Kv7.4/KCNQ4 and sole Kv1.1 or Kv1.1 coexpressed with Kvbeta2.
Reference:
1 . Watanabe T, Shimazaki T, Oda Y (2017) Coordinated Expression of Two Types of Low-Threshold K+ Channels Establishes Unique Single Spiking of Mauthner Cells among Segmentally Homologous Neurons in the Zebrafish Hindbrain. eNeuro [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type:
Brain Region(s)/Organism: Brainstem;
Cell Type(s): Mauthner cell;
Channel(s): I Potassium; I A; I_KLT; I_KHT; I M; I Sodium;
Gap Junctions:
Receptor(s):
Gene(s): Kv1.1 KCNA1; Kv7.4 KCNQ4; Kvb2 KCNAB2;
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Spike Frequency Adaptation; Bursting; Ion Channel Kinetics;
Implementer(s): Watanabe, Takaki [wtakaki at m.u-tokyo.ac.jp];
Search NeuronDB for information about:  I A; I M; I Sodium; I Potassium; I_KHT; I_KLT;
// Firing analysis.hoc analyzes model firing generated by firing simulator.hoc.
// Number of APs, raster plot, interspike interval(ISI) and 1stAP latency against
// current intensity and currents normalized at threshold current (1T) are measured.
// Threshold current, 1stAP latency, number of APs at 1.5T and 2T, ISI(last)/ISI(1st) ratio
// are printed in command prompt area, which are used for comprehensive analysis (Figures 7A-E). 
//
// Takaki Watanabe
// wtakaki@m.u-tokyo.ac.jp

objref vdat, v1dat, v2dat, v3dat, tdat, sdat
objref spikes,spiket,spikes2,thr1, thr1h, thr2, thr2h, thr3, thr2000, thr3000, tdatfile
objref thresholdcur
objref gnadat, gkcnadat, gkcnab2dat, gkhtdat, gkadat, gkcnqdat
objref datgna, datgkcna, datgkcnab2, datgkht, datgka, datgkcnq

psize=10000
vdat = new Vector(psize,0)
v1dat = new Vector(psize,0)
v2dat = new Vector(psize,0)
v3dat = new Vector(psize,0)
tdat = new Vector(psize,0)
sdat = new Vector(psize,0)
spikes = new Vector(psize,0)
spikes2 = new Vector(psize,0)
spiket = new Vector(psize,0)
gnadat = new Vector(psize,0)
gkcnadat = new Vector(psize,0) 
gkcnab2dat = new Vector(psize,0) 
gkhtdat  = new Vector(psize,0)
gkadat = new Vector(psize,0) 
gkcnqdat = new Vector(psize,0)

set_original()
vdat.record(&soma.v(0.5))
v1dat.record(&soma.i_cap(0.5))
tdat.record(&t)
gnadat.record(&soma.gna_na(0.5))
gkcnadat.record(&soma.gkcna_kcna(0.5))
gkcnab2dat.record(&soma.gkcnab2_kcnab2(0.5))
gkhtdat.record(&soma.gkht_kht(0.5))
gkadat.record(&soma.gka_ka(0.5))
gkcnqdat.record(&soma.gkcnq_kcnq(0.5))

thr1 = new File()
thr1h = new File()
thr2 = new File()
thr2h = new File()
thr3 = new File()
thr2000 = new File()
thr3000 = new File()
tdatfile = new File()
thresholdcur = new File()
datgna = new File()
datgkcna = new File()
datgkcnab2 = new File()
datgkht = new File() 
datgka = new File() 
datgkcnq = new File()

yt.x[4]=0.2
yb.x[4]=-0.2
yt.x[5]=2
yb.x[5]=-0.2


proc run3() {
stoprun=0
	ana[4].beginline(color5,1)
	ana[5].beginline(color5,1)
	ana[8].beginline(color5,1)
	ana[9].beginline(color5,1)
v2dat=v1dat.c.deriv()
v3dat=v2dat.c.deriv()

sdat = vdat.c
spikes.spikebin(sdat,-20)
spiket.indvwhere(spikes,">", 0)
spikes2 = spikes.c.indvwhere(spikes,">",0)
spiken = spiket.size 

ana[3].mark(ic.amp,spiken,"O",3,color5,1)
ana[3].line(ic.amp,spiken)


if(spiken!=0&&threcur==0.01){
threcur=icur.x[i]
print threcur // threshold current
wopen("thresholdcur.dat")
fprint("%d\n",threcur)
wopen()
normcur=1
}

if(gkcnqbar_kcnq1==0){
threcur0=threcur
}

if(icur.x[i]>=threcur*1.48 && icur.x[i]<= threcur*1.52 && normcur==1 && drwn2==0){
normcur=1.5
}else if(icur.x[i]==threcur*2 && drwn3==0){
normcur=2
}else if(icur.x[i]>=threcur*2.48 && icur.x[i]<= threcur*2.52 && normcur==2 && drwn4==0){
normcur=2.5
}else if(icur.x[i]==threcur*3 && drwn5==0){
normcur=3
}

if(spiken>=1){
for k=0,spiken-1 {
   ana[4].mark(spikes2.c.x[k]*dt,ic.amp,"O",3,color5,1)
   ana[4].line(spikes2.c.x[k]*dt,ic.amp)
   }
	if(spiken>1){
for k=1,spiken-1 {
	ana[5].mark(k+1,spikes2.x[k]*dt-spikes2.x[k-1]*dt,"O",3,color5,1)
	ana[5].line(k+1,spikes2.x[k]*dt-spikes2.x[k-1]*dt)
	}
	}
	ana[6].mark(ic.amp,spikes2.x[0]*dt-icdel,"O",3,color5,1)
	ana[6].line(ic.amp,spikes2.x[0]*dt-icdel)
}

if (normalize==1 && normcur>=1){
ana[7].mark(normcur,spiken,"O",3,color5,1)
ana[7].line(normcur,spiken)
	if(normcur==1.5&&norm2==0||normcur==2&&norm2==1){
	print spiken // number of APs at 1.5T and 2T
norm2=norm2+1
}

for k=0,spiken-1 {
   ana[8].mark(spikes2.c.x[k]*dt,normcur,"O",3,color5,1)
   ana[8].line(spikes2.c.x[k]*dt,normcur)
   }
	if(spiken>1){
for k=1,spiken-1 {
	ana[9].mark(k+1,spikes2.x[k]*dt-spikes2.x[k-1]*dt,"O",3,color5,1)
	ana[9].line(k+1,spikes2.x[k]*dt-spikes2.x[k-1]*dt)
	}
	}
	ana[10].mark(normcur,spikes2.x[0]*dt-icdel,"O",3,color5,1)
	ana[10].line(normcur,spikes2.x[0]*dt-icdel)
}else if (normalize==0 && icur.x[i]==threcur && drwn1==0||(icur.x[i]>=threcur*1.48 && icur.x[i]<= threcur*1.52 && drwn2==0)||icur.x[i]==threcur*2 && drwn3==0||(icur.x[i]>=threcur*2.48 && icur.x[i]<= threcur*2.52 && drwn4==0)||icur.x[i]==threcur*3 && drwn5==0){

ana[7].mark(normcur,spiken,"O",3,color5,1)
ana[7].line(normcur,spiken)

for k=0,spiken-1 {
   ana[8].mark(spikes2.c.x[k]*dt,normcur,"O",3,color5,1)
   ana[8].line(spikes2.c.x[k]*dt,normcur)
   }
	if(spiken>1){
for k=1,spiken-1 {
	ana[9].mark(k+1,spikes2.x[k]*dt-spikes2.x[k-1]*dt,"O",3,color5,1)
	ana[9].line(k+1,spikes2.x[k]*dt-spikes2.x[k-1]*dt)
	}
	}
	ana[10].mark(normcur,spikes2.x[0]*dt-icdel,"O",3,color5,1)
	ana[10].line(normcur,spikes2.x[0]*dt-icdel)
}

    ana[3].size(iint, ic.amp*1.2, yb.x[6], yt.x[6])
	ana[4].size(-xscale1*0.1, xscale1,-ic.amp*0.2, ic.amp*1.2)
	ana[5].size(0, spiken, yb.x[8], yt.x[8])
	ana[6].size(-ic.amp*0.1, ic.amp*1.2, yb.x[9], yt.x[9])
	ana[7].size(1, 3, yb.x[6], yt.x[6])
	ana[8].size(-xscale1*0.1, xscale1,0, 4)
	ana[9].size(0, spiken, yb.x[8], yt.x[8])
	ana[10].size(1, 3, yb.x[9], yt.x[9])
	
	for p=3,10{
	ana[p].flush()
	   ana[p].exec_menu("View = plot")
	ana[p].exec_menu("10% Zoom out")
	}


if(normcur==1 && drwn1==0){
    vdat.c.line(ana[num],tdat,color5,1)
	ana[num].flush
	thr1.wopen("thr1.dat")
	vdat.printf(thr1,"%f\n")
	tdatfile.wopen("tdatfile.dat")
	tdat.printf(tdatfile,"%f\n")
    print spikes2.x[0]*dt-icdel //1st AP latency
	drwn1=1	
}else if(normcur==1.5 && drwn2==0){
    vdat.c.line(ana[num+1],tdat,color5,1)
	ana[num+1].flush
	thr1h.wopen("thr1h.dat")
	vdat.printf(thr1h,"%f\n")
 //   print spikes2.x[spiken-1]*dt-icdel 
	drwn2=1
	}else if(ic.amp==2){
    vdat.c.line(ana[num+1],tdat,color5,1)
	ana[num+1].flush
	thr2000.wopen("thr2000.dat")
	vdat.printf(thr2000,"%f\n")
//	print spikes2.x[spiken-1]*dt-icdel 
	drwn2=1
}else if(ic.amp==3){
   vdat.c.line(ana[num+1],tdat,color5,1)
	ana[num+1].flush
	thr3000.wopen("thr3000.dat")
	vdat.printf(thr3000,"%f\n")
//	print spikes2.x[spiken-1]*dt-icdel 
	drwn2=1
}else if(normcur==2 && drwn3==0){
    vdat.c.line(ana[num+2],tdat,color5,1)
	ana[num+2].flush
	thr2.wopen("thr2.dat")
	vdat.printf(thr2,"%f\n")
   if(spiken>1){
   print (spikes2.x[spiken-1]*dt-spikes2.x[spiken-2]*dt)/(spikes2.x[1]*dt-spikes2.x[0]*dt) // the last/1st of interspikeinterval(ISIlast/ISI1st)
   }else if(spiken==1){
  // print 1
   }
 //  print spikes2.x[spiken-1]*dt-icdel
	drwn3=1
}else if(normcur==2.5 && drwn4==0){
    vdat.c.line(ana[num+3],tdat,color5,1)
	ana[num+3].flush
	thr2h.wopen("thr2h.dat")
	vdat.printf(thr2h,"%f\n")
		drwn4=1
}else if(normcur==3 && drwn5==0){
    vdat.c.line(ana[num+4],tdat,color5,1)
	ana[num+4].flush
	thr3.wopen("thr3.dat")
	vdat.printf(thr3,"%f\n")
	drwn5=1
	
if(mode==1){
excute stoprun=1
}else if(mode==3){
		soma{
	gkcnqbar_kcnq1=gkcnqbar_kcnq1+100
	iint=threcur-10
	}
	if(gkcnqbar_kcnq1==2100){
	soma{
	gkcnqbar_kcnq1=0
	gkcnabar_kcna1=gkcnabar_kcna1+20
	iint=threcur0
	}
	}
	if(gkcnabar_kcna1==1020){
	excute stoprun=1
	}
	norm2=0
	run1()
}else if(mode==4){
soma{
	gkcnqbar_kcnq1=gkcnqbar_kcnq1+100
	iint=threcur-10
	}
	if(gkcnqbar_kcnq1==2100){
	soma{
	gkcnqbar_kcnq1=0
	gkcnab2bar_kcnab21=gkcnab2bar_kcnab21+20
	iint=threcur0
	}
	}
	if(gkcnab2bar_kcnab21==1020){
	excute stoprun=1
	}
	norm2=0
		run1()
}
color4=color4+1
color5=color5
}
}

Loading data, please wait...