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
                            
objref slist1, slist2, list_temp1, list_temp2
objref gmat, cmat, bvec, e, xl, layer, sl, lm

//Define
RATIO_ra_by_re = 0.01
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

proc setExtra() {
	forall {
		insert extracellular
		xc[0] = 0
		xc[1] = 0		
		
		xg[0] = 1e-9	// Infinite Resistance	
		xg[1] = 1e-9	// Infinite Resistance
		
		xraxial[0] = xraxial_value	// MOhm/cm
		xraxial[1] = 1e9  // Infinite Resistance
	}
	
	print "_________________________________________"
	print "Extracellular Mechanism Inserted"
	print "_________________________________________"
}
setExtra()

proc setExtraLink() {
	slist1 = new SectionList() // connected sections in neuron 1
	slist2 = new SectionList() // connected sections in neuron 2
	// ensure that the order is the same
	neuron[0].axon slist1.append()
	neuron[1].axon slist2.append()
	neuron[0].soma slist1.append()
	neuron[1].soma slist2.append()
	neuron[0].p_dend[0] slist1.append()
	neuron[1].p_dend[0] slist2.append()
	neuron[0].d_dend[0] slist1.append()
	neuron[1].d_dend[0] slist2.append()
	neuron[0].d_dend[1] slist1.append()
	neuron[1].d_dend[1] slist2.append()

	nsegs = 0	// will contain total connected segs
	forsec slist1 {
		nsegs += nseg
	}
	print "_________________________________________"
	print "Total Connected Segments = ", 2*nsegs
	print "_________________________________________"
	
	gmat = new Matrix(2*nsegs, 2*nsegs, 2)
	cmat = new Matrix(2*nsegs, 2*nsegs, 2)
	bvec = new Vector(2*nsegs)
	xl = new Vector()
	layer = new Vector(2*nsegs)
	layer.fill(1)
	
	forsec slist1 {
		for (x, 0) {
			xl.append(x)	// for neuron 1
			xl.append(x)	// for neuron 2
		}
	}

	e = new Vector(2*nsegs)
	sl = new SectionList()
	
	list_temp1 = new List()
	forsec slist1 {
		for (x, 0) {
			list_temp1.append(new SectionRef())
		}
		slist1.remove()
	}
	list_temp2 = new List()
	forsec slist2 {
		for (x, 0) {
			list_temp2.append(new SectionRef())
		}
		slist2.remove()
	}

	for i = 0, nsegs-1 {
		list_temp1.object(i).sec sl.append()
		list_temp2.object(i).sec sl.append()
	}
	
	ge = ge_value	// S/cm2

	for (i=0; i<(2*nsegs); i=i+2) {
		gmat.x[i][i] += ge
		gmat.x[i+1][i+1] += ge
		gmat.x[i][i+1] += -ge
		gmat.x[i+1][i] += -ge	
	}
	
	lm = new LinearMechanism(cmat, gmat, e, bvec, sl, xl, layer)
	
	print "_________________________________________"
	print "Extracellular Connected Via Link"
	print "_________________________________________"	
}
setExtraLink()

// Function to print details to verify implementation
proc printInfo() {
	print "_________________________________________"	
	print "gmat = "
	print gmat.printf()
	print "_________________________________________"	
	print "cmat = "
	print cmat.printf()
	print "_________________________________________"	
	print "e = "
	print e.printf()
	print "_________________________________________"	
	print "bvec = "
	print bvec.printf()
	print "_________________________________________"	
	print "sl = "
	print sl.printnames()
	print "_________________________________________"	
	print "xl = "
	print xl.printf()
	print "_________________________________________"	
	print "layer = "
	print layer.printf()
	print "_________________________________________"	
}
//printInfo()