Leech heart interneuron network model (Hill et al 2001, 2002)

 Download zip file 
Help downloading and running models
Accession:19698
We have created a computational model of the timing network that paces the heartbeat of the medicinal leech, Hirudo medicinalis. In the intact nerve cord, segmental oscillators are mutually entrained to the same cycle period. Although experiments have shown that the segmental oscillators are coupled by inhibitory coordinating interneurons, the underlying mechanisms of intersegmental coordination have not yet been elucidated. To help understand this coordination, we have created a simple computational model with two variants: symmetric and asymmetric. See references for more details. Biologically realistic network models with two, six, and eight cells and a tutorial are available at the links to Calabrese's web site below.
References:
1 . Hill AA, Masino MA, Calabrese RL (2002) Model of intersegmental coordination in the leech heartbeat neuronal network. J Neurophysiol 87:1586-602 [PubMed]
2 . Hill AA, Lu J, Masino MA, Olsen OH, Calabrese RL (2001) A model of a segmental oscillator in the leech heartbeat neuronal network. J Comput Neurosci 10:281-302 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Leech;
Cell Type(s): Leech heart interneuron;
Channel(s): I Na,p; I Na,t; I K; I h; I Calcium; I Potassium;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: GENESIS;
Model Concept(s): Activity Patterns; Bursting; Oscillations; Spatio-temporal Activity Patterns; Tutorial/Teaching; Action Potentials; Invertebrate;
Implementer(s): Hill, Andrew A [aavhill at yahoo.com];
Search NeuronDB for information about:  I Na,p; I Na,t; I K; I h; I Calcium; I Potassium;
#include <stdio.h>
#include "SynGS_ext.h"
#include "leech_g@.h"

