Globus pallidus multi-compartmental model neuron with realistic morphology (Gunay et al. 2008)

 Download zip file 
Help downloading and running models
Accession:114639
"Globus pallidus (GP) neurons recorded in brain slices show significant variability in intrinsic electrophysiological properties. To investigate how this variability arises, we manipulated the biophysical properties of GP neurons using computer simulations. ... Our results indicated that most of the experimental variability could be matched by varying conductance densities, which we confirmed with additional partial block experiments. Further analysis resulted in two key observations: (1) each voltage-gated conductance had effects on multiple measures such as action potential waveform and spontaneous or stimulated spike rates; and (2) the effect of each conductance was highly dependent on the background context of other conductances present. In some cases, such interactions could reverse the effect of the density of one conductance on important excitability measures. ..."
Reference:
1 . Günay C, Edgerton JR, Jaeger D (2008) Channel density distributions explain spiking variability in the globus pallidus: a combined physiology and computer simulation database approach. J Neurosci 28:7476-91 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Globus pallidus neuron;
Channel(s): I Na,p; I Na,t; I L high threshold; I A; I K,leak; I K,Ca; KCNQ1;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s): Ions;
Simulation Environment: GENESIS;
Model Concept(s): Dendritic Action Potentials; Parameter Fitting; Active Dendrites; Detailed Neuronal Models; Methods; Parkinson's;
Implementer(s): Gunay, Cengiz [cgunay at emory.edu]; Edgerton, Jeremy R. [jedgert at emory.edu]; Hanson, Jesse E.;
Search NeuronDB for information about:  I Na,p; I Na,t; I L high threshold; I A; I K,leak; I K,Ca; KCNQ1; Ions;
/
GunayEdgertonJaeger2008
common
CVS
gp1_stn
gp2_stn
gp3_stn
gp4_stn
gp5_stn
actpars.g
add_pallidum_syns.g
add_STN_syns_soma.g
calc_syn_integ.g
CIPfuncs.g
dump_chans.g
fileioGP.g
GP1.p
GP1_defaults.g
gp1_STNinputcomps.asc *
gp1allcompnames.asc *
gp1dendritenames.asc *
gp1outputnames.asc
GP2.p
GP2_defaults.g
GP2_sd.p
gp2allcompnames.asc
gp2dendritenames.asc
gp2outputnames.asc
GP3.p
GP3_defaults.g
gp3allcompnames.asc
gp3dendritenames.asc
gp3outputnames.asc
GP4.p
GP4_defaults.g
gp4allcompnames.asc
gp4dendritenames.asc
gp4outputnames.asc
GP5.p
GP5_defaults.g
gp5allcompnames.asc
gp5dendritenames.asc
gp5outputnames.asc
GPchans.g
GPcomps.g
GPcomps_nochans.g
GPsyns.g *
jitter_syns.g
make_GP_library.g
make_GP_library_nochans.g
modify.par
paspars.g
random_complist.g
randseeds.asc *
read_clusters.g
read_STN_nocluster_scaled.g
read_STN_nocluster_scaled_const.g
read_STN_nocluster_scaled_nottab.g
read_STN_nocluster_scaled_ttabfile.g
read_STN_syns.g
read_STN_syns_nocluster.g
read_STN_syns_times_nocluster.g
read_striatum_syns.g
read_striatum_syns_const.g
read_striatum_syns_const_scaled.g
read_striatum_syns_scaled.g
read_striatum_syns_soma.g
runbatch_nice
semantic.cache
simdefaults.g
snapshotGP.g
write_ttab.g
write_ttabs_separatefiles.g
                            
// 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

int xdivs_interp = 6000
float  dx_interp = (xmax - xmin)/xdivs_interp

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.
//	Slow inactivation gate added by J. Edgerton, 2004.
//	Support for voltage-dependent Z-gate by Cengiz Gunay, 2004
//==================================================================
function make_Na_fast_GP_Zgate
        if ({exists Na_fast_GP})
                return
        end
        create  tabchannel Na_fast_GP
	float mpower = 3
        setfield Na_fast_GP Ek {ENa} Gbar {G_Na_fast_GP} Ik 0 Gk 0\
                Xpower {mpower} Ypower 1 Zpower 1
		
