Tsodyks-Markram synapse model

The basics of how to develop, test, and use models.
Post Reply
srikanth_rswamy
Posts: 9
Joined: Wed Apr 19, 2006 12:37 pm
Location: Lausanne

Tsodyks-Markram synapse model

Post by srikanth_rswamy »

The implementation of the Tsodyks-Markram 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
ted
Site Admin
Posts: 5810
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Tsodyks-Markram synapse model

Post by ted »

Assume nothing. Read the NMODL code. If the NET_RECEIVE block starts with a statement that declares something like this

Code: Select all

NET_RECEIVE(weight (umho), y, z, u, tsyn (ms)) {
then 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).
srikanth_rswamy
Posts: 9
Joined: Wed Apr 19, 2006 12:37 pm
Location: Lausanne

Re: Tsodyks-Markram synapse model

Post by srikanth_rswamy »

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*(B-A), 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 ...

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) < 1e-9, 1e9 >
	tau_r = 0.2 (ms): conductance rise time.
	: Dep = 100 ms for inhibitory synapses,
	:           800 ms for excitatory
	Dep = 100 (ms) < 1e-9, 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 per-stream
	y = 0
	z = z0
:	u = 0
	u = u0
	tsyn = t
: this header will appear once per stream
: printf("t\t t-tsyn\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 = 1-y-z

	: 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, t-tsyn, y, z, u)

	if (Fac > 0) {
		u = u + Use*(1-u)
	}

: 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)
}
I'm not sure why a gmax value needs to be set at the first place...

Thanks
Srikanth
Last edited by srikanth_rswamy on Fri Feb 13, 2009 7:43 am, edited 1 time in total.
ted
Site Admin
Posts: 5810
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Tsodyks-Markram synapse model

Post by ted »

Before going further, I see that the comment

Code: Select all

	: calc u at event--
in 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".
why is it necessary to have a gmax value in the parameter block in a synapse model?
Typically such a parameter is used only by mechanisms that {do NOT contain a NET_RECEIVE block} and {lack use-dependent 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.

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 STATE--it 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)
}
srikanth_rswamy
Posts: 9
Joined: Wed Apr 19, 2006 12:37 pm
Location: Lausanne

Re: Tsodyks-Markram synapse model

Post by srikanth_rswamy »

Thanks again Ted... below is the whole code... I changed g=gmax*(B-A) 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

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) < 1e-9, 1e9 >
	tau_r = 0.2 (ms): conductance rise time.
	: Dep = 100 ms for inhibitory synapses,
	:           800 ms for excitatory
	Dep = 100 (ms) < 1e-9, 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 t-tsyn\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 = 1-y-z

	: 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, t-tsyn, y, z, u)

	if (Fac > 0) {
		u = u + Use*(1-u)
	}

: 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.
ted
Site Admin
Posts: 5810
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Tsodyks-Markram synapse model

Post by ted »

I looked at the implementation of this synapse model in ModelDB
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.

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
srikanth_rswamy
Posts: 9
Joined: Wed Apr 19, 2006 12:37 pm
Location: Lausanne

Re: Tsodyks-Markram synapse model

Post by srikanth_rswamy »

The model I was referring to is under http://senselab.med.yale.edu/modeldb/Sh ... model=3815, tmgsyn.mod
ted
Site Admin
Posts: 5810
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Tsodyks-Markram synapse model

Post by ted »

I looked at the implementation of this synapse model in ModelDB, which does contain a gmax value
There is no gmax in any of the files associated with
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 built-in 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.
srikanth_rswamy
Posts: 9
Joined: Wed Apr 19, 2006 12:37 pm
Location: Lausanne

Re: Tsodyks-Markram synapse model

Post by srikanth_rswamy »

Hi, I tried figuring out why exactly gmax is assigned to 0.001 uS (1 nS) in the implementation of the Tsodyks-Markram 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?
ted
Site Admin
Posts: 5810
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Tsodyks-Markram synapse model

Post by ted »

srikanth_rswamy wrote:Hi, I tried figuring out why exactly gmax is assigned to 0.001 uS (1 nS) in the implementation of the Tsodyks-Markram model (code pasted above this post)
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. Maybe--just maybe, and this is only a guess--that 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.
Post Reply