My integrate and fire pre-synaptic input isn't spiking

Anything that doesn't fit elsewhere.
Post Reply
maria.kesa
Posts: 36
Joined: Thu Nov 12, 2015 10:45 am

My integrate and fire pre-synaptic input isn't spiking

Post by maria.kesa » Tue May 24, 2016 1:12 pm

Hello,

I'm working with a model of the amygdala https://senselab.med.yale.edu/modeldb/S ... del=150288

I want to induce gamma oscillations in the model and I'm working with a paper, Koppell, N., Börgers, C., Pervouchine, D., Malerba, P., Tort, A. 2010. ``Gamma and Theta Rhythms in Biophysical Models of Hippocampal Circuits'', in Hippocampal Microcircuits, Springer. According to the paper, one of the conditions for gamma oscillations is that the excitatory cells should receive sufficient input to spike at or above gamma frequency without synaptic interactions. Currently, external input is given to the excitatory neurons as background noise through the BgGen template, which I give below for convenience

Code: Select all

begintemplate BgGen
public noise_freq,noise_start,noise_total_length,refractory_period,tone_netstim,tone_turn,noise_netstim,intfire1,TempNetCon
objref noise_netstim,intfire1,TempNetCon
 proc init() {

	noise_freq = $1
	noise_start = $2
	noise_total_length = $3

	refractory_period = $4

	timestep = $5

	refractory_period = refractory_period - timestep

	noise_netstim = new NetStim()
	noise_netstim.interval = 1000/noise_freq
	//noise_netstim.number = 1e100 //noise_total_length*noise_freq/1000
	noise_netstim.number = noise_total_length*noise_freq/1000
	noise_netstim.start = noise_start
	noise_netstim.noise = 1

	intfire1 = new IntFire1()
	intfire1.tau = 1e9
	intfire1.refrac = refractory_period
	intfire1.m = 0

	intfirewgt = 1+(1e-9)

	TempNetCon = new NetCon(noise_netstim,intfire1,0.5,0,intfirewgt)
 }
endtemplate BgGen
I wrote the following code to isolate one cell and give it a BgGen spike train as input. The problem is that the APCount always gives 1, whether I measure the
excitatory cell or even the intfire1 (or even noise_netstim) input to the cell. Why is this so? Any help would be appreciated.

Code: Select all

load_file("nrngui.hoc")
load_file("LAcells_template.hoc")
load_file("BgGen.hoc")

objectvar cell_exc
cell_exc=new Cell_A()

tstop = 1000
dt = 0.01

objref bggen, bg2LAPsyn, bg2LAPcon

bggen = new BgGen(300,0,tstop,30,dt)
//30, 45, 60, 90, 120
cell_exc.dend bg2LAPsyn = new bg2pyr(0.9)
bg2LAPsyn.initW = 6.3
bg2LAPcon = new NetCon(bggen.intfire1,bg2LAPsyn,1,1,1)

objref apc
bggen.intfire1 apc = new APCount(0.5)
apc.thresh=0

objref counts
counts = new Vector()
apc.record(counts)

objref rect, recv

rect = new Vector()
recv = new Vector()

recv.record(&cell_exc.soma.v(0.5))
rect.record(&t)

recv.printf()

run(tstop)

objref f1
f1 = new File()
f1.wopen("counts.txt")
counts.printf(f1)
f1.close()

objref savdata
savdata = new File()
savdata.wopen("voltage.dat")

for i=0,rect.size()-1 {
    savdata.printf("%g %g\n", rect.x(i), recv.x(i))
}

savdata.close()


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

Re: My integrate and fire pre-synaptic input isn't spiking

Post by ted » Wed May 25, 2016 4:19 pm

the excitatory cells should receive sufficient input to spike at or above gamma frequency without synaptic interactions
How can they receive input without synaptic interactions.
the APCount always gives 1, whether I measure the excitatory cell or even the intfire1 (or even noise_netstim) input to the cell
The information you provide--including the code excerpts--is insufficient for me to pinpoint the cause of your problem. I am limited to asking a few questions and making some suggestions.

What is the evidence that your code works as you expect? If you followed a development cycle of incremental revision and extension followed by testing, you will know the answers to these questions:

1. Does your model contain temperature-sensitive mechanisms? If yes, has the operating temperature been set to the correct value by using the same strategy employed by the authors of the original model? Note that some modelers use the global variable celsius to specify operating temperature, but others have their own idiosyncratic approaches.
2. Is the biophysical model cell initialized to steady state? If not, how long does it take to settle down, and does it fire one or more spikes spontaneously?
3. Are you sure that the artificial spiking cell is generating output events during the simulation?
4. Have you verified that the synapse is responding to events by examining its output current variable (probably called i), and also its conductance if that is available?
5. Have you examined the time course of membrane potential at the synaptic trigger zone (usually the soma, or near the soma) and at the site of synaptic attachment to the postsynaptic cell?
6. To what section on the postsynaptic cell have you attached the APCount? This statement

