I assume it best to explain my objective first so that you could suggest a better approach to tackle my problem. I am attempting to develop a bidomain model (one grid representing cells, coupled via gap junctions, and the other grid their adjacent extracellular space). This would be a passive system and 3-dimensional with num(cells)>>>100. I have developed the first grid with gap junctions implemented as point processes via NMODL and it seems to be working fine. My task is now to build the second grid.
To start off, I am trying to keep it simple and just develop a 2 cell model (by a method which I can easily and efficiently scale for my larger 3D models). From what I have read on the forum, it means I should rule out using LinearMechanism. Do correct me if I am wrong here.
The most natural approach seemed to be to utilize 'extracellular' mechanism in NEURON. I would by default obtain the connection between the two grids via the cell membrane. I believe, I would only need one layer of extracellular, i.e. nlayer=1. The documentation stated that:
I made the change to options.h file. But I am not clear on what was meant by "recompile both nrnoc and nrniv". I assumed it meant to run mknrndll on 'nrn71\src\nrnoc' folder. I found 'nrniv' in 'nrn71\bin' and ran mknrndll on that as well (I always assumed mknrndll was only for mod files, does it also operate on dll files?). But even then accessing Tools>Distributed Mechanisms>Viewers>Shape Name>(selecting section) I could still see parameters for the 2nd extracellular layer. How can I verify whether nlayer = 1 or 2?If other than 2 extracellular layers is desired, you may recompile the program by changing the nrn/src/nrnoc/options.h line #define EXTRACELLULAR 2 to the number of layers desired. Be sure to recompile both nrnoc and nrniv as well as any user defined .mod files that use the ELECTRODE_CURRENT statement.
The next concern was to have the extracellular space of adjacent cells connected/coupled (the ECF at last segment of one cell connected to the ECF of first segment at the other cell). I believe, by default, the ECFs for different sections in NEURON are disconnected. I searched through the forum for any related articles, and one of the likely ones seemed to be regarding ephaptic coupling (viewtopic.php?f=12&t=1812&p=6503&hilit=ephaptic#p6503). But it seemed to suggest using LinearMechanism which again seems to be infeasible for the larger model here.
A seemingly weird thought that came up, considering that I had already coupled the cells via gap junctions, was to have a similar mechanism for coupling/connecting the extracellular resistances. Though I had my own doubts, I gave it a try. I made another NMODL file (pretty much identical to gap.mod):
Code: Select all
NEURON {
POINT_PROCESS GapE
POINTER vext,vgapext
RANGE r, i
NONSPECIFIC_CURRENT i
}
PARAMETER {
r = 1e10 (megohm)
}
ASSIGNED {
vext (millivolt)
vgapext (millivolt)
i (nanoamp)
}
BREAKPOINT {
i = (vext - vgapext)/r
}
Code: Select all
//Coupling Extracellular
objref ge[2]
for i = 0 ,1 {
ge[i] = new GapE(0.5)
ge[i].r = 10
}
cella ge[0].loc(0.9999)
cellb ge[1].loc(0.0001)
setpointer ge[0].vext, cella.vext[0](0.9999)
setpointer ge[1].vext, cellb.vext[0](0.0001)
setpointer ge[0].vgapext, cellb.vext[0](0.0001)
setpointer ge[1].vgapext, cella.vext[0](0.9999)
Another tame effort was to change the BREAKPOINT block to:
Code: Select all
BREAKPOINT {
vext = vext - ((vext - vgapext)/r)
}
I realize I am thinking along a single track, so do advice me on what would be a better approach to develop the extracellular grid of the bidomain model.
Thanks,
Shailesh Appukuttan