I am attempting to model a small network consisting of 2 'real' cells and one NetStim. Specifically I am interested in describing how spikes in 'Cell[1]' modulates input events at an AMPA synapse on Cell[0]. I hope the following diagram adds rather than detracts clarity:
NetStim ------> AMPAsynapse(Cell[0]) <------- Spike in Cell[1] <-----IClamp driving Cell[1].
Now, where I am currently at is trying to improve the Spike ---> Modulation step as it is currently very simple (This is also where I feel that I am getting a bit lost). In order to have spikes in Cell[1] affect the NetStim -> AMPAsynapse I have used a recording NetCon monitoring Cell[1].soma.v to trigger a proc that changes the AMPAsynapse weight:
Code: Select all
//The synapse from the netstim
MSPcell[0].nclist.append(new NetCon(ns, syn[0], 0, 0, 10))
objref monc, nil //monitoring netcon
kindel = 10 //kinetic delay
return1 = 50 // delay before native state is resumed after spike.
taudec = 2.2 //tau variable for a test function
func wdecay() {local t //Obviously does not work.
t = 0
return ((t)*exp(-(t)/taudec))
}
MSPcell[1].soma monc = new NetCon(&v(.5), nil)
monc.threshold = -30
monc.record("spike()")
proc spike() {
print "Weights changing at time ", t + kindel, "when MSPcell[1].soma voltage = ", MSPcell[1].soma.v(.5)
cvode.event(t + kindel, "wchange()")
cvode.event(t + return1, "chback()")
}
proc wchange() {
MSPcell[0].nclist.object(0).weight = 10*wdecay()
print "Value of test function at spike time = ", wdecay()
}
proc chback() {
print "At time ", t, "weights are returned to native state"
MSPcell[0].nclist.object(0).weight = 10
if (cvode.active()) {
cvode.re_init()
} else {
fcurrent()}
}
This leaves me with the following problems/queries that I am scratching my head over (euphemism for despairing):
1. I do not know what would be the simplest way (that is to say I don't know any way) to write a time dependent function in .hoc so that each time it is called is treated as time = 0 with reference to itself.
2. How would one make such a mechanism display summation up to some maximal level?
3. As there are analogues for both 1 & 2 in NMODL mechanisms (synapses that summate / gives a nicely curved EPSP) is the answer to be found by diving deeper into the rabbit hole in the NMODL direction?
4. If it's possible to write an NMOLD mechanism that churns out the value of a function (and summates) this may be appealing for the reason that a NetCon could target it directly and thus make quite a bit of my code obsolete(?)
I realises there are models that incorporate mechanisms to describe plasticity e.g. Varela et al., 1997 but for conceptual reasons I would prefer not to do that - that is, I would like to keep the procedure changing the synapse weight external to the code describing the synapse.
I hope it is clear from this message what I am trying to do, I would have tried to word it more succinctly but as I've said I am at a bit of a loss for direction currently.
In any case, I would greatly appreciate any help with this, be it pointing out that I have made some logical error in thinking about the problem or with some applicable code.
Cheers,
Adam