The virtual slice setup (Lytton et al. 2008)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:116838
"In an effort to design a simulation environment that is more similar to that of neurophysiology, we introduce a virtual slice setup in the NEURON simulator. The virtual slice setup runs continuously and permits parameter changes, including changes to synaptic weights and time course and to intrinsic cell properties. The virtual slice setup permits shocks to be applied at chosen locations and activity to be sampled intra- or extracellularly from chosen locations. ..."
Reference:
1 . Lytton WW, Neymotin SA, Hines ML (2008) The virtual slice setup. J Neurosci Methods 171:309-15 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Extracellular;
Brain Region(s)/Organism:
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s):
Implementer(s): Lytton, William [bill.lytton at downstate.edu]; Neymotin, Sam [Samuel.Neymotin at nki.rfmh.org];
/
b09jan08
README.html
intf_.mod
misc.mod *
nstim.mod *
stats.mod
vecst.mod
misc.h
mosinit.hoc
screenshot.jpg
                            
: $Id: nstim.mod,v 1.24 2006/04/03 19:18:18 billl Exp $

NEURON	{ 
  ARTIFICIAL_CELL NStim
  RANGE interval, number, start, end
  RANGE noise,type,id
}

PARAMETER {
  interval	= 10 (ms) <1e-9,1e9>: time between spikes (msec)
  number	= 10 <0,1e9>	: number of spikes
  start		= 50 (ms)	: start of first spike
  noise		= 0 <0,1>	: amount of randomeaness (0.0 - 1.0)
  end		= 1e9 (ms)	: time to terminate train
}

ASSIGNED {
  event (ms)
  on
  endt (ms)
  type
  id
}

CONSTRUCTOR {
  VERBATIM 
  { if (ifarg(1)) { id= *getarg(1); } else { id= -1; }
    if (ifarg(2)) { type= *getarg(2); } else { type= 1; }
  }
  ENDVERBATIM
}

PROCEDURE seed (x) {
  set_seed(x)
}

INITIAL {
  on = 0
  if (noise < 0) { noise = 0 }
  if (noise > 1) { noise = 1 }
  if (interval <= 0.) { interval = .01 (ms) }
  if (start>=0 && number>0 && end>0) {
    event = start + invl(interval) - interval*(1. - noise)
    if (event < 0) { event = 0 }
    net_send(event, 3)
  }
}	

PROCEDURE init_sequence (t(ms)) {
  if (number > 0) {
    on = 1
    event = t
    endt = t + 1e-6 + interval*(number-1)
  }
}

FUNCTION invl (mean (ms)) (ms) {
  if (noise == 0) {
    invl = mean
  } else {
    invl = (1. - noise)*mean + noise*mean*exprand(1)
  }
}

NET_RECEIVE (w) {
  if (flag == 0) { : external event
    if (w > 0 && on == 0) { : turn on spike sequence
      init_sequence(t)
      net_send(0, 1)
    } else if (w < 0 && on == 1) { : turn off spiking
      on = 0
    }
  }
  if (flag == 3) { : from INITIAL
    if (on == 0) {
      init_sequence(t)
      net_send(0, 1)
    }
  }
  if (flag == 1 && on == 1) {
    net_event(t)
    event = event + invl(interval)
    if (event > endt || event > end) {
      on = 0
    } else {
      net_send(event - t, 1)
    }
  }
}

FUNCTION fflag () { fflag=1 }