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;
static char rcsid[] = "$Id: SynG_ron.c,v 1.0 1997/08/18 23:57:06 venkat Exp $";
#define VOLTAGE 0
#define CAF   1
#define CAS   2
#define POSTVOLTAGE 3
#define EK 4
#define TH 1000 

#include "SynGS_ext.h" 
static int      DEBUG_SynG = 0;
static double   savedata[3];

/*
 * Graded synaptic transmission for leech HN cells.
 * Needs presynaptic calcium currents and presynaptic voltage 
 * 1/15/98 Calculates channel current therefore needs postsynaptic voltage.
 * This is necessary in order to have an Ik field.
 * However, the simuation will work without it  because the postsynaptic 
 * compartment calculates the current based on Vm and reversal pot.
 * This object was modified from synchan.c 
 */

int SynG(channel,action)
   register struct SynG_type *channel;
   Action  *action;
{
   double  dt;
   double g;   
   int CAS_msg_in = 1,CAF_msg_in = 1,volt_msg_in = 1,pvolt_msg_in =1; /*CHECK*/
   MsgIn   *msg;
   double  V, ICaF, ICaS, I_Ca, Ainf, Atau, Binf, Btau, tmp, PV;
   int	n;
  
   if(Debug(DEBUG_SynG) > 1)
      ActionHeader("SynG",channel,action);
    
   SELECT_ACTION(action)
   {
   case INIT:
      channel->Gk = 0;
      break;
 
   case PROCESS:
      MSGLOOP(channel,msg)
         {
         case VOLTAGE:           /* get presynaptic membrane potential */
            V = MSGVALUE(msg,0);
	    break;

	 case CAF:               /* get presynaptic ICaF   */ 
            ICaF= MSGVALUE(msg,0);
            break;
	 
         case CAS:               /* get presynaptic ICaS   */
	    ICaS= MSGVALUE(msg, 0);
	    break;

         case POSTVOLTAGE:       /* get postsynaptic membrane potential */
            PV = MSGVALUE(msg,0);
            break;

         case EK:                /* reversal potential Ek */
            channel->Ek = MSGVALUE(msg,0);
            break;
	 }  

      /* hn cell's grad-synaptic transmission 
      ** calculate state variables and conductance */ 
      dt = Clockrate(channel);

      /* Ainf, Atau, and Binf are voltage dependent */  
      Ainf=0e-12+200e-12/(1+exp(-0.4*TH*(V+0.037)));/* 25e-12 to 200e-12 A*/
                                                      /* Ainf units =A */
      /*  Atau=.001+1.0/(1+exp(0.3*TH*(V+0.037))+ \
         exp(-1*TH*(V+0.045)));   */

      Atau=0.10+0.10/(1+exp(0.3*TH*(V+0.045))); /* units = Sec */ 

      Binf=2.0;   /* +8.0/(1+exp(0.21*TH*(V+.0436)));  2 to 10 Sec-1 */ 
             
      Btau=0.20;   /* units = Sec   */

      /* exponential euler */
      channel->B=(channel->B)*exp(-dt/Btau)+Binf*(1-exp(-dt/Btau));

      /* exponential euler */
      channel->A=(channel->A)*exp(-dt/Atau)+Ainf*(1-exp(-dt/Atau));

      I_Ca=ICaF+ICaS-(channel->A);  /* I in A */
      if (I_Ca < 0) I_Ca=0.0;

      /* exponential euler */
      channel->P=(channel->P)*exp(-(channel->B)*dt)+ \
      I_Ca/(channel->B)*(1-exp(-(channel->B)*dt));

      tmp=(channel->P)*(channel->P)*(channel->P);
      g = (channel->Gbar)*tmp/(tmp+(channel->C)); /* C=1e-31 */


      /* calculate the transmembrane current using the postsynaptic Vm */
      channel->Gk = g;
      channel->Ik = (channel->Ek - PV) * g;
      break;      /* end of case PROCESS */

   case RESET:
      channel->Gk  = 0;
      channel->Ik  = 0;
      channel->A   = 0;
      channel->P   = 0;
      break;

   case CHECK:
      volt_msg_in = 0;
      CAF_msg_in = 0;
      CAS_msg_in = 0;
      pvolt_msg_in = 0;

      MSGLOOP(channel,msg)
         {
	 case VOLTAGE: 
	    volt_msg_in = 1;
	    break;
          
	 case CAF:            
            CAF_msg_in = 1;
            break;
	 
         case CAS:            
	    CAS_msg_in = 1;
	    break;

         case POSTVOLTAGE:
            pvolt_msg_in = 1;
            break;

	 }  

         if (volt_msg_in == 0)
	    ErrorMessage("SynG","No membrane potential.", channel);
	   
         if (CAF_msg_in == 0)
	    ErrorMessage("SynG","No ICaF.", channel);

         if (CAS_msg_in == 0)
	    ErrorMessage("SynG","No ICaS.", channel);

         if (pvolt_msg_in == 0)
            ErrorMessage("SynG","No postsynaptic memb. potential.", channel);
        
         if ((channel->Gbar) < 0)
            ErrorMessage("SynG","Gbar must be >= 0.", channel);
        

      break; /* CHECK */  

case SAVE2:
      savedata[0] = (double)(channel->A);
      savedata[1] = (double)(channel->P);
      n=2;
      fwrite(&n,sizeof(int),1,(FILE*)action->data);
      fwrite(savedata,sizeof(double),2,(FILE*)action->data);
      break; /* SAVE2 */

case RESTORE2:
	fread(&n,sizeof(int),1,(FILE*)action->data);
	if (n != 2) {
	    ErrorMessage("SynG_ron","Invalid savedata length",channel);
	    return(n);
	}
	fread(savedata,sizeof(double),2,(FILE*)action->data);
	channel->A = savedata[0];
	channel->P = savedata[1];
	break;  /* RESTORE2 */

default:
	InvalidAction("SynG_ron", channel ,action);
	break;

 
   }
      
      return (0);
}
















Loading data, please wait...