How to model presynaptic voltage?

Moderator: wwlytton

Post Reply
1501111532
Posts: 4
Joined: Thu Oct 28, 2021 11:25 pm

How to model presynaptic voltage?

Post by 1501111532 »

Hi,
I want to model the synaptic activation in Neuron. My synapse model is a POINT_PROCESS and it has no NET_RECIEVE, which means the synapse response to presynaptic potential (a numeric value), rather than spike events. I know VecStim is helpful when I want to send an array or a vector (which contains spike times) to the synapse (response to spike). How can I send an array (which contains the presynaptic potential of each time step) to the synapse (response to potential/voltage)?

Thank you very much.
Jessie
ted
Site Admin
Posts: 6286
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: How to model presynaptic voltage?

Post by ted »

it has no NET_RECIEVE
NET_RECEIVE. Isn't there an equivalent event-driven mechanism that you could use?
How can I send an array (which contains the presynaptic potential of each time step) to the synapse (response to potential/voltage)?
Are you inextricably committed to such an approach, i.e. having to generate a faux presynaptic potential waveform that is stored in a vector, then using that to drive your synaptic mechanism? If not, then unless there's something very pecuilar about the synaptic mechanism, it's probably easier to create an equivalent event-driven mechanism. That would certainly simplify the workflow in your current project (especially if you want to subject the synapse to various temporal patterns of activation), and make it easier for anyone who might want to reuse your model in the future. If you found the mechanism's source code online, e.g. in ModelDB, tell me where, and I'll see if it can be easily converted to an event-driven equivalent; if it is private, you might prefer to email it to me
ted dot carnevale at yale dot edu
1501111532
Posts: 4
Joined: Thu Oct 28, 2021 11:25 pm

Re: How to model presynaptic voltage?

Post by 1501111532 »

Hi Ted,

Thank you for your reply.

Here's my mod file. "vpeer" is the presynaptic potential of the synapse.

Code: Select all

TITLE Mod file for component

NEURON {
    POINT_PROCESS neuron_to_neuron_exc_syn
    RANGE weight                            : property
    RANGE conductance                       : parameter
    RANGE delta                             : parameter
    RANGE k                                 : parameter
    RANGE Vth                               : parameter
    RANGE erev                              : parameter
    RANGE i                                 : exposure
    NONSPECIFIC_CURRENT i 
    RANGE inf                               : exposure
    RANGE tau                               : exposure
    :POINTER vpeer: derived variable as pointer...
    RANGE vpeer
    RANGE s_rate                           : conditional derived var
}

UNITS {
    (nA) = (nanoamp)
    (uA) = (microamp)
    (mA) = (milliamp)
    (A) = (amp)
    (mV) = (millivolt)
    (mS) = (millisiemens)
    (uS) = (microsiemens)
    (molar) = (1/liter)
    (kHz) = (kilohertz)
    (mM) = (millimolar)
    (um) = (micrometer)
    (umol) = (micromole)
    (S) = (siemens)
}

PARAMETER {
    weight = 1
    conductance = 4.9E-4 (uS)
    delta = 5 (mV)
    k = 0.5 (kHz)
    Vth = 0 (mV)
    erev = -10 (mV)
}

ASSIGNED {
    ? Standard Assigned variables with baseSynapse
    v (mV)
    celsius (degC)
    temperature (K)
    vpeer (mV)                             : derived variable
    inf                                    : derived variable
    tau (ms)                               : derived variable
    i : no units???                        : derived variable
    s_rate (kHz)                           : conditional derived var...
    rate_s (/ms)
}

STATE {
    s  
}

INITIAL {
    temperature = celsius + 273.15
    rates()
    rates() ? To ensure correct initialisation.
}

BREAKPOINT {
    SOLVE states METHOD cnexp
    if ((1-  inf  ) < 1e-4) {
        s = inf ? standard OnCondition
    }
}

DERIVATIVE states {
    rates()
    s' = rate_s 
}

PROCEDURE rates() {
    ? DerivedVariable is based on path: peer/v, on: Component(id=neuron_to_neuron_exc_syn type=gradedSynapse), from peer; null
    ? Derived variable: vpeer; its value will be set by a pointer...
    inf = 1/(1 + exp((  Vth   - vpeer)/  delta  )) ? evaluable
    tau = (1-  inf  )/  k ? evaluable
    i = -1 * weight  *  conductance  *  s  * (  erev  -v) ? evaluable
    if ((1-  inf  ) > 1e-4)  { 
        s_rate = (  inf   -   s  )/  tau ? evaluable cdv
    } else  { 
        s_rate = 0 ? evaluable cdv
    }
    rate_s = s_rate ? Note units of all quantities used here need to be consistent!
}
And here is the way how I do it now. This way is useful, but not elegant and efficient. "inputSpikeTrains_exc" is an array includes the presynaptic potential of each time step. How can I do it elegantly and efficiently, like VecStim ("play" the vector into an ARTIFICIAL_CELL), without using "h.fadvance()" ? Can it be easily converted to an event-driven equivalent?

