Two cells with mutual excitation

Model

Simulation

This exercise shows how to create cell objects and connect them together. One strategy is to 1) define the types of cells, 2) create each cell in the network, 3) connect the cells together.

Cell template

begintemplate Cell
	public soma, syn
	create soma
	objref syn
	proc init() {
		create soma
		soma {
			diam = 20
			L = 20
			insert hh
			syn = new ExpSyn(.5)
		}
	}
endtemplate Cell
Enclosing a general cell specification within a Template or class allows one to create many instances of the cell. It is up to the simulation creator to determine a convenient policy for parameterizing the cell. E.g. create the cell and then modify parameters, or parameterize the template and specify them as arguments when a cell instance is created. One important organizing principle will often be the 3-d position of the cell.

Recall from exercise 12 that the ExpSyn "synapse" can have any number of inputs with different weights. So it is convenient with this single segment model to create a single synapse when the cell is created. Note that two cells can be connected only if there is a target point process on the post synaptic cell which defines what happens (eg time course of conductance change) when an event arrives through the connection. If cells have complex morphology, then it may make sense to create a synapse only when a connection is made to a location that does not have one.

Cell creation

// create two cells

objref cell[2]
for i=0,1 cell[i] = new Cell()

access cell[0].soma
At this point we have two cells each with an ExpSyn synapse but they do not interact.

Connections

There are many ways to approach connection management. For example, one could declare a pre and/or post connection list in the template for each cell. The choice below is to keep the cells and connections separate and provide a procedure which creates a connection and appends it to a single list. In either case, note that a connection continues to exist only if there is some reference to it either in a list or objref variable.
// connect the cells together

objref ncl = new List()
proc netcon() { // $o1 = source cell  $o2 = target cell
	$o1.soma ncl.append(new NetCon(&v(.5), $o2.syn, -10, .001, 3))
}

netcon(cell[0], cell[1))
netcon(cell[1], cell[2])
With this policy, our authoritative list of connections is the ncl list.
// show the connections
xpanel("NetCon Info")
for i=0, nclist.count-1 {
	tobj = nclist.object(i)
	sprint(tstr, "%s -> %s -> %s", tobj.precell, tobj, tobj.postcell)
	xlabel(tstr)
	xpvalue("weight", &tobj.weight, 1)
	xpvalue("delay", &tobj.delay, 1)
}
xpanel()
It's one thing to manage two connections, quite another to manage thousands. Some help in this task is provided by functions that return various kinds of NetCon lists, e. g. all the NetCons that connect to the same postcell, post synaptic point process, precell, etc. However, at this time there are no generic gui tools to view or manage networks and it is necessary to craft viewing, control, and management routines based on the details of the particular network being investigated.

Exercises

Run the above model (in the net1 directory) with both connection weights equal to 0.003 .

Reduce one of the weights and then the other to 0.002 . Since the cells are identical, why are the results different?


NEURON summer course
Copyright © 1998, 1999 by N.T. Carnevale and M.L. Hines, all rights reserved.