TsodyksMarkram synapse model

 Posts: 9
 Joined: Wed Apr 19, 2006 12:37 pm
 Location: Lausanne
TsodyksMarkram synapse model
The implementation of the TsodyksMarkram synapse model in ModelDB does not have g set to any initial value... The reference Tsodyks et al., based on which the model is created does not mention any g value... Could g be assumed to be the gmax value for AMPA synapses, which lies in the range 1  2.7 nS?
Thanks
Srikanth
Thanks
Srikanth

 Site Admin
 Posts: 5810
 Joined: Wed May 18, 2005 4:50 pm
 Location: Yale University School of Medicine
 Contact:
Re: TsodyksMarkram synapse model
Assume nothing. Read the NMODL code. If the NET_RECEIVE block starts with a statement that declares something like thisthen synaptic strength must be specified explicitly by assigning a weight to the NetCon(s) that drive it. The numeric value of the weight of the NetCon will be the "default" (unpotentiated & undepressed) weight of the synapse in umhos (microsiemens).
Code: Select all
NET_RECEIVE(weight (umho), y, z, u, tsyn (ms)) {

 Posts: 9
 Joined: Wed Apr 19, 2006 12:37 pm
 Location: Lausanne
Re: TsodyksMarkram synapse model
Thanks Ted... I have another question... why is it necessary to have a gmax value in the parameter block in a synapse model? Is it a scalar value that scales the time varying conductance g, given by g = gmax*(BA), where A and B are variables that vary with the NETCON weight? I have a chunk of code I'm trying to understand below which has a gmax set to 1ns ...
I'm not sure why a gmax value needs to be set at the first place...
Thanks
Srikanth
Code: Select all
PARAMETER {
: e = 90 mV for inhibitory synapses,
: 0 mV for excitatory
e = 0 (mV)
: tau_d was the same for inhibitory and excitatory synapses
: in the models used by T et al.
tau_d = 3 (ms) < 1e9, 1e9 >
tau_r = 0.2 (ms): conductance rise time.
: Dep = 100 ms for inhibitory synapses,
: 800 ms for excitatory
Dep = 100 (ms) < 1e9, 1e9 >
: Fac = 1000 ms for inhibitory synapses,
: 0 ms for excitatory
Fac = 1000 (ms) < 0, 1e9 >
: Use = 0.04 for inhibitory synapses,
: 0.5 for excitatory
: the (1) is needed for the < 0, 1 > to be effective
: in limiting the values of Use and u0
Use = 0.04 (1) < 0, 1 >
: initial value for the "facilitation variable"
u0 = 0 (1) < 0, 1 >
gmax = .001 (uS) : peak conductance
: initial value for the "depression variable"
z0 = 0
}
INITIAL {
LOCAL tp
if (tau_r/tau_d > .9999) {
tau_r = .9999*tau_d
}
A = 0
B = 0
g = gmax*(B  A)
tp = (tau_r*tau_d)/(tau_d  tau_r) * log(tau_d/tau_r)
factor = exp(tp/tau_r) + exp(tp/tau_d)
factor = 1/factor
}
DERIVATIVE state {
A' = A/tau_r
B' = B/tau_d
g = gmax*(B  A)
}
NET_RECEIVE(weight (1), y, z, u, tsyn (ms)) {
INITIAL {
: these are in NET_RECEIVE to be perstream
y = 0
z = z0
: u = 0
u = u0
tsyn = t
: this header will appear once per stream
: printf("t\t ttsyn\t y\t z\t u\t newu\t g\t dg\t newg\t newy\n")
}
: first calculate z at event
: based on prior y and z
z = z*exp((t  tsyn)/Dep)
z = z + ( y*(exp((t  tsyn)/tau_d)  exp((t  tsyn)/Dep)) / ((tau_d/Dep)1) )
: now calc y at event
y = y*exp((t  tsyn)/tau_d)
x = 1yz
: calc u at event
if (Fac > 0) {
u = u*exp((t  tsyn)/Fac)
} else {
u = Use
}
: printf("%g\t%g\t%g\t%g\t%g", t, ttsyn, y, z, u)
if (Fac > 0) {
u = u + Use*(1u)
}
: printf("\t%g\t%g\t%g", u, g, weight*x*u)
A = A + weight*x*u*factor
B = B + weight*x*u*factor
y = y + x*u
tsyn = t
: printf("\t%g\t%g\n", g, y)
}
Thanks
Srikanth
Last edited by srikanth_rswamy on Fri Feb 13, 2009 7:43 am, edited 1 time in total.

 Site Admin
 Posts: 5810
 Joined: Wed May 18, 2005 4:50 pm
 Location: Yale University School of Medicine
 Contact:
Re: TsodyksMarkram synapse model
Before going further, I see that the commentin the mod file in ModelDB contains a trivial typographical error. The term "event" should be "event", because it is supposed to mean "at the instant just before event".
The code excerpt in your example does not include the blocks that declare STATE or ASSIGNED variables. For the mechanism that your example would implement, g would not be a STATEit would be an ASSIGNED variable.
The DERIVATIVE block should not contain the statement g = gmax*(B  A). This assignment should be done in the BREAKPOINT block. The code excerpt does not include a BREAKPOINT block, but an appropriate BREAKPOINT block would look something like this:
Code: Select all
: calc u at event
Typically such a parameter is used only by mechanisms that {do NOT contain a NET_RECEIVE block} and {lack usedependent plasticity}. In the code excerpt that you provide, "gmax" plays the role of a multiplicative factor that scales the magnitude of the synaptic weight. This can only lead to confusion, because it undermines the authoritative role of the NetCon's weight.why is it necessary to have a gmax value in the parameter block in a synapse model?
The code excerpt in your example does not include the blocks that declare STATE or ASSIGNED variables. For the mechanism that your example would implement, g would not be a STATEit would be an ASSIGNED variable.
The DERIVATIVE block should not contain the statement g = gmax*(B  A). This assignment should be done in the BREAKPOINT block. The code excerpt does not include a BREAKPOINT block, but an appropriate BREAKPOINT block would look something like this:
Code: Select all
BREAKPOINT {
SOLVE state METHOD cnexp
g = gmax*(B  A)
i = g*(v  e)
}

 Posts: 9
 Joined: Wed Apr 19, 2006 12:37 pm
 Location: Lausanne
Re: TsodyksMarkram synapse model
Thanks again Ted... below is the whole code... I changed g=gmax*(BA) to be part of the BREAKPOINT point from what you pointed out. I looked at the implementation of this synapse model in ModelDB, which does contain a gmax value, and also does not use variables A and B, but uses a 'term' state_discontinuity instead. How is this different from using variables A and B for instance, to compute g? Does state_discontinuity have any advantages in terms of code/computing efficiency?
Cheers
Srikanth
Cheers
Srikanth
Code: Select all
NEURON {
POINT_PROCESS tmgExSyn
RANGE e, i, gmax, g
RANGE tau_r, tau_d, Dep, Fac, Use, u0, z0
NONSPECIFIC_CURRENT i
}
UNITS {
(nA) = (nanoamp)
(mV) = (millivolt)
(uS) = (microsiemens)
}
PARAMETER {
: e = 70 mV for inhibitory synapses,
: 0 mV for excitatory
e = 0 (mV)
tau_d = 3 (ms) < 1e9, 1e9 >
tau_r = 0.2 (ms): conductance rise time.
: Dep = 100 ms for inhibitory synapses,
: 800 ms for excitatory
Dep = 100 (ms) < 1e9, 1e9 >
: Fac = 1000 ms for inhibitory synapses,
: 0 ms for excitatory
Fac = 1000 (ms) < 0, 1e9 >
: Use = 0.04 for inhibitory synapses,
: 0.5 for excitatory
: the (1) is needed for the < 0, 1 > to be effective
: in limiting the values of Use and u0
Use = 0.04 (1) < 0, 1 >
: initial value for the "facilitation variable"
u0 = 0 (1) < 0, 1 >
gmax = .001 (uS) : peak conductance
: initial value for the "depression variable"
z0 = 0
}
ASSIGNED {
v (mV)
i (nA)
x
g (uS)
factor
}
STATE {
A (1)
B (1)
}
INITIAL {
LOCAL tp
if (tau_r/tau_d > .9999) {
tau_r = .9999*tau_d
}
A = 0
B = 0
g = gmax*(B  A)
tp = (tau_r*tau_d)/(tau_d  tau_r) * log(tau_d/tau_r)
factor = exp(tp/tau_r) + exp(tp/tau_d)
factor = 1/factor
}
BREAKPOINT {
SOLVE state METHOD cnexp
i = g*(v  e)
g = gmax*(B  A)
}
DERIVATIVE state {
A' = A/tau_r
B' = B/tau_d
}
NET_RECEIVE(weight (1), y, z, u, tsyn (ms)) {
INITIAL {
y = 0
z = z0
: u = 0
u = u0
tsyn = t
: printf("t\t ttsyn\t y\t z\t u\t newu\t g\t dg\t newg\t newy\n")
}
: first calculate z at event
: based on prior y and z
z = z*exp((t  tsyn)/Dep)
z = z + ( y*(exp((t  tsyn)/tau_d)  exp((t  tsyn)/Dep)) / ((tau_d/Dep)1) )
: now calc y at event
y = y*exp((t  tsyn)/tau_d)
x = 1yz
: calc u at event
if (Fac > 0) {
u = u*exp((t  tsyn)/Fac)
} else {
u = Use
}
: printf("%g\t%g\t%g\t%g\t%g", t, ttsyn, y, z, u)
if (Fac > 0) {
u = u + Use*(1u)
}
: printf("\t%g\t%g\t%g", u, g, weight*x*u)
A = A + weight*x*u*factor
B = B + weight*x*u*factor
y = y + x*u
tsyn = t
: printf("\t%g\t%g\n", g, y)
}
Last edited by srikanth_rswamy on Thu Feb 12, 2009 6:10 pm, edited 1 time in total.

 Site Admin
 Posts: 5810
 Joined: Wed May 18, 2005 4:50 pm
 Location: Yale University School of Medicine
 Contact:
Re: TsodyksMarkram synapse model
There is no tmgExSyn in ModelDB. Please be more specific about which implementation of which model you are referring to. The model's accession number, plus the name of the file in question, would do nicely.I looked at the implementation of this synapse model in ModelDB
Also, for the sake of legibility, please apply proper markup to the code posted in your previous messages, as described here:
Preserving code and text formatting
viewtopic.php?f=20&t=493

 Posts: 9
 Joined: Wed Apr 19, 2006 12:37 pm
 Location: Lausanne
Re: TsodyksMarkram synapse model
The model I was referring to is under http://senselab.med.yale.edu/modeldb/Sh ... model=3815, tmgsyn.mod

 Site Admin
 Posts: 5810
 Joined: Wed May 18, 2005 4:50 pm
 Location: Yale University School of Medicine
 Contact:
Re: TsodyksMarkram synapse model
There is no gmax in any of the files associated withI looked at the implementation of this synapse model in ModelDB, which does contain a gmax value
http://senselab.med.yale.edu/modeldb/Sh ... model=3815
The mechanism implemented by tmgsyn.mod represents the time course of synaptic conductance with a variable that increases abruptly when a new input event arrives, then decays monoexponentially with time.
NEURON's builtin Exp2Syn (which also doesn't have a gmax) represents the time course of synaptic conductance with a biexponential, which is calculated as the difference between two variables that decay monoexponentially. Arrival of an input event causes both of these variables to increase abruptly.
About state_discontinuity():
Adaptive integration requires STATEs to be continuous in time. If one or more STATEs is perturbed abruptly, the integrator must be reinitialized. At first this was done with state_discontinuity() statements. However, state_discontinuity has been deprecated (i.e. still works, but do not use for new code) for some time. It is sufficient to write
A = A + weight*dw
etc.

 Posts: 9
 Joined: Wed Apr 19, 2006 12:37 pm
 Location: Lausanne
