Extracellular fields for a three-dimensional network of cells using NEURON (Appukuttan et al 2017)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:240957
" ... In the present work, we demonstrate a technique to couple the extracellular fields of individual cells within the NEURON simulation environment. The existing features of the simulator are extended by explicitly defining current balance equations, resulting in the coupling of the extracellular fields of adjacent cells. ..."
Reference:
1 . Appukuttan S, Brain KL, Manchanda R (2017) Modeling extracellular fields for a three-dimensional network of cells using NEURON. J Neurosci Methods 290:27-38 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Extracellular; Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s):
Gap Junctions: Gap junctions;
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Extracellular Fields; Methods; Action Potentials; Ephaptic coupling;
Implementer(s): Appukuttan, Shailesh [shailesh.appukuttan at unic.cnrs-gif.fr; appukuttan.shailesh at gmail.com;];
/
Appukuttan_et_al_2017_Fig15
readme.html
dataprocs.hoc
extracellspace.hoc
init.hoc
mosinit.hoc *
neuron_morpho.hoc
nrnscreenshot.png
plotDepolarization.m
screenshot.png
session.ses
                            
//Setting up the Stimulus	
objref stim
neuron[0].soma stim = new IClamp(0.5)
stim.del = 5	//ms
stim.dur = 1.5	//ms
stim.amp = 1.5	//nA

//Setting up the Simulation
access neuron[0].soma
tstop = 15

objref recv_axon, recv_soma, recv_pdend, recv_ddend1, recv_ddend2
objref vecv_axon, vecv_soma, vecv_pdend, vecv_ddend1, vecv_ddend2
objref savdata, tempmatrix, graphPeak

proc runSim() { local flag, ctr
	ctr = $1
	print "ctr = ", ctr

	//Run the simulation
	run()
				
	//Action potential identified by zero crossing
	vecv_axon.x[ctr] = recv_axon.max() - v_init		
	vecv_soma.x[ctr] = recv_soma.max() - v_init
	vecv_pdend.x[ctr] = recv_pdend.max() - v_init
	vecv_ddend1.x[ctr] = recv_ddend1.max() - v_init
	vecv_ddend2.x[ctr] = recv_ddend2.max() - v_init
}

//Defining values of RATIO_ra_by_re
objref vecRatio

vecRatio = new Vector()
vecRatio.append(10^-5.0)
vecRatio.append(10^-4.75)
vecRatio.append(10^-4.50)
vecRatio.append(10^-4.25)
vecRatio.append(10^-4.0)
vecRatio.append(10^-3.75)
vecRatio.append(10^-3.50)
vecRatio.append(10^-3.25)
vecRatio.append(10^-3.00)
vecRatio.append(10^-2.75)
vecRatio.append(10^-2.50)
vecRatio.append(10^-2.25)
vecRatio.append(10^-2.00)
vecRatio.append(10^-1.75)
vecRatio.append(10^-1.50)
vecRatio.append(10^-1.25)
vecRatio.append(10^-1.00)

proc recalcParams() {
	Re = Ra/RATIO_ra_by_re	// Ohm.cm
	xraxial_value = Re*1e-6/(PI*((diam/2)^2)*1e-8)	// MOhm/cm

	Re_Ohm = Re*1e-6*L*1e-4/(PI*((diam/2)^2)*1e-8)	// MOhm
	rlink = Re_Ohm/nseg					// MOhm
	glink = 1000/rlink 					// nS	
	ge_value = (glink*0.1)/area(0.9999)	// S/cm2

	setExtra()
	setExtraLink()
}

proc runAll() { local i
	
	vecv_axon = new Vector(vecRatio.size())
	vecv_soma = new Vector(vecRatio.size())
	vecv_pdend = new Vector(vecRatio.size())
	vecv_ddend1 = new Vector(vecRatio.size())
	vecv_ddend2 = new Vector(vecRatio.size())
	
	recv_axon = new Vector()
	recv_axon.record(&neuron[1].axon.v(0.5))
	recv_soma = new Vector()
	recv_soma.record(&neuron[1].soma.v(0.5))
	recv_pdend = new Vector()
	recv_pdend.record(&neuron[1].p_dend[0].v(0.5))
	recv_ddend1 = new Vector()
	recv_ddend1.record(&neuron[1].d_dend[0].v(0.5))
	recv_ddend2 = new Vector()
	recv_ddend2.record(&neuron[1].d_dend[1].v(0.5))
	
	for (i=0; i<vecRatio.size(); i=i+1) {
		RATIO_ra_by_re = vecRatio.x[i]
		recalcParams()
				
		print "\nRATIO_ra_by_re = ", RATIO_ra_by_re, "\n"
		runSim(i)
	}
	
	savdata = new File()
	savdata.wopen("PeakDepol.dat")

	savdata.printf("RATIO_ra_by_re\tAxon\tSoma\tPDend\tDDend0\tDDend1\n")

	tempmatrix = new Matrix()
	tempmatrix.resize(vecRatio.size(),6)
	tempmatrix.setcol(0, vecRatio)
	tempmatrix.setcol(1, vecv_axon)
	tempmatrix.setcol(2, vecv_soma)
	tempmatrix.setcol(3, vecv_pdend)
	tempmatrix.setcol(4, vecv_ddend1)
	tempmatrix.setcol(5, vecv_ddend2)
	tempmatrix.fprint(savdata, "%g\t")
	savdata.close()
	
	print "================================================"
	print "Completed"
	print "================================================"
	
	plotGraph()
}

proc plotGraph() { localobj vecRatioLog
	vecRatioLog = new Vector()
	for (i=0; i<vecRatio.size(); i=i+1) {
		vecRatioLog.append(log(vecRatio.x[i]))
	}	

	graphPeak = new Graph(0)
	vecv_axon.plot(graphPeak, vecRatioLog, 2, 3)
	vecv_soma.plot(graphPeak, vecRatioLog, 3, 3)
	vecv_pdend.plot(graphPeak, vecRatioLog, 4, 3)
	vecv_ddend1.plot(graphPeak, vecRatioLog, 5, 3)
	graphPeak.color(2)
	graphPeak.label("Axon")
	graphPeak.color(3)
	graphPeak.label("Soma")
	graphPeak.color(4)
	graphPeak.label("P_dend")
	graphPeak.color(5)
	graphPeak.label("D_dend")
	graphPeak.view(0,0,1,1,400,500,400,300)
	graphPeak.exec_menu("View = plot")
}

xpanel("Run Simulation")
	xvalue("RATIO_ra_by_re", "RATIO_ra_by_re")		
	xlabel("")
	xlabel("Run Simulation")
	xbutton("RunAll","runAll()")
	xlabel("After RunAll runs a graph similar to fig 15 is displayed")
	xlabel("")
xpanel(50, 750)