Computer model of clonazepam`s effect in thalamic slice (Lytton 1997)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:12631
Demonstration of the effect of a minor pharmacological synaptic change at the network level. Clonazepam, a benzodiazepine, enhances inhibition but is paradoxically useful for certain types of seizures. This simulation shows how inhibition of inhibitory cells (the RE cells) produces this counter-intuitive effect.
Reference:
1 . Lytton WW (1997) Computer model of clonazepam's effect in thalamic slice. Neuroreport 8:3339-43 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Thalamus;
Cell Type(s): Thalamus geniculate nucleus (lateral) principal neuron; Thalamus reticular nucleus cell;
Channel(s): I Na,t; I T low threshold; I K; I CAN;
Gap Junctions:
Receptor(s): GabaA; Gaba;
Gene(s):
Transmitter(s): Gaba;
Simulation Environment: NEURON;
Model Concept(s): Activity Patterns; Bursting; Therapeutics; Epilepsy; Calcium dynamics;
Implementer(s): Lytton, William [billl at neurosim.downstate.edu];
Search NeuronDB for information about:  Thalamus geniculate nucleus (lateral) principal neuron; Thalamus reticular nucleus cell; GabaA; Gaba; I Na,t; I T low threshold; I K; I CAN; Gaba;
/
lytton97b
README
AMPA.mod
calciumpump_destexhe.mod *
GABAA.mod
GABAB1.mod
GABALOW.mod
HH_traub.mod *
IAHP_destexhe.mod
ICAN_destexhe.mod
ICAN_voltdep.mod
Ih_old.mod *
IT_wang.mod
IT2_huguenard.mod
NMDA.mod
passiv.mod *
pregen.mod *
presyn.mod *
pulse.mod
rand.mod
bg.inc *
boxes.hoc
ctl.dat
ctlnew.dat
czp.dat
czpnew.dat
declist.hoc *
decvec.hoc *
default.hoc *
disp.hoc
Fig3.gif
Fig4.gif
geom.hoc
grvec.hoc
init.hoc
labels.hoc
local.hoc
mod_func.c
mosinit.hoc
network.hoc
neurrep8
nrnoc.hoc
params.hoc
presyn.inc *
queue.inc *
run.hoc
show.hoc
simctrl.hoc *
sns.inc *
snsarr.inc
snscode.hoc
snsgr.hoc
snshead.inc *
synq.inc *
xtmp
                            
: $Id: presyn.inc,v 1.28 1995/10/25 20:56:05 billl Exp $

NEURON {
  RANGE maxsyn, nsyn                         : scalars
  RANGE link                              : PreL structure
}

PARAMETER {
  nsyn = 0
  link = 0       : presyn struct points to list of pointers to postsyn cells
}

ASSIGNED {
  maxsyn        : max and counter for the list of pointers
}

INCLUDE "snshead.inc"

CONSTRUCTOR {
  VERBATIM {
    /* link allows postsyn cell to manipulate presyn list */
    link = (double)((unsigned long)ecalloc(1, sizeof(PreL))); 
    PRECAST->link2  = link;  /* this can be queried to protect against error */
    PRECAST->nnpre = &nsyn;
    PRECAST->mxpre = &maxsyn;
    nsyn = 0.;
    maxsyn = 0.;
    if (ifarg(2)) { 
      PRECAST->cpre = (int)*getarg(2);
    } else { PRECAST->cpre = -1; }
 } 
 ENDVERBATIM
}

DESTRUCTOR {
  VERBATIM { 
      nsyn = maxsyn = 0;
      free(PRECAST);
      link = 0;
  }
  ENDVERBATIM
}

PROCEDURE preinit () {}

: globally used presynaptically to add to queue (was called pushqueu())
PROCEDURE newspike() {
VERBATIM { 
  int ii, jj, nspk, qend, head, ind, swapi;
  double time, swapt;
  SynS *psyn;		/* pointer to the presynaptic structure */
  QptR *qpr;
  QueU *qp;		/* pointer to the head position in postsyn queu */

  for (ii=0; ii<nsyn;ii++) { 

    /* psyn is the pointer back to the postsyn info array (struct SynS) */
    if ((psyn = PRECAST->plst[ii])==(SynS *)NULL ||     /* skip empties */
	(t < psyn->spkt && psyn->chainlen == 1)) {   /* skip if still on last one */
      continue; }
    /* are we chaining synapses? : this means that we will treat additional spks as */
    /* if they were coming from another synapse */
    if (psyn->chainlen > 1) {
      psyn->chainptr++;  /* augment the pointer */
      if (psyn->chainptr >= psyn->chainlen) { /* have run out of room */
	if (t < psyn->spkt) {  /* can't reset yet so just drop this spk */
	  continue;
	} else {               /* the whole chain is completely done so can reset */
	  psyn->chainptr = 0; }
      }
      ind = psyn->index + psyn->chainptr; /* add index of next one on chain */
    } else {
      ind = psyn->index;
    }

    /* qpr = the post-syn queu pointer */
    qpr = psyn->qpt;  
    /* qp = pointer to postsyn queu */
    qp = qpr->qq;
    nspk = (int)(*(qpr->nspk));
    time = t + psyn->del;
    psyn->spkt = t + qpr->dead; /* when it will all end */

    /* basic queu code taken from queu.inc (viz.) but now must make sure */
    /* that we don't go backwards in time (different delays) */
    /* should have been cleared if we are to write here */
    if (qp[nspk].time == 1e20) {
      if (qpr->qterm < time) {	/* queu marching forward in time: AOK */
	/* push the two queu items: a time and an index */
	(qp[nspk]).time = time; /* delay */
	(qp[nspk]).index = ind; /* tell postsyn which presyn spiked */
	qpr->qterm = time;	/* keep track of largest time put on */
      } else {			/* move backward to insert in right place */
	/* actually a heap rather than a queue since maintains order */
	qend = (int)(*(qpr->qln)) - 1; /* max ind for queu */
	head = (int)(*(qpr->head)) - 1; /* one in front of the head */
	if (head == -1) { head = qend; } /* wrap around */
	/* search backward */
	for (jj=((nspk==0)?qend:nspk-1);
	     time < qp[jj].time && jj != head;
	     jj=((jj==0)?qend:jj-1)); /* skip over from end */
	if (jj==nspk) { 
	  printf("%g %d %d ",qpr->qterm,ii,jj);
	  hoc_execerror("ERROR: newspike search failed.\n",0); }
	/* move things forward */
	for (jj=((jj==qend)?0:jj+1); /* start one up */
	     jj != nspk;	/* till back where we were */
	     jj=((jj==qend)?0:jj+1)) {
	  swapt = qp[jj].time;	/* store temporarily */
	  swapi = qp[jj].index;
	  qp[jj].time = time;	/* put in the new one */
	  qp[jj].index = ind;
	  time = swapt;		/* swap them */
	  ind = swapi;
	}
	qp[jj].time = time;
	qp[jj].index = ind;
      }

      /* move the tail forward and reset if reached the end */
      (*(qpr->nspk))++;
      if ((*(qpr->nspk)) == *(qpr->qln)) { (*(qpr->nspk)) = 0.; }

    } else {			/* (qp->time != 1e20) */
      printf("%x %g %g ",qpr->qq,*(qpr->nspk),*(qpr->qln));
      hoc_execerror("Error: queue full.\n",0);
    }
  }
  }
ENDVERBATIM
}

: eliminates empty pointers in presyn array, moving everything else down
PROCEDURE clean() {
  VERBATIM { 
    int ii,jj,newn;
    SynS** pl;
    pl = PRECAST->plst;

    for(ii=0,jj=0,newn=nsyn; ii<nsyn; ii++,jj++) {
      while (pl[ii] == (SynS *)NULL && ii<nsyn) {
	ii++; newn--; 
      }
      if (ii != jj && ii<nsyn) {
	pl[jj] = pl[ii];
	pl[jj]->back = &(pl[jj]);
      }
    }
    nsyn = newn;
  }
  ENDVERBATIM
}

: prints out some selected information from the presyn structure, synlist
FUNCTION check() {
  VERBATIM { 
    int ii;
    for (ii=0,_lcheck=0; ii<nsyn && _lcheck!=-1.; ii++) {
      if (PRECAST->plst[ii] != (SynS *)NULL) {
	_lcheck++;  /* count the active pointers */
	if ((&(PRECAST->plst[ii])) != (PRECAST->plst[ii]->back)) {
	  printf("****************************************************************\n");
	  printf("ERROR:: %2d: Index:%3d,C%09d,Pr%09d,Po%09d, Delay:%6g (%x->%x->%x)\n",
		 ii,
		 PRECAST->plst[(int)ii]->index,
		 PRECAST->plst[(int)ii]->ucode,
		 PRECAST->cpre,
		 PRECAST->plst[(int)ii]->qpt->cpost,
		 PRECAST->plst[(int)ii]->del,
		 &(PRECAST->plst[(int)ii]),
		 PRECAST->plst[(int)ii],
		 (PRECAST->plst[(int)ii]->back));
	  printf("****************************************************************\n");
	  _lcheck = -1.0;
	}
      }
    } 
  }
  ENDVERBATIM
}

: return ucode
FUNCTION code() {
  VERBATIM { int ii;
    if (ifarg(1)) {
      ii = (int)*getarg(1);
      if (ii < 0) { ii = nsyn+ii; }
      if (ii >= nsyn || ii < 0) {hoc_execerror("array index out of bounds", 0);}
      _lcode = ((PRECAST->plst[ii] == (SynS *)NULL)?-2:PRECAST->plst[ii]->ucode);
    } else {
      for (ii=0;ii<nsyn;ii++) {
	if (PRECAST->plst[ii] == (SynS *)NULL) {
	  printf("%d EMPTY.\n",ii);
	} else { 
	  printf("%d,%09d  ",ii,PRECAST->plst[ii]->ucode);
        }
      }
      _lcode = 1.0;
    }
  } 
  ENDVERBATIM
}

: return delay
FUNCTION delay() {
  VERBATIM { int ii;
    if (ifarg(1)) {
      ii = (int)*getarg(1);
      if (ii < 0) { ii = nsyn+ii; }
      if (ii >= nsyn || ii < 0) {hoc_execerror("array index out of bounds", 0);}
      _ldelay = ((PRECAST->plst[ii] == (SynS *)NULL)?-2:PRECAST->plst[ii]->del);
    } else {
      for (ii=0;ii<nsyn;ii++) {
	if (PRECAST->plst[ii] == (SynS *)NULL) {
	  printf("%d EMPTY.\n",ii);
	} else { 
	  printf("%d,%g  ",ii,PRECAST->plst[ii]->del);
        }
      }
      _ldelay = 1.0;
    }
  } 
  ENDVERBATIM
}

: return or set cpre code
FUNCTION pre() {
  VERBATIM {
    if (ifarg(2)) { PRECAST->cpre = (int)*getarg(2); }
    _lpre = PRECAST->cpre;
  } 
  ENDVERBATIM
}

: return cpost code
: 0 arg: prints out information from the postsyn structure
: 1 arg = -1 print out the pointer structure
: plst[i] remains only indication of eliminated pointer
FUNCTION post() {
  VERBATIM { int xx,ii;
    xx = -2;
    if (ifarg(1)) { xx = (int)*getarg(1); }
    if (xx >= 0) {
      if (xx >= nsyn) {hoc_execerror("array index out of bounds", 0);}
      _lpost = ((PRECAST->plst[xx] == (SynS *)NULL)?-2:PRECAST->plst[xx]->qpt->cpost);
    } else {
      for (ii=0;ii<nsyn;ii++) {
	if (PRECAST->plst[ii] == (SynS *)NULL) {
	  printf("%2d EMPTY.\n",ii);
	} else { 
	  printf("%1d (%1d) Del:%-4g Cd:%09d Pre:%09d Post:%09d\n",
		 ii,
		 PRECAST->plst[ii]->index,
		 PRECAST->plst[ii]->del,
		 PRECAST->plst[ii]->ucode,
		 PRECAST->cpre,
		 PRECAST->plst[ii]->qpt->cpost);
	  if (xx == -1 || (&(PRECAST->plst[ii])) != (PRECAST->plst[ii]->back)) {
	    printf("\t\t%s: %x -> %x\n",
		   (((&(PRECAST->plst[ii]))==(PRECAST->plst[ii]->back))?
		    "OK":"POINTER MISMATCH"),
		   &(PRECAST->plst[ii]),
		   PRECAST->plst[ii]);
	  }
	}
      }
      _lpost = 1.0;
    }
  } 
  ENDVERBATIM
}

: for debugging - prints out queu info from the pre side
PROCEDURE prq(x) {
  VERBATIM { int ii;
    SynS *psyn;		
    QptR *qpr;
    psyn = PRECAST->plst[(int)_lx];
    qpr = psyn->qpt;  
    printf("%x %g %g\n",qpr->qq,*(qpr->nspk),*(qpr->qln));
    for (ii=0;ii<*(qpr->qln);ii++) {
      printf("%8g%8d\n",
	     ((qpr->qq)[ii]).time,
	     ((qpr->qq)[ii]).index);
   }
  } 
  ENDVERBATIM
}


Lytton WW (1997) Computer model of clonazepam's effect in thalamic slice. Neuroreport 8:3339-43[PubMed]

References and models cited by this paper

References and models that cite this paper

Andersen P, Andersson S (1968) Physiological Basis Of The Alpha Rhythm

Ashizawa N, Nakamura T, Watanabe T (1977) Studies on luciferase from Photobacterium phosphoreum. IX. Further studies on the spectroscopic characteristics of the enzyme-FMN intermediates. J Biochem (Tokyo) 81:1057-62 [PubMed]

Bal T, McCormick DA (1993) Mechanisms of oscillatory activity in guinea-pig nucleus reticularis thalami in vitro: a mammalian pacemaker. J Physiol 468:669-91 [PubMed]

Coulter DA, Huguenard JR, Prince DA (1989) Calcium currents in rat thalamocortical relay neurones: kinetic properties of the transient, low-threshold current. J Physiol 414:587-604 [PubMed]

Destexhe A, Mainen ZF, Sejnowski TJ (1994) Synthesis of models for excitable membranes, synaptic transmission and neuromodulation using a common kinetic formalism. J Comput Neurosci 1:195-230 [Journal] [PubMed]

   Application of a common kinetic formalism for synaptic models (Destexhe et al 1994) [Model]
   Kinetic synaptic models applicable to building networks (Destexhe et al 1998) [Model]

Destexhe A, Sejnowski TJ (1995) G protein activation kinetics and spillover of gamma-aminobutyric acid may account for differences between inhibitory responses in the hippocampus and thalamus. Proc Natl Acad Sci U S A 92:9515-9 [PubMed]

Dreifuss FE, Penry JK, Rose SW, Kupferberg HJ, Dyken P, Sato S (1975) Serum clonazepam concentrations in children with absence seizures. Neurology 25:255-8 [PubMed]

Gloor P, Fariello RG (1988) Generalized epilepsy: some of its cellular mechanisms differ from those of focal epilepsy. Trends Neurosci 11:63-8 [PubMed]

Golomb D, Wang XJ, Rinzel J (1996) Propagation of spindle waves in a thalamic slice model. J Neurophysiol 75:750-69 [Journal] [PubMed]

Gutnick MJ, Prince DA (1975) Effects of projected cortical epileptiform discharges on neuronal activities in ventrobasal thalamus of the cat: ictal discharge. Exp Neurol 46:418-31 [PubMed]

Hines M (1993) NEURON--a program for simulation of nerve equations. Neural Systems: Analysis And Modeling, Eeckman F, ed. pp.127

Huguenard JR, Prince DA (1992) A novel T-type current underlies prolonged Ca(2+)-dependent burst firing in GABAergic neurons of rat thalamic reticular nucleus. J Neurosci 12:3804-17 [PubMed]

Huguenard JR, Prince DA (1994) Clonazepam suppresses GABAB-mediated inhibition in thalamic relay neurons through effects in nucleus reticularis. J Neurophysiol 71:2576-81 [Journal] [PubMed]

Lytton WW (1997) Brain organization: from molecules to parallel processing Contemporary Behavioral Neurology, Trimble M:Cummings J, ed. pp.5

Lytton WW, Contreras D, Destexhe A, Steriade M (1997) Dynamic interactions determine partial thalamic quiescence in a computer network model of spike-and-wave seizures. J Neurophysiol 77:1679-96 [Journal] [PubMed]

   Thalamic quiescence of spike and wave seizures (Lytton et al 1997) [Model]

Lytton WW, Destexhe A, Sejnowski TJ (1996) Control of slow oscillations in the thalamocortical neuron: a computer model. Neuroscience 70:673-84 [PubMed]

Mody I, De Koninck Y, Otis TS, Soltesz I (1994) Bridging the cleft at GABA synapses in the brain. Trends Neurosci 17:517-25 [PubMed]

Otis TS, Mody I (1992) Modulation of decay kinetics and frequency of GABAA receptor-mediated spontaneous inhibitory postsynaptic currents in hippocampal neurons. Neuroscience 49:13-32 [PubMed]

Pinault D, Bourassa J, Deschaenes M (1995) The axonal arborization of single thalamic reticular neurons in the somatosensory thalamus of the rat. Eur J Neurosci 7:31-40 [PubMed]

Pinault D, Bourassa J, Deschaenes M (1995) Thalamic reticular input to the rat visual thalamus: a single fiber study using biocytin as an anterograde tracer. Brain Res 670:147-52 [PubMed]

Rogers CJ, Twyman RE, Macdonald RL (1994) Benzodiazepine and beta-carboline regulation of single GABAA receptor channels of mouse spinal neurones in culture. J Physiol 475:69-82 [PubMed]

Ulrich D, Huguenard JR (1996) GABAB receptor-mediated responses in GABAergic projection neurones of rat nucleus reticularis thalami in vitro. J Physiol 493 ( Pt 3):845-54 [PubMed]

Ulrich D, Huguenard JR (1997) Nucleus-specific chloride homeostasis in rat thalamus. J Neurosci 17:2348-54 [PubMed]

Vergnes M, Marescaux C, Micheletti G, Depaulis A, Rumbach L, Warter JM (1984) Enhancement of spike and wave discharges by GABAmimetic drugs in rats with spontaneous petit-mal-like epilepsy. Neurosci Lett 44:91-4 [PubMed]

Destexhe A, Sejnowski TJ (2003) Interactions between membrane conductances underlying thalamocortical slow-wave oscillations. Physiol Rev 83:1401-53 [PubMed]

Hines ML, Carnevale NT (2003) Personal Communication of NEURON bibliography

(26 refs)