Page 1 of 1

'Better' spike triggered events?

Posted: Thu Apr 05, 2012 1:57 pm
by Adam
Hello,

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 code both shows the way I have been going about things and indicates where I am running into problems. This structure works fine if I predetermine the weight change of the AMPA synapse (just have wchange() change the value to whatever). Yet what I would really like to do is have the weight change by a factor determined by e.g. an alpha function - moreover I would really like to be able to have the modulatory inputs summate if Cell[1] is driven to >1 spike.
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

Re: 'Better' spike triggered events?

Posted: Fri Apr 06, 2012 12:10 pm
by ted
The best way to do this is probably with NMODL. But before getting lost in the weeds of implementational details, it is essential to have a clear conceptual model of the synaptic plasticity mechanism. This means writing a mathematical description of the mechanism, expressed as algebraic and/or differential equations plus perhaps some logic (conditional) statements. This is an absolute prerequisite. If further dialogue would help you achieve this prerequisite, it would be most flexible to proceed via email exchanges; my address is ted dot carnevale at yale dot edu

Re: 'Better' spike triggered events?

Posted: Fri Apr 06, 2012 5:24 pm
by Adam
Thank you very much Ted,
I will write you an e-mail where I'll try to explain what I envision more clearly.
/Adam