1 #include <../../nrnconf.h> 13 #define NSingleIndex 0 14 #if defined(__MWERKS__) && !defined(_MSC_VER) 16 #define strdup _strdup 32 #define nt_dt nrn_threads->_dt 35 if (o->ctemplate->sym != s) {
37 sprintf(buf,
"%s is not a %s", o->ctemplate->sym->name, s->
name);
59 KSChan*
c = channels->item(type);
70 KSChan*
c = channels->item(type);
76 KSChan*
c = channels->item(type);
89 KSChan*
c = channels->item(type);
102 KSChan*
c = channels->item(type);
116 KSChan*
c = channels->item(type);
119 static void ode_map(
int ieq,
double**
pv,
double** pvdot,
120 double*
p,
Datum* pd,
double* atol,
int type){
122 KSChan*
c = channels->item(type);
123 c->
map(ieq, pv, pvdot, p, pd, atol);
127 KSChan*
c = channels->item(type);
132 KSChan*
c = channels->item(type);
137 KSChan*
c = channels->item(type);
177 return (
double) c->
nsingle(pp);
231 return (
double)ks->
ngate_;
316 bool use = ((
int)
chkarg(1, 0, 1)) ?
true :
false;
362 const char* lig =
NULL;
419 return (
const char**)ps;
429 return (
const char**)ps;
436 return (
const char**)ps;
470 *ps = (
char*)kss->
string();
471 return (
const char**)ps;
487 return (
double)ksg->
power_;
499 return (
double)ksg->
index_;
516 kst->
setf(i, type, vec, vmin, vmax);
523 return (
double)kst->
index_;
539 return (
double)kst->
type_;
546 if ((
int)
chkarg(1, 0, 1) == 0) {
552 return (
double)f->
type();
582 if (!f) {
return 0.; }
605 if ((
int)
chkarg(1, 0, 1) == 0) {
613 if (f->
type() == 7) {
631 if (kst->
type_ >= 2) {
633 s[strlen(s) - 4] = (kst->
type_==3) ?
'i' :
'o';
634 s[strlen(s) - 3] =
'\0';
638 return (
const char**)ps;
657 Printf(
" ngate=%d nstate=%d nhhstate=%d nligand=%d ntrans=%d ivkstrans=%d iligtrans=%d\n",
661 for (i=0; i < ks->
ngate_; ++
i) {
662 Printf(
" gate %d index=%d nstate=%d power=%d\n",
678 Printf(
" state names and fractional conductance\n");
810 hoc_execerror(
"Cannot create a KSState except through KSChan", 0);
816 hoc_execerror(
"Cannot create a KSGate except through KSChan", 0);
822 hoc_execerror(
"Cannot create a KSTransition except through KSChan", 0);
842 static const char*
m_kschan_pat[] = {
"0",
"kschan",
"gmax", 0,
"g",
"i", 0, 0, 0 };
863 channels =
new KSChanList(50);
866 channels->append(
NULL);
896 ion_ =
"NonSpecific";
912 if (strcmp(
ion_.
string(),
"NonSpecific") != 0) {
930 nrn_assert((m_kschan[0] = strdup(m_kschan_pat[0])) != 0);
931 nrn_assert((m_kschan[1] = strdup(suffix)) != 0);
932 nrn_assert(snprintf(buf, 100,
"gmax%s", unsuffix) < 100);
936 nrn_assert(snprintf(buf, 100,
"e%s", unsuffix) < 100);
940 m_kschan[3+aoff] = 0;
941 nrn_assert(snprintf(buf, 100,
"g%s", unsuffix) < 100);
942 nrn_assert((m_kschan[4+aoff] = strdup(buf)) != 0);
943 nrn_assert(snprintf(buf, 100,
"i%s", unsuffix) < 100);
944 nrn_assert((m_kschan[5+aoff] = strdup(buf)) != 0);
945 m_kschan[6+aoff] = 0;
946 m_kschan[7+aoff] = 0;
949 for (i=0; i < 9; ++
i)
if (m_kschan[i]) { free((
void*)m_kschan[i]); }
967 char old_suffix[100];
972 sprintf(old_suffix,
"%s%d", s, i);
993 int nbase = cp - sp->
name;
994 int n = nbase + strlen(suffix) + 2;
996 strncpy(s1, sp->
name, nbase);
997 sprintf(s1 + nbase,
"_%s", suffix);
1010 if (strcmp(
state_[i].
string(), s) == 0) {
1031 hoc_warning(
"KSChan single channel mode implemented only for single ks gating complex to first power", 0);
1058 && strcmp(
state_[
trans_[i].target_].
string(), t) == 0){
1078 if (is <
gc_[i].sindex_) {
1131 Symbol* sym =
looksym(
"Nsingle", searchsym);
1134 sym =
installsym(
"Nsingle", RANGEVAR, searchsym);
1155 for (j=
soffset_, i=old_soffset; i < old_svarn; ++
i, ++
j) {
1157 ppsym[
j]->
u.
rng.index =
j;
1171 if (strlen(s) == 0) {
1172 ion_ =
"NonSpecific";
1179 if( strcmp(
ion_.
string(),
"NonSpecific") == 0) {
1181 printf(
"switch from useion to non-specific\n");
1184 for (i=0; i <= io; ++
i) {
1193 if (
looksym(buf, searchsym)) {
1196 ppsym[1 + io] =
installsym(buf, RANGEVAR, searchsym);
1200 ppsym[1 + io]->
u.
rng.index = 1 + io;
1203 ppsym[
i]->
u.
rng.index += 1;
1217 if (!sym || sym->
type != MECHANISM ||
1219 Printf(
"%s is not an ion mechanism", sym->
name);
1235 for (i=0; i <= io; ++
i) {
1241 ppsym[
i]->
u.
rng.index -= 1;
1339 if (s->
type != MECHANISM ||
1354 if (type < 2 && t->type_ < 2) {
1362 if (t->
type_ >= 2) {
1370 if (
trans_[i].ligand_index_ == iligold && iligold != i) {
1375 Symbol** ligands =
NULL;
1381 if (i == iligold) { ++
j; }
1389 if (
trans_[i].ligand_index_ > iligold) {
1421 strcpy(buf+strlen(buf)-1,
"_ion");
1429 if (s->
type != MECHANISM ||
1441 bool add2list =
true;
1444 if (t->
type_ >= 2) {
1448 if (
trans_[i].ligand_index_ == iligold && t->
index_ != i) {
1455 Symbol** ligands =
new Symbol*[nligand_+1];
1459 if (nligand_) {
delete []
ligands_; }
1477 if (iligold < 0 && ilig >= 0) {
1479 printf(
"old transition order\n");
1481 printf(
"i=%d index=%d type=%d ligand_index=%d %s<->%s\n", i,
1493 t =
trans_ + ntrans_ - 1;
1506 printf(
"new transition order\n");
1508 printf(
"i=%d index=%d type=%d ligand_index=%d %s<->%s %s\n", i,
1564 for (i = ig+1; i <
ngate_; ++
i) {
1615 if (
gc_[i].nstate_ == 1) {
1619 if (is ==
gc_[i].sindex_) {
1627 if (
gc_[i].sindex_ > is) {
1685 if (
trans_[i].ligand_index_ != -1) {
1686 printf(
"trans_ %d ligand_index_=%d\n", i,
trans_[i].ligand_index_);
1690 for (i=iligtrans_; i <
ntrans_; ++
i) {
1724 state[
j].
ks_ =
this;
1773 for (j = 0; j <
ngate_; ++
j) {
1782 for (j = ig; j <
ngate_; ++
j) {
1789 for (j = 0; j <
ngate_; ++
j) {
1800 for (j = i+1; j <
ngate_; ++
j) {
1806 for (j = 0; j <
ngate_; ++
j) {
1869 int i,
j, ii, idx, ns;
1872 for (i=0; i < vec->size(); ++
i) {
1873 printf(
"%d %g\n", i, vec->elem(i));
1908 if (i < nstate_old) {
1917 for (i=0; i < nstate_old; ++
i) {
unref(state_old[i].
obj_); }
1918 delete [] state_old;
1928 for (ii=0; ii < ns; ++ii) {
1929 state_[ii + idx].
f_ = vec->elem(j++);
1975 for (i=0; i < nnew; ++
i) {
1979 snew[
i]->
name[0] =
'\0';
1986 snew[
i]->
u.
rng.index =
i;
1990 for (i = nnew; i < nold; ++
i) {
1998 char buf[100], buf1[100];
2003 while (
looksym(buf, searchsym)) {
2005 nrn_assert(snprintf(buf, 100,
"%s%s", buf1, unsuffix) < 100);
2009 if (strlen(buf1) > 0) {
2023 if (sp) {
return sp; }
2109 for (i=iligtrans_; i <
ntrans_; ++
i) {
2125 double dt1 = -1./
dt;
2219 for (p = nd->
prop; p; p = p->
next) {
2220 if (p->
type == type) {
2231 for (p = pm;
p; p = p->
next) {
2232 if (p->
next == pion) {
2261 for (i = 0; i < sec->
nnode; ++
i) {
2264 for (p = nd->
prop; p; p = p->
next) {
2265 if (p->
type == mtype) {
2269 if (!p) {
continue; }
2313 for (i = 0; i < sec->
nnode; ++
i) {
2316 for (p = nd->
prop; p; p = p->
next) {
2317 if (p->
type == mtype) {
2320 double* oldp = p->
param;
2322 if (oldp != p->
param || shift != 0) {
2328 for (j = ns-1; j > 0; --
j) {
2332 }
else if (shift == -1) {
2333 for (j = 1; j < ns; ++
j) {
2363 if (pnt && pnt->
prop) {
2410 for (i=0; i <
n; ++
i) {
2427 s[
j] += (inf - s[
j])*tau;
2432 s[
j] += (inf - s[
j])*tau;
2437 s[
j] += (inf - s[
j])*tau;
2445 s[
j] += (inf - s[
j])*tau;
2463 for (i=0; i <
n; ++
i) {
2480 s[
j] += (inf - s[
j])*tau;
2485 s[
j] += (inf - s[
j])*tau;
2490 s[
j] += (inf - s[
j])*tau;
2498 s[
j] += (inf - s[
j])*tau;
2514 for (i=0; i <
n; ++
i) {
2525 for (i=0; i <
n; ++
i) {
2537 for (i=0; i <
n; ++
i) {
2545 for (i=0; i <
n; ++
i) {
2564 *pd[2].
pval += p[1];
2580 double i1, ci, co, didv;
2583 i1 = p[1]*
nrn_ghk(v + .001, ci, co, z);
2584 didv = (i1 - p[2])*1000.;
2585 *pd[2].
pval += didv;
2602 double afac = 1.e2/(*pd[0].
pval);
2615 double afac = 1.e2/(*pd[0].
pval);
2617 double g = p[1]*afac;
2623 double afac = 1.e2/(*pd[0].
pval);
2629 i = g*
nrn_ghk(v, ci, co, z)*1e6;
2637 double afac = 1.e2/(*pd[0].
pval);
2639 double i1, ci, co, didv;
2642 i1 = p[1]*
nrn_ghk(v + .001, ci, co, z)*1e6;
2643 didv = (i1 - p[2])*1000.;
2645 *pd[2].
pval += didv;
2650 double afac = 1.e2/(*pd[0].
pval);
2659 double afac = 1.e2/(*pd[0].
pval);
2691 hh_table_make(0., 0);
2695 ks_->usetable(
false);
2697 if (f0) {
delete f0; }
2700 if (f1) {
delete f1; }
2706 ks_->usetable(
false);
2708 pd_index_ = poff + 2*ligand_index_;
2709 }
else if (type_ == 3){
2710 pd_index_ = poff + 2*ligand_index_ + 1;
2718 if (f0->type() == 5 && f1->type() == 6) {
2731 int i,
n = v->size();
2734 if (f0->type() == 5 && f1->type() == 6) {
2735 for (i=0; i <
n; ++
i) {
2736 a->elem(i) = f0->f(v->elem(i));
2740 for (i=0; i <
n; ++
i) {
2741 a->elem(i) = f0->f(v->elem(i));
2742 b->elem(i) = f1->f(v->elem(i));
2746 for (i=0; i <
n; ++
i) {
2747 double t = a->elem(i);
2748 a->elem(i) = t/b->elem(i);
2749 b->elem(i) = (1. -
t)/b->elem(i);
2756 if (f0->type() == 5 && f1->type() == 6) {
2762 double t = 1./(a + b);
2769 int i,
n = v->size();
2772 if (f0->type() == 5 && f1->type() == 6) {
2773 for (i=0; i <
n; ++
i) {
2774 a->elem(i) = f0->f(v->elem(i));
2778 for (i=0; i <
n; ++
i) {
2779 a->elem(i) = f0->f(v->elem(i));
2780 b->elem(i) = f1->f(v->elem(i));
2784 for (i=0; i <
n; ++
i) {
2785 double t = 1./(a->elem(i) + b->elem(i));
2786 a->elem(i) = a->elem(i) *
t;
2793 double x = *(pd[pd_index_].
pval);
2794 switch (stoichiom_) {
2795 case 1:
return x * f0->c(0);
2796 case 2:
return x * x * f0->c(0);
2797 case 3:
return x * x * x * f0->c(0);
2798 case 4: {x *= x;
return x * x * f0->c(0); }
2799 default:
return f0->c(0)*
pow(x,
double(stoichiom_));
2819 g += s[
i] * st[
i].
f_;
2825 case 3:
return g*g*
g;
2826 case 4: g = g*
g;
return g*
g;
2829 return pow(g, (
double)power_);
2844 double*
p,
Datum* pd,
double* atol){
2872 p2[
j] = (inf - p1[
j])/tau;
2876 mulmat(p1 + nhhstate_, p2 + nhhstate_);
2896 p2[
j] /= (1 + nt->
_dt/tau);
2912 for (i=0; i <
n; ++
i) {
2968 dvinv_ = (vec->size() - 1)/(vmax - vmin);
2975 }
else if (v >=
vmax_) {
2976 x =
c(gp_->size() - 1);
2981 x =
c(i) + (
c(i+1) -
c(i))*x;
2989 if (size < 1 || vmin >= vmax || size - size1_ != 1) {
3001 if (inftab_ ==
NULL) {
3002 inftab_ =
new double[size];
3003 tautab_ =
new double[size];
3006 dv = (vmax -
vmin)/size1_;
3007 for (i=0; i < size; ++
i) {
3008 inftau(vmin + i*dv, inftab_[i], tau);
3033 if (tml->index == type) {
static void nrn_cur(NrnThread *nt, Memb_list *ml, int type)
static Member_ret_str_func kss_smem[]
static KSChanFunction * new_function(int type, Vect *, double, double)
static void check_table_thread_(double *p, Datum *ppvar, Datum *thread, NrnThread *vnt, int type)
static double kst_ab(void *v)
static void unref(Object *obj)
void setion(const char *)
void setf(int direction, int type, Vect *vec, double vmin, double vmax)
static double ks_pr(void *v)
virtual double cur(double g, double *p, Datum *pd, double v)
static Member_ret_obj_func kst_omem[]
static Member_ret_obj_func ks_omem[]
virtual double cur(double g, double *p, Datum *pd, double v)
void setname(const char *)
char * strstr(cs, ct) char *cs
void set_single(bool, bool update=true)
double loc_point_process(int, void *)
static void * vmin(NrnThread *nt)
void * erealloc(void *ptr, size_t n)
int nsingle(Point_process *)
static double Exp(double x)
static void * kst_cons(Object *o)
static void ode_map(int ieq, double **pv, double **pvdot, double *p, Datum *pd, double *atol, int type)
static unsigned int idum_
void ligand_consist(int, int, Prop *, Node *)
static Object ** ks_state(void *v)
static KSChan KSChanList * channels
static Member_ret_str_func kst_smem[]
static double kst_set_f(void *v)
static void nrn_init(NrnThread *nt, Memb_list *ml, int type)
static void kst_destruct(void *)
static double ks_single(void *v)
#define ITERATE(itm, lst)
static double ks_is_point(void *v)
int hoc_is_double_arg(int narg)
static void check_objtype(Object *o, Symbol *s)
static Member_ret_str_func ks_smem[]
static Object ** kst_target(void *v)
Symbol * hoc_lookup(const char *)
char * hoc_object_name(Object *ob)
static Member_func ks_dmem[]
Represent main neuron object computed by single thread.
void delete_schan_node_data()
void notify_freed_val_array(double *p, size_t size)
virtual ~KSChanFunction()
static double ks_remove_transition(void *v)
virtual double f(double v)
static double ks_setstructure(void *v)
static double kst_f(void *v)
static void update(NrnThread *)
void nrn_promote(Prop *p, int conc, int rev)
static double ks_remove_state(void *v)
static Member_ret_obj_func kss_omem[]
static double ks_vres(void *v)
static int ode_count(int type)
void check_table_thread(NrnThread *)
virtual void matsol(int, Node **, double **, Datum **, NrnThread *)
virtual double cur(double g, double *p, Datum *pd, double v)
static const char ** ks_name(void *v)
static double ks_gmax(void *v)
static philox4x32_key_t k
static double kst_type(void *v)
static double ksg_index(void *v)
sprintf(buf," if (secondorder) {\ " int _i;\" " for(_i=0;_i< %d;++_i) {\" " _p[_slist%d[_i]]+=dt *_p[_dlist%d[_i]];\" " }}\", numeqn, listnum, listnum)
static double ks_rseed(void *v)
Symbol * hoc_install(const char *, int, double, Symlist **)
static void nrn_alloc(Prop *prop)
virtual double jacob(double *p, Datum *pd, double v)
static void nrn_state(NrnThread *nt, Memb_list *ml, int type)
double * hoc_pgetarg(int narg)
static const char * m_kschan[9]
const char * string() const
static double ks_ngate(void *v)
static void chkobj(void *v)
void * create_point_process(int, Object *)
virtual void jacob(int, Node **, double **, Datum **)
static void ksg_destruct(void *)
void setstructure(Vect *)
#define implementPtrList(PtrList, T)
static double kst_index(void *v)
static double ks_usetable(void *v)
Symlist * hoc_top_level_symlist
double nrn_ion_charge(Symbol *)
int hoc_is_pdouble_arg(int narg)
Object ** hoc_temp_objvar(Symbol *symtemp, void *v)
static void * ks_cons(Object *o)
int nrn_get_mechtype(const char *mechname)
void destroy_pnt(Point_process *)
KSGateComplex * gate_insert(int ig, int is, int power)
int const size_t const size_t n
int trans_index(const char *src, const char *target)
static double hoc_has_loc(void *v)
void add_channel(const char **)
HocStruct Symbol ** ppsym
static double ksg_nstate(void *v)
static double hoc_nsingle(void *v)
static Object ** ks_add_ksstate(void *v)
void alloc(Prop *, int sindex)
static Member_ret_obj_func ksg_omem[]
void class2oc(const char *, void *(*cons)(Object *), void(*destruct)(void *), Member_func *, int(*checkpoint)(void **), Member_ret_obj_func *, Member_ret_str_func *)
void hoc_obj_unref(Object *obj)
void power(KSGateComplex *, int)
void freesym(Symbol *, Symbol *tmplt=NULL)
int point_register_mech(const char **m, Pvmp alloc, Pvmi cur, Pvmi jacob, Pvmi stat, Pvmi initialize, int nrnpointerindex, int vectorized, void *(*constructor)(Object *), void(*destructor)(void *), Member_func *fmember)
declarePtrList(KSChanList, KSChan) implementPtrList(KSChanList
virtual void cv_sc_update(int, Node **, double **, Datum **, NrnThread *)
static int ksusing(int type)
KSState * add_ksstate(int igate, const char *)
virtual double f(double v)
static Symbol * ksstate_sym
void cv_update(Node *, double *, Datum *, NrnThread *)
char * hoc_symbol_units(Symbol *, const char *)
void usetable(bool, int size, double vmin, double vmax)
void hoc_warning(const char *, const char *)
virtual double jacob(double *p, Datum *pd, double v)
KSChan(Object *, bool is_point=false)
Prop * prop_alloc(Prop **, int, Node *)
virtual double cur(double g, double *p, Datum *pd, double v)
static void * kss_cons(Object *o)
Symbol * installsym(const char *, int, Symbol *tmplt=NULL)
static double ks_nligand(void *v)
static double ks_ntrans(void *v)
void hoc_execerror(const char *, const char *)
static double kst_stoichiometry(void *v)
#define ForAllSections(sec)
KSState * add_hhstate(const char *)
void setsname(int, const char *)
Symbol * looksym(const char *, Symbol *tmplt=NULL)
virtual void state(int, Node **, double **, Datum **, NrnThread *)
static void singchan(NrnThread *nt, Memb_list *ml, int type)
virtual double cur(double g, double *p, Datum *pd, double v)
double has_loc_point(void *)
void nrn_mk_table_check()
static Member_func kss_dmem[]
static Object ** kst_src(void *v)
static const char ** ks_ion(void *v)
KSState * state_insert(int i, const char *name, double frac)
static Member_ret_str_func ksg_smem[]
static const char * m_kschan_pat[]
virtual void spec(int, Node **, double **, Datum **)
void settype(KSTransition *, int type, const char *)
void hoc_obj_ref(Object *obj)
static const char ** kst_ligand(void *v)
void inftau(double v, double &inf, double &tau)
void init(double v, double *s, KSSingleNodeData *snd, NrnThread *)
KSTransition * add_transition(int src, int target, const char *ligand)
virtual void init(int, Node **, double **, Datum **, NrnThread *)
virtual void cur(int, Node **, double **, Datum **)
static Object ** kss_gate(void *v)
void alloc_schan_node_data()
static void nrn_jacob(NrnThread *nt, Memb_list *ml, int type)
Symlist * hoc_built_in_symlist
static double kst_inftau(void *v)
void ion_reg(const char *name, double valence)
void ab(double v, double &a, double &b)
void hoc_unlink_symbol(Symbol *, Symlist *)
virtual double jacob(double *p, Datum *pd, double v)
struct Symbol::@52::@53 rng
virtual void map(int, double **, double **, double *, Datum *, double *)
void hoc_register_cvode(int i, nrn_ode_count_t cnt, nrn_ode_map_t map, Pvmi spec, Pvmi matsol)
static Object ** ks_trans(void *v)
static double ks_nstate(void *v)
void register_mech(const char **, Pvmp, Pvmi, Pvmi, Pvmi, Pvmi, int, int)
static double ks_iv_type(void *v)
spREAL * spGetElement(char *, int, int)
virtual void alloc(Prop *)
void state_consist(int shift=0)
short cpublic
Note: public is a reserved keyword.
virtual double jacob(double *p, Datum *pd, double v)
void setligand(int i, const char *)
Prop * needion(Symbol *, Node *, Prop *)
HocStruct cTemplate * ctemplate
double * nrn_prop_data_alloc(int type, int count, Prop *p)
KSChanTable(Vect *, double vmin, double vmax)
static double ksg_sindex(void *v)
static Object ** kst_parm(void *v)
Symbol * hoc_table_lookup(const char *, Symlist *)
void inftau_hh_table(int i, double &inf, double &tau)
static Object ** temp_objvar(const char *name, void *v, Object **obp)
static double kss_index(void *v)
static double hoc_loc_pnt(void *v)
static double kss_frac(void *v)
static const char ** ks_ligand(void *v)
double get_loc_point_process(void *)
static Object ** ks_gate(void *v)
static Object ** ks_add_hhstate(void *v)
void(* thread_table_check_)(double *, Datum *, Datum *, NrnThread *, int)
static void ode_matsol(NrnThread *nt, Memb_list *ml, int type)
static double hoc_get_loc_pnt(void *v)
void fillmat(double v, Datum *pd)
static Member_func kst_dmem[]
Datum * nrn_prop_datum_alloc(int type, int count, Prop *p)
static double ks_erev(void *v)
int gate_index(int state_index)
Prop * need_memb(Symbol *)
void hh_table_make(double dt, int size=200, double vmin=-100., double vmax=50.)
static double ksg_power(void *v)
void remove_transition(int)
static Member_func member_func[]
Object ** vector_temp_objvar(Vect *v)
static const char ** kss_name(void *v)
Object ** hoc_temp_objptr(Object *)
char ** hoc_temp_charptr(void)
double conductance(double gmax, double *state)
void mat_dt(double dt, double *p)
static Object ** ks_add_transition(void *v)
static void hoc_destroy_pnt(void *v)
virtual double jacob(double *p, Datum *pd, double v)
static void ode_spec(NrnThread *, Memb_list *ml, int type)
Object ** hoc_objgetarg(int)
virtual double cur(double g, double *p, Datum *pd, double v)
static Symbol * kstrans_sym
static Member_func ksg_dmem[]
static void * hoc_create_pnt(Object *ho)
static void * ksg_cons(Object *o)
double chkarg(int, double low, double high)
static void ks_destruct(void *)
void mulmat(double *, double *)
void * hoc_Emalloc(size_t size)
void kschan_cvode_single_update()
static void kss_destruct(void *)
void destroy_point_process(void *)
virtual double jacob(double *p, Datum *pd, double v)
static Symbol * ksgate_sym
void state(Node *, double *, Datum *, NrnThread *)
static double kst_ftype(void *v)
KSTransition * trans_insert(int i, int src, int target)
double conductance(double *state, KSState *st)