Cerebellar purkinje cell (De Schutter and Bower 1994)

 Download zip file 
Help downloading and running models
Tutorial simulation of a cerebellar Purkinje cell. This tutorial is based upon a GENESIS simulation of a cerebellar Purkinje cell, modeled and fine-tuned by Erik de Schutter. The tutorial assumes that you have a basic knowledge of the Purkinje cell and its synaptic inputs. It gives visual insight in how different properties as concentrations and channel conductances vary and interact within a real Purkinje cell.
1 . De Schutter E, Bower JM (1994) An active membrane model of the cerebellar Purkinje cell. I. Simulation of current clamps in slice. J Neurophysiol 71:375-400 [PubMed]
2 . De Schutter E, Bower JM (1994) An active membrane model of the cerebellar Purkinje cell II. Simulation of synaptic responses. J Neurophysiol 71:401-19 [PubMed]
3 . Staub C, De Schutter E, Knöpfel T (1994) Voltage-imaging and simulation of effects of voltage- and agonist-activated conductances on soma-dendritic voltage coupling in cerebellar Purkinje cells. J Comput Neurosci 1:301-11 [PubMed]
4 . De Schutter E, Bower JM (1994) Simulated responses of cerebellar Purkinje cells are independent of the dendritic location of granule cell synaptic inputs. Proc Natl Acad Sci U S A 91:4736-40 [PubMed]
5 . De Schutter E (1998) Dendritic voltage and calcium-gated channels amplify the variability of postsynaptic responses in a Purkinje cell model. J Neurophysiol 80:504-19 [PubMed]
6 . Jaeger D, De Schutter E, Bower JM (1997) The role of synaptic and voltage-gated currents in the control of Purkinje cell spiking: a modeling study. J Neurosci 17:91-106 [PubMed]
7 . de Schutter E (1994) Modelling the cerebellar Purkinje cell: experiments in computo. Prog Brain Res 102:427-41 [PubMed]
8 . De Schutter E (1997) A new functional role for cerebellar long-term depression. Prog Brain Res 114:529-42 [PubMed]
9 . Steuber V, Mittmann W, Hoebeek FE, Silver RA, De Zeeuw CI, Häusser M, De Schutter E (2007) Cerebellar LTD and pattern recognition by Purkinje cells. Neuron 54:121-36 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Cerebellum Purkinje GABA cell;
Channel(s): I Na,p; I Na,t; I T low threshold; I p,q; I A; I K; I M; I K,Ca; I Sodium; I Calcium; I Potassium;
Gap Junctions:
Simulation Environment: GENESIS;
Model Concept(s): Activity Patterns; Dendritic Action Potentials; Active Dendrites; Detailed Neuronal Models; Tutorial/Teaching; Synaptic Integration;
Implementer(s): Cornelis, Hugo [hugo at bbf.uia.ac.be]; Airong, Dong [tard at fimmu.com];
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell; I Na,p; I Na,t; I T low threshold; I p,q; I A; I K; I M; I K,Ca; I Sodium; I Calcium; I Potassium;
// $Id: mapping.g 1.9 Thu, 04 Apr 2002 11:55:56 +0200 hugo $

//' Purkinje tutorial
//' (C) 1998-2002 BBF-UIA
//' see our site at http://www.bbf.uia.ac.be/ for more information regarding
//' the Purkinje cell and genesis simulation software.
//' functional ideas ... Erik De Schutter, erik@bbf.uia.ac.be
//' genesis coding ..... Hugo Cornelis, hugo@bbf.uia.ac.be
//' general feedback ... Reinoud Maex, Erik De Schutter

// mapping.g : mapping between dendrites and spines

int include_mapping

if ( {include_mapping} == 0 )

	include_mapping = 1

/// SH:	MappingCreate
/// PA:	path..:	path with spines
/// DE:	Create mapping elements between dendrites and spines
///	Mappings are created within the element /mappings

function MappingCreate(path)