//	Activation & Deactivation
	float Vhalfm 	= {Vhalfm_NaF}
	float Km 	= {Km_NaF}
	float taummax 	= {taummax_NaF}	// 0.000028	//0.00010   
        float taummin 	= {taummin_NaF}	//  0.00000157	//0.00002
	float Ktau1   =	 0.02
	float Ktau2   =  0.02
	float V0m, minf, taum
	V0m = {Vhalfm} + ({Km} * {log {(1 / {pow 0.5 {1/{mpower}}}) - 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} }})
		taum = {taummin} + (({taummax} - {taummin}) / ({exp { (x - {V0m}) / {Ktau1} } } + {exp {({V0m} - x) / {Ktau2} }}))
                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 {xdivs_interp} 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 tauhV0	= {tauhV0_NaF}
	float Kh      =	{Kh_NaF}	// 	-0.003848
	float tauhmax =  {tauhmax_NaF}	//	0.004 
        float tauhmin =  {tauhmin_NaF}	//	0.0002
	float Ktau1h   =  0.005
	float Ktau2h   =  0.01
	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 { (x - {tauhV0}) / {Ktau1h} } } + {exp {({tauhV0} - x) / {Ktau2h} }}))
                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 {xdivs_interp} 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 tausV0	= {V0s_NaF}
	float Ks      	= {Ks_NaF}
	float mins	= {mins_NaF}
	float Ktaus1   	= {Ktaus1_NaF}
	float Ktaus2	= {Ktaus2_NaF}
	float tausmax	= {tausmax_NaF}
	float tausmin	= {tausmin_NaF}
	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 {({tausV0} - x) / {Ktaus1}}} + {exp {(x - {tausV0}) / {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 {xdivs_interp} 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

//==================================================================
//                      Fast Na channel
//	Activation and fast inactivation made to replicate resurgent
//		sodium current from Raman & Bean.
//	Slow inactivation gate added by J. Edgerton, 2004.
//	Support for voltage-dependent Z-gate by Cengiz Gunay, 2004
// 	Populates all table entries from the original equation,
//	rather than using TABFILL (for testing purposes).
//==================================================================
function make_Na_fast_GP_Zgate_nofill
        if ({exists Na_fast_GP})
                return
        end
        create  tabchannel Na_fast_GP
	float mpower = 3
        setfield Na_fast_GP Ek {ENa} Gbar {G_Na_fast_GP} Ik 0 Gk 0\
                Xpower {mpower} Ypower 1 Zpower 1
		
//	Activation & Deactivation
	float Vhalfm 	= {Vhalfm_NaF}
	float Km 	= {Km_NaF}
	float taummax 	= {taummax_NaF}	// 0.000028	//0.00010   
        float taummin 	= {taummin_NaF}	//  0.00000157	//0.00002
	float Ktau1   =	 0.02
	float Ktau2   =  0.02
	float V0m, minf, taum
	V0m = {Vhalfm} + ({Km} * {log {(1 / {pow 0.5 {1/{mpower}}}) - 1}})
	echo "Na_fast V0m: " {V0m}
        call Na_fast_GP TABCREATE X {xdivs_interp} {xmin} {xmax}
        x = xmin
        for (i = 0; i <= {xdivs_interp}; i = i + 1)
                minf = 1 / (1 + {exp {({V0m} - x) / {Km} }})
		taum = {taummin} + (({taummax} - {taummin}) / ({exp { (x - {V0m}) / {Ktau1} } } + {exp {({V0m} - x) / {Ktau2} }}))
                setfield Na_fast_GP X_A->table[{i}] {taum}
                setfield Na_fast_GP X_B->table[{i}] {minf}
                x = x + dx_interp
        end
        tweaktau Na_fast_GP X
		//call Na_fast_GP TABFILL X {xdivs_interp} 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 tauhV0	= {tauhV0_NaF}
	float Kh      =	{Kh_NaF}	// 	-0.003848
	float tauhmax =  {tauhmax_NaF}	//	0.004 
        float tauhmin =  {tauhmin_NaF}	//	0.0002
	float Ktau1h   =  0.005
	float Ktau2h   =  0.01
	float hinf, tauh
        call Na_fast_GP TABCREATE Y {xdivs_interp} {xmin} {xmax}
        x = xmin
        for (i = 0; i <= {xdivs_interp}; i = i + 1)
                hinf = 1 / (1 + {exp {({V0h} - x) / {Kh} }})
		tauh = {tauhmin} + (({tauhmax} - {tauhmin}) / ({exp { (x - {tauhV0}) / {Ktau1h} } } + {exp {({tauhV0} - x) / {Ktau2h} }}))
                setfield Na_fast_GP Y_A->table[{i}] {tauh}
                setfield Na_fast_GP Y_B->table[{i}] {hinf}
                x = x + dx_interp
        end
        tweaktau Na_fast_GP Y
		//call Na_fast_GP TABFILL Y {xdivs_interp} 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 tausV0	= {V0s_NaF}
	float Ks      	= {Ks_NaF}
	float mins	= {mins_NaF}
	float Ktaus1   	= {Ktaus1_NaF}
	float Ktaus2	= {Ktaus2_NaF}
	float tausmax	= {tausmax_NaF}
	float tausmin	= {tausmin_NaF}
	float sinf, taus
	
        call Na_fast_GP TABCREATE Z {xdivs_interp} {xmin} {xmax}
        x = xmin
        for (i = 0; i <= {xdivs_interp}; i = i + 1)
		sinf = {mins} + ((1-{mins}) / (1 + {exp {({V0s} - x) / {Ks} }}))
		taus = tausmin + ({tausmax} - {tausmin}) / ({exp {({tausV0} - x) / {Ktaus1}}} + {exp {(x - {tausV0}) / {Ktaus2}}}) 

		setfield Na_fast_GP Z_A->table[{i}] {taus}
                setfield Na_fast_GP Z_B->table[{i}] {sinf}
                x = x + dx_interp
        end
        tweaktau Na_fast_GP Z
		//call Na_fast_GP TABFILL Z {xdivs_interp} 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

//==================================================================
//                      Fast Na channel
//	Activation and fast inactivation made to replicate resurgent
//		sodium current from Raman & Bean.
//	Slow inactivation gate added by J. Edgerton, 2004.
//	Adapted to use the tab2Dchannel instead of Z-gate by C. Gunay, Jan 2006.
//==================================================================
function make_Na_fast_GP_tab2D
        if ({exists Na_fast_GP})
                return
        end
        create  tab2Dchannel Na_fast_GP
	float mpower = 3
        setfield Na_fast_GP Ek {ENa} Gbar {G_Na_fast_GP} Ik 0 Gk 0\
                Xpower {mpower} Ypower 1 Zpower 1
		
//	Activation & Deactivation
	float Vhalfm 	= {Vhalfm_NaF}
	float Km 	= {Km_NaF}
	float taummax 	= {taummax_NaF}	// 0.000028	//0.00010   
        float taummin 	= {taummin_NaF}	//  0.00000157	//0.00002
	float Ktau1   =	 0.02
	float Ktau2   =  0.02
	float V0m, minf, taum
	V0m = {Vhalfm} + ({Km} * {log {(1 / {pow 0.5 {1/{mpower}}}) - 1}})
	echo "Na_fast V0m: " {V0m}
	// Special use of 2D table as a 1D table
        call Na_fast_GP TABCREATE X 0 0 0 {xdivs_interp} {xmin} {xmax} 
        x = xmin
        for (i = 0; i <= {xdivs_interp}; i = i + 1)
                minf = 1 / (1 + {exp {({V0m} - x) / {Km} }})
		taum = {taummin} + (({taummax} - {taummin}) / ({exp { (x - {V0m}) / {Ktau1} } } + {exp {({V0m} - x) / {Ktau2} }}))
	        // tweaktau doesn't apply to tab2D, we fill tables directly with A & B
     		setfield Na_fast_GP X_A->table[0][{i}] {({minf} / {taum})}
 		setfield Na_fast_GP X_B->table[0][{i}] {(1 / {taum})}
                x = x + dx_interp
        end
		/*setfield Na_fast_GP X_A->calc_mode {NO_INTERP}
		  setfield Na_fast_GP X_B->calc_mode {NO_INTERP}*/
	// Voltage dependent gate
	setfield Na_fast_GP Xindex VOLT_INDEX

//	Fast Inactivation
	float V0h	= {V0h_NaF}
	float tauhV0	= {tauhV0_NaF}
	float Kh      =	{Kh_NaF}	// 	-0.003848
	float tauhmax =  {tauhmax_NaF}	//	0.004 
        float tauhmin =  {tauhmin_NaF}	//	0.0002
	float Ktau1h   =  0.005
	float Ktau2h   =  0.01
	float hinf, tauh
        call Na_fast_GP TABCREATE Y  0 0 0 {xdivs_interp} {xmin} {xmax}
        x = xmin
        for (i = 0; i <= {xdivs_interp}; i = i + 1)
                hinf = 1 / (1 + {exp {({V0h} - x) / {Kh} }})
		tauh = {tauhmin} + (({tauhmax} - {tauhmin}) / ({exp { (x - {tauhV0}) / {Ktau1h} } } + {exp {({tauhV0} - x) / {Ktau2h} }}))
     		setfield Na_fast_GP Y_A->table[0][{i}] {({hinf} / {tauh})}
		setfield Na_fast_GP Y_B->table[0][{i}] {(1 / {tauh})}
                x = x + dx_interp
        end
		/*setfield Na_fast_GP Y_A->calc_mode {NO_INTERP}
		  setfield Na_fast_GP Y_B->calc_mode {NO_INTERP}*/
	setfield Na_fast_GP Yindex VOLT_INDEX

//	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 tausV0	= {V0s_NaF}
	float Ks      	= {Ks_NaF}
	float mins	= {mins_NaF}
	float Ktaus1   	= {Ktaus1_NaF}
	float Ktaus2	= {Ktaus2_NaF}
	float tausmax	= {tausmax_NaF}
	float tausmin	= {tausmin_NaF}
	float sinf, taus
	
        call Na_fast_GP TABCREATE Z  0 0 0  {xdivs_interp} {xmin} {xmax}
        x = xmin
        for (i = 0; i <= {xdivs_interp}; i = i + 1)
		sinf = {mins} + ((1-{mins}) / (1 + {exp {({V0s} - x) / {Ks} }}))
		taus = tausmin + ({tausmax} - {tausmin}) / ({exp {({tausV0} - x) / {Ktaus1}}} + {exp {(x - {tausV0}) / {Ktaus2}}}) 

     		setfield Na_fast_GP Z_A->table[0][{i}] {({sinf} / {taus})}
		setfield Na_fast_GP Z_B->table[0][{i}] {(1 / {taus})}
                x = x + dx_interp
        end
		/*setfield Na_fast_GP Z_A->calc_mode {NO_INTERP}
		  setfield Na_fast_GP Z_B->calc_mode {NO_INTERP}*/
	// Z-gate voltage-dependent
	setfield Na_fast_GP Zindex VOLT_INDEX
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
	float mpower = 3
    setfield Na_slow_GP Ek {ENa} Gbar {G_Na_slow_GP} Ik 0 Gk 0 \
	Xpower {mpower} Ypower 1 Zpower 1
	
	float q10 = 3	// = Q10^((32-22)/10) with Q10 = 3.
	
//	***	Activation & Deactivation (m-gate)
    float Km    = 0.0057	// with mpower = 3, this makes actual K = 0.0045.
    float Vhalfm   = {Vhalfm_NaP}	// -0.053 according to Magistretti & Alonso
	float Ktaum =	0.0144	
	float V0taum =	-0.0416
	float alp0	=	2130	// 0.00213
	float bet0 = 	2460

	float V0m = {Vhalfm} + ({Km} * {log {(1 / {pow 0.5 {1/{mpower}}}) - 1}})
	echo "Na_slow V0m: " {V0m}

	float alpham, betam, taum, minf
        call Na_slow_GP TABCREATE X {xdivs} {xmin} {xmax}
        x = xmin
        for (i = 0; i <= {xdivs}; i = i + 1)
		
			alpham = alp0 * {exp {(x - {V0taum}) / {Ktaum}}} * {q10}
			betam = bet0 * {exp {({V0taum} - x) / {Ktaum}}} * {q10}
			
            minf = 1 / (1 + {exp {({V0m} - x) / {Km} }})
			taum = 1 / ({alpham} + {betam})
			
            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 {xdivs_interp} 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}	// 0.154
	float V0h   	= {V0h_NaP}	// -0.057	
    	float Kh   	= {Kh_NaP}	// -0.004
	float V0tauh = -0.034		
	float Ktauh1 = -0.026
	float Ktauh2 = -0.0319
	float tauhmin = 0.030
	float tauhmax = 0.051

	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 {(x - {V0tauh}) / {Ktauh1}}} + {exp {({V0tauh} - x) / {Ktauh2}}}))) / {q10}
			
            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 {xdivs_interp} 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      =	-0.0049
    float V0s     =	{V0s_NaP}
	float Aalpha =	-2.88	//units of /volt/sec
	float Balpha =	-0.049	//units of /sec
	float Kalpha =	0.00463	//units of volt
	float Abeta =	{Abeta_NaP}	//6.94	//units of /volt/sec
	float Bbeta =	{Bbeta_NaP}	// 0.447	//units of /sec
	float Kbeta =	-0.00263	//units of volt

	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 = {q10} * (({Aalpha} * x) + {Balpha}) / (1 - {exp {((x + ({Balpha} / {Aalpha})) / {Kalpha})}})
			betas = {q10} * (({Abeta} * x) + {Bbeta}) / (1 - {exp {((x + ({Bbeta} / {Abeta})) / {Kbeta})}})
		
			taus = 1 / ({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 {xdivs_interp} 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
	float npower = {npower_Kv2}	//4
        setfield Kv2_GP Ek {EK} Gbar {G_Kv2_GP} Ik 0 Gk 0\
                Xpower {npower} Ypower 1 Zpower 0
	float taunmax = {taunmax_Kv2}	// 0.03 
	float taunmin = {taunmin_Kv2}	// 0.0001	
    float Kn = {Kn_Kv2}
    float Vhalfn = {Vhalfn_Kv2}	// True Vhalf for channel activation
	float K1tau = -0.01391
	float K2tau = -0.02174
	float V0n, ninf, taun, alpha, beta
	V0n = {Vhalfn} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower}}}) - 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} }}))
		setfield Kv2_GP X_A->table[{i}] {taun}
		setfield Kv2_GP X_B->table[{i}] {ninf}
