Why my instantaneous frequency always falls into [0,50] Hz?

Anything that doesn't fit elsewhere.
Post Reply
thisman

Why my instantaneous frequency always falls into [0,50] Hz?

Post by thisman »

Hi Ted, remember I asked you how to put a poisson-like stimulation into an axon. Here is the link,
http://www.neuron.yale.edu/phpBB/viewto ... f=8&t=2209
Now the program runs smoothly, but the output of instantaneous frequency that defined by
1000/(tvec1.x - tvec1.x[i-1])
always falls into [0,50]Hz.
While for the experimental data, they are between 0 to 80 Hz, and they(frequency events) satisfy the poisson distribution.
Here is my code,

Code: Select all

load_file("nrngui.hoc")

create axon
access axon

axon {
  nseg = 51
  diam = 10
  L = 10200
  Ra = 100

  insert i_l
  //insert i_h
  insert i_a
  insert i_kd
  //insert i_kd2
  insert i_na
  insert i_na2
}

WEIGHT = 10
FREQ = 19
START = 10
DURATION = 5000

objref syn
axon syn = new ExpSyn(0.0098)

objref ns
ns = new NetStim()
ns.noise = 1
ns.start = 0
ns.number = 1e9
ns.interval = 1000/FREQ

objref nc
nc = new NetCon(ns, syn)
nc.delay = 0
nc.weight = WEIGHT

objref fih
fih = new FInitializeHandler("initstim()")

proc initstim() {
  nc.active(0)
  cvode.event(START, "setstim()")
}

proc setstim() {
  if (nc.active==0) {
    nc.active(1)
    cvode.event(t + DURATION, "setstim()")
  } else {
    nc.active(0)
  }
  if (cvode.active()) {
    cvode.re_init()
  } else {
    fcurrent()
  }
}

objref nc1, tvec1, nil
axon nc1 = new NetCon(&v(0.3), nil)
nc1.threshold = -30
tvec1 = new Vector()
nc1.record(tvec1)

objref nc2, tvec2, nil
axon nc2 = new NetCon(&v(0.7), nil)
nc2.threshold = -30
tvec2 = new Vector()
nc2.record(tvec2)

cvode.active(1)
cvode.condition_order(2)

proc w() { local i
  run()
  if (tvec2.size > 0) {
    wopen("temp.txt")
    for i=1, tvec2.size-1 {
      fprint("%g %f %f\n", i+1, 1000/(tvec1.x[i] - tvec1.x[i-1]), tvec2.x[i] - tvec1.x[i])
      printf("%g %f %f\n", i+1, 1000/(tvec1.x[i] - tvec1.x[i-1]), tvec2.x[i] - tvec1.x[i])
    }    
    wopen()
  } else {
    print "sorry, no conduction latencies this time!"
  }
  print "DONE!"
}

tstop = DURATION

w()
You can replace all my currents that I do not post the corresponding .hoc files by "hh".
Thanks a lot.
ted
Site Admin
Posts: 6398
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Why my instantaneous frequency always falls into [0,50] Hz?

Post by ted »

This is a "research question," not a question of the proper usage of NEURON, so I will offer an opinion but it will be up to you to investigate the matter further.
You can replace all my currents that I do not post the corresponding .hoc files by "hh".
Not really. The range of firing frequencies that a model can generate is governed primarily by the properties of the currents that are involved in generating the spikes and of the currents that control the interspike interval. hh makes wide spikes and its range of firing frequencies is limited by the dynamics of sodium inactivation and potassium activation.

It is possible that your model's currents are perfectly fine, but the problem is that the operating temperature is too low. Look at the mod files and see if any of them has a parameter called celsius, and uses this parameter to adjust time constants or rate constants for temperature. If they do, decide what the operating temperature should be and insert into your hoc code, right after the
load_file("nrngui.hoc")
statement, a
celsius = something_or_other
statement, where "something_or_other" is the temperature that you want.

If that doesn't take care of the problem, you may want to use different ionic currents, especially for fast sodium, delayed rectifier, and A current. But first get a rough idea of what your model's currents can do, by making a single compartment model and give it the same channel densities as your original model's soma or axon. Drive that with a series of steady depolarizing steps and see what its minimum and maximum firing frequenceis are.
Post Reply