Source code that demonstrates the problem

Save the following to a file called initn.hoc, then use NEURON to execute it. Note the organization of the program, in particular the extensive use of procedures, and how it performs the following tasks in sequence:

  • declares important constants (model parameters and simulation parameters)
  • loads files that other stuff will depend on
  • creates the model itself (just a collection of cells that spike at random times)
  • specifies instrumentation (in this case, recording of spike times)
  • specifies simulation control
  • executes one or more simulations with various model parameters
/*
initn.hoc
demonstrates that multiple NetStims draw from a shared distribution
*/

NSNUM = 2 // how many NetStims to create

ISI = 10 // default NetStim parameters
NUM = 10
START = 1
NOISE = 1

TSTOP = 20 // length of simulation

load_file("nrngui.hoc")

///// model setup

objref nslist
nslist = new List()

proc makenetstims() { local i  localobj ns
  nslist = new List()
  for i = 0, $1-1 {
    ns = new NetStim()
    nslist.append(ns)
  }
}

makenetstims(NSNUM)

proc setparams() { local i
  for i = 0,nslist.count()-1 {
    nslist.o(i).interval = ISI
    nslist.o(i).number = NUM
    nslist.o(i).start = START
    nslist.o(i).noise = NOISE
  }
}

setparams()

///// instrumentation

objref tvec, idvec, nil
tvec = new Vector()
idvec = new Vector()

proc instrumentation() { local i  localobj nc
  tvec = new Vector()
  idvec = new Vector()
  for i = 0,nslist.count()-1 {
    nc = new NetCon(nslist.o(i), nil)
    nc.record(tvec, idvec, i)
  }
}

instrumentation()

///// simulation control

tstop = TSTOP

proc seed() {
  // all NetStims share the same random number generator
  // so we only have to call one NetStim's seed() method.
  nslist.o($1).seed($2)
}

proc myrun() { local i
  run()
  print " time         cell"
  for i=0, tvec.size-1 printf("%7.3f \t%d\n", tvec.x(i), idvec.x(i))
}

/////

print "============================================================"
print "Control:  both have interval 10, number 10, start 1, noise 1"
print "============================================================"

myrun()

print "============================================================"
print "Test:  NetStim 1 starts at 6 ms"
print "============================================================"

seed(0,1) // reset random number generator to start of sequence
nslist.o(1).start = 6

myrun()