Ion channel modeling with whole cell and a genetic algorithm (Gurkiewicz and Korngreen 2007)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:97756
"... Here we show that a genetic search algorithm in combination with a gradient descent algorithm can be used to fit whole-cell voltage-clamp data to kinetic models with a high degree of accuracy. Previously, ion channel stimulation traces were analyzed one at a time, the results of these analyses being combined to produce a picture of channel kinetics. Here the entire set of traces from all stimulation protocols are analysed simultaneously. The algorithm was initially tested on simulated current traces produced by several Hodgkin-Huxley–like and Markov chain models of voltage-gated potassium and sodium channels. ... Finally, the algorithm was used for finding the kinetic parameters of several voltage-gated sodium and potassium channels models by matching its results to data recorded from layer 5 pyramidal neurons of the rat cortex in the nucleated outside-out patch configuration. The minimization scheme gives electrophysiologists a tool for reproducing and simulating voltage-gated ion channel kinetics at the cellular level."
Reference:
1 . Gurkiewicz M, Korngreen A (2007) A numerical approach to ion channel modelling using whole-cell voltage-clamp recordings and a genetic algorithm. PLoS Comput Biol 3:e169 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Channel/Receptor;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; NEURON (web link to model);
Model Concept(s): Ion Channel Kinetics; Methods; Markov-type model;
Implementer(s): Korngreen, Alon [alon.korngreen at gmail.com];
load_file("nrngui.hoc")
create soma
access soma

soma {
	nseg = 1
	diatstop = i
	L = 20
	diam=20
	Ra = 150
	insert KCHANNEL
	gbar_KCHANNEL=0
        ek = -103
	insert pas
	g_pas = 0.00003334
}

ActNumPoints = 16511
DeactNumPoints = 33432
TotalPoints = ActNumPoints+DeactNumPoints

objectvar stim
soma stim = new SEClamp1(0.5)

objref Ac_Vec, Act_Sim_Vec, Deac_Vec, Deac_Sim_Vec, gAct, gDeact, rn
Ac_Vec = new Vector(ActNumPoints)
Act_Sim_Vec = new Vector(ActNumPoints)
Deac_Vec = new Vector(DeactNumPoints)
Deac_Sim_Vec = new Vector(DeactNumPoints)

t=0
dt=0.05
NP=5
MP=NP+1

objref dat_file
dat_file= new File()

objref transvec,varvec,minvec,maxvec
transvec = new Vector(NP)
varvec = new Vector(NP)
minvec = new Vector()
maxvec = new Vector()

minvec.append(0,0,0,0,0)
maxvec.append(50,1,1,1,1)

// random numbers and initial boundries for the population
objref  r[NP]

highindex = 11         
lowindex = mcell_ran4_init()  

for (j=0;j<=NP-1;j+=1){
        r[j] = new Random()
        r[j].MCellRan4(highindex+j*j)
        r[j].uniform(minvec.x[j],maxvec.x[j])
}

rn = new Random()
rn.MCellRan4(1)
rn.normal(1,0.05)

xopen("procs.hoc")

ReadA("data/Act_data")
ReadD("data/Deact_data")

//open main log file
objref g_file
g_file = new File()
g_file.wopen("ga_log.txt")

double prax_par[NP]
Tolorance=1e-8
minchisq=0
NUM_ITER=0