/* Manual table contruction bypassing tweaktau:
		alpha = {ninf} / {taun}
		beta = {(1 / {taun}) - {alpha}}
		setfield Kv2_GP X_A->table[{i}] {alpha}
		setfield Kv2_GP X_B->table[{i}] {1 / {taun}}
*/
		x = x + dx
	end
	tweaktau Kv2_GP X
	call Kv2_GP TABFILL X {xdivs_interp} 0
	setfield Kv2_GP X_A->calc_mode {NO_INTERP}
	setfield Kv2_GP X_B->calc_mode {NO_INTERP}
        
	float Kh    =  	0.010
        float V0h   = 	-0.02
	float hmin  =	{hmin_Kv2}	// 0.2	
	float tauhmax = 3.4   
        float tauhmin =	3.4
	float tauhK   =	0.010
	float tauhV0  =	0 //-0.070 
	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 {(x - {V0h}) / {Kh} }}))
		tauh = {{tauhmax}-{tauhmin}} / (1 + {exp {(x - {tauhV0}) / {tauhK} }})  + {tauhmin} 
                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 {xdivs_interp} 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
	float npower = {npower_Kv3}	// 4
        setfield Kv3_GP Ek {EK} Gbar {G_Kv3_GP} Ik 0 Gk 0\
                Xpower {npower} Ypower 1 Zpower 0
        float Kn = {Kn_Kv3}	// individual n-gate K	
        float Vhalfn = {Vhalfn_Kv3}	// True Vhalf for channel activation.
	float taunmax = 0.014	// actual peak of tauV curve is about 7 ms.
	float taunmin = 0.0001	// = true min tau
	float K1tau = -0.012
	float K2tau = -0.013	// changed from -0.021 02/16/2005
	float V0n, ninf, taun, alpha, beta
	V0n = {Vhalfn} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower}}}) - 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} }}))
		setfield Kv3_GP X_A->table[{i}] {taun}
		setfield Kv3_GP X_B->table[{i}] {ninf}
