// Mitral cell model template begintemplate Mitral public soma, prim, dend, tuft, all public AMPA, GABAA, spiketimes, dendspike, tuftspike, spikecount, spikecount2, spikecount3 create soma, prim, dend, tuft //objref real objref AMPA, GABAA, spikecount, spikecount2, spikecount3 objref spiketimes, dendspike, tuftspike proc celldef() { topol() subsets() geom() biophys($1) // geom_nseg() } proc topol() { connect dend(0), soma(1) connect prim(1), soma(0) connect tuft(1), prim(0) } // create subsets objref all proc subsets() { all = new SectionList() soma all.append prim all.append dend all.append tuft all.append } // The following parameters are adapted from Shen et al. JNP, 1999 proc geom() { soma { L = 25 diam = 20 nseg = 1 } prim { L = 370 diam = 3.5 nseg = 5 } dend { L = 500 diam = 3.4 // 3.4 !!! nseg = 7 } tuft { L = 20 diam = 0.5 nseg = 1 } forall { //nseg = 1 //nseg = int((L/(0.1*lambda_f(100))+0.9)/2)*2 + 1 } } func lambda_f() { return 1e5*sqrt(diam/(4*PI*$1*Ra*cm)) } proc biophys() { local El, RM, AMPAtau, AMPArev, GABAAtau GABAArev RM = 30e3 // ohm.cm2 Shen et al. JNP, 1999 El = -60 // -60 !!! ENa = 45 Ek = -80 AMPAtau = 10 AMPArev = 0 GABAAtau = 18 GABAArev = -70 shell_depth = 1 spike_threshold = -10 //========================================================== gNa_soma = 50e-3 gNa_dend = 30e-3 gNa_prim = 20e-3 gNa_tuft = 20e-3 sh_Na = -3 // -3 gKdr_soma = 30e-3 gKdr_dend = 20e-3 gKdr_prim = 10e-3 gKdr_tuft = 10e-3 gA_soma = 10e-3 gA_dend = 0e-3 gA_prim = 0e-3 gA_tuft = 0e-3 Sha_A = 9.9 Shi_A = 5.7 ScaleNP = 1.0 // 1.0/1.5 !!! (1.4/1.5/1.6) ScaleKS = 1.0 // 1.0/1.3 !!! (1.2/1.2/1.3) gNaP_soma = ScaleNP*0.2e-3 // 0.2 gNaP_dend = ScaleNP*0.02e-3 // 0.02 gNaP_prim = ScaleNP*0.10e-3 // 0.1 gNaP_tuft = ScaleNP*0.10e-3 // 0.1 gKs_soma = ScaleKS*42e-3 // 42 gKs_dend = ScaleKS*8e-3 // 8 gKs_prim = ScaleKS*18e-3 // 18 gKs_tuft = ScaleKS*18e-3 // 18 tau_KS = 10 // Default: 10 !!! kh_KS = 1.5 // Default: 1.5 gCa_soma = 0.4e-3 gCa_dend = 0.05e-3 gCa_prim = 0.2e-3 gCa_tuft = 0.2e-3 gKCa_soma = 5e-3 // 5 spiketimes = new Vector() dendspike = new Vector() tuftspike = new Vector() forsec all { Ra = 70 // ohm*cm; Shen et al. JNP, 1999 cm = 1.2 // uF/cm^2; Shen et al. JNP, 1999 } soma { insert pas e_pas = El g_pas = 1/RM insert Inic enic_Inic = 0 gbar_Inic = 0.0e-3 // 0.1 insert nafast gnabar_nafast = gNa_soma sh_nafast = sh_Na insert kfasttab gkbar_kfasttab = gKdr_soma insert kamt gbar_kamt = gA_soma sha_kamt = Sha_A shi_kamt = Shi_A insert IKs gbar_IKs = gKs_soma tauM_IKs = tau_KS kh_IKs = kh_KS insert INaP gbar_INaP = gNaP_soma insert ICa gcabar_ICa = gCa_soma insert Ikca gkbar_Ikca = gKCa_soma insert cad depth_cad = shell_depth spikecount = new APCount(0.5) spikecount.thresh = spike_threshold spikecount.record(spiketimes) } dend { insert pas e_pas = El g_pas = 1/RM insert nafast gnabar_nafast = gNa_dend sh_nafast = sh_Na insert kfasttab gkbar_kfasttab = gKdr_dend insert kamt gbar_kamt = gA_dend sha_kamt = Sha_A shi_kamt = Shi_A insert IKs gbar_IKs = gKs_dend tauM_IKs = tau_KS kh_IKs = kh_KS insert INaP gbar_INaP = gNaP_dend insert ICa gcabar_ICa = gCa_dend insert cad depth_cad = shell_depth GABAA = new ExpSyn(0.5) GABAA.tau = GABAAtau GABAA.e = GABAArev spikecount2 = new APCount(1.0) spikecount2.thresh = spike_threshold spikecount2.record(dendspike) } prim { insert pas e_pas = El g_pas = 1/RM insert nafast gnabar_nafast = gNa_prim sh_nafast = sh_Na insert kfasttab gkbar_kfasttab = gKdr_prim insert kamt gbar_kamt = gA_prim sha_kamt = Sha_A shi_kamt = Shi_A insert IKs gbar_IKs = gKs_prim tauM_IKs = tau_KS kh_IKs = kh_KS insert INaP gbar_INaP = gNaP_prim insert ICa gcabar_ICa = gCa_prim insert cad depth_cad = shell_depth } tuft { insert pas e_pas = El g_pas = 1/RM insert Inic enic_Inic = 3.2 gbar_Inic = $1 insert nafast gnabar_nafast = gNa_tuft sh_nafast = sh_Na insert kfasttab gkbar_kfasttab = gKdr_tuft insert kamt gbar_kamt = gA_tuft sha_kamt = Sha_A shi_kamt = Shi_A insert IKs gbar_IKs = gKs_tuft tauM_IKs = tau_KS kh_IKs = kh_KS insert INaP gbar_INaP = gNaP_tuft insert ICa gcabar_ICa = gCa_tuft insert cad depth_cad = shell_depth AMPA = new ExpSyn(0.5) AMPA.tau = AMPAtau AMPA.e = AMPArev spikecount3 = new APCount(0.5) spikecount3.thresh = spike_threshold spikecount3.record(tuftspike) } forall if (ismembrane("na_ion")) { ena = ENa } forall if (ismembrane("k_ion")) { ek = Ek } } proc init() { celldef($1) } endtemplate Mitral