Code: Select all

synapse = h.neuron_to_neuron_exc_syn(segment)
h.secondorder = 2
h.finitialize()
h.tstop = totalSimDurationInMS
cnt = 0
while h.t < h.tstop:
    synapse.vpeer = inputSpikeTrains_exc[cnt]
    cnt += 1
    h.fadvance()
ted
Site Admin
Posts: 6286
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: How to model presynaptic voltage?

Post by ted »

Quite unique. Looks like something that was originally implemented for some non-NEURON simulation environment, or maybe some programming language. Was this originally published somewhere, or does it exist in some widely accessible code library? It must assume a very specific fixed time step, and it certainly won't work with adaptive integration. Burying the current calculation in a procedure called from a DERIVATIVE block has the consequence that the "synaptic conductance" will not affect net membrane conductance (because it won't affect the part of the Jacobian that represents the discretized cable equation).

Why can't you just use the built-in ExpSyn, which does a more than satisfactory emulation of AMPAergic synaptic transmission (very rapid rise of synaptic conductance, followed by monoexponential decay), or Exp2Syn if you want synaptic conductance to be governed by two time constants?
1501111532
Posts: 4
Joined: Thu Oct 28, 2021 11:25 pm

Re: How to model presynaptic voltage?

Post by 1501111532 »

Was this originally published somewhere, or does it exist in some widely accessible code library?
This mod file is from https://github.com/openworm/OpenWorm. After building the docker, the simulation files will appear in your docker file. Here's the reference https://royalsocietypublishing.org/doi/ ... .2017.0379.
It must assume a very specific fixed time step, and it certainly won't work with adaptive integration.
Yes, I used fixed time step integration.
Why can't you just use the built-in ExpSyn, which does a more than satisfactory emulation of AMPAergic synaptic transmission (very rapid rise of synaptic conductance, followed by monoexponential decay), or Exp2Syn if you want synaptic conductance to be governed by two time constants?
I want to simulate synapse in C. elegans. There're no sodium channels in C. elegans neurons, therefore no spikes. So I can not use built-in ExpSyn or Exp2Syn.
ted
Site Admin
Posts: 6286
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: How to model presynaptic voltage?

Post by ted »

True, you definitely can't use event-driven synapses. Two more questions:

Will you be driving the synapse with waveforms that come from electrical or optical recordings of presynaptic membrane potential? If such recordings are published, where would I find them? Is there a mathematical description of "typical voltage signals" in C. elegans neurons?
1501111532
Posts: 4
Joined: Thu Oct 28, 2021 11:25 pm

Re: How to model presynaptic voltage?

Post by 1501111532 »

Will you be driving the synapse with waveforms that come from electrical or optical recordings of presynaptic membrane potential?
I tried to drive the synapse with the sum of sinusoid and noise to test whether the code works well. Later I would used electrical data (recorded by patch clamp).
If such recordings are published, where would I find them?
Few electrical recordings are published, cause patch clamp is really hard in C. elegans. Most of them are in figures, few of them are shared as numerical data, like this https://github.com/openworm/WormsenseLa ... /test_data.
Is there a mathematical description of "typical voltage signal" in C. elegans neurons?
I think there's no "typical voltage signals" in C. elegans neurons. Each neuron has unique dynamics. Most of them have no spikes, except for AWC. Here are some reference which records electical recordings and models the neuron with MATLAB or Python (without NEURON):

[1] Liu, Qiang, et al. "C. elegans AWA olfactory neurons fire calcium-mediated all-or-none action potentials." Cell 175.1 (2018): 57-70.
[2] Nicoletti, Martina, et al. "Biophysical modeling of C. elegans neurons: Single ion currents and whole-cell dynamics of AWCon and RMD." PloS one 14.7 (2019): e0218738.
ted
Site Admin
Posts: 6286
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: How to model presynaptic voltage?

Post by ted »

Hmm, no NMODL code there, just python and xml. Or did I miss it? Was the above NMODL code machine-generated from xml?
Post Reply