/* Manual table contruction bypassing tweaktau:
		alpha = {ninf} / {taun}
		beta = {(1 / {taun}) - {alpha}}
		setfield Kv3_GP X_A->table[{i}] {alpha}
		setfield Kv3_GP X_B->table[{i}] {1 / {taun}}
*/
		x = x + dx
	end
	tweaktau Kv3_GP X
	call Kv3_GP TABFILL X {xdivs_interp} 0
	setfield Kv3_GP X_A->calc_mode {NO_INTERP}
	setfield Kv3_GP X_B->calc_mode {NO_INTERP}
		
        float Kh    =  	0.010
        float V0h   = 	-0.02
	float hmin  =	{hmin_Kv3}	//	0.6	
	float tauhmax = 0.033   
        float tauhmin =	0.007
	float tauhK   =	0.010
	float tauhV0  =	0 //-0.070 
	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 {(x - {V0h}) / {Kh} }}))
		tauh = {{tauhmax}-{tauhmin}} / (1 + {exp {(x - {tauhV0}) / {tauhK} }})  + {tauhmin} 
                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 {xdivs_interp} 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
	float npower = 4
        setfield Kv4_fast_GP Ek {EK} Gbar {G_Kv4_fast_GP} Ik 0 Gk 0\
                Xpower {npower} Ypower 1 Zpower 0
        float Kn    	= {Kn_Kv4}	//	0.029
        float V0n   	= {V0n_Kv4}	//	-0.053	
	float taunmax 	=  0.007   
        float taunmin 	=  0.00025
	float Ktaun1 	= {Ktaun1_Kv4}	//	0.029
	float Ktaun2 	= {Ktaun2_Kv4}	//	0.029
	float ninf, taun