Re: TsodyksMarkram synapse model
Hi, I tried figuring out why exactly gmax is assigned to 0.001 uS (1 nS) in the implementation of the TsodyksMarkram model (code pasted above this post), but to no avail. My question is, why use a gmax value of 0.001 uS, and why not any other value? I tried running simulations with various gmax values, and I ended up getting either too high or too low a PSP amplitude, with gmax varied from 1 uS to 0.0001 uS. I'm not convinced why a gmax should be used at the first place... could gmax be the peak synaptic conductance (the conductance value at time t = tpeak), which has been observed to be in the ballpark of 0.001 uS (1nS) for neocortical pyramidal cell interactions?

 Site Admin
 Posts: 5810
 Joined: Wed May 18, 2005 4:50 pm
 Location: Yale University School of Medicine
 Contact:
Re: TsodyksMarkram synapse model
Anybody can make any changes they like to code that they find in this Forum or in ModelDB or anywhere else. The way to find out why is to find the person who made these changes to the mod file and ask why he or she did it. Maybejust maybe, and this is only a guessthat person wanted a single event with weight 1 to produce a peak synaptic conductance change of 1 nS. You can verify for yourself whether this is what happens, but to discover whether that was the intent of the person who made this change, ask that person.srikanth_rswamy wrote:Hi, I tried figuring out why exactly gmax is assigned to 0.001 uS (1 nS) in the implementation of the TsodyksMarkram model (code pasted above this post)