Synaptic integration of an identified nonspiking interneuron in crayfish (Takashima et al 2006)

 Download zip file 
Help downloading and running models
Accession:84599
This GENESIS simulation shows how a single or compound excitatory synaptic potential evoked by mechanosensory stimulation spreads over the dendrites of the LDS interneuron that is one of the identified nonspiking interneurons in the central nervous system of crayfish Procambarus clarkii. The model is based on physiological experiments carried out by Akira Takashima using single-electrode voltage clamp techniques and also 3-D morphometry of the interneuron carried out by Ryou Hikosaka using confocal laser scanning microscopic techniques. The physiological and morphological studies were coordinated by Masakazu Takahata.
Reference:
1 . Takashima A, Hikosaka R, Takahata M (2006) Functional significance of passive and active dendritic properties in the synaptic integration by an identified nonspiking interneuron of crayfish. J Neurophysiol 96:3157-69 [PubMed]
2 . Takahata M, Takashima A, Hikosaka R (2000) Information processing by nonspiking interneurons: passive and active properties of dendritic membrane determine synaptic integration. Biosystems 58:143-9 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Dendrite;
Brain Region(s)/Organism:
Cell Type(s): Crayfish identified nonspiking interneuron;
Channel(s): I A; I K; I Potassium;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: GENESIS;
Model Concept(s): Influence of Dendritic Geometry; Invertebrate; Synaptic Integration;
Implementer(s): Takahata, Masakazu [takahata at sci.hokudai.ac.jp];
Search NeuronDB for information about:  I A; I K; I Potassium;
//genesis - TEST.g - GENESIS Version 2.1
// This file was developed by De Schutter, Cornelis and Maex
// and modified by     
//       Akira Takashima.
//       Department of Biological Sciences
//       Faculry of Science
//       Hokkaido University
//       Sapporo Japan
//
//       Last update on 22 Jan. 2007





// xgraph.g : xgraph functionality



//v default color for plots

int iDefaultPlotColor = 19 //38

//v bool for communication between XGraphPlotCompartment and others

int bXGraphPlotCompartmentResult = 0

//v normal path for xcell script

str cbXCell


///
/// SH:	XGraphPlotColor
///
/// RE:	color for current plot
///
/// DE:	Give color for current plot
///

function XGraphPlotColor

	//- get next color

	int color = {getfield /xgraphs/graph cNextColor}

	//- modulo 64 to get a legal value

	color = {color} % 64

	//- return result

	return {color}
end


///
/// SH:	XGraphNextColor
///
/// RE:	color for current plot
///
/// DE:	Give color for next plot
///

function XGraphNextColor

	//- get next available color

	int color = {getfield /xgraphs/graph cNextColor}

	//- modulo 64 to get a legal value

	color = {color +19} % 64

	//- increment the color count

	setfield /xgraphs/graph cNextColor {color}

	//- return result

	return {color}
end


///
/// SH:	XGraphPlotTitle
///
/// PA:	comp..:	compartment to be plotted
///	source:	registered output source
///	value.:	registered output value
///	flags.:	registered output flags
///
/// RE:	title for a plot
///
/// DE:	Give title for a plot for given parameters
///

function XGraphPlotTitle(comp,source,value,flags)

str comp
str source
str value
int flags

	//- get tail of compartment

	str compTail = {getpath {comp} -tail}

	//- default plot title is without index

	str plotTitle = {compTail}

	//- default index is none

	str index = ""

	//- find beginning of index

	int iBegin = {findchar {compTail} "["}

	//- if compartment has an index

	if (iBegin != -1)

		//- get index from registered compartement

		index = {substring \
				{compTail} \
				{iBegin + 1} \
				{{findchar {compTail} "]"} - 1}}

		//- set title for plot

		plotTitle = {substring {compTail} 0 {iBegin - 1}} \
				@ "_" \
				@ {index}
	end

	//- if output source is given

	if (source != "")

		//- if first char of output source is '/'

		if ({substring {source} 0 0} == "/")

			//- add output source minus '/' to plot title

			plotTitle = {plotTitle} \
					@ "_" \
					@ {substring {source} 1}

		//- else

		else
			//- add output source to plot title

			plotTitle = {{plotTitle} @ "_" @ {source}}
		end
					
	end

	// return plot title with added value

	return {plotTitle} @ "_" @ {value}

	//- return plot title

	return {plotTitle}
end




///
/// SH:	XGraphPlotCompartment
///
/// PA:	path..:	path with solver
///	comp..:	compartment to be plotted
///	color.:	color for new plot
///
/// RE:	1 if successfull
///	0 if failed
///
/// DE:	Add a plot for the given compartment, reset the simulation
///	The registered xcell output parameters are considered for setting up
///	the message to the graph.
///

function XGraphPlotCompartment(path,comp,color)