//	V0n = {Vhalfn} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower}}}) - 1}})
	echo "Kv4f V0n: " {V0n}
 //	V0n = -0.043	//corrected for mpower = 4.
 	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 {(x - {V0n}) / {Ktaun2}}}) 
                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 {xdivs_interp} 0
	setfield Kv4_fast_GP X_A->calc_mode {NO_INTERP}
	setfield Kv4_fast_GP X_B->calc_mode {NO_INTERP}

	
	float tauhmax 	= 0.021   
        float tauhmin 	= 0.007
        float Kh    	= {Kh_Kv4}	//-0.0047
        float V0h   	= {V0h_Kv4}	//-0.072
	float Ktauh1 	= {Ktauh1_Kv4}	//0.010
	float Ktauh2 	= {Ktauh2_Kv4}	//0.010
	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 {(x - {V0h}) / {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 {xdivs_interp} 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} Ypower 1 Zpower 0
        float Kn    	= {Kn_Kv4}	//	0.029
        float V0n   	= {V0n_Kv4}	//	-0.053	
	float taunmax 	=  0.007   
        float taunmin 	=  0.00025
	float Ktaun1 	= {Ktaun1_Kv4}	//	0.029
	float Ktaun2 	= {Ktaun2_Kv4}	//	0.029
	float ninf, taun
//	V0n = {Vhalfn} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower}}}) - 1}})
	echo "Kv4s V0n: " {V0n}
 //	V0n = -0.043	//corrected for mpower = 4.
 	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 {(x - {V0n}) / {Ktaun2}}}) 
                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 {xdivs_interp} 0
	setfield Kv4_slow_GP X_A->calc_mode {NO_INTERP}
	setfield Kv4_slow_GP X_B->calc_mode {NO_INTERP}

	
	float tauhmax =  0.121   
        float tauhmin =  0.05
        float Kh    	= {Kh_Kv4}	//-0.0047
        float V0h   	= {V0h_Kv4}	//-0.072
	float Ktauh1 	= {Ktauh1_Kv4}	//0.010
	float Ktauh2 	= {Ktauh2_Kv4}	//0.010
	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 {(x - {V0h}) / {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 {xdivs_interp} 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
	float npower = 4
        setfield KCNQ_GP Ek {EK} Gbar {G_KCNQ_GP} Ik 0 Gk 0\
                Xpower {npower} Ypower 0 Zpower 0
	float taunmax = 0.1	//Q10 = 3 adjusted	
	float taunmin = 0.0067	//Q10 = 3 adjusted
    float Kn = {Kn_KCNQ}
    float Vhalfn = {Vhalfn_KCNQ}	// True Vhalf for channel activation
	float K1tau = -0.025
	float K2tau = -0.035
	float V0n, ninf, taun, alpha, beta
	V0n = {Vhalfn} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower}}}) - 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}
