// FILE IN USE 05/17/2005 -- present. // Changes to previous version of 01/05: // 1. HCN channels rebuilt based on Chan et al (2004), J Neurosci 24: 9921-32. //genesis float xmin = -0.2 float xmax = 0.1 int xdivs = 299 float dx = (xmax - xmin)/xdivs float x int i //================================================================== // Tab channel descriptions for GP neuron modeling // Created by J. Hanson // edited 10-02 // Updated by J. Edgerton, 9/2003 -- //================================================================== //================================================================== // Fast Na channel // Activation and fast inactivation made to replicate resurgent // sodium current from Raman & Bean as closely as possible. // Slow inactivation gate added by J. Edgerton, 2004. // Support for voltage-dependent Z-gate by Cengiz Gunay, 2004 //================================================================== function make_Na_fast_GP if ({exists Na_fast_GP}) return end create tabchannel Na_fast_GP setfield Na_fast_GP Ek {ENa} Gbar {G_Na_fast_GP} Ik 0 Gk 0\ Xpower {mpower_NaF} Ypower {hpower_NaF} Zpower {spower_NaF} // Activation & Deactivation float Vhalfm = {Vhalfm_NaF} float Km = {Km_NaF} float taummax = {taummax_NaF} / {dq10_NaF_m} float taummin = {taummin_NaF} / {dq10_NaF_m} float Ktau1 = {Ktaum1_NaF} float Ktau2 = {Ktaum2_NaF} float V0m, minf, taum V0m = {Vhalfm} //the following is commented out bc Surmeier fitted with 3rd order Boltzmann: // + ({Km} * {log {(1 / {pow 0.5 {1/{mpower_NaF}}}) - 1}}) echo "Na_fast V0m: " {V0m} call Na_fast_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) minf = 1 / (1 + {exp {({V0m} - x) / {Km} }}) //note taum is divided by 3 here to compensate for temperature used in Surmeier's experiments taum = (({taummin} + (({taummax} - {taummin}) / ({exp { ({V0taum_NaF} - x) / {Ktau1} } } + {exp {({V0taum_NaF} - x) / {Ktau2} }})))/3) //taum = {taummin} + (({taummax} - {taummin}) / ({exp { ({V0m} - x) / {Ktau1} } } + {exp {({V0m} - x) / {Ktau2} }})) //echo //echo taum {taum} //echo minf {minf} //echo setfield Na_fast_GP X_A->table[{i}] {taum} setfield Na_fast_GP X_B->table[{i}] {minf} x = x + dx end tweaktau Na_fast_GP X call Na_fast_GP TABFILL X 6000 0 setfield Na_fast_GP X_A->calc_mode {NO_INTERP} setfield Na_fast_GP X_B->calc_mode {NO_INTERP} // Fast Inactivation float V0h = {V0h_NaF} float V0tauh = {V0tauh_NaF} float Kh = {Kh_NaF} float tauhmax = {tauhmax_NaF} / {dq10_NaF_h1} float tauhmin = {tauhmin_NaF} / {dq10_NaF_h1} float Ktauh1 = {Ktauh1_NaF} float Ktauh2 = {Ktauh2_NaF} float hinf, tauh call Na_fast_GP TABCREATE Y {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) hinf = 1 / (1 + {exp {({V0h} - x) / {Kh} }}) tauh = ({tauhmin} + (({tauhmax} - {tauhmin}) / ({exp { ({V0tauh} - x) / {Ktauh1} } } + {exp {({V0tauh} - x) / {Ktauh2} }}))) setfield Na_fast_GP Y_A->table[{i}] {tauh} setfield Na_fast_GP Y_B->table[{i}] {hinf} x = x + dx end tweaktau Na_fast_GP Y call Na_fast_GP TABFILL Y 6000 0 setfield Na_fast_GP Y_A->calc_mode {NO_INTERP} setfield Na_fast_GP Y_B->calc_mode {NO_INTERP} // Slow Inactivation // Equations & params from Spampanato et al, 2003, except that // tausmin added to prevent segmentation faults due to // excessively small time constants at voltage extremes. float V0s = {V0s_NaF} float V0taus = {V0s_NaF} float Ks = {Ks_NaF} float mins = {mins_NaF} float Ktaus1 = {Ktaus1_NaF} float Ktaus2 = {Ktaus2_NaF} float tausmax = {tausmax_NaF} / {dq10_NaF_h2} float tausmin = {tausmin_NaF} / {dq10_NaF_h2} float sinf, taus call Na_fast_GP TABCREATE Z {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) sinf = {mins} + ((1-{mins}) / (1 + {exp {({V0s} - x) / {Ks} }})) taus = tausmin + ({tausmax} - {tausmin}) / ({exp {({V0taus} - x) / {Ktaus1}}} + {exp {({V0taus} - x) / {Ktaus2}}}) setfield Na_fast_GP Z_A->table[{i}] {taus} setfield Na_fast_GP Z_B->table[{i}] {sinf} x = x + dx end tweaktau Na_fast_GP Z call Na_fast_GP TABFILL Z 6000 0 setfield Na_fast_GP Z_A->calc_mode {NO_INTERP} setfield Na_fast_GP Z_B->calc_mode {NO_INTERP} setfield Na_fast_GP Z_conc 0 // Z-gate voltage-dependent end //================================================================== // persistent Na channel // Based on Magistretti & Alonso (1999), JGP 114:491-509 // and Magistretti & Alonso (2002), JGP 120: 855-873. // Created by J.R. Edgerton, 03/2004 // Modified 10/2004 by JRE: add z-gate slow inactivation, improve // model's y-gate intermediate inactivation. //================================================================== function make_Na_slow_GP if ({exists Na_slow_GP}) return end create tabchannel Na_slow_GP setfield Na_slow_GP Ek {ENa} Gbar {G_Na_slow_GP} Ik 0 Gk 0 \ Xpower {mpower_NaP} Ypower {hpower_NaP} Zpower {spower_NaP} // *** Activation & Deactivation (m-gate) float Km = {Km_NaP} float Vhalfm = {Vhalfm_NaP} float V0taum = {V0taum_NaP} float taummax = {taummax_NaP} / {dq10_NaP} float taummin = {taummin_NaP} / {dq10_NaP} float Ktau1 = {Ktaum1_NaP} float Ktau2 = {Ktaum2_NaP} float minf, taum // 1/(alpha+beta) REPLACED with matched equation of standard form, JRE 09/28/2005 // float alp0 = 2130 // float bet0 = 2460 float V0m = {Vhalfm} + ({Km} * {log {(1 / {pow 0.5 {1/{mpower_NaP}}}) - 1}}) echo "Na_slow V0m: " {V0m} call Na_slow_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) minf = 1 / (1 + {exp {({V0m} - x) / {Km} }}) taum = {taummin} + (({taummax} - {taummin}) / ({exp { ({V0m} - x) / {Ktau1} } } + {exp {({V0m} - x) / {Ktau2} }})) setfield Na_slow_GP X_A->table[{i}] {taum} setfield Na_slow_GP X_B->table[{i}] {minf} x = x + dx end tweaktau Na_slow_GP X call Na_slow_GP TABFILL X 6000 0 setfield Na_slow_GP X_A->calc_mode {NO_INTERP} setfield Na_slow_GP X_B->calc_mode {NO_INTERP} // *** Fast / Intermediate Inactivation (h-gate) float hmin = {hmin_NaP} float V0h = {V0h_NaP} float Kh = {Kh_NaP} float V0tauh = {V0tauh_NaP} float Ktauh1 = {Ktauh1_NaP} float Ktauh2 = {Ktauh2_NaP} float tauhmin = {tauhmin_NaP} / {dq10_NaP} float tauhmax = {tauhmax_NaP} / {dq10_NaP} float tauh, hinf call Na_slow_GP TABCREATE Y {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) hinf = {hmin} + ((1 - {hmin}) / (1 + {exp {({V0h} - x) / {Kh} }})) tauh = ({tauhmin} + (({tauhmax} - {tauhmin}) / ({exp {({V0tauh} - x) / {Ktauh1}}} + {exp {({V0tauh} - x) / {Ktauh2}}}))) setfield Na_slow_GP Y_A->table[{i}] {tauh} setfield Na_slow_GP Y_B->table[{i}] {hinf} x = x + dx end tweaktau Na_slow_GP Y call Na_slow_GP TABFILL Y 6000 0 setfield Na_slow_GP Y_A->calc_mode {NO_INTERP} setfield Na_slow_GP Y_B->calc_mode {NO_INTERP} // *** Slow Inactivation (s-gate) float Ks = {Ks_NaP} float V0s = {V0s_NaP} float Aalpha = {Aalpha_NaP} float Balpha = {Balpha_NaP} float Kalpha = {Kalpha_NaP} float Abeta = {Abeta_NaP} float Bbeta = {Bbeta_NaP} float Kbeta = {Kbeta_NaP} float alphas, betas, taus, sinf call Na_slow_GP TABCREATE Z {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) alphas = (({Aalpha} * x) + {Balpha}) / (1 - {exp {((x + ({Balpha} / {Aalpha})) / {Kalpha})}}) betas = (({Abeta} * x) + {Bbeta}) / (1 - {exp {((x + ({Bbeta} / {Abeta})) / {Kbeta})}}) taus = 1 / ({dq10_NaP} * ({alphas} + {betas})) sinf = 1 / (1 + {exp {({V0s} - x) / {Ks} }}) setfield Na_slow_GP Z_A->table[{i}] {taus} setfield Na_slow_GP Z_B->table[{i}] {sinf} x = x + dx end tweaktau Na_slow_GP Z call Na_slow_GP TABFILL Z 6000 0 setfield Na_slow_GP Z_A->calc_mode {NO_INTERP} setfield Na_slow_GP Z_B->calc_mode {NO_INTERP} setfield Na_slow_GP Z_conc 0 // Z-gate voltage-dependent end //================================================================== // Kdr Kv2 // (Kv2.1) slow activating // Created based on GP data: // Baranuskas, Tkatch and Surmeier // 1999, J Neurosci 19(15):6394-6404 //================================================================== function make_Kv2_GP if (({exists Kv2_GP})) return end create tabchannel Kv2_GP setfield Kv2_GP Ek {EK} Gbar {G_Kv2_GP} Ik 0 Gk 0\ Xpower {npower_Kv2} Ypower {hpower_Kv2} Zpower 0 float Vhalfn = {Vhalfn_Kv2} // True Vhalf for channel activation float Kn = {Kn_Kv2} float taunmax = {taunmax_Kv2} / {dq10_Kv2} float taunmin = {taunmin_Kv2} / {dq10_Kv2} float K1tau = {Ktaun1_Kv2} float K2tau = {Ktaun2_Kv2} float V0n, ninf, taun, alpha, beta V0n = {Vhalfn} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower_Kv2}}}) - 1}}) echo "Kv2 V0n: " {V0n} //V0n is Vhalf for each individual n gate. call Kv2_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) ninf = 1 / (1 + {exp { ({V0n} - x) / {Kn} } } ) taun = (({taunmin} + (({taunmax} - {taunmin}) / ({exp { ({V0n} - x) / {K1tau} } } + {exp {({V0n} - x) / {K2tau} }})))/{KV2_taunDiv}) setfield Kv2_GP X_A->table[{i}] {taun} setfield Kv2_GP X_B->table[{i}] {ninf} x = x + dx end tweaktau Kv2_GP X call Kv2_GP TABFILL X 6000 0 setfield Kv2_GP X_A->calc_mode {NO_INTERP} setfield Kv2_GP X_B->calc_mode {NO_INTERP} float V0h = {V0h_Kv2} float Kh = {Kh_Kv2} float hmin = {hmin_Kv2} float tauhmax = {tauhmax_Kv2} / {dq10_Kv2} float tauhmin = {tauhmin_Kv2} / {dq10_Kv2} float Ktauh1 = {Ktauh1_Kv2} float Ktauh2 = {Ktauh2_Kv2} float V0tauh = {V0tauh_Kv2} float hinf, tauh call Kv2_GP TABCREATE Y {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) hinf = {hmin} + ((1 - {hmin}) / (1 + {exp {({V0h} - x) / {Kh} }})) tauh = {tauhmin} + (({tauhmax} - {tauhmin}) / ({exp { ({V0tauh} - x) / {Ktauh1}}} + {exp {({V0tauh} - x) / {Ktauh2} }})) setfield Kv2_GP Y_A->table[{i}] {tauh} setfield Kv2_GP Y_B->table[{i}] {hinf} x = x + dx end tweaktau Kv2_GP Y call Kv2_GP TABFILL Y 6000 0 setfield Kv2_GP Y_A->calc_mode {NO_INTERP} setfield Kv2_GP Y_B->calc_mode {NO_INTERP} end //================================================================== // Kdr Kv3 // (Kv3.1/3.4 heteromultimers) fast activating, // incompletely inactivating. // From Surmeier's kv3sur.mod NEURON mechanism // written by Josh Held // Adapted to genesis by J.R. Edgerton, 2003 // Modified to reflect new data in // Baranauskas et al (2003) by J.R. Edgerton, 2004. // Baranauskas, Tkatch and Surmeier // 1999, J Neurosci 19(15):6394-6404 // Baranauskas, Tkatch, Nagata, Yeh & Surmeier 2003. // Nat Neurosci 6: 258-66. //================================================================== function make_Kv3_GP if (({exists Kv3_GP})) return end create tabchannel Kv3_GP setfield Kv3_GP Ek {EK} Gbar {G_Kv3_GP} Ik 0 Gk 0\ Xpower {npower_Kv3} Ypower {hpower_Kv3} Zpower 0 float Vhalfn = {Vhalfn_Kv3} // True Vhalf for channel activation float Kn = {Kn_Kv3} float taunmax = {taunmax_Kv3} / {dq10_Kv3} float taunmin = {taunmin_Kv3} / {dq10_Kv3} float K1tau = {Ktaun1_Kv3} float K2tau = {Ktaun2_Kv3} float V0n, ninf, taun, alpha, beta V0n = {Vhalfn} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower_Kv3}}}) - 1}}) echo "Kv3 V0n: " {V0n} //V0n is Vhalf for each individual n gate. call Kv3_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) ninf = 1 / (1 + {exp { ({V0n} - x) / {Kn} } } ) taun = ({taunmin} + (({taunmax} - {taunmin}) / ({exp { ({V0n} - x) / {K1tau} } } + {exp {-({V0n} - x) / {K2tau} }}))/{KV3_taunDiv}) setfield Kv3_GP X_A->table[{i}] {taun} setfield Kv3_GP X_B->table[{i}] {ninf} x = x + dx end tweaktau Kv3_GP X call Kv3_GP TABFILL X 6000 0 setfield Kv3_GP X_A->calc_mode {NO_INTERP} setfield Kv3_GP X_B->calc_mode {NO_INTERP} float V0h = {V0h_Kv3} float Kh = {Kh_Kv3} float hmin = {hmin_Kv3} float tauhmax = {tauhmax_Kv3} / {dq10_Kv3} float tauhmin = {tauhmin_Kv3} / {dq10_Kv3} float Ktauh1 = {Ktauh1_Kv3} float Ktauh2 = {Ktauh2_Kv3} float V0tauh = {V0tauh_Kv3} float hinf, tauh call Kv3_GP TABCREATE Y {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) hinf = {hmin} + ((1 - {hmin}) / (1 + {exp {({V0h} - x) / {Kh} }})) tauh = {tauhmin} + (({tauhmax} - {tauhmin}) / ({exp { ({V0tauh} - x) / {Ktauh1}}} + {exp {({V0tauh} - x) / {Ktauh2} }})) setfield Kv3_GP Y_A->table[{i}] {tauh} setfield Kv3_GP Y_B->table[{i}] {hinf} x = x + dx end tweaktau Kv3_GP Y call Kv3_GP TABFILL Y 6000 0 setfield Kv3_GP Y_A->calc_mode {NO_INTERP} setfield Kv3_GP Y_B->calc_mode {NO_INTERP} end //================================================================== // KA Kv4 fast // Low voltage-activated // Created based on GP data: // Tkatch, Baranauskas and Surmeier // 2000, J Neurosci 20(2):579-588 // Modified by J. R. Edgerton 02/2004 //================================================================== function make_Kv4_fast_GP if (({exists Kv4_fast_GP})) return end create tabchannel Kv4_fast_GP setfield Kv4_fast_GP Ek {EK} Gbar {G_Kv4_fast_GP} Ik 0 Gk 0\ Xpower {npower_Kv4} Ypower {hpower_Kv4} Zpower 0 float Kn = {Kn_Kv4} float V0n = {V0n_Kv4} float taunmax = {taunmax_Kv4} / {dq10_Kv4} float taunmin = {taunmin_Kv4} / {dq10_Kv4} float Ktaun1 = {Ktaun1_Kv4} float Ktaun2 = {Ktaun2_Kv4} float ninf, taun float Vhalfn = {V0n} - ({Kn} * {log {(1 / {pow 0.5 {1/{npower_Kv4}}}) - 1}}) echo "Kv4f actual Vhalf: " {Vhalfn} call Kv4_fast_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) ninf = 1 / (1 + {exp {({V0n} - x) / {Kn} }}) taun = (taunmin + ({taunmax} - {taunmin}) / ({exp {({V0n} - x) / {Ktaun1}}} + {exp {({V0n} - x) / {Ktaun2}}})/{KV4_taunDiv}) setfield Kv4_fast_GP X_A->table[{i}] {taun} setfield Kv4_fast_GP X_B->table[{i}] {ninf} x = x + dx end tweaktau Kv4_fast_GP X call Kv4_fast_GP TABFILL X 6000 0 setfield Kv4_fast_GP X_A->calc_mode {NO_INTERP} setfield Kv4_fast_GP X_B->calc_mode {NO_INTERP} float tauhmax = {tauhmax_Kv4f} / {dq10_Kv4} float tauhmin = {tauhmin_Kv4f} / {dq10_Kv4} float Kh = {Kh_Kv4} float V0h = {V0h_Kv4} float Ktauh1 = {Ktauh1_Kv4} float Ktauh2 = {Ktauh2_Kv4} float hinf, tauh call Kv4_fast_GP TABCREATE Y {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) hinf = 1 / (1 + {exp {({V0h} - x) / {Kh} }}) tauh = tauhmin + ({tauhmax} - {tauhmin}) / ({exp {({V0h} - x) / {Ktauh1}}} + {exp {({V0h} - x) / {Ktauh2}}}) setfield Kv4_fast_GP Y_A->table[{i}] {tauh} setfield Kv4_fast_GP Y_B->table[{i}] {hinf} x = x + dx end tweaktau Kv4_fast_GP Y call Kv4_fast_GP TABFILL Y 6000 0 setfield Kv4_fast_GP Y_A->calc_mode {NO_INTERP} setfield Kv4_fast_GP Y_B->calc_mode {NO_INTERP} end //================================================================== // KA Kv4 slow // Low voltage-activated // Created based on GP data: // Tkatch, Baranauskas and Surmeier // 2000, J Neurosci 20(2):579-588 // Modified by J. R. Edgerton 02/2004 //================================================================== function make_Kv4_slow_GP if (({exists Kv4_slow_GP})) return end create tabchannel Kv4_slow_GP float npower = 4 setfield Kv4_slow_GP Ek {EK} Gbar {G_Kv4_slow_GP} Ik 0 Gk 0\ Xpower {npower_Kv4} Ypower {hpower_Kv4} Zpower 0 float Kn = {Kn_Kv4} float V0n = {V0n_Kv4} float taunmax = {taunmax_Kv4} / {dq10_Kv4} float taunmin = {taunmin_Kv4} / {dq10_Kv4} float Ktaun1 = {Ktaun1_Kv4} float Ktaun2 = {Ktaun2_Kv4} float ninf, taun float Vhalfn = {V0n} - ({Kn} * {log {(1 / {pow 0.5 {1/{npower_Kv4}}}) - 1}}) echo "Kv4s actual Vhalf: " {Vhalfn} call Kv4_slow_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) ninf = 1 / (1 + {exp {({V0n} - x) / {Kn} }}) taun = (taunmin + ({taunmax} - {taunmin}) / ({exp {({V0n} - x) / {Ktaun1}}} + {exp {({V0n} - x) / {Ktaun2}}})/{KV4_taunDiv}) setfield Kv4_slow_GP X_A->table[{i}] {taun} setfield Kv4_slow_GP X_B->table[{i}] {ninf} x = x + dx end tweaktau Kv4_slow_GP X call Kv4_slow_GP TABFILL X 6000 0 setfield Kv4_slow_GP X_A->calc_mode {NO_INTERP} setfield Kv4_slow_GP X_B->calc_mode {NO_INTERP} float tauhmax = {tauhmax_Kv4s} / {dq10_Kv4} float tauhmin = {tauhmin_Kv4s} / {dq10_Kv4} float Kh = {Kh_Kv4} float V0h = {V0h_Kv4} float Ktauh1 = {Ktauh1_Kv4} float Ktauh2 = {Ktauh2_Kv4} float hinf, tauh call Kv4_slow_GP TABCREATE Y {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) hinf = 1 / (1 + {exp {({V0h} - x) / {Kh} }}) tauh = tauhmin + ({tauhmax} - {tauhmin}) / ({exp {({V0h} - x) / {Ktauh1}}} + {exp {({V0h} - x) / {Ktauh2}}}) setfield Kv4_slow_GP Y_A->table[{i}] {tauh} setfield Kv4_slow_GP Y_B->table[{i}] {hinf} x = x + dx end tweaktau Kv4_slow_GP Y call Kv4_slow_GP TABFILL Y 6000 0 setfield Kv4_slow_GP Y_A->calc_mode {NO_INTERP} setfield Kv4_slow_GP Y_B->calc_mode {NO_INTERP} end //================================================================== // KCNQ // Activation kinetics: Gamper, Stockand, Shapiro (2003). J Neurosci 23: 84-95. // GV curve, deact kinetics: Prole & Marrion (2004). Biophys J. 86: 1454-69. //================================================================== function make_KCNQ_GP if (({exists KCNQ_GP})) return end create tabchannel KCNQ_GP setfield KCNQ_GP Ek {EK} Gbar {G_KCNQ_GP} Ik 0 Gk 0\ Xpower {npower_KCNQ} Ypower 0 Zpower 0 float Vhalfn = {Vhalfn_KCNQ} // True Vhalf for channel activation float Kn = {Kn_KCNQ} float taunmax = {taunmax_KCNQ} / {dq10_KCNQ} float taunmin = {taunmin_KCNQ} / {dq10_KCNQ} float K1tau = {Ktaun1_KCNQ} float K2tau = {Ktaun2_KCNQ} float V0n, ninf, taun, alpha, beta V0n = {Vhalfn} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower_KCNQ}}}) - 1}}) echo "KCNQ V0n: " {V0n} //V0n is Vhalf for each individual n gate. call KCNQ_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) ninf = 1 / (1 + {exp { ({V0n} - x) / {Kn} } } ) taun = {taunmin} + (({taunmax} - {taunmin}) / ({exp { ({V0n} - x) / {K1tau} } } + {exp { ({V0n} - x) / {K2tau} }})) setfield KCNQ_GP X_A->table[{i}] {taun} setfield KCNQ_GP X_B->table[{i}] {ninf} x = x + dx end tweaktau KCNQ_GP X call KCNQ_GP TABFILL X 6000 0 setfield KCNQ_GP X_A->calc_mode {NO_INTERP} setfield KCNQ_GP X_B->calc_mode {NO_INTERP} end //================================================================== // HVA Ca2+ Channels // Voltage-dependent activation from GP data: // Surmeier Seno and Kitai 2000 // J Neurophysio. 71(3):1272-1280 //================================================================== //First make a calcium concentration object that will keep track of the //Ca2+ coming in from the calcium channels and apply buffering. function make_Ca_GP_conc if (({exists Ca_GP_conc})) return end create Ca_concen Ca_GP_conc setfield Ca_GP_conc \ tau {tau_CaClearance} \ // sec B 5.2e-6 \ // Moles per coulomb, later scaled to conc Ca_base 5e-05 //Units in mM, so = 50 nM. end //Next make nernst object to keep track of Calcium reversal potential //during changes in intracellular calcium concentration. function make_Ca_GP_nernst if (({exists Ca_GP_nernst})) return end create nernst Ca_GP_nernst setfield Ca_GP_nernst \ Cout 2 \ //external Ca2+ conc Cin 5e-5 \ //baseline internal Ca2+ conc 50 nM T 32 \ //temp in Celsius valency 2 \ //divalent scale 1 //E in volts end //Finally make actual calcium channels. // Made by J. Hanson based on Surmeier GP data function make_Ca_HVA_GP if (({exists Ca_HVA_GP})) return end int ndivs, i float x, y create tabchannel Ca_HVA_GP setfield Ca_HVA_GP Ek {ECa} Gbar {G_Ca_HVA_GP} Ik 0 Gk 0 \ Xpower {npower_CaHVA} Ypower 0 Zpower 0 //first setup voltage-dependent activation float tau = {taun_CaHVA} / {dq10_CaHVA} float K = -1*{Kn_CaHVA} float V0 = {Vhalfn_CaHVA} setuptau Ca_HVA_GP X \ {tau} {tau*1e-6} 0 0 1e6 \ 1 0 1 {-1.0*V0} {K} -range {xmin} {xmax} call Ca_HVA_GP TABFILL X 6000 0 setfield Ca_HVA_GP X_A->calc_mode {NO_INTERP} setfield Ca_HVA_GP X_B->calc_mode {NO_INTERP} end //================================================================== // SK channel from Volker Steuber's DCN neuron model, modified to // reflect Hill fits in the following: // Hirschberg et al, 1999: Biophys J. 77: 1905-13. // Keen et al, 1999: J. Neurosci 19: 8830-38. // Tau-Ca equation made by Volker based on Hirschberg et al, 1998: // JGP 111: 565-581. //================================================================== function make_SK_GP if ({exists K_ahp_GP}) return end float cxmin, cxmax, cxdivs, cdx float taum, minf float hillslope = {hillslope_SK} // Hirschberg et al, 1999 float taumax = {taumax_SK} // deactivation tau in 0 Ca2+ float taumin = {taumin_SK} // max rate in saturating Ca2+ float caSat = {CaSat_SK} // calcium conc at which tauact hits max float tauK = ({taumax} - {taumin}) / {caSat} // NOTE: genesis SI concentration units = mols / m^3 = millimolar! create tabchannel K_ahp_GP setfield K_ahp_GP Ek {EK} Gbar {G_K_ahp_GP} \ Xpower 0 Ypower 0 Zpower {zpower_SK} cxmin = 0.00001 // 10 nM cxmax = 0.06 // 60 microM // Conc-dependence grid will have 6000 points spanning // 1 nM to 6 microM with resolution of 1 nM. cxdivs = 5999 // Have to use high-resolution for channel setup because // most of G-Ca curve falls within the first 1 microM. cdx = (cxmax - cxmin)/cxdivs call K_ahp_GP TABCREATE Z {cxdivs} {cxmin} {cxmax} x = cxmin for (i = 0; i <= {cxdivs}; i = i + 1) if (x < {caSat}) taum = ({taumax} - x*{tauK})/{dq10_SK} else taum = {taumin}/{dq10_SK} end minf = {pow {x} {hillslope}} / ({pow {x} {hillslope}} + {pow {EC50_SK} {hillslope}}) setfield K_ahp_GP Z_A->table[{i}] {taum} setfield K_ahp_GP Z_B->table[{i}] {minf} x = x + cdx end tweaktau K_ahp_GP Z call K_ahp_GP TABFILL Z 6000 0 setfield K_ahp_GP Z_A->calc_mode {NO_INTERP} setfield K_ahp_GP Z_B->calc_mode {NO_INTERP} end //================================================================== // H current (Anomalous rectifier--mixed Na and K current) // HCN1/HCN2 heteromeric channel, GP-specific // Channel model from Chan et al (2004), J Neurosci 24: 9921-32. // Original model from Siegelbaum lab. Wang et al (2002), Neuron 36: // 451-62. Chen et al (2001), JGP 117: 491-504. //================================================================== function make_h_HCN_GP if ({exists h_HCN_GP}) return end create tabchannel h_HCN_GP setfield h_HCN_GP Ek {Eh} Gbar {{G_h_HCN_GP}} \ Xpower {mpower_HCN1} Ypower 0 Zpower 0 float Km = {Km_HCN1} float V0m = {V0m_HCN1} float taumin = {taumin_HCN1} / {dq10_HCN1} float taumax = {taumax_HCN1} / {dq10_HCN1} float Ktau1 = {Ktau1_HCN1} float Ktau2 = {Ktau2_HCN1} float dq10 = {dq10_HCN1} float minf, taum call h_HCN_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) minf = 1 / (1 + {exp {({V0m} - x) / {Km} }}) taum = {taumin} + (({taumax} - {taumin}) / ({exp {({V0m} - x)/{Ktau1}}} + {exp {({V0m}-x)/{Ktau2}}})) setfield h_HCN_GP X_A->table[{i}] {taum} setfield h_HCN_GP X_B->table[{i}] {minf} x = x + dx end tweaktau h_HCN_GP X call h_HCN_GP TABFILL X 6000 0 setfield h_HCN_GP X_A->calc_mode {NO_INTERP} setfield h_HCN_GP X_B->calc_mode {NO_INTERP} end //================================================================== // H current (Anomalous rectifier--mixed Na and K current) // HCN2 homomeric channel, GP-specific // Channel model from Chan et al (2004), J Neurosci 24: 9921-32. // Original model from Siegelbaum lab. Wang et al (2002), Neuron 36: // 451-62. Chen et al (2001), JGP 117: 491-504. //================================================================== function make_h_HCN2_GP if ({exists h_HCN2_GP}) return end create tabchannel h_HCN2_GP setfield h_HCN2_GP Ek {Eh} Gbar {{G_h_HCN2_GP}} \ Xpower {mpower_HCN2} Ypower 0 Zpower 0 float Km = {Km_HCN2} float V0m = {V0m_HCN2} float taumin = {taumin_HCN2} / {dq10_HCN2} float taumax = {taumax_HCN2} / {dq10_HCN2} float Ktau1 = {Ktau1_HCN2} float Ktau2 = {Ktau2_HCN2} float dq10 = {dq10_HCN2} float minf, taum call h_HCN2_GP TABCREATE X {xdivs} {xmin} {xmax} x = xmin for (i = 0; i <= {xdivs}; i = i + 1) minf = 1 / (1 + {exp {({V0m} - x) / {Km} }}) taum = {taumin} + (({taumax} - {taumin}) / ({exp {({V0m} - x)/{Ktau1}}} + {exp {({V0m} - x)/{Ktau2}}})) setfield h_HCN2_GP X_A->table[{i}] {taum} setfield h_HCN2_GP X_B->table[{i}] {minf} x = x + dx end tweaktau h_HCN2_GP X call h_HCN2_GP TABFILL X 6000 0 setfield h_HCN2_GP X_A->calc_mode {NO_INTERP} setfield h_HCN2_GP X_B->calc_mode {NO_INTERP} end