str path
str comp
int color

	//- set default result : success

	int bResult = 1

	//- get the registered LDS output

	str xcOutput = {getfield /LDS output}

	//- get the registered LDS output source

	str xcOutputSource = {getfield /LDS outputSource}

	//- get the registered LDS output value

	str xcOutputValue = {getfield /LDS outputValue}

	//- get the registered LDS output flags

	int xcOutputFlags = 1 // {getfield /LDS outputFlags}

	//- get the registered LDS output description

	str xcOutputDescription = {getfield /LDS outputDescription}

	//- get the registered LDS channel mode

	str xcChannelMode = {getfield /LDS channelMode}

	//- get xcell field for registering boundary element

	str xcBoundElement = {getfield /LDS boundElement}

	//- if registered output value is different from LDS output value

	if ({xcOutputValue} != {getfield /xgraphs outputValue})

		//- reset the graph

		callfunc XGraphReset
	end

	//- register new output

	setfield /xgraphs \
		output {xcOutput}

	//- register new output source

	setfield /xgraphs \
		outputSource {xcOutputSource}

	//- register new output value

	setfield /xgraphs \
		outputValue {xcOutputValue}

	//- register new output flags

	setfield /xgraphs \
		outputFlags {xcOutputFlags}

	//- register new output description

	setfield /xgraphs \
		outputDescription {xcOutputDescription}

	//- register new channel mode

	setfield /xgraphs \
		channelMode {xcChannelMode}

	//- register new boundary element

	setfield /xgraphs \
		boundElement {xcBoundElement}

	// reset parameters to compartmental voltage

	xcOutputSource = ""
	xcOutputValue = "Vm"
	xcOutputFlags = 1

	//- get tail of compartment

	str compTail = {getpath {comp} -tail}

	//- get a plot title

	str plotTitle = {XGraphPlotTitle \
				{comp} \
				{xcOutputSource} \
				{xcOutputValue} \
				{xcOutputFlags}}

	//- if flags say compartmental output

	if (xcOutputFlags == 1)

		//- if the specified element exists

		if ( {exists {comp} {xcOutputValue}} )

			//- give an informational message

			echo "Adding plot for "{comp}", " \
				"source is '(compartment)', " \
				"value is '"{xcOutputValue}"'."

			//- add message from solver to graph

			addmsg {path}/solve /xgraphs/graph \
				PLOT \
					{findsolvefield \
						{path}/solve \
						{comp} \
						{xcOutputValue}} \
					*{plotTitle} \
					*{color}

			//echo {comp} {compTail} {index}
			//echo {plotTitle}"_"{xcOutputValue}

		//- else

		else
			//- give an informational message

			echo "No plot for "{comp}", " \
				"source is '(compartment)', " \
				"value is '"{xcOutputValue}"'."
			echo "The element or field does not exist."

			//- set result

			bResult = 0
		end


	//- else we have 'normal' compartmental output

	else

		//- if the specified element exists

		if ( {exists {comp}/{xcOutputSource} {xcOutputValue}} )

			//- give an informational message

			echo "Adding plot for "{comp}", " \
				"source is '"{xcOutputSource}"', " \
				"value is '"{xcOutputValue}"'."

			//- add message from solver to graph

			addmsg {path}/solve /xgraphs/graph \
				PLOT \
					{findsolvefield \
						{path}/solve \
						{comp}/{xcOutputSource} \
						{xcOutputValue}} \
					*{plotTitle} \
					*{color}

			//echo {comp} {compTail} {index}
			//echo {plotTitle}"_"{xcOutputValue}

		//- else

		else
			//- give an informational message

			echo "No plot for "{comp}", " \
				"source is '"{xcOutputSource}"', " \
				"value is '"{xcOutputValue}"'."
			echo "The element or field does not exist."

			//- set result

			bResult = 0
		end
	end

	//- if adding plot was successfull

/*	if (bResult)

		//- reset added plot (makes it visible)

		call /xgraphs/graph/{plotTitle} RESET
	end
*/
	//- set global result

	bXGraphPlotCompartmentResult = {bResult}

	//- return result

	return {bResult}
end


///
/// SH:	XGraphRemoveCompartment
///
/// PA:	path..:	path with solver
///	comp..:	compartment to be removed from plot list
///
/// DE:	Remove the plot for the given compartment
///

function XGraphRemoveCompartment(path,comp)

str path
str comp

	//- get the registered xcell output source

	str xcOutputSource = {getfield /xcell outputSource}

	//- get the registered xcell output value

	str xcOutputValue = {getfield /xcell outputValue}

	//- get the registered xcell output flags

	int xcOutputFlags = {getfield /xcell outputFlags}

	//- get a plot title

	str plotTitle = {XGraphPlotTitle \
				{comp} \
				{xcOutputSource} \
				{xcOutputValue} \
				{xcOutputFlags}}

	//- if the plot exists

	if ( {exists /xgraphs/graph/{plotTitle}} )

		//- give diagnostics

		echo "Removing plot "{plotTitle}

		//- remove the plot

		delete /xgraphs/graph/{plotTitle}

		//- reset the graph

		call /xgraphs/graph RESET

	//- else

	else
		//- give diagnostics

		echo "No plot named "{plotTitle}
	end
