array of pointer in NModl

NMODL and the Channel Builder.
Post Reply
mgilson

array of pointer in NModl

Post by mgilson »

Hello,

I would like to develop a model of IntFire neuron with independent alpha-synapses (and each one having proper internal mechanisms, such as weight changes depending on the pre- and post-synaptic activity for instance).
Thus, I was thinking of designing in NMODL each synapse as a Point_Process with a 'psp' value as output (the post-synpatic potential change induced in the soma somehow), and the cell body mechanism as another Point_Process, with an array of Pointers to catch the values of the synaptic 'psp' when necessary. I wrote the following code (that is not accepted by mknrndll.exe, the array of pointer throws an error):

"
DEFINE N_SYN_MAX 3

NEURON {
ARTIFICIAL_CELL IntFire
POINTER psp[N_SYN_MAX]
RANGE tau, n_syn, m
}

PARAMETER {
tau = 10 (ms)
n_syn = 0
}

ASSIGNED {
m
t0 (ms)
psp[N_SYN_MAX]
}

INITIAL {
t0 = t
m = 0
}

BREAKPOINT { LOCAL j
m = m * exp((t0 - t)/tau)
t0 = t
FROM j=0 TO n_syn-1 {m = m + psp[j]}
}
"

Is there any known solution for programming such a pointer array in NModl without using a section and ingoing NONSPECIFIC_CURRENT?

Thanks,
Matthieu
Raj
Posts: 220
Joined: Thu Jun 09, 2005 1:09 pm
Location: Groningen, The Netherlands
Contact:

Post by Raj »

If you only need to evaluate the synaptic parameters at the time an event arrives and the synaptic currents behave linearly and different synapses have the same time constant you can move the synapse dependent information to the netcon object.

Examples:
Saturating AMPA synapse:
https://www.neuron.yale.edu/phpBB2/view ... ight=ampas

Synapse with short term plasticity (in tmgsyn.mod):
http://senselab.med.yale.edu/senselab/m ... model=3815

I hope this works for you.

Raj
ted
Site Admin
Posts: 6299
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Post by ted »

The use of POINTER and BREAKPOINT in your NMODL code indicates that you have
abandoned the event-based strategy that is responsible for the computational efficiency
of artificial spiking cells in NEURON. You might find it useful to read this paper (assuming
that you haven't already worked through it)
Hines, M.L. and Carnevale, N.T.
Discrete event simulation in the NEURON environment.
Neurocomputing 58-60:1117-1122, 2004.
which you can download in preprint form at
http://www.neuron.yale.edu/neuron/bib/nrnpubs.html

Stream-specific use-dependent plasticity is easily accomplished by exploiting the fact
that the weight associated with a NetCon is actually a vector. This is what is done in the
examples that Raj pointed you to.

Spike-timing-dependent (associative) plasticity requires that the synaptic weight change
differently depending on whether the synapse is activated before or after the
postsynaptic cell spikes. The "pre after post" component of this plasticity is easily
implemented on a stream-specific basis for any number of afferent streams. However,
"pre before post" is problematical becase it requires adjusting each NetCon's weight
when the postsynaptic cell fires. This is trivial when there is only one afferent stream,
but more difficult if there are multiple afferent streams (convergence)--I am not aware
of any way at present to notify each NetCon every time a postsynaptic spike has
occurred.
mgilson

Post by mgilson »

Thanks for your replies, it helps. I was not fully aware of how to use net_move and net_send, so now I think I can manage by the means of NetCon objects (some used for "real" synaptic connections and maybe also some dummy ones for update purpose, like what Ted said about warning the pre-syn that post-syn is emitting).

About Ted's reply, the code I sent is a simplification of what I actually want to do, but the key is that I would like to have access to output variables of several other objects in NModl. Thus I could use different types of synapses on my integrate-&-fire point neuron.
I also plan to use the Event system of NEURON when I find how to implement analytical triggering solutions for the mechanisms I use, but I still have to verify the analytical model (with events only) with the original one that computes differential equations (through discrete time).

Regards,
Matthieu
Post Reply