// Created by LinearCircuit[0] of NEURON -- Release 7.4 (1370:16a7055d4a86) 2015-11-09
// manages LinearMechanism of rank 4
// See first public declaration and proc init() for important
// methods and variable names
// Change begintemplate and endtemplate statements if LM is not
// an appropriate name for the class.
// Usage: (assume object reference is "lm")
// 1) Attach segments to all the lm.*_loc(x) methods.
// 2) lm.install() creates the LinearMechanism
// 3) If any parameters are changed after lm.install(), call lm.afactors()
// Named voltage nodes and internal states can be plotted using their alias
// names in proc init()
// Stimuli can be changed dynamically during a run using Vector.play. See
// their alias names in proc init()
// Initial conditions for named voltage nodes can be changed prior to finitialize().
// Initial conditions are 0 by default (not copied from the original
// LinearCircuit builder that generated this file).
// netlist: 5 v nodes 4 elements
// index type name (endname)...(endname) (v node indices)
// 0 Ground[0] () ( -1 )
// 1 OutsideCell[0] BScell[1].axon(0.5) () (ex1) ( 2 1 )
// 2 OutsideCell[0] BScell[0].axon(0.5) () (ex0) ( 3 0 )
// 3 Resistor[0] Rx () () ( 1 0 )
begintemplate EphapDBA
public install, add_submatrix, afactors, ex1_loc, ex0_loc
//also see the aliases in proc init() for more public names
public _lm, _c, _g, _b, _y, _y0, _sl, _xloc, _layer, _afac
objref this,_lm, _c, _g, _b, _y, _y0, _srs[1], _sl, _xloc, _layer, _afac
proc init() { localobj _sf
_n = $1
_c = new Matrix(_n,_n,2)
_g = new Matrix(_n,_n,2)
_b = new Vector(_n)
_y = new Vector(_n)
_y0 = new Vector(_n)
_ncellport = $1
objref _srs[_ncellport+1] // in case _ncellport=0
_xloc = new Vector(_ncellport)
_layer = new Vector(_ncellport)
_afac = new Vector(_ncellport)
_sf = new StringFunctions()
}
proc ex0_loc() {local ix
ix = $1
_srs[ix] = new SectionRef()
_xloc.x[ix] = $2
_layer.x[ix] = $3
}
proc ex1_loc() {local ix
ix = $1
_srs[ix] = new SectionRef()
_xloc.x[ix] = $2
_layer.x[ix] = $3
}
proc add_submatrix() {
// Calculate area factors
_srs[$1].sec {
a = area(_xloc.x[$1])
if (a == 0) { a = 100 }
_afac.x[$1] = -100./a
}
_srs[$2].sec {
a = area(_xloc.x[$2])
if (a == 0) { a = 100 }
_afac.x[$2] = -100./a
}
// Fill elements and add to matrix
_g.x[$1][$1] += (-1.0/$3)*_afac.x[$1]
_g.x[$1][$2] += (1.0/$3)*_afac.x[$1]
_g.x[$2][$1] += (1.0/$3)*_afac.x[$2]
_g.x[$2][$2] += (-1.0/$3)*_afac.x[$2]
}
proc install() { local i
_sl = new SectionList()
for i=0, _ncellport-1 {
_srs[i].sec { _sl.append() }
}
_y.copy(_y0)
_lm = new LinearMechanism(_c, _g, _y, _y0, _b, _sl, _xloc, _layer)
}
endtemplate EphapDBA