end


///
/// SH: XGraphClear
///
/// PA: path..:	parent element to clear all graphs for
///
/// DE:	clear all graphs within the given element tree
///

function XGraphClear(path)

str path

	//- give diagnostics

	echo "Removing all plots"

	//v old status of overlay

	int overlayOld

	//- loop over all plots in the given tree

	str plot

	foreach plot ( {el {path}/##[][TYPE=xplot]} )

		//- delete the plot

		delete {plot}
	end

	//- loop over all graphs in the given tree

	str graph

	foreach graph ( {el {path}/##[][TYPE=xgraph]} )

		//- push the element

		pushe {graph}

		//- remember status of overlay field

		overlayOld = {getfield . overlay}

		//- unset overlay field

		setfield . overlay 0

		//echo RESET for {el .} with overlay {getfield . overlay}

		//- reset the graph

		call . RESET

		//- reset overlay field to previous state

		setfield . overlay {overlayOld}

		//- pop previous current element

		pope
	end

	//- remove all electrodes

	callfunc XCellRemoveElectrodes
end



///
/// SH:	XGraphHideAddPlot
///
/// DE:	Hide the add plot window
///	Resets the xcell call back
///

function XGraphHideAddPlot

	//- restore field for xcell script

	setfield /LDS/draw/xcell1 \
		script {cbXCell}

	//- hide add plot window

	xhide /xgraphs/addPlotForm
end


///
/// SH:	XGraphSetAddPlot
///
/// PA:	name..:	name of compartment to add plot for
///
/// DE:	Add plot for specified compartment name
///	The field and subelement to output are taken from xgraph output mode
///	If the function is successfull, the add plot window will hide.
///

function XGraphSetAddPlot(name)

str name

	//- for empty given name

	if ( {name} == "" )

		//- just return

		return
	end

	//- if name is relative

	if ( {substring {name} 0 0} != "/" )

		//- add cell path to compartment name

		name = {"/cell" @ "/" @ "dend["@{name} @ "]"}
	end

	//- get tail of string

	str tail = {getpath {name} -tail}

	//- find opening bracket

	int iOpen = {findchar {tail} "["}

	//- if name has index

	if ( iOpen != -1 )

		//- find closing bracket

		int iClose = {findchar {tail} "]"}

		//- get index from tail of name

		int iIndex = {substring {tail} {iOpen + 1} {iClose - 1}}

		//- if index count of tail is zero

		if ( iIndex == 0 )

			//- delete index of tail of name

			tail = {substring {tail} 0 {iOpen - 1}}

			//- construct new name

			name = {{getpath {name} -head} @ {tail}}
		end
	end

	// if specified compartment exists

	//if ( {exists {name}} )

	//- call callback script for xcell

	callfunc XCellCBAddPlot {name}

	// else

	//else

		// should inform the user here

	//end
end


///
/// SH:	XGraphShowAddPlot
///
/// DE:	Popup add plot window
///	This function messes with the xcell call back script
///

function XGraphShowAddPlot

	//- store field for xcell script

	cbXCell = {getfield /LDS/draw/xcell1 script}

	//- set field for xcell script

	setfield /LDS/draw/xcell1 \
		script "XCellCBAddPlot <v>"

	//- pop add plot form

	xshow /xgraphs/addPlotForm
end


///
/// SH:	XGraphToggleOverlay
///
/// PA:	widget:	name of widget to toggle overlay for
///	state.:	new state for overlay field
///
/// DE:	Toggle the overlay field for the given widget
///

function XGraphToggleOverlay(widget,state)

str widget
str state

	//- if xoverlay element exists

	if ({exists {widget}/xoverlay})

		//- delete the xoverlay element

		delete {widget}/xoverlay
	end

	//- set the overlay field for the given widget

	setfield {widget} overlay {state}
end


///
/// SH:	XGraphCreate
///
/// DE:	Creates a graph and parent from element.
///	Adds a field for allocation of colors (named cNextColor)
///
///

function XGraphCreate

	//- create container form

	create xform /xgraphs [750, 0, 500, 420]

	//- add field for output

	addfield /xgraphs \
		output -description "Output (toggled widget)"

	//- add field for output source

	addfield /xgraphs \
		outputSource -description "Output source"

	//- add field for output value

	addfield /xgraphs \
		outputValue -description "Output value"

	//- add field for output flags

	addfield /xgraphs \
		outputFlags -description "Output flags"

	//- add field for output description

	addfield /xgraphs \
		outputDescription -description "Output description"

	//- add field for channel mode

	addfield /xgraphs \
		channelMode -description "Channel display mode"

	//- add field for registering boundary element

	addfield /xgraphs \
		boundElement -description "Element with display boundaries"

	//- make the form the current element

	pushe /xgraphs

	//- create graph within the form

	create xgraph graph [1%, 2%, 99%, 90%] \
		-title "Membrane Potential"

	//- set appropriate dimensions for voltage

	setfield ^ \
		xmin 0 \
		xmax 100 \
		ymin -100 \
		ymax 0 \
		bg white \
		XUnits "Time (msec)" 

	//- add a button to clear the graph

	create xbutton clear \
		-xgeom 1% \
		-ygeom 0:graph \
		-wgeom 20% \
		-title "Clear graph" \
		-script "XGraphClear /xgraphs"

	//- add a button to add a plot

	create xbutton addPlot \
		-xgeom 0:last.right \
		-ygeom 0:graph \
		-wgeom 20% \
		-title "Add plot" \
		-script "XGraphShowAddPlot"

	//- add toggle for overlay

	create xtoggle overlay \
		-xgeom 0:last.right \
		-ygeom 0:graph \
		-wgeom 20% \
		-title "" \
		-script "XGraphToggleOverlay /xgraphs/graph <v>"

	//- set on/off labels

	setfield overlay \
		offlabel "Overlay off" \
		onlabel "Overlay on"

	//- add an initialized field for allocated colors

	addfield /xgraphs/graph cNextColor -descr "next color to allocate"
	setfield /xgraphs/graph cNextColor {iDefaultPlotColor}

	//- set clock to use for graph

	useclock /xgraphs/graph 3

	//- create a form for setting scales

	create xform addPlotForm [600,150,350,190]

	//- make it the current element

	pushe ^

	//- create label with header

	create xlabel heading \
		-label "Add plot to graph"

	//- create labels with info msgs and dialog for compartment name input

	create xlabel info1 \
		-ygeom 4:last.bottom \
		-title "Select an area from the LDS cell"
	create xlabel info2 \
		-ygeom 2:last.bottom \
		-title "to plot its output value in the graph,"
	create xlabel info3 \
		-ygeom 2:last.bottom \
		-wgeom 100% \
		-title "or type a compartment number below :"
	create xdialog compartmentname \
		-wgeom 100% \
		-label "Compartment number to plot : " \
		-script "XGraphSetAddPlot <v>"
	create xlabel info4 \
		-ygeom 2:last.bottom \
		-title ""

	//- create cancel button

	create xbutton done \
		-title "Done" \
		-script "XGraphHideAddPlot"

	//- pop previous element

	pope
end


///
/// SH:	XGraphReset
///
/// DE:	Clear the graph and reset the title
///	This functions relies on an xcell form /xcell that has fields for
///	registering output source, value etc.
///

function XGraphReset

	//- clear the graph

	XGraphClear /xgraphs

	//- get the registered LDS output

	str xcOutput = {getfield /LDS output}

	//- get the registered LDS output source

	str xcOutputSource = {getfield /LDS outputSource}

	//- get the registered LDS output value

	str xcOutputValue = {getfield /LDS outputValue}

	//- get the registered LDS output flags

	int xcOutputFlags = {getfield /LDS outputFlags}

	//- get the registered LDS output description

	str xcOutputDescription = {getfield /LDS outputDescription}

	//- get the registered LDS channel mode

	str xcChannelMode = {getfield /LDS channelMode}

	//- get xcell field for registering boundary element

	str xcBoundElement = {getfield /LDS boundElement}

	//- register new output

	setfield /xgraphs \
		output {xcOutput}

	//- register new output source

	setfield /xgraphs \
		outputSource {xcOutputSource}

	//- register new output value

	setfield /xgraphs \
		outputValue {xcOutputValue}

	//- register new output flags

	setfield /xgraphs \
		outputFlags {xcOutputFlags}

	//- register new output description

	setfield /xgraphs \
		outputDescription {xcOutputDescription}

	//- register new channel mode

	setfield /xgraphs \
		channelMode {xcChannelMode}

	//- register new boundary element

	setfield /xgraphs \
		boundElement {xcBoundElement}

	//- if output is comp. Vm

	if (xcOutputFlags == 1)

		//- set title

		setfield /xgraphs/graph \
			title "Compartmental voltage"

	end

	//- set new axes

	callfunc XGraphSetBoundaries {xcBoundElement}

	//- register next output mode

	XGraphNextPlotMode {xcOutputValue}

	// reset next plot color

	//! don't do this, read the comments in XCellCBAddPlot why.

	//setfield /xgraphs/graph cNextColor {iDefaultPlotColor}
end