/* Manual table contruction bypassing tweaktau:
		alpha = {ninf} / {taun}
		beta = {(1 / {taun}) - {alpha}}
		setfield KCNQ_GP X_A->table[{i}] {alpha}
		setfield KCNQ_GP X_B->table[{i}] {1 / {taun}}
*/
		x = x + dx
	end
	tweaktau KCNQ_GP X
	call KCNQ_GP TABFILL X {xdivs_interp} 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 1994
//             	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.
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 =  0.0002    //estimated from traces Q10=2.5 adjusted
        float K = -1*{Kn_CaHVA}		// -0.007
        float V0 = {Vhalfn_CaHVA}	// -0.002
        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 {xdivs_interp} 0
	setfield Ca_HVA_GP X_A->calc_mode {NO_INTERP}
	setfield Ca_HVA_GP X_B->calc_mode {NO_INTERP}

end

function make_Ca_HVA_GP2
        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 Kn = {Kn_CaHVA}
	float V0n = {Vhalfn_CaHVA} + ({Kn} * {log {(1 / {pow 0.5 {1/{npower_CaHVA}}}) - 1}})
	float taunmin = 0.0002    //estimated from traces Q10=2.5 adjusted
	float taunmax = 0.0002

	for (i = 0; i <= {xdivs}; i = i + 1)
		ninf = 1 / (1 + {exp { ({V0n} - x) / {Kn} } } )
		taun = {taunmin} + (({taunmax} - {taunmin}) / ({exp { ({V0n} - x) / {Kn} } } + {exp {-({V0n} - x) / {Kn} }}))
		setfield Ca_HVA_GP X_A->table[{i}] {taun}
		setfield Ca_HVA_GP X_B->table[{i}] {ninf}

		x = x + dx
	end

	tweaktau Ca_HVA_GP X
	call Ca_HVA_GP TABFILL X {xdivs_interp} 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 = 4.6	// Hirschberg et al, 1999
	float taumax = 0.076	// deactivation tau in 0 Ca2+
	float taumin = 0.004	// max activation rate
	float caSat = 0.005	// 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 1 
	cxmin = 0.00001	// 10 nM
	cxmax = 0.06 		// 60 microM
				// Conc-dependence grid will have xdivs_interp 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 {xdivs_interp} 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 1 Ypower 0 Zpower 0
	float Km      	= -0.0033
    float V0m     	= -0.0764
	float taumin	= 0
	float tau0		= 14.5
	float Ktau1		= 0.00748
	float Ktau2		= 0.00656
	float dq10 = 4
    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} + {tau0} / ({exp {(x-{V0m})/{Ktau1}}} + {exp {({V0m}-x)/{Ktau2}}})) / dq10
		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 {xdivs_interp} 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 1 Ypower 0 Zpower 0
	float Km      	= -0.004
    float V0m     	= -0.0875
	float taumin	= 0
	float tau0		= 25.2
	float Ktau1		= 0.0082
	float Ktau2		= 0.0089
	float dq10 = 4
    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} + {tau0} / ({exp {(x-{V0m})/{Ktau1}}} + {exp {({V0m}-x)/{Ktau2}}})) / dq10
		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 {xdivs_interp} 0
	setfield h_HCN2_GP X_A->calc_mode {NO_INTERP}
	setfield h_HCN2_GP X_B->calc_mode {NO_INTERP}
end