bggen.intfire1 apc = new APCount(0.5)

doesn't attach it to the artificial spiking cell--instead, it will be attached to whatever is the default section at the time the statement is executed. The APCount won't know anything about what the BgGen's NetStim or IntFire1 are doing. APCount was implemented before NEURON had events, so it only knows how to monitor membrane potential--but a NetStim, IntFire, or IntFire2 artificial spiking cell has no membrane or membrane potential. Suggest you use the NetCon class's record method instead, which works with artificial spiking cells and biophysical model cells.

Debugging suggestions: 2-5 are very easy to do with the GUI. Debugging will be more convenient if you reduce tstop by a factor of at least 10.

maria.kesa
Posts: 36
Joined: Thu Nov 12, 2015 10:45 am

Re: My integrate and fire pre-synaptic input isn't spiking

Post by maria.kesa » Sun May 29, 2016 4:30 pm

Dear Ted,

Firstly, by the synaptic interactions I meant connections from other excitatory and inhibitory cells, not the synapses for the background external spike trains.

I don't know about the temperature variable. The main code of the model doesn't contain references to temperature. Which type of file should I look at?

The model is not initialized to a steady state. The single cell spikes once and settles to steady state within 30 ms.

I recorded from the artificial cell and it generates spikes.

When I tried to plot the current at the synapse, i, it doesn't show anything in the gui graph.

The membrane potential at the soma and dendrite of the trigger zone shows one spike and then small fluctuations around resting potential (around 10 mV), but it can't be in response to the intfire1 AP's, because there is smaller number of these fluctuations than AP's and they appear very regular.

I didn't know that APCount can't record from the artificial cell, but I also previously attached it to the soma of the excitatory cell and then it showed only one spike.

It looks like the synapse isn't working, but I did it in exactly the same way as it was in the original model and there it was working. Please help:-)

Maria

It looks from this description like the synapse isn't working, responding to the external events.

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

Re: My integrate and fire pre-synaptic input isn't spiking

Post by ted » Sun May 29, 2016 9:55 pm

maria.kesa wrote:I don't know about the temperature variable. The main code of the model doesn't contain references to temperature. Which type of file should I look at?
Always a good place to start is the Methods section of the published paper that reported the work done with the model. Aside from that, try searching all of the source code for the words
celsius
or
temperature
or
temp
or even
degC
Easy to do under Linux or OS X with grep; MSWin probably has some way to search all files in a directory tree for a particular string.
The model is not initialized to a steady state. The single cell spikes once and settles to steady state within 30 ms.
What is the resting potential?
I recorded from the artificial cell and it generates spikes.
When I tried to plot the current at the synapse, i, it doesn't show anything in the gui graph.
It's easy to miss small fluctuations. Did you zoom in or use "View = plot" to make sure that synaptic current was indeed constant?
Does the synaptic mechanism calculate synaptic conductance, and if so, does it expose the value of synaptic conductance to hoc?
What controls the amplitude of the synaptic conductance change? Does this come from the weight of the NetCon that delivers the activating event, or is it a parameter of the synaptic mechanism itself?
What is the name of the NMODL file that defines the synaptic mechanism?
The membrane potential at the soma and dendrite of the trigger zone shows one spike and then small fluctuations around resting potential (around 10 mV)
Are you saying that resting potential was 10 mV or were you referring to the peak-to-peak amplitude of the fluctuations? If the "resting potential" after the first spike is 10 mV, then maybe the cell locks up into a depolarized state that makes it inexcitable.

maria.kesa
Posts: 36
Joined: Thu Nov 12, 2015 10:45 am

Re: My integrate and fire pre-synaptic input isn't spiking

Post by maria.kesa » Sat Jun 04, 2016 2:51 pm

Thank you for your response and your help, Ted. I really appreciate it.

Now, for the questions.

1. Yes, there is a celsius parameter in the simulation. It was set in the LAcells_template.hoc file, which is loaded in the simulation file that I made. I also set it in my made file and it didn't change the situation.

2. The resting potential is -70 mV.

3. Yes, you're right I missed the small fluctuations. When I used view=plot I could see the change in the synaptic conductance.
It actually looks from the synaptic currents like the synapse is responding to the spikes from the pre-synaptic neuron, because it shows three cycles after the cell settles corresponding to the time of the spikes. The cycles fall till approximately -0.35 nA.
I wanted to ask, does a negative current mean a current flowing into the cell through the synapse?

4. The currents corresponding to AMPA and NMDA are calculated like this

Code: Select all

inmda = initW*gNMDAmax*gnmdas*(v-enmda)*sfunc(v)
iampa = initW*gAMPAmax*gampas*(v-eampa)
gNMDAmax and gAMPAmax are constants set in the mod file. Does that mean that they are exposed to hoc if they're set?
initW is set in the same synaptic file initW = 6.3