STARTUP_leech() {
  GenesisObject* object;
  GenesisObject  tobject;
  char*          slotnames[50];
  char*          argv[50];

  argv[0] = "newclass";
  argv[1] = "SynGSclass";
  do_add_class(2, argv);

  /* Definition of object SynS_object */
  memset(&tobject,0,sizeof(GenesisObject));
  tobject.name = "SynS_object";
  tobject.type = "SynS_type";
  tobject.size = sizeof(struct SynS_type);
  { extern int SynS_f(); tobject.function = SynS_f; HashFunc("SynS_f", SynS_f, "int"); }
  ObjectAddClass(&tobject,ClassID("SynGSclass"),CLASS_PERMANENT);
  ObjectAddClass(&tobject,ClassID("device"),CLASS_PERMANENT);
  AddDefaultFieldList(&tobject);
  tobject.defaults = (Element*) calloc(1, tobject.size);
  AddObject(&tobject);
  object = GetObject("SynS_object");
  object->defaults->object = object;
  object->defaults->name = CopyString("SynS_object");
  object->author = "ron  lab, 3/97 ";
  { extern int SynS_f(); AddActionToObject(object, "INIT", SynS_f, 0) ? 0 : (Error(), printf("adding action 'INIT' to object 'SynS_object'\n")); HashFunc("SynS_f", SynS_f, "int"); }
  { extern int SynS_f(); AddActionToObject(object, "PROCESS", SynS_f, 0) ? 0 : (Error(), printf("adding action 'PROCESS' to object 'SynS_object'\n")); HashFunc("SynS_f", SynS_f, "int"); }
  { extern int SynS_f(); AddActionToObject(object, "RESET", SynS_f, 0) ? 0 : (Error(), printf("adding action 'RESET' to object 'SynS_object'\n")); HashFunc("SynS_f", SynS_f, "int"); }
  { extern int SynS_f(); AddActionToObject(object, "CHECK", SynS_f, 0) ? 0 : (Error(), printf("adding action 'CHECK' to object 'SynS_object'\n")); HashFunc("SynS_f", SynS_f, "int"); }
  { extern int SynS_f(); AddActionToObject(object, "SAVE2", SynS_f, 0) ? 0 : (Error(), printf("adding action 'SAVE2' to object 'SynS_object'\n")); HashFunc("SynS_f", SynS_f, "int"); }
  { extern int SynS_f(); AddActionToObject(object, "RESTORE2", SynS_f, 0) ? 0 : (Error(), printf("adding action 'RESTORE2' to object 'SynS_object'\n")); HashFunc("SynS_f", SynS_f, "int"); }
  slotnames[0] = "voltage";
  MsgListAdd(object, "VOLTAGE", SynS_object_VOLTAGE, slotnames, 1);
  SetFieldListProt(object, "m_SynS", FIELD_READWRITE);
  SetFieldListDesc(object, "m_SynS", "modulation factor");
  SetFieldListProt(object, "A", FIELD_READWRITE);
  SetFieldListDesc(object, "A", "A");
  SetFieldListProt(object, "B", FIELD_READWRITE);
  SetFieldListDesc(object, "B", "B");
  SetFieldListProt(object, "C", FIELD_READWRITE);
  SetFieldListDesc(object, "C", "C");
  SetFieldListProt(object, "D", FIELD_READWRITE);
  SetFieldListDesc(object, "D", "D");
  SetFieldListProt(object, "E", FIELD_READWRITE);
  SetFieldListDesc(object, "E", "E");
  SetFieldListProt(object, "Ek", FIELD_HIDDEN);
  SetFieldListDesc(object, "Ek", "Ek not used ");
  SetFieldListProt(object, "Ik", FIELD_HIDDEN);
  SetFieldListDesc(object, "Ik", "Ik not used ");
  SetFieldListProt(object, "Gk", FIELD_HIDDEN);
  SetFieldListDesc(object, "Gk", "Gk not used ");
  SetFieldListProt(object, "activation", FIELD_HIDDEN);
  SetFieldListDesc(object, "activation", "activation not used");
  object->description = "a new object for voltage-dependent modulation \nof spike-mediated synaptic transmission.\nModulation is a sigmoidal function of membrane\npotential given by \nModInf=A+B/(1+exp(C*(Vm+D)))\nE is the time constant\n";
  FieldListMakePermanent(object);
  MsgListMakePermanent(object);

  /* Definition of object SynG_object */
  memset(&tobject,0,sizeof(GenesisObject));
  tobject.name = "SynG_object";
  tobject.type = "SynG_type";
  tobject.size = sizeof(struct SynG_type);
  { extern int SynG(); tobject.function = SynG; HashFunc("SynG", SynG, "int"); }
  ObjectAddClass(&tobject,ClassID("SynGSclass"),CLASS_PERMANENT);
  ObjectAddClass(&tobject,ClassID("device"),CLASS_PERMANENT);
  AddDefaultFieldList(&tobject);
  tobject.defaults = (Element*) calloc(1, tobject.size);
  AddObject(&tobject);
  object = GetObject("SynG_object");
  object->defaults->object = object;
  object->defaults->name = CopyString("SynG_object");
  object->author = "ron  lab,3/97 ";
  { extern int SynG(); AddActionToObject(object, "INIT", SynG, 0) ? 0 : (Error(), printf("adding action 'INIT' to object 'SynG_object'\n")); HashFunc("SynG", SynG, "int"); }
  { extern int SynG(); AddActionToObject(object, "PROCESS", SynG, 0) ? 0 : (Error(), printf("adding action 'PROCESS' to object 'SynG_object'\n")); HashFunc("SynG", SynG, "int"); }
  { extern int SynG(); AddActionToObject(object, "RESET", SynG, 0) ? 0 : (Error(), printf("adding action 'RESET' to object 'SynG_object'\n")); HashFunc("SynG", SynG, "int"); }
  { extern int SynG(); AddActionToObject(object, "CHECK", SynG, 0) ? 0 : (Error(), printf("adding action 'CHECK' to object 'SynG_object'\n")); HashFunc("SynG", SynG, "int"); }
  { extern int SynG(); AddActionToObject(object, "SAVE2", SynG, 0) ? 0 : (Error(), printf("adding action 'SAVE2' to object 'SynG_object'\n")); HashFunc("SynG", SynG, "int"); }
  { extern int SynG(); AddActionToObject(object, "RESTORE2", SynG, 0) ? 0 : (Error(), printf("adding action 'RESTORE2' to object 'SynG_object'\n")); HashFunc("SynG", SynG, "int"); }
  slotnames[0] = "voltage";
  MsgListAdd(object, "VOLTAGE", SynG_object_VOLTAGE, slotnames, 1);
  slotnames[0] = "FastCa";
  MsgListAdd(object, "CAF", SynG_object_CAF, slotnames, 1);
  slotnames[0] = "SlowCa";
  MsgListAdd(object, "CAS", SynG_object_CAS, slotnames, 1);
  slotnames[0] = "postvoltage";
  MsgListAdd(object, "POSTVOLTAGE", SynG_object_POSTVOLTAGE, slotnames, 1);
  SetFieldListProt(object, "A", FIELD_READWRITE);
  SetFieldListDesc(object, "A", "shunts effective Ca current");
  SetFieldListProt(object, "B", FIELD_READWRITE);
  SetFieldListDesc(object, "B", "buffering parameter ");
  SetFieldListProt(object, "P", FIELD_READWRITE);
  SetFieldListDesc(object, "P", "Ca factor governing transmitter release");
  SetFieldListProt(object, "C", FIELD_READWRITE);
  SetFieldListDesc(object, "C", "limit parameter(limits release to Gbar)");
  SetFieldListProt(object, "R", FIELD_READWRITE);
  SetFieldListDesc(object, "R", "release = p^3/(p^3+C)");
  SetFieldListProt(object, "Gbar", FIELD_READWRITE);
  SetFieldListDesc(object, "Gbar", "maximal conductance");
  SetFieldListProt(object, "A1", FIELD_READWRITE);
  SetFieldListDesc(object, "A1", "A1 in Ainf=A1+A2/(1+exp(A3+(Vm+A4)))");
  SetFieldListProt(object, "A2", FIELD_READWRITE);
  SetFieldListDesc(object, "A2", "A2");
  SetFieldListProt(object, "A3", FIELD_READWRITE);
  SetFieldListDesc(object, "A3", "A3");
  SetFieldListProt(object, "A4", FIELD_READWRITE);
  SetFieldListDesc(object, "A4", "A4");
  SetFieldListProt(object, "A5", FIELD_READWRITE);
  SetFieldListDesc(object, "A5", "A5 is the time constant");
  SetFieldListProt(object, "Ik", FIELD_READONLY);
  SetFieldListDesc(object, "Ik", "Ik");
  SetFieldListProt(object, "activation", FIELD_HIDDEN);
  SetFieldListDesc(object, "activation", "activation not used");
  object->description = "A new object specifically for\ngraded synaptic inhibition in the leech\n";
  FieldListMakePermanent(object);
  MsgListMakePermanent(object);

/* Script variables */

} /* STARTUP_leech */

Loading data, please wait...