Data-driven, HH-type model of the lateral pyloric (LP) cell in the STG (Nowotny et al. 2008)

 Download zip file 
Help downloading and running models
This model was developed using voltage clamp data and existing LP models to assemble an initial set of currents which were then adjusted by extensive fitting to a long data set of an isolated LP neuron. The main points of the work are a) automatic fitting is difficult but works when the method is carefully adjusted to the problem (and the initial guess is good enough). b) The resulting model (in this case) made reasonable predictions for manipulations not included in the original data set, e.g., blocking some of the ionic currents. c) The model is reasonably robust against changes in parameters but the different parameters vary a lot in this respect. d) The model is suitable for use in a network and has been used for this purpose (Ivanchenko et al. 2008)
1 . Nowotny T, Levi R, Selverston AI (2008) Probing the dynamics of identified neurons with a data-driven modeling approach. PLoS ONE 3:e2627 [PubMed]
2 . Ivanchenko MV, Nowotny T, Selverston AI, Rabinovich MI (2008) Pacemaker and network mechanisms of rhythm generation: cooperation and competition. J Theor Biol 253:452-61 [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): Hodgkin-Huxley neuron; Stomatogastric Ganglion (STG) Lateral Pyloric (LP) cell;
Channel(s): I A; I K; I M; I h; I K,Ca; I Sodium; I Calcium; I Potassium;
Gap Junctions:
Simulation Environment: C or C++ program;
Model Concept(s): Activity Patterns; Bursting; Parameter Fitting; Invertebrate; Methods; Parameter sensitivity;
Implementer(s): Nowotny, Thomas [t.nowotny at];
Search NeuronDB for information about:  I A; I K; I M; I h; I K,Ca; I Sodium; I Calcium; I Potassium;
   Author: Thomas Nowotny
   Institute: Institute for Nonlinear Dynamics
              University of California San Diego
              La Jolla, CA 92093-0402
   email to:
   initial version: 2002-01-25

using namespace std;

#include <sstream>
#include <fstream>
#include "CN_LPneuronNT.h"
#include "CN_DCInput.h"
#include "CN_NeuronModel.h"
#include "CN_rk65n.h"

#include ""
#include ""
#include ""
#include ""

double rk65_MINDT= 0.05;
double rk65_eps= 1e-12;
double rk65_relEps= 1e-9;
double rk65_absEps= 1e-16;
double mindt= 1e-6;

int main(int argc, char *argv[])
  if (argc != 5) {
    cerr << "usage: testNT <input_current> <delta I> <step no> <basename>" << endl;

  cerr << "call was: ";
  for (int i= 0; i < argc; i++) {
    cerr << argv[i] << " ";
  cerr << endl;
  double inI= atof(argv[1]);
  double dI= atof(argv[2]);
  int steps= atoi(argv[3]);
  list<neuron *> neurs;
  list<synapse *> syns;
  vector<int> dummy(3);
  LPRneuron n(1, dummy);
  DCInput s(&n, inI);
  double told, t, dt, dtx;
  double theI;
  stringstream name;
  char thename[80];
  ofstream os;
  for (int i= 0; i < LPR_PNO; i++) {
    cerr << "# " << LPR_p_text[i] << " ";
    cerr << n.p[i] << endl;

  double *x, *xn, *tmp;
  int N;
  NeuronModel model(&neurs, &syns, N, cerr);
  x= new double[N];
  xn= new double[N];
  rk65n machine(N, rk65_MINDT, rk65_eps, rk65_absEps, rk65_relEps);

  for (int k= 0; k < steps; k++) {
    theI= inI+k*dI;

    name << argv[4] << "." << theI << ".dat" << ends;
    name >> thename;;
    told= -0.1;
    t= 0.0;
    dt= 0.0001;
    dtx= 0.005;
    n.init(x, LPR_INIVARS);
    x[0]= 0;
    while (x[0] < 20000)
      if ((x[0] > 5000) && (x[0] - told) >= 0.1)
	os << x[0] << " " << n.E(x) << endl;
	told= x[0];
      if (isnan(n.E(x)))  {
	cerr << "nan encountered!" << endl;
      dtx= machine.integrate(x, xn, &model, dt);
      dtx= min(dtx, 2.0*dt);

      tmp= x; x= xn; xn= tmp;
      dt= dtx;
  delete[] x;
  delete[] xn;
  return 0;

Loading data, please wait...