5. The name of the mod file is bg2pyr.mod

6. I was referring to the peak-to-peak amplitude of the fluctuations.

If the synaptic current does change, as it turns out, then maybe one spike from the pre-synaptic integrate-and-fire neuron is not enough to elicit a spike.

Maria

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

Re: My integrate and fire pre-synaptic input isn't spiking

Post by ted » Sun Jun 05, 2016 9:11 pm

maria.kesa wrote:When I used view=plot I could see the change in the synaptic conductance.
It actually looks from the synaptic currents like the synapse is responding to the spikes from the pre-synaptic neuron
So "lack of connection" is not a problem.
does a negative current mean a current flowing into the cell through the synapse?
bg2pyr generates two currents: inmda and iampa. These are declared to be NONSPECIFIC_CURRENTs so their sign convention is exactly the same as the sign convention for other transmembrane currents: inward (depolarizing) current is < 0.
gNMDAmax and gAMPAmax are constants set in the mod file. Does that mean that they are exposed to hoc if they're set?
The interface between NMODL and hoc is documented at https://www.neuron.yale.edu/neuron/stat ... n-to-nmodl. In summary, NMODL variables that are exposed to hoc are either RANGE or GLOBAL. A GLOBAL variable has the same value in every instance of a mechanism. A RANGE variable may have a different value in every instance of a mechanism. Here, "instance" means "every compartment" for a density mechanism, or "every instance of the class" for a point process. STATEs and currents that are declared in a NONSPECIFIC_CURRENT or USEION x WRITE ix statement are automatically RANGE. PARAMETERs are GLOBAL by default, unless overridden by a RANGE statement. ASSIGNED variables are not visible to hoc unless they are declared RANGE or GLOBAL.

The names gNMDAmax and gAMPAmax are misleading. Neither specifies the maximum amplitude of anything. Effective ionic conductance is the product of many factors (one is a term that depends on NetCon weight)--see the DERIVATIVE block in bg2pyr.mod.
maybe one spike from the pre-synaptic integrate-and-fire neuron is not enough to elicit a spike.
Could be, especially if the model authors set up a network that has a high degree of synaptic convergence. Or maybe your NetCons have smaller weights than what they used.

maria.kesa
Posts: 36
Joined: Thu Nov 12, 2015 10:45 am

Re: My integrate and fire pre-synaptic input isn't spiking

Post by maria.kesa » Thu Jun 09, 2016 1:02 pm

Thank you so much for the thorough explanations! I learned a lot. I'm reading the NEURON book, but it's taking some time.

I am still trying to make my neuron spike in response to the intfire1. I figured out how to make the spikes in intfire come more often, I had a large refractory period before and that made the firing sparse.

Can I modify the weights somehow to make the cell respond stronger to the input? When I try to modify the Netcon weight, I don't get the desired results. When I modify the initW in the bg2pyr synapse, the plots look really weird and I'm not sure that that's the best way. Right now each spike depolarizes the cell to only a tiny extent.

Would it be better to make several synapses and netcons each delivering the same train?

Thank you for your help,
Maria

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

Re: My integrate and fire pre-synaptic input isn't spiking

Post by ted » Thu Jun 09, 2016 3:35 pm

The NetCon's weight should affect epsp amplitude and nothing peculiar should happen. I just built a toy network that consisted of a presynaptic cell (NetStim that generated a single event at 1 ms) and a postsynaptic cell (single compartment with 100 um2 surface area and pas mechanism with e_pas = -70, to which a single bg2pyr is attached). All parameters of the bg2pyr have the default values specified in the NMODL file that defines it. The NetStim sends events to the bg2pyr through a NetCon that has delay = 1 ms and weight = 0.001. A single event from the NetStim at t=1 ms elicits an epsp in the postsynaptic cell that depolarizes the cell to a maximum of about -68.3 mV at 11 ms (epsp amplitude about 1.7 mV). Cutting the NetStim's weight by a factor of 2 reduces the maximum v to about -69.2 mV (epsp amplitude about 0.8 mV), pretty much as expected.

You might try this for yourself to verify the result.

maria.kesa
Posts: 36
Joined: Thu Nov 12, 2015 10:45 am

Re: My integrate and fire pre-synaptic input isn't spiking

Post by maria.kesa » Sat Jun 18, 2016 10:36 pm

Thank you, Ted!
I can also see that there's a tiny depolarization corresponding to an arriving spike.
I need to make my neurons spike at a certain frequency range. Should I therefore add extra synapses with the same spike arrival probabilities?

Thank you,
Maria

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

Re: My integrate and fire pre-synaptic input isn't spiking

Post by ted » Sun Jun 19, 2016 2:32 pm

Why don't you see what happens if you increase the NetCon's weight? Be sure to examine membrane potential not just at the soma or presumed spike trigger zone, but also at the location to which the synapse is located (by the way, what is that location?).

Post Reply