source: project/release/4/nemo/trunk/nemo-eggdoc.scm @ 15165

Last change on this file since 15165 was 15165, checked in by Ivan Raikov, 11 years ago

Added stx-engine.scm to nemo file manifest.

File size: 29.4 KB
Line 
1;;
2;;
3;; nemo documentation for the Chicken Scheme module system.
4;;
5;;
6;; This program is free software: you can redistribute it and/or
7;; modify it under the terms of the GNU General Public License as
8;; published by the Free Software Foundation, either version 3 of the
9;; License, or (at your option) any later version.
10;;
11;; This program is distributed in the hope that it will be useful, but
12;; WITHOUT ANY WARRANTY; without even the implied warranty of
13;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14;; General Public License for more details.
15;;
16;; A full copy of the GPL license can be found at
17;; <http://www.gnu.org/licenses/>.
18;;
19;;
20
21
22(use eggdoc srfi-1)
23
24(define doc
25  `((eggdoc:begin
26
27     (name "nemo")
28
29     (description "Neuron model description language.")
30
31     (author (url "http://chicken.wiki.br/users/ivan-raikov" "Ivan Raikov"))
32
33     (history
34      (version "2.2"   "Added stx-engine.scm to file manifest")
35      (version "2.1"   "Ported to Chicken 4")
36      (version "2.0"   "Introduced functors")
37      (version "1.15"  "Added nmodl-depend option")
38      (version "1.14"  "Added support for exponential Euler integration")
39      (version "1.13"  "Change in the integration method used for the AKP example")
40      (version "1.12"  "Added support for binary conductances and conservation equations")
41      (version "1.11"  "Bug fixes in the current equations part of NMODL code generator")
42      (version "1.10"  "AKP06 example is now installed in CHICKEN-HOME/nemo/examples")
43      (version "1.9"   "Documentation and example updates")
44      (version "1.8"   "Bug fixes related to kinetic equation processing")
45      (version "1.6"   "Added infix expression parser (nemo format)")
46      (version "1.0"   "Initial release"))
47
48
49     (requires (url "args.html"          "args")
50               (url "datatype.html"      "datatype")
51               (url "digraph.html"       "digraph")
52               (url "environments.html"  "environments")
53               (url "graph-bfs.html"     "graph-bfs")
54               (url "graph-cycles.html"  "graph-cycles")
55               (url "lalr.html"          "lalr")
56               (url "matchable.html"     "matchable")
57               (url "mathh.html"         "mathh")
58               (url "strictly-pretty.html" "strictly-pretty")
59               (url "ssax.html"           "ssax")
60               (url "sxpath.html"          "sxpath")
61               (url "sxml-transforms.html" "sxml-transforms")
62               (url "varsubst.html"    "varsubst")
63               (url "vector-lib.html"  "vector-lib")
64               (url "varsubst.html"    "varsubst")
65               )
66
67
68     (usage "nemo [options...] [input files ...]")
69     (download "nemo.egg")
70
71     (documentation
72     
73      (p (tt "NEMO") " is a program that reads an on channel description "
74         "in a format based on ChannelML and generates a corresponding description "
75         "in the " (url "http://www.neuron.yale.edu/neuron/docs/help/neuron/nmodl/nmodl.html" "NMODL")
76         "language used by the " (url "http://www.neuron.yale.edu/neuron/" "NEURON simulator") ". ")
77
78      (subsection "Options"
79        (p (symbol-table
80            (describe "-i FORMAT"          "specify input format (nemo, xml, sxml, s-exp)")
81            (describe "--xml[=FILE]"       "write XML output to file (default: <model-name>.xml")
82            (describe "--sxml[=FILE]"      "write SXML output to file (default: <model-name>.sxml")
83            (describe "--nmodl[=FILE]"     "write NMODL output to file (default: <model-name>.mod")
84            (describe "--nmodl-method=METHOD"  "specify NMODL integration method (cnexp, derivimplicit)")
85            (describe "--nmodl-kinetic=[STATES]" "use NMODL kinetic equations for the given reactions")
86            (describe "--nmodl-depend=VARS" "specify DEPEND variables for NMODL interpolation tables ")
87            (describe "-t"                 "use interpolation tables in generated code")
88            (describe "-h, --help"         "print help"))))
89
90      (subsection "Model description language"
91        (p "The following constructs comprise the model description language: ")
92        (p (ebnf-def "MODEL"
93            (ebnf-choice
94             ( (ebnf-form (ebnf-kw "INPUT ") 
95                          (ebnf-choice (ebnf-var "ID") 
96                             (ebnf-form (ebnf-var "ID") (ebnf-opt (ebnf-kw "AS ") (ebnf-var "LOCAL-ID")) 
97                                        (ebnf-opt (ebnf-kw "FROM ") (ebnf-var "NAMESPACE"))))
98                          "... )")
99               (comment "Declares one or several imported quantities. "
100                        "If the optional " (ebnf-kw "AS") " parameter is given, "
101                        "then the quantity is imported as " (ebnf-var "LOCAL-ID") ". "
102                        "If the optional " (ebnf-kw "FROM") " parameter is given, "
103                        "then the quantity is imported from namespace " (ebnf-var "NAMESPACE") ". "))
104               
105             ( (ebnf-form (ebnf-kw "OUTPUT") (ebnf-var "ID") )
106               (comment "Declares that an existing quantity be exported."))
107
108             ( (ebnf-form (ebnf-kw "CONST") (ebnf-var "ID") "=" (ebnf-var "EXPR"))
109               (comment "Declares a constant quantity (its value will be computed at declaration time)."))
110
111             ( (ebnf-form (ebnf-kw "DEFUN") (ebnf-var "ID") (ebnf-form (ebnf-var "ARG-ID") "..." )
112                          (ebnf-var "EXPR"))
113               (comment "Declares a function (a parameterized expression with no free variables)."))
114
115             ( (ebnf-form (ebnf-var "ID") "=" (ebnf-var "EXPR"))
116               (comment "Declares an assigned quantity "
117                        "(an expression that can refer to other quantities in the system)."))
118
119             ( (ebnf-form (ebnf-kw "REACTION") (ebnf-var "ID") (ebnf-var "TRANSITIONS")
120                          (ebnf-var "INITIAL-EXPR") (ebnf-var "OPEN-ID"))
121               (p "Declares a reaction quantity. See below for the syntax of state transition equations. "
122                  (ebnf-var "INITIAL-EXPR") " is an expression that computes the initial value. "
123                  (ebnf-var "OPEN-ID") " is the name of the open state. It must be one of the states "
124                  "defined by the transition equations. "))
125
126             ( (ebnf-form (ebnf-kw "COMPONENT") 
127                          (ebnf-form (ebnf-kw "TYPE") (ebnf-var "ID"))
128                          (ebnf-form (ebnf-kw "NAME") (ebnf-var "ID"))
129                          (ebnf-var "ELEMENTS"))
130               (p "Declares a system component (a quantity that can contain other quantities)."))
131             )))
132
133        (subsubsection "Expressions"
134          (p "Expressions in the model description language are defined as: ")
135          (p (ebnf-def "EXPR"
136               (ebnf-choice
137                       ( (ebnf-var "NUM")
138                         (comment "A numeric constant."))
139                       ( (ebnf-var "ID")
140                         (comment "A variable name."))
141                       ( (ebnf-form (ebnf-var "ID") (ebnf-form (ebnf-var "EXPR") "..."))
142                         (comment "A function invocation."))
143                       ( (ebnf-form (ebnf-var "EXPR") (ebnf-var "OP") (ebnf-var "EXPR") )
144                         (comment "Arithmetic operator invocation. The following operators are supported: "
145                                  (tt "+ - / * > < <= >= ^")))
146                       ( (ebnf-form (ebnf-kw "LET") (ebnf-form (ebnf-var "BINDINGS")) (ebnf-var "EXPR") )
147                         (comment "Local variables declaration. Each element in " 
148                                  (ebnf-var "BINDINGS") " is of the form: "
149                                  (ebnf-form (ebnf-var "ID") (ebnf-var "EXPR"))))
150                       ( (ebnf-form (ebnf-kw "IF") (ebnf-var "CONDITION")
151                                    (ebnf-kw "THEN") (ebnf-var "EXPR") 
152                                    (ebnf-kw "ELSE") (ebnf-var "EXPR") )
153                         (comment "Conditional expression. The expression after " (ebnf-kw "IF") 
154                                  " must be a comparison expression. ")))
155                       )))
156
157        (subsubsection "State transition equations"
158          (p "State transition equations in the model description language are defined as: ")
159          (p (ebnf-def "TRANSITION"
160               (ebnf-choice
161                ( (ebnf-form (ebnf-kw "->") (ebnf-var "SRC-ID") (ebnf-var "DEST-ID")
162                             (ebnf-var "EXPR") )
163                  (comment "Declares that a transition occurs from state "
164                           (ebnf-var "SRC-ID") " to state " (ebnf-var "DEST-ID") 
165                           " at rate computed by " (ebnf-var "EXPR") ". "))
166                ( (ebnf-form (ebnf-kw "<->") (ebnf-var "SRC-ID") (ebnf-var "DEST-ID")
167                             (ebnf-var "EXPR-1") (ebnf-var "EXPR-2") )
168                  (comment "Declares that a transition occurs from state "
169                           (ebnf-var "SRC-ID") " to state " (ebnf-var "DEST-ID") 
170                           " and vice versa, at rates computed by " (ebnf-var "EXPR-1")
171                           " and " (ebnf-var "EXPR-2") ". "))
172                ))))
173
174        (subsubsection "Ion channel definitions"
175          (p "Currently, the " (tt "NMODL") " code generator recognizes and generates code for "
176             "ion channel components that are defined as follows: ")
177          (p (ebnf-form (ebnf-compound "COMPONENT (TYPE ion-channel) (NAME {NAME})"
178
179               ( (ebnf-form (ebnf-kw "COMPONENT") (ebnf-form (ebnf-kw "TYPE") "gate") "..." )
180                 (comment "One or more gate definitions. Each component of type gate "
181                          "must export the reactions that characterize the gate dynamics. "))
182               
183               ( (ebnf-form (ebnf-kw "COMPONENT") 
184                            (ebnf-form (ebnf-kw "TYPE") "pore") "...")
185                 (comment "Conductance law definition. This component must export a "
186                          "constant maximal conductance, or an assigned quantity whose "
187                          "equation represents the conductance law used. "))
188               
189               ( (ebnf-opt (ebnf-form (ebnf-kw "COMPONENT") (ebnf-form (ebnf-kw "TYPE") "permeating-substance") "..."))
190                 (comment ""))
191
192               ( (ebnf-opt (ebnf-form (ebnf-kw "COMPONENT") (ebnf-form (ebnf-kw "TYPE") "accumulating-substance") "..."))
193                 (comment ""))
194                           
195               ))))
196
197        (subsubsection "Hodgkin-Huxley ionic conductance extension"
198          (p "The Hodgkin-Huxley ionic conductance extension is a shortcut that declares "
199             "a reaction corresponding to the Hodgkin-Huxley formulation "
200             "of ion channel dynamics. ")
201
202          (p (ebnf-form (ebnf-compound "HH-IONIC-GATE"
203               ( (ebnf-form (ebnf-var "ION-NAME" )
204                            (comment "Ion name: exported variables will be of the form " (tt "{ion}_{id}") ". ")
205                           
206                            (ebnf-form (ebnf-kw "M-POWER") (ebnf-var "INTEGER") )
207                            (comment "Power of state variable " (tt "M") ". " )
208
209                            (ebnf-form (ebnf-kw "H-POWER") (ebnf-var "INTEGER") )
210                            (comment "Power of state variable " (tt "H") ". If zero, the initial value and "
211                                     "equations for this variable can be omitted. ")
212
213                            (ebnf-form (ebnf-kw "INITIAL-M") (ebnf-var "EXPR") )
214                            (comment "Expression that computes initial value for state variable " (tt "M") ". " )
215
216                            (ebnf-form (ebnf-kw "INITIAL-H") (ebnf-var "EXPR") )
217                            (comment "Expression that computes initial value for state variable " (tt "H") ". " )
218
219
220                            (ebnf-form (ebnf-kw "M-ALPHA") (ebnf-var "EXPR") )
221                            (comment "Closed state to open state rate expression for state variable " (tt "M") ". " )
222
223                            (ebnf-form (ebnf-kw "M-BETA") (ebnf-var "EXPR") )
224                            (comment "Open state to closed state rate expression for state variable " (tt "M") ". " )
225
226                            (ebnf-form (ebnf-kw "H-ALPHA") (ebnf-var "EXPR") )
227                            (comment "Closed state to open state rate expression for state variable " (tt "H") ". " )
228
229                            (ebnf-form (ebnf-kw "H-BETA") (ebnf-var "EXPR") )
230                            (comment "Open state to closed state rate expression for state variable " (tt "H") ". " )
231
232
233                            (ebnf-form (ebnf-kw "M-INF") (ebnf-var "EXPR") )
234                            (comment "Steady state expression for variable " (tt "M") ". " )
235
236                            (ebnf-form (ebnf-kw "M-TAU") (ebnf-var "EXPR") )
237                            (comment "Time constant expression for variable " (tt "M") ". " )
238
239                            (ebnf-form (ebnf-kw "H-INF") (ebnf-var "EXPR") )
240                            (comment "Steady state expression for variable " (tt "H") ". " )
241
242                            (ebnf-form (ebnf-kw "H-TAU") (ebnf-var "EXPR") )
243                            (comment "Time constant expression for variable " (tt "H") ". " )
244
245
246                            ))
247                 )))
248          )
249
250        )
251
252      )
253     (examples (pre #<<EOF
254
255;; Akemann and Knoepfel, J.Neurosci. 26 (2006) 4602
256(nemo-model AKP06
257
258  ((input v 
259          (cai from ion-pools)
260          (ica from ion-currents))
261             
262   (const Vrest   = -68)
263   (const diam    = 20)
264   (const celsius = 24)
265   
266   (const temp_adj = (pow (3 ((celsius - 22) / 10))))
267
268
269   (defun ghk (v celsius ci co)
270     (let ((F 96485.0) (R 8.3145))
271       (let ((zeta ((2e-3 * F * v) / (R * (273.19 + celsius)))))
272         (if ((abs (1.0 - exp (neg (zeta)))) < 1e-6)
273             then (1e-6 * (2 * F) * (ci - (co * exp (neg (zeta)))) * (1.0 + (zeta / 2)))
274             else ((1e-6 * (2 * zeta * F) * (ci - (co * exp (neg (zeta))))) / (1.0 - exp (neg (zeta))))))))
275
276   (component (type membrane-capacitance)
277           (const C_m = 1)
278           (output C_m))
279
280   (component (type ion-channel) (name Kv1)
281             
282              (component (type gate)
283                         
284                         ;; rate functions
285                         (defun Kv1_amf (v) 
286                           (let ((cma 0.12889)
287                                 (cka -33.90877)
288                                 (cva 45))
289                             (cma * (exp (neg ((v + cva) / cka))))))
290                         
291                         (defun Kv1_bmf (v)
292                           (let ((cmb   0.12889)
293                                 (ckb   12.42101)
294                                 (cvb   45))
295                             (cmb * (exp (neg ((v + cvb) / ckb))))))
296                         
297                         (hh-ionic-gate 
298                          (Kv1  ;; ion name: exported variables will be of the form {ion}_{id}
299                           (initial-m (Kv1_amf (Vrest) / (Kv1_amf (Vrest) + Kv1_bmf (Vrest))))
300                           (m-power   4)
301                           (h-power   0)
302                           (m-alpha   (temp_adj * Kv1_amf (v) ))
303                           (m-beta    (temp_adj * Kv1_bmf (v) ))))
304                         
305                         )
306             
307              (component (type pore)
308                         (const  gbar_Kv1  = 0.011)
309                         (output gbar_Kv1 ))
310             
311              (component (type permeating-substance) (name k)
312                         (const e_Kv1 = -85)
313                         (output e_Kv1 ))
314             
315              ) ;; end Kv1 current
316   
317   (component (type ion-channel) (name Kv3)
318             
319              (component (type gate)
320                         
321                         ;; rate functions
322                         (defun Kv3_amf (v) 
323                           (let ((ca   0.22)
324                                 (cva  16)
325                                 (cka  -26.5))
326                             (ca * exp((neg (v + cva)) / cka) )))
327                         
328                         (defun Kv3_bmf (v) 
329                           (let ((ca   0.22)
330                                 (cvb  16)
331                                 (ckb  26.5))
332                             (ca * exp((neg (v + cvb)) / ckb) )))
333                         
334                         (hh-ionic-gate 
335                          (Kv3  ;; ion name: exported variables will be of the form {ion}_{id}
336                           (initial-m (Kv3_amf (Vrest) / (Kv3_amf (Vrest) + Kv3_bmf (Vrest))))
337                           (m-power   4)
338                           (h-power   0)
339                           (m-alpha   (temp_adj * Kv3_amf (v) ))
340                           (m-beta    (temp_adj * Kv3_bmf (v) ))))
341                         
342                         )
343             
344              (component (type pore)
345                         (const  gbar_Kv3  = 0.005)
346                         (output gbar_Kv3 ))
347             
348              (component (type permeating-substance) (name k)
349                         (const e_Kv3 = -85)
350                         (output e_Kv3 ))
351
352              (component (type binary-gate) 
353                         (const switch_Kv3 = 0)
354                         
355                         (const e0 = 1.60217646e-19)
356                         (const gunit = 16)
357                         (const nc = (1e12 * gbar_Kv3 / gunit))
358                         (const zn = 1.9196)
359
360                         (defun gate_flip_Kv3 (v m) 
361                           (let ((a    (Kv3_amf (v)))
362                                 (ab   (a + Kv3_bmf (v)))
363                                 (tau  (1 / ab))
364                                 (inf  (a / ab)))
365                             ((inf - m) / tau)))
366
367                         (i_gate_Kv3 = 
368                           (if (switch_Kv3 > 0) then (nc * 1e6 * e0 * 4 * zn * gate_flip_Kv3(v Kv3_m)) else 0))
369
370                         (output i_gate_Kv3 ))
371
372              ) ;; end Kv3 current
373
374
375
376   (component (type ion-channel) (name Kv4)
377
378              (component (type gate)
379                         
380                         ;; rate functions
381                         
382                         
383                         (defun Kv4_amf (v) 
384                           (let ((can    0.15743)
385                                 (ckan   -32.19976)
386                                 (cvan   57))
387                             (can * exp (neg ((v + cvan) / ckan)))))
388                         
389
390                         (defun Kv4_bmf (v) 
391                           (let ((cbn   0.15743)
392                                 (ckbn  37.51346)
393                                 (cvbn  57))
394                             (cbn * exp (neg ((v + cvbn) / ckbn)))))
395
396                         
397                         (defun Kv4_ahf (v) 
398                           (let ((cah   0.01342)
399                                 (ckah  -7.86476)
400                                 (cvah  60))
401                             (cah / (1.0 + (exp (neg ((v + cvah) / ckah)))))))
402
403                         
404                         (defun Kv4_bhf (v) 
405                           (let ((cbh   0.04477)
406                                 (ckbh  11.3615)
407                                 (cvbh  54))
408                             (cbh / (1.0 + (exp (neg ((v + cvbh) / ckbh)))))))
409
410                         (hh-ionic-gate 
411                          (Kv4  ;; ion name: exported variables will be of the form {ion}_{id}
412                           (initial-m (Kv4_amf (Vrest) / (Kv4_amf (Vrest) + Kv4_bmf (Vrest))) )
413                           (initial-h (Kv4_ahf (Vrest) / (Kv4_ahf (Vrest) + Kv4_bhf (Vrest))) ) 
414                           (m-power   4)
415                           (h-power   1)
416                           (m-alpha   (temp_adj * Kv4_amf (v)))
417                           (m-beta    (temp_adj * Kv4_bmf (v)))
418                           (h-alpha   (temp_adj * Kv4_ahf (v)))
419                           (h-beta    (temp_adj * Kv4_bhf (v)))
420                           ))
421                         
422                         )
423
424              (component (type pore)
425                         (const  gbar_Kv4  = 0.0039)
426                         (output gbar_Kv4 ))
427             
428              (component (type permeating-substance) (name k)
429                         (const e_Kv4 = -85)
430                         (output e_Kv4 ))
431             
432              ) ;; end Kv4 current
433
434
435   (component (type ion-channel) (name Ih)
436             
437              (component (type gate)
438                         
439                         ;; rate functions
440                         
441                         (defun Ih_inf (v)
442                           (let ((cvn   90.1)
443                                 (ckn   -9.9))
444                             (1.0 / (1.0 + exp (neg ((v + cvn) / ckn) )))))
445                         
446                         (defun Ih_tau (v)   
447                           (let ((cct  190)
448                                 (cat  720)
449                                 (cvt  81.5)
450                                 (ckt  11.9))
451                             (cct + (cat * exp (neg (pow (((v + cvt) / ckt) 2)))))))
452                         
453                         (hh-ionic-gate 
454                          (Ih  ;; ion name: exported variables will be of the form {ion}_{id}
455                           (initial-m (Ih_inf (Vrest)))
456                           (m-power   1)
457                           (h-power   0)
458                           (m-inf     (Ih_inf (v)))
459                           (m-tau     (Ih_tau (v) / temp_adj))
460                           ))
461                         
462                         )
463
464              (component (type pore)
465                         (const  gbar_Ih  = 0.0002)
466                         (output gbar_Ih ))
467             
468              (component (type permeating-substance) (name non-specific)
469                         (const e_Ih = -30)
470                         (output e_Ih ))
471             
472              ) ;; end Ih current
473
474   (component (type ion-channel) (name Leak)
475             
476              (component (type pore)
477                         (const  gbar_Leak  = 9e-5)
478                         (output gbar_Leak ))
479             
480              (component (type permeating-substance) (name non-specific)
481                         (const e_Leak = -61)
482                         (output e_Leak ))
483             
484              ) ;; end leak current
485
486
487   (component (type ion-channel) (name CaP)
488             
489              (component (type gate)
490                         
491                         ;; rate functions
492                         (defun CaP_inf (v) 
493                           (let ((cv  19)  (ck  5.5))
494                             (1.0 / (1.0 + exp (neg ((v + cv) / ck))))))
495                         
496                         (defun CaP_tau (v) 
497                           (if (v > -50) 
498                               then (1e3 * (0.000191 + (0.00376 * pow ((exp (neg ((v + 41.9) / 27.8)))  2))))
499                               else (1e3 * (0.00026367 + (0.1278 * exp (0.10327 * v))))))
500
501                         (hh-ionic-gate 
502                          (CaP  ;; ion name: exported variables will be of the form {ion}_{id}
503                           (initial-m  (CaP_inf (Vrest)))
504                           (m-power    1)
505                           (h-power    0)
506                           (m-inf      (CaP_inf (v)))
507                           (m-tau      (CaP_tau (v) / temp_adj))))
508                         
509                         )
510
511              (component (type pore)
512                         (const gmax_CaP  = 0.01667)
513                         (const cao       = 2.4)
514                         (gbar_CaP        = (gmax_CaP * ghk (v celsius cai cao)))
515                         (output gbar_CaP ))
516             
517              (component (type accumulating-substance) (name ca) )
518             
519             
520              ) ;; end CaP current
521
522   (component (type ion-channel) (name CaBK)
523             
524              (component (type gate)
525                         
526                         ;; rate functions
527                         
528                         (defun CaBK_zinf (ca) 
529                           (let ((zhalf 0.001))
530                             (1 / (1 + (zhalf / ca)))))
531
532                         (const CaBK_ztau = 1.0)
533                         
534                         (defun CaBK_minf (v)
535                           (let ((cvm  28.9)
536                                 (ckm  6.2))
537                             (1.0 / (1.0 + exp (neg ((v + 5.0 + cvm) / ckm))))))
538                         
539                         (defun CaBK_mtau (v)
540                           (let ((ctm     0.000505)
541                                 (cvtm1   86.4)
542                                 (cktm1   -10.1)
543                                 (cvtm2   -33.3)
544                                 (cktm2   10))
545                             (ctm + (1.0 / (exp (neg ((v + 5.0 + cvtm1) / cktm1)) +
546                                                exp (neg ((v + 5.0 + cvtm2) / cktm2)))))))
547                         
548                         (defun CaBK_hinf (v) 
549                           (let ((ch    0.085)
550                                 (cvh   32)
551                                 (ckh   -5.8))
552                             (ch + ((1.0 - ch) / (1.0 + (exp (neg ((v + 5.0 + cvh) / ckh))))))))
553                         
554                         (defun CaBK_htau (v)
555                           (let ((cth     0.0019)
556                                 (cvth1   48.5)
557                                 (ckth1   -5.2)
558                                 (cvth2   -54.2)
559                                 (ckth2   12.9))
560                             (cth + (1.0 / (exp (neg ((v + cvth1) / ckth1)) +
561                                                exp (neg ((v + cvth2) / ckth2)))))))
562                         
563                         (reaction
564                          (CaBK_z
565                           (transitions (<-> C O (CaBK_zinf (cai) / CaBK_ztau)
566                                             ((1 - CaBK_zinf (cai)) / CaBK_ztau)))
567                           (initial   (CaBK_zinf (1e-4)))
568                           (open O)  (power 2)))
569                         
570                         (output CaBK_z ) 
571
572                         
573                         (hh-ionic-gate 
574                          (CaBK  ;; ion name: exported variables will be of the form {ion}_{id}
575                           (initial-m  (CaBK_minf (Vrest) / temp_adj))
576                           (initial-h  (CaBK_hinf (Vrest) / temp_adj))
577                           (m-power    3)
578                           (h-power    1)
579                           (m-inf      (CaBK_minf (v) / temp_adj) )
580                           (m-tau      (CaBK_mtau (v) / temp_adj) )
581                           (h-inf      (CaBK_hinf (v) / temp_adj) )
582                           (h-tau      (CaBK_htau (v) / temp_adj) )))
583                         
584                         )
585             
586              (component (type pore)
587                         (const  gbar_CaBK  = 0.014)
588                         (output gbar_CaBK ))
589             
590              (component (type permeating-substance) (name k)
591                         (const e_CaBK = -85)
592                         (output e_CaBK ))
593             
594              ) ;; end BK current
595
596
597    (component (type decaying-pool) (name ca)
598              (const  F = 96485.0)
599              (const  ca_initial = 1e-4)
600              (const  ca_depth   = 0.1)
601              (const  ca_beta    = 1.0)
602             
603              (d (ca) = ((neg (ica) / (2 * F * ca_initial * ca_depth)) -
604                         (ca * ca_beta * temp_adj))
605                        (initial ca_initial))
606             
607              (output ca)
608              )
609           
610
611   (functor (name Nafun) (type ion-channel) 
612            ( Na_Con Na_Coff Na_Oon Na_Ooff Na_alfac Na_btfac
613                     Na_alpha Na_beta Na_gamma Na_delta Na_epsilon Na_zeta Na_x1 Na_x2
614                     Na_x3 Na_x4 Na_x5 Na_x6 ) =
615                     
616                     (component (type gate)
617                               
618                ;; rate functions
619                (f01 = (4.0 * Na_alpha * exp (v / Na_x1) * temp_adj))
620                (f02 = (3.0 * Na_alpha * exp (v / Na_x1) * temp_adj))
621                (f03 = (2.0 * Na_alpha * exp (v / Na_x1) * temp_adj))
622                (f04 = (Na_alpha * exp (v / Na_x1) * temp_adj))
623                (f0O = (Na_gamma * exp (v / Na_x3) * temp_adj))
624                (fip = (Na_epsilon * exp (v / Na_x5) * temp_adj))
625                (f11 = (4.0 * Na_alpha * Na_alfac * exp (v / Na_x1) * temp_adj))
626                (f12 = (3.0 * Na_alpha * Na_alfac * exp (v / Na_x1) * temp_adj))
627                (f13 = (2.0 * Na_alpha * Na_alfac * exp (v / Na_x1) * temp_adj))
628                (f14 = (Na_alpha * Na_alfac * exp (v / Na_x1) * temp_adj))
629                (f1n = (Na_gamma * exp (v / Na_x3) * temp_adj))
630               
631                (fi1 = (Na_Con * temp_adj))
632                (fi2 = (Na_Con * Na_alfac * temp_adj))
633                (fi3 = (Na_Con * Na_alfac * Na_alfac * temp_adj))
634                (fi4 = (Na_Con * Na_alfac * Na_alfac * Na_alfac * temp_adj))
635                (fi5 = (Na_Con * Na_alfac * Na_alfac * Na_alfac * Na_alfac * temp_adj))
636                (fin = (Na_Oon * temp_adj))
637               
638                (b01 = (Na_beta * exp (v / Na_x2) * temp_adj))
639                (b02 = (2.0 * Na_beta * exp (v / Na_x2) * temp_adj))
640                (b03 = (3.0 * Na_beta * exp (v / Na_x2) * temp_adj))
641                (b04 = (4.0 * Na_beta * exp (v / Na_x2) * temp_adj))
642                (b0O = (Na_delta * exp (v / Na_x4) * temp_adj))
643                (bip = (Na_zeta * exp (v / Na_x6) * temp_adj))
644               
645                (b11 = (Na_beta * Na_btfac * exp (v / Na_x2) * temp_adj))
646                (b12 = (2.0 * Na_beta * Na_btfac * exp (v / Na_x2) * temp_adj))
647                (b13 = (3.0 * Na_beta * Na_btfac * exp (v / Na_x2) * temp_adj))
648                (b14 = (4.0 * Na_beta * Na_btfac * exp (v / Na_x2) * temp_adj))
649                (b1n = (Na_delta * exp (v / Na_x4) * temp_adj))
650               
651                (bi1 = (Na_Coff * temp_adj))
652                (bi2 = (Na_Coff * Na_btfac * temp_adj))
653                (bi3 = (Na_Coff * Na_btfac * Na_btfac * temp_adj))
654                (bi4 = (Na_Coff * Na_btfac * Na_btfac * Na_btfac * temp_adj))
655                (bi5 = (Na_Coff * Na_btfac * Na_btfac * Na_btfac * Na_btfac * temp_adj))
656                (bin = (Na_Ooff * temp_adj))
657               
658                (reaction
659                    (Na_z
660                     (transitions
661                      (<-> C1 C2 f01 b01)
662                      (<-> C2 C3 f02 b02)
663                      (<-> C3 C4 f03 b03)
664                      (<-> C4 C5 f04 b04)
665                      (<-> C5 O  f0O b0O)
666                      (<-> O  B  fip bip)
667                      (<-> O  I6 fin bin)
668                      (<-> I1 I2 f11 b11)
669                      (<-> I2 I3 f12 b12)
670                      (<-> I3 I4 f13 b13)
671                      (<-> I4 I5 f14 b14)
672                      (<-> I5 I6 f1n b1n)
673                      (<-> C1 I1 fi1 bi1)
674                      (<-> C2 I2 fi2 bi2)
675                      (<-> C3 I3 fi3 bi3)
676                      (<-> C4 I4 fi4 bi4)
677                      (<-> C5 I5 fi5 bi5))
678
679                      (conserve (1 = (C1 + C2 + C3 + C4 + C5 + O + B + I1 + I2 + I3 + I4 + I5 + I6)))
680                     
681                     (open O)   (power 1)))
682                   
683                   (output Na_z ) 
684                   
685                   )
686                       
687                (component (type pore)
688                           (const  gbar  = 0.016)
689                           (output gbar ))
690               
691                (component (type permeating-substance) (name na)
692                           (const e = -88)
693                           (output e ))
694               
695                ) ;; end Nafun functor
696
697
698
699     (component (name Na) =
700                Nafun ((const Na_Con   = 0.005)
701                       (const Na_Coff  = 0.5)
702                       (const Na_Oon   = 2.3)
703                       (const Na_Ooff  = 0.005)
704                       
705                       (const Na_alfac = (pow ((Na_Oon / Na_Con) (1.0 / 4.0))))
706                       (const Na_btfac = (pow ((Na_Ooff / Na_Coff) (1.0 / 4.0))))
707                       
708                       (const Na_alpha = 150)
709                       (const Na_beta  = 3)
710                       (const Na_gamma = 150)
711                       (const Na_delta = 40)
712                       (const Na_epsilon = 1e-12)
713                       (const Na_zeta = 0.03)
714                       (const Na_x1 = 20)
715                       (const Na_x2 = -20)
716                       (const Na_x3 = 1000000000000.0)
717                       (const Na_x4 = -1000000000000.0)
718                       (const Na_x5 = 1000000000000.0)
719                       (const Na_x6 = -25)))
720     ;; end Na current
721
722     (component (name Narsg) =
723                Nafun ((const Na_Con   = 0.005)
724                       (const Na_Coff  = 0.5)
725                       (const Na_Oon   = 0.75)
726                       (const Na_Ooff  = 0.005)
727                       
728                       (const Na_alfac = (pow ((Na_Oon / Na_Con) (1.0 / 4.0))))
729                       (const Na_btfac = (pow ((Na_Ooff / Na_Coff) (1.0 / 4.0))))
730                       
731                       (const Na_alpha = 150)
732                       (const Na_beta  = 3)
733                       (const Na_gamma = 150)
734                       (const Na_delta = 40)
735                       (const Na_epsilon = 1.75)
736                       (const Na_zeta = 0.03)
737                       (const Na_x1 = 20)
738                       (const Na_x2 = -20)
739                       (const Na_x3 = 1000000000000.0)
740                       (const Na_x4 = -1000000000000.0)
741                       (const Na_x5 = 1000000000000.0)
742                       (const Na_x6 = -25)))
743     ;; end Narsg current
744
745   ))
746
747EOF
748))
749
750     (license
751      "Copyright 2008-2009 Ivan Raikov and the Okinawa Institute of Science and Technology.
752
753This program is free software: you can redistribute it and/or modify
754it under the terms of the GNU General Public License as published by
755the Free Software Foundation, either version 3 of the License, or (at
756your option) any later version.
757
758This program is distributed in the hope that it will be useful, but
759WITHOUT ANY WARRANTY; without even the implied warranty of
760MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
761General Public License for more details.
762
763A full copy of the GPL license can be found at
764<http://www.gnu.org/licenses/>."))))
765
766
767(define nemo-eggdoc:css (make-parameter #<<EOF
768 <!--
769      CODE {
770            color: #666666;
771          }
772/*   DT.definition EM { font-weight: bold; font-style: normal; } */
773
774     DT.definition { 
775                   background: #eee;
776                   color: black;
777                   padding: 0.2em 1em 0.2em 0.7em;
778                   margin-left: 0.2em;
779border: 1px solid #bbc;
780                   font-family: "Andale Mono", monospace;
781                   /* font-size: 1.2em; */
782                   
783                 }
784     DD {
785                   margin-top: 0.8em;
786                   margin-bottom: 0.8em;
787     }
788     DIV.subsection {
789                    border-top: 1px solid #448;
790                    padding-left: 1em;
791                    margin-bottom: 1.2em;
792     }
793     DIV.subsubsection {
794                    border-top: 1px dotted #99c;
795                    /* border-left: 1px solid #99c; */
796                    padding-left: 1em;
797                    margin-bottom: 1.2em;
798     }
799     DIV.subsubsubsection {
800                    border-top: 1px solid #ddf;
801                    padding-left: 1em;
802                    margin-bottom: 1.2em;
803     }
804
805         DIV.section {
806                 margin-bottom: 1.5em;
807         }
808         a:link {
809                 color: #336;
810         }
811         a:visited { color: #666; }
812         a:active  { color: #966; }
813         a:hover   { color: #669; }
814         body { margin: 0; padding: 0; background: #fff; color: #000; font: 9pt "Lucida Grande", "Verdana", sans-serif; }
815         H2 {
816                 background: #336;
817                 color: #fff;
818                 padding-top: 0.5em;
819                 padding-bottom: 0.5em;
820                 padding-left: 16px;
821                 margin: 0 0 1em 0;
822        }
823        UL LI {
824                list-style: none;
825        }
826        TT {
827                font-family: "Andale Mono", monospace;
828                /* font-size: 1.2em; */
829        }
830        H3 {
831                color: #113;
832                margin-bottom: 0.5em;
833        }
834        H4, H5, H6 {
835                color: #113;
836                margin-bottom: 1.0em;
837        }
838        H5 {
839                font-weight: normal;
840                font-style: italic;
841                font-size: 100%;
842                margin-top: 1.2em;
843        }
844        H6 {
845                font-weight: bold;
846                font-size: 85%;
847                margin-top: 1.2em;
848        }
849     DIV#eggheader {
850         text-align: center;
851                 float: right;
852                 margin-right: 2em;
853     }
854     DIV#header IMG {
855            /* display: block; margin-left: auto; margin-right: auto;  */
856            /* float: right; */
857            border: none;  /* firefox */
858     }
859     DIV#footer {
860                background: #bbd;
861                padding: 0.7em ;
862                border-top: 1px solid #cce;
863     }
864     DIV#footer hr {
865                display: none;
866     }
867     DIV#footer a {
868                float: left;
869     }
870     DIV#revision-history {
871         float: right;
872     }
873     
874     DIV#body {
875                 margin: 1em 1em 1em 16px;
876         }
877
878     DIV#examples PRE {
879       background: #eef;
880       padding: 0.1em;
881       border: 1px solid #aac;
882     }
883     PRE#license, DIV#examples PRE {
884       padding: 0.5em;
885     }
886     DIV#examples PRE {
887       /* font-size: 85%; */
888     }
889     PRE { font-family: "Andale Mono", monospace; }
890     TABLE {
891       background: #eef;
892       padding: 0.2em;
893       border: 1px solid #aac;
894       border-collapse: collapse;
895       width: 100%;
896     }
897     TABLE.symbol-table TD.symbol {
898          font-family: "Andale Mono", monospace;
899          vertical-align: top;
900          /* font-size: 1.2em; */
901     }
902     TABLE.symbol-table TD {
903          font-family: "Andale Mono", monospace;
904          vertical-align: top;
905          /* font-size: 1.2em; */
906     }
907     TH {
908       text-align: left;
909       border-bottom: 1px solid #aac;
910       padding: 0.25em 0.5em 0.25em 0.5em;
911     } 
912     TD { padding: 0.25em 0.5em 0.25em 0.5em; }
913     -->
914EOF
915))
916
917
918
919(if (eggdoc->html
920     doc 
921     `( (eggdoc-style . ,(lambda (tag)
922                           `("<style type=\"text/css\">" ,(nemo-eggdoc:css)
923                             "</style>")))
924       
925        (comment
926         *macro*
927         . ,(lambda (tag . content) `(p . ,content))) 
928                         
929        (ebnf-def       ; Term definition
930         *macro*
931         . ,(lambda (tag term-def . others)
932              `(dl (dt (b (tt ,term-def)) (tt " ::= "))
933                   (dd ,@others))))
934                         
935        (ebnf-kw        ; Keyword
936         *macro*
937         . ,(lambda (tag kw)
938              `((b (tt ,kw)))))
939                         
940        (ebnf-var       ; Variable
941         *macro*
942         . ,(lambda (tag varname) `("{" (i ,varname) "}")))
943                         
944        (ebnf-choice    ; Choice of terms
945         *macro*
946         . ,(lambda (tag . terms)
947              (intersperse terms `(tt " | "))))
948
949        (ebnf-opt       ; Optional terms
950         . ,(lambda (tag . terms)
951              `(" [" ,@terms "] ")))
952                         
953        (ebnf-form      ; ( ... ) Form
954         *macro*
955         . ,(lambda (tag . terms)
956              `("( " ,@(intersperse terms " ") " )")))
957
958        (ebnf-compound  ; Compound form
959         *macro*
960         . ,(lambda (tag term-def . others)
961              `(dl (dt (b (tt ,term-def)) )
962                   (dd ,@others))))
963                         
964        ,@(eggdoc:make-stylesheet doc) ))
965   
966    (void))
Note: See TracBrowser for help on using the repository browser.