str path

	//- go to specified path

	pushe {path}

	//- create a neutral mapping element

	create neutral /mappings

	//- add a field for number of mappings

	addfield /mappings mappingCount \
		-description "Number of mappings"

	//- loop over all compartments in the path

	str comp

	foreach comp ( {el ./#[][TYPE=compartment]} )

		//- index of the element defaults to zero

		int index = 0

		//- default : do not create a mapping for this element

		int bCreateMapping = 0

		//- get the tail of the element

		str tail = {getpath {comp} -tail}

		//- calculate the place of the index count

		// the quotes are not necessary but this way emacs is somewhat
		// more friendly when matching braces

		int indexOpen = {findchar {tail} "["}
		int indexClose = {findchar {tail} "]"}

		//- if this element has an index count

		if ({indexOpen} != -1)

			//- remove the index from the element

			str compNoIndex = {substring {tail} 0 {indexOpen - 1}}

			//- if it is not a spine

			if ({strcmp {compNoIndex} spine} != 0)

				//- calculate the index

				index = {substring {tail} \
						{indexOpen + 1} \
						{indexClose - 1}}

				//- remember to create a mapping

				bCreateMapping = 1

		//- if we should create a mapping

		if (bCreateMapping)

			//- if the mapping already exists

			if (! {exists /mappings/{compNoIndex}})

				//- create a neutral mapping element

				create neutral /mappings/{compNoIndex}

				//- add field for indices

				addfield /mappings/{compNoIndex} indexCount \
					-description "Number of elements - 1"

				//- add field for number of synapses

				addfield /mappings/{compNoIndex} synapseCount \
					-description "Number of synapses"

				//- add field for synapse begin

				addfield /mappings/{compNoIndex} synapseBegin \
					-description "Synapse begin index"

				//- add field for synapse end

				addfield /mappings/{compNoIndex} synapseEnd \
					-description "Synapse end index"

				//- clear the field

				setfield /mappings/{compNoIndex} \
					synapseCount 0

			//- set index field

			setfield /mappings/{compNoIndex} \
				indexCount {index}

	//- loop over all mappings with less than 30 indices

	foreach comp ( {el /mappings/#[][indexCount<30]} )

		//- delete the mapping element

		delete {comp}

	//- loop over all created mapping elements

	str mapping

	foreach mapping ( {el /mappings/#[]} )

		//- get tail of mapping

		str mappingTail = {getpath {mapping} -tail}

		//echo Source elements : {path}/{mappingTail}

		//- initialize synapse begin and end index
		// because the Genesis reference manual does not document the
		// ranges for the different numerical types (int, float),
		// I use here 32767 as it is certainly big enough

		int synapseBegin = 32767
		int synapseEnd = -1

		//- loop over the source array for this mapping

		str source

		foreach source ( {el {path}/{mappingTail}[]} )

			//- get the spine that gives messages to the element

			str spine = {getmsg {source} -outgoing -destination 7}

			//- get tail of spine

			str spineTail = {getpath {spine} -tail}

			//echo spine tail : {spineTail}

			//- if we are handling a spine

			if ( {strncmp {spineTail} "spine" 5} == 0 )

				//- create a neutral compartment for the spine

				create neutral \

				//echo {source} -> {spineTail}

				//- if this is the first spine

				if (spineTail == "spine")

					//- add index [0]

					spineTail = "spine[0]"


				//- get index of synapse

				int synapseIndex \
					= {substring \
						{spineTail} \
						6 \
						{{strlen {spineTail}} - 1}}

				//- if the synapse index is the lowest so far

				if (synapseIndex < synapseBegin)

					//- remember the synapse begin

					synapseBegin = {synapseIndex}

				//- if the synapse index is the highest so far

				if (synapseIndex > synapseEnd)

					//- remember synapse end

					synapseEnd = {synapseIndex}

		//- set field for number of synapses and synaptic range

		setfield {mapping} \
			synapseCount {NumberOfElements {mapping}/} \
			synapseBegin {synapseBegin} \
			synapseEnd {synapseEnd}

	//- go to previous current element


/// SH:	MappingDelete
/// PA:	path..:	path with spines
/// DE:	Delete mappings created by MappingCreate

function MappingDelete

	//- delete mappings element

	delete /mappings


Loading data, please wait...