/*---------------------------------------------------------------------------- SIMULATIONS OF INTERCONNECTED TC AND RE CELLS ============================================= - Object sTC (simplified single-compartment cell based on Huguenard-McCormick model of TC cell) - Object sRE (simplified single-compartment cell based on Destexhe et al. model) - kinetic models for synaptic receptors with pulses of transmitter SIMULATION OF THALAMIC SPINDLES WITH SINGLE COMPARTMENTS RE <--(GABAa)--> RE <---(AMPA)---- TC ----(GABAa)--> (GABAb) SIMPLE NETWORK CONFIGURATION WITH 2 TC and 2 RE cells RE = RE | / \ | TC TC This file simulates bicuculline-induced oscillations in the 4-cell circuit (long time scale) See details and Fig.8 in: Destexhe, A., Bal, T., McCormick, D.A. and Sejnowski, T.J. Ionic mechanisms underlying synchronized oscillations and propagating waves in a model of ferret thalamic slices. Journal of Neurophysiology 76: 2049-2070, 1996. (see http://www.cnl.salk.edu/~alain or http://cns.fmed.ulaval.ca) Alain Destexhe, Salk Institute and Laval University, 1995 ----------------------------------------------------------------------------*/ //---------------------------------------------------------------------------- // load and define general graphical procedures //---------------------------------------------------------------------------- load_file("nrngui.hoc") objectvar g[20] // max 20 graphs ngraph = 0 proc addgraph() { local ii // define subroutine to add a new graph // addgraph("variable", minvalue, maxvalue) ngraph = ngraph+1 ii = ngraph-1 g[ii] = new Graph(0) g[ii].view(0,1,0,1, int(ii/2)*350+50, ii%2*260+80, 300, 200) g[ii].size(tstart,tstop,$2,$3) g[ii].xaxis() g[ii].yaxis() g[ii].addvar($s1,1,0) g[ii].save_name("graphList[0].") graphList[0].append(g[ii]) } proc addtext() { local ii // define subroutine to add a text graph // addtext("text") ngraph = ngraph+1 ii = ngraph-1 g[ii] = new Graph() g[ii].size(0,tstop,0,1) g[ii].xaxis(3) g[ii].yaxis(3) g[ii].label(0.1,0.8,$s1) g[ii].save_name("graphList[0].") graphList[0].append(g[ii]) text_id = ii } proc addline() { // to add a comment to the text window // addline("text") g[text_id].label($s1) } if(ismenu==0) { nrnmainmenu() // create main menu nrncontrolmenu() // create control menu ismenu=1 } //---------------------------------------------------------------------------- // transient time //---------------------------------------------------------------------------- trans = 00 print " " print ">> Transient time of ",trans," ms" print " " //---------------------------------------------------------------------------- // create TC cells //---------------------------------------------------------------------------- print " " print "<<==================================>>" print "<< CREATE CELLS >>" print "<<==================================>>" print " " load_file("TC.tem") // read geometry file ncells = 2 objectvar TC[ncells] for i=0,ncells-1 { TC[i] = new sTC() } //---------------------------------------------------------------------------- // create RE cells //---------------------------------------------------------------------------- load_file("RE.tem") // read geometry file objectvar RE[ncells] // create RE cells for i=0,ncells-1 { RE[i] = new sRE() } //---------------------------------------------------------------------------- // PROCEDURES FOR SYNAPTIC CONNECTIVITY IN 1-DIM //---------------------------------------------------------------------------- print " " print "<<==================================>>" print "<< CREATE SYNAPTIC RECEPTORS >>" print "<<==================================>>" print " " func ncon() { local nc // function to get the number of connections // argument: interaction diameter nc = 2 * $1 + 1 if(nc>ncells) nc = ncells return nc } //---------------------------------------------------------------------------- // Glutamate AMPA receptors in synapses from TC to RE //---------------------------------------------------------------------------- diamTCRE = 1 // diameter of connectivity for TC->RE nTCRE = ncon(diamTCRE) // nb of RE cells receiving synapses from one TC cell objectvar reG[ncells][nTCRE] for i=0,ncells-1 { nv = 0 for j=0,ncells-1 { if( abs(i-j) <= diamTCRE) { print "<< AMPA receptor from TC cell ",i," to RE cell ",j," >>" print " " reG[i][nv] = new AMPA_S() RE[j].soma reG[i][nv].loc(0.5) // postsynaptic is RE[j] setpointer reG[i][nv].pre, TC[i].soma.v // presynaptic is TC[i] nv = nv + 1 } } } print " " print "<< ",nv," AMPA-MEDIATED SYNAPTIC CONTACTS FROM TC TO RE >>" print " " Alpha_AMPA_S = 0.94 // kinetics from simplex with short pulses Beta_AMPA_S = 0.18 Cmax_AMPA_S = 0.5 Cdur_AMPA_S = 0.3 Erev_AMPA_S = 0 //---------------------------------------------------------------------------- // GABAa receptors in intra-RE synapses //---------------------------------------------------------------------------- diamRERE = 1 // diameter of connectivity for RE->RE nRERE = ncon(diamRERE) // nb of RE cells receiving synapses from one TC cell objectvar reA[ncells][nRERE] for i=0,ncells-1 { nv = 0 for j=0,ncells-1 { if( abs(i-j) <= diamRERE) { print "<< GABAa receptor from RE cell ",i," to RE cell ",j," >>" print " " reA[i][nv] = new GABAa_S() RE[j].soma reA[i][nv].loc(0.5) // postsynaptic is RE[j] setpointer reA[i][nv].pre, RE[i].soma.v // presynaptic is TC[i] nv = nv + 1 } } } print " " print "<< ",nv," GABAa-MEDIATED SYNAPTIC CONTACTS FROM RE TO RE >>" print " " Alpha_GABAa_S = 20 // from diffusion model Beta_GABAa_S = 0.162 Cmax_GABAa_S = 0.5 // short pulses Cdur_GABAa_S = 0.3 Erev_GABAa_S = -80 //---------------------------------------------------------------------------- // GABAa receptors in synapses from RE to TC cells //---------------------------------------------------------------------------- diamRETC = 1 // diameter of connectivity from RE->TC nRETC = ncon(diamRETC) // nb of RE cells receiving synapses from one TC cell objectvar tcA[ncells][nRETC] for i=0,ncells-1 { nv = 0 for j=0,ncells-1 { if( abs(i-j) <= diamRETC) { print "<< GABAa receptor from RE cell ",i," to TC cell ",j," >>" print " " tcA[i][nv] = new GABAa_S() TC[j].soma tcA[i][nv].loc(0.5) // postsynaptic is TC[j] setpointer tcA[i][nv].pre, RE[i].soma.v // presynaptic is RE[i] nv = nv + 1 } } } print " " print "<< ",nv," GABAa-MEDIATED SYNAPTIC CONTACTS FROM RE TO TC >>" print " " Alpha_GABAa_S = 20 // from diffusion model Beta_GABAa_S = 0.162 Cmax_GABAa_S = 0.5 // short pulses Cdur_GABAa_S = 0.3 Erev_GABAa_S = -85 // Rinzel's Erev //---------------------------------------------------------------------------- // GABAb receptors in synapses from RE to TC cells //---------------------------------------------------------------------------- // use same diameters and connectivity as GABAa receptors (colocalized) objectvar tcB[ncells][nRETC] for i=0,ncells-1 { nv = 0 for j=0,ncells-1 { if( abs(i-j) <= diamRETC) { print "<< GABAb receptor from RE cell ",i," to TC cell ",j," >>" print " " tcB[i][nv] = new GABAb_S() TC[j].soma tcB[i][nv].loc(0.5) // postsynaptic is TC[j] setpointer tcB[i][nv].pre, RE[i].soma.v // presynaptic is RE[i] nv = nv + 1 } } } print " " print "<< ",nv," GABAb-MEDIATED SYNAPTIC CONTACTS FROM RE TO TC >>" print " " // // Kinetics of GABAb_S synapses (from simplex low K1) // K1_GABAb_S = 0.09 // (/ms mM) forward binding rate to receptor K2_GABAb_S = 0.0012 // (/ms) backward (unbinding) rate of receptor K3_GABAb_S = 0.18 // (/ms) rate of G-protein production K4_GABAb_S = 0.034 // (/ms) rate of G-protein decay KD_GABAb_S = 100 // dissociation constant of K+ channel n_GABAb_S = 4 // nb of binding sites of G-protein on K+ Erev_GABAb_S = -95 // (mV) reversal potential (E_K) Cmax_GABAb_S = 0.5 // short pulses Cdur_GABAb_S = 0.3 proc assign_synapses() { // procedure to assign syn conductances // params: 1=intraRE, 2=GABAa in TC, // 3=GABAb in TC, 3=AMPA in RE for i=0, ncells-1 { for j=0, nRERE-1 { reA[i][j].gmax = $1 / nRERE } for j=0, nRETC-1 { tcA[i][j].gmax = $2 / nRETC tcB[i][j].gmax = $3 / nRETC } for j=0, nTCRE-1 { reG[i][j].gmax = $4 / nTCRE } } } //assign_synapses(0.2,0.02,0.04,0.2) // synaptic weights J neurophys assign_synapses(0,0,0.04,0.2) // no GABA_A // setup TC cells in resting mode (no spontaneous oscillation) for i=0,ncells-1 { TC[i].soma.ghbar_iar = 1.5e-5 TC[i].kl.gmax = 0.003 } // setup first TC cell as an initiator (spontaneous waxing-waning) // TC[0].soma.ghbar_iar = 2.5e-5 // long interspindle period // TC[0].kl.gmax = 0.005 TC[0].soma.ghbar_iar = 2e-5 // shorter interspindle period TC[0].kl.gmax = 0.005 //---------------------------------------------------------------------------- // setup simulation parameters //---------------------------------------------------------------------------- Dt = 1 npoints = 60000 objectvar Sim // create vector of simulation points Sim = new Vector(npoints) dt = 0.1 // must be submultiple of Dt tstart = trans tstop = trans + npoints * Dt runStopAt = tstop steps_per_ms = 1/Dt celsius = 36 v_init = -70 //---------------------------------------------------------------------------- // add graphs //---------------------------------------------------------------------------- //addgraph("tcB[0][0].g",0,0.05) //addgraph("TC[0].soma.o2_iar",0,1) //addgraph("TC[0].soma.p1_iar",0,1) strdef gtxt for i=0,ncells-1 { sprint(gtxt,"TC[%d].soma.v(0.5)",i) addgraph(gtxt,-120,40) sprint(gtxt,"RE[%d].soma.v(0.5)",i) addgraph(gtxt,-120,40) } //---------------------------------------------------------------------------- // add text //---------------------------------------------------------------------------- access TC[0].soma proc text() { sprint(gtxt,"%d RE and %d TC cell",ncells,ncells) addtext(gtxt) sprint(gtxt,"Membrane level: kleak=%g",TC.kl.gmax) addline(gtxt) sprint(gtxt,"Ih: g=%g, ginc=%g, nca=%g, k2=%g, cac=%g", \ ghbar_iar,ginc_iar,nca_iar,k2_iar,cac_iar) addline(gtxt) sprint(gtxt,"Ih: nexp=%g, Pc=%g, k4=%g, taum=%g", \ nexp_iar,Pc_iar,k4_iar,taum_iar) addline(gtxt) sprint(gtxt,"GABAa_S: Alpha=%g, Beta=%g, Cdur=%g, Cmax=%g", \ Alpha_GABAa_S,Beta_GABAa_S,Cmax_GABAa_S,Cdur_GABAa_S) addline(gtxt) sprint(gtxt,"GABAb_S: K1=%g, K2=%g, K3=%g, K4=%g, KD=%g", \ K1_GABAb_S,K2_GABAb_S,K3_GABAb_S,K4_GABAb_S,KD_GABAb_S) addline(gtxt) sprint(gtxt,"RE-RE=%g, RE-TC=%g, RE-TC(b)=%g, TC-RE=%g", \ reA[0][0].gmax, tcA[0][0].gmax, tcB[0][0].gmax, reG[0][0].gmax) addline(gtxt) } text() print " " print "Use procedure text() to create a new window with actual parameters" print "Use procedure assign_synapses() to change synaptic conductances" print " "