One more caveat about this particular model: I just noticed that at least two of the synaptic mechanisms calculate the synaptic currents in the DERIVATIVE block, not in the BREAKPOINT block. I suspect that all of the point processes that generate currents do the same thing. This introduces an error into simulations, because it means that the dynamics of the model are completely unaffected by the conductance changes caused by synaptic activation. You see, at each fadvance the effects of membrane conductance changes on model dynamics are taken into account by executing statements in the BREAKPOINT block twice--once with an argument of v+0.001 and again with an argument of v--in order to calculate a numerical estimate of the derivative di/dv. This conductance is added to the corresponding diagonal element of the Jacobian matrix that had been set up during initialization. This means that if a density mechanism or point process generates a current, the statement in which that current is calculated should be executed in the BREAKPOINT block.
For example, look at pyrD2interD_STFD.mod and you'll see that the BREAKPOINT block is simply
Code: Select all
BREAKPOINT {
SOLVE release METHOD cnexp
}
and that the synaptic currents are computed in the DERIVATIVE block
Code: Select all
DERIVATIVE release {
. . .
inmda = W_nmda*g_nmda*(v - Erev_nmda)*sfunc(v)
. . .
iampa = W*g_ampa*(v - Erev_ampa)
. . .
}
This mechanism can be fixed by simply copying them to the BREAKPOINT block after the SOLVE statement, like so
Code: Select all
BREAKPOINT {
SOLVE release METHOD cnexp
inmda = W_nmda*g_nmda*(v - Erev_nmda)*sfunc(v)
iampa = W*g_ampa*(v - Erev_ampa)
}
Of course, to prevent confusion among those who may subsequently look at this file and wonder "why are these two variables calculated in two places?", it would be a very good idea to comment them out in the DERIVATIVE block (that is, insert a colon character i.e. ":" as the first character in those two lines in the DERIVATIVE block) and maybe also a short comment that says why, e.g.
Code: Select all
: must calculate inmda and iampa in the BREAKPOINT block
And, of course, in the context of my previous email, the final revised BREAKPOINT block would look like this:
Code: Select all
BREAKPOINT {
SOLVE release METHOD cnexp
inmda = W_nmda*g_nmda*(v - Erev_nmda)*sfunc(v)
iampa = W*g_ampa*(v - Erev_ampa)
i = inmda + iampa : a convenience for calculating the LFP
}
Now we consider a potentially difficult issue. Someone who reads this might well ask "Wait a minute--if these synaptic mechanisms have to be revised to eliminate an error, doesn't this invalidate the entire model and the conclusions that the original authors drew from their simulations?"
Not necessarily. First realize that all numerical integration methods produce approximate results, so there is a sense in which all numerical simulations are "incorrect." Second, it remains to be determined whether "fixing" these synaptic mechanisms will have any significant effect on simulation results. Yes, in a toy model (single compartment with hh, with a single instance of pyrD2interD_STFD attached) there is a slight difference in the time course of membrane potential during a spike elicited by a single input event. That does shift the time of the spike by a time step or two. But possibly more important would be what happens to the dynamics of the model cells when membrane potential is fluctuating in the subthreshold region; this is the critical zone, because it's where cells spend most of their time, and what they're doing is "thinking" about whether or not to spike. Anything that affects membrane conductance while a cell is in the subthreshold region could possibly have a big effect on network operation.
So here's what needs to be done. Someone (the model's original authors, preferably) has to make sure that all of the synaptic mechanisms (and all of the density mechanisms, too) compute their currents correctly--with statements in the BREAKPOINT block. And that someone then needs to repeat the simulations that served as the basis for the results reported by the original model's authors in order to verify whether and how the reported findings are affected. If the reported findings are qualitative observations, there is a good chance that the paper's conclusions remain valid. Semiquantitative findings are also likely to be robust--that is, essentially unaffected. Strongly quantitative findings are more likely to need to be revised.