/* Main script for MS-GABAergic Neuron from Wang paper * -adapted from tutorial3.g by Eric Zilli */ include kons_msgaba.g // steady state and time functions for slow potassium channel: function p_inf (v) float v return { 1.0/(1.0 + {exp {-(v + 0.034)/0.0065}}) } end function p_tau (v) float v return { .006 } end function q_inf (v) float v return { 1.0/(1.0 + {exp {(v + 0.065)/0.0066}}) } end function q_tau (v) float v return { .1*(1.0 + 1.0/(1.0 + ({exp {-(v + 0.050)/0.0068}}))) } end // alpha and beta functions for slow potassium channel: function p_alpha(v) float v return { {p_inf {v}} / {p_tau {v}} } end function p_beta(v) float v return { (1.0 - {p_inf {v}}) / {p_tau {v}} } end function q_alpha(v) float v return { {q_inf {v}} / {q_tau {v}} } end function q_beta(v) float v return { (1.0 - {q_inf {v}}) / {q_tau {v}} } end // alpha and beta functions for potassium channel function n_alpha (v) float v if(v==-.038) return { Phi * .1 } end return { Phi * (-10e3 * (v+.038)) / ({exp {-.1e3*(v+.038)}}-1) } end function n_beta (v) float v return { Phi * 125 * ({exp {-(v + 0.048)/0.080}}) } end // alpha and beta functions for sodium channel function m_alpha (v) float v if(v==-.033) return 1 end return { (-.1e6 * (v+.033)) / ({exp {-.1e3*(v+.033)}}-1) } end function m_beta (v) float v return { 4e3 * ({exp {-(v + 0.058)/0.018}}) } end function h_alpha (v) float v return { Phi * 70 * ({exp {-(v + 0.051)/0.010}}) } end function h_beta (v) float v return { Phi * 1e3 / ({exp {-.1e3*(v+.021)}}+1) } end /******************************************************************** ** adapted from Scripts/neurokit/prototypes/newbulbchan.g ** ^Non-inactivating Muscarinic K current ** ** Tabulated Slow K Channel ** ********************************************************************/ function make_KS_tab if (({exists KS_tab})) return end int i float x, dx, t, b create tabchannel KS_tab setfield KS_tab Ek {EK_MSGABA} Gbar {120.0*SOMA_A_MSGABA} Ik 0 Gk 0 Xpower 1 \ Ypower 1 Zpower 0 call KS_tab TABCREATE X 79 -0.15 0.075 call KS_tab TABCREATE Y 79 -0.15 0.075 x = -0.15 dx = 0.225/79.0 for (i = 0; i <= 79; i = i + 1) setfield KS_tab X_A->table[{i}] {p_alpha {x}} setfield KS_tab X_B->table[{i}] {{p_alpha {x}} + {p_beta {x}}} setfield KS_tab Y_A->table[{i}] {q_alpha {x}} setfield KS_tab Y_B->table[{i}] {{q_alpha {x}} + {q_beta {x}}} x = x + dx end call KS_tab TABFILL X 3000 0 call KS_tab TABFILL Y 3000 0 end /******************************************************************** ** adapted from Scripts/neurokit/prototypes/newbulbchan.g ** ^Non-inactivating Muscarinic K current ** ** Tabulated K Channel ** ********************************************************************/ function make_K_tab if (({exists K_tab})) return end int i float x, dx, t, b create tabchannel K_tab setfield K_tab Ek {EK_MSGABA} Gbar {80.0*SOMA_A_MSGABA} Ik 0 Gk 0 Xpower 4 \ Ypower 0 Zpower 0 call K_tab TABCREATE X 79 -0.15 0.075 x = -0.15 dx = 0.225/79.0 for (i = 0; i <= 79; i = i + 1) setfield K_tab X_A->table[{i}] {n_alpha {x}} setfield K_tab X_B->table[{i}] {{n_alpha {x}} + {n_beta {x}}} x = x + dx end call K_tab TABFILL X 3000 0 end /******************************************************************** ** adapted from Scripts/neurokit/prototypes/newbulbchan.g ** ^Non-inactivating Muscarinic K current ** ** Tabulated Na Channel ** ********************************************************************/ function make_Na_t if (({exists Na_t})) return end create vdep_channel Na_t setfield ^ Ek {ENA_MSGABA} gbar {500.0 * SOMA_A_MSGABA} ce Na_t create table Na_minf call ^ TABCREATE 79 -0.15 0.075 create tabgate Na_h call ^ TABCREATE alpha 79 -0.15 0.075 call ^ TABCREATE beta 79 -0.15 0.075 int i float x, dx, t, b x = -0.15 dx = 0.225/79.0 for (i = 0; i <= 79; i = i + 1) setfield Na_minf table->table[{i}] \ { {m_alpha {x}} / ({m_alpha {x}} + {m_beta {x}}) } setfield Na_h alpha->table[{i}] {h_alpha {x}} setfield Na_h beta->table[{i}] {h_beta {x}} x = x + dx end call Na_minf TABFILL 3000 0 setfield Na_minf table->calc_mode 0 call Na_h TABFILL alpha 3000 0 setfield Na_h alpha->calc_mode 0 call Na_h TABFILL beta 3000 0 setfield Na_h beta->calc_mode 0 addmsg Na_minf . MULTGATE output 3 addmsg Na_h . MULTGATE m 1 ce .. end //=============================== // Function Definitions //=============================== function makecompartment(path, length, dia, Erest) str path float length, dia, Erest float area = length*PI*dia float xarea = PI*dia*dia/4 create compartment {path} setfield {path} \ Em { Erest } \ // volts Rm { RM_MSGABA / SOMA_A_MSGABA} \ // Ohms Cm { CM_MSGABA * SOMA_A_MSGABA} \ // Farads Ra { RA_MSGABA*length/xarea } // Ohms end function step_tmax step {tmax} -time end function set_inject(dialog) str dialog setfield /prot_msgaba/soma inject {getfield {dialog} value} end //=============================== // Main Script //=============================== create neutral /prot_msgaba // create the soma compartment "/prot_msgaba/soma" makecompartment /prot_msgaba/soma {SOMA_L_MSGABA} {SOMA_D_MSGABA} {ELEAK_MSGABA} setfield /prot_msgaba/soma initVm {EREST_ACT_MSGABA} // initialize Vm to rest potential // provide current injection to the soma setfield /prot_msgaba/soma inject 1.885e-11 // injection current // Create three channels, "/prot_msgaba/soma/Na_hh", "/prot_msgaba/soma/K_hh" // and "/prot_msgaba/soma/KS_tab" pushe /prot_msgaba/soma make_KS_tab make_K_tab make_Na_t pope /* // spikegen and spikehistory stuff create spikegen /prot_msgaba/soma/spike setfield /prot_msgaba/soma/spike thresh 0 abs_refract .005 output_amp 1 addmsg /prot_msgaba/soma /prot_msgaba/soma/spike INPUT Vm create spikehistory s_history setfield s_history ident_toggle 0 filename "spikes"\ initialize 0 leave_open 1 flush 1 addmsg /prot_msgaba/soma/spike s_history SPIKESAVE */ // The soma needs to know the value of the channel conductance // and equilibrium potential in order to calculate the current // through the channel. The channel calculates its conductance // using the current value of the soma membrane potential. addmsg /prot_msgaba/soma/K_tab /prot_msgaba/soma CHANNEL Gk Ek addmsg /prot_msgaba/soma /prot_msgaba/soma/K_tab VOLTAGE Vm addmsg /prot_msgaba/soma/Na_t /prot_msgaba/soma CHANNEL Gk Ek addmsg /prot_msgaba/soma /prot_msgaba/soma/Na_t VOLTAGE Vm addmsg /prot_msgaba/soma/KS_tab /prot_msgaba/soma CHANNEL Gk Ek addmsg /prot_msgaba/soma /prot_msgaba/soma/KS_tab VOLTAGE Vm addmsg /prot_msgaba/soma /prot_msgaba/soma/Na_t/Na_minf INPUT Vm addmsg /prot_msgaba/soma /prot_msgaba/soma/Na_t/Na_h VOLTAGE Vm /* pushe ce /output/msgdata/voltage/volts/ setfield . ysquish 0 pope */ check reset