we would like to to stimulate a network of cells with external data. The architecture has following structure
-Two cells connected with over 600 gap junctions in their dendritic fileds,
- One cell receives inhibtory and exitatory graded input via gap junctions (2*600 inputs external data) in their dendritic field.
- The simulation should be controlled with the gui.
To test the implementation approach, I use the gap junction mechanism from the book for junctions between the cells and the the inhi- and exitaory input, created two nw-cells with the gui, conncet them with setpointer () as described, use fread (vread didn't worked) into vector and use vector.play. The external file has a resolution of 1ms. The hoc code loads without error, init works but running the simulation delivers voltage values values in the point process with zero. It's my first Neuron project, therefore I would like to get some support to get this working. Following the relevant hoc code parts:
Code: Select all
begintemplate First_Cell
...
public exilist, inhilist, gaplist
public gaps, gap, stims, exi, inhi
...
objref exilist
objref inhilist
objref gaplist
...
objref exi_
objref inhi_
proc stims() {
for (i=0; i<=2; i=i+1) {
d[i] exi_ = new Exi(0.1) exilist.append(exi_)
d[i] inhi_ = new Inhi(0.9) inhilist.append(inhi_)
}
}
objref gap_
proc gaps() {
for i=0, 7 {d[i] gap_ = new Gap(0.5) gaplist.append(gap_)}
}
...
endtemplate First_Cell
// second Cell has only gaps defined with the mechanism as in proc gaps()
//Network specification interface
objref cells //, nclist, netcon
{cells = new List() /*nclist = new List()*/}
func cell_append() {cells.append($o1) $o1.position($2,$3,$4)
return cells.count - 1
}
cell_append(new First_Cell(), -50, 55, 0)
cell_append(new Secnd_Cell(), -48, 9, 0)
//Connections for the inputs, vexi and vinhi are defined in separate mechanisms (copies from the gap mechanism)
double exin[First_Cell[0].exilist.count], inhin[HS_Cell[0].inhilist.count]
for (i=0; i<=2; i=i+1) {
setpointer First_Cell[0].exilist.object[i].vexi, exin[i]
setpointer First_Cell[0].inhilist.object[i].vinhi, inhin[i]
}
// load data and initialize synapses, assumption: # of exitatory = inhibitory
//
objref stimexi[First_Cell[0].exilist.count], stiminhi[First_Cell[0].inhilist.count], exi, inhi, tv
proc init() {
tv = new Vector(tstop)
tv.indgen(tstop/dt)
exi = new File()
inhi = new File()
for (i=0; i<(First_Cell[0].exilist.count); i=i+1) {
stimexi[i] = new Vector()
stiminhi[i] = new Vector()
exi.ropen("stimex.dat")
stimexi[i].fread(exi, tstop)
inhi.ropen("stiminhi.dat")
stiminhi[i].fread(inhi, tstop)
finitialize(v_init)
}
}
// plays new data to synapses
proc advance() {
for (i=0; i<(First_Cell[0].exilist.count); i=i+1) {
stimexi[i].play(&exin[i],tv,0)
stiminhi[i].play(&inhin[i],tv,0)
}
fadvance()
}
In a first version I've used setpointer() for the inputs to monitor vexi/vinhi for itself and used them in vector.play as veriable, but this doesn't worked too.
One additonal question: What must be the value of Dt in vec.play if the external file has 1 ms resolution and dt is 0.025 ms (1 or 40)?
Thanks
Bernd