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

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

updated nemo doc and setup for version 2.3

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