Changeset 12836 in project


Ignore:
Timestamp:
12/17/08 08:56:46 (11 years ago)
Author:
Ivan Raikov
Message:

Introducing rate equations.

Location:
release/3/nemo/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • release/3/nemo/trunk/nemo-core.scm

    r12835 r12836  
    1717;; <http://www.gnu.org/licenses/>.
    1818;;
    19 ;; TODO: * check that open states in state complexes are valid
     19;; TODO: * check that open states in reactions are valid
     20;;       * check that reactions do not specify more than
     21;;         one transition between any two states
    2022;;
    2123
     
    4446                 nemo:rhs? nemo:lineq? nemo:subst-term nemo:binding? nemo:bind
    4547                 eval-nemo-system-decls
    46                  REACTION ASGN CONST PRIM))
     48                 CONST ASGN REACTION RATE PRIM))
    4749
    4850;--------------------
     
    110112(define-datatype nemo:quantity nemo:quantity?
    111113  (SYSNAME    (name symbol?))
     114  (CONST      (name symbol?) (value number?))
    112115  (ASGN       (name symbol?) (value number?) (rhs rhs?) )
    113   (CONST      (name symbol?) (value number?))
    114   (REACTION     (name symbol?)
     116  (REACTION   (name symbol?)
    115117              (initial      (lambda (x) (or (rhs? x) (not x))))
    116118              (open         (lambda (x) (or (symbol? x) (and (list? x) (every symbol? x) ))))
     
    118120              (conserve     (lambda (x) (or (not x) (and (list? x) (every lineq? x)))))
    119121              (power        integer?))
     122  (RATE       (name symbol?)
     123              (initial      (lambda (x) (or (rhs? x) (not x))))
     124              (rhs          rhs?))
    120125  (PRIM       (name symbol?) (value identity))
    121126  (EXTERNAL   (local-name symbol?) (name symbol?) (namespace (optional symbol?)))
    122   (DISPATCH   (value procedure?))
    123127  (EXPORTS    (lst (lambda (x) (and (list? x) (every symbol? x)))))
    124128  (COMPONENT  (name symbol?) (type symbol?) (lst (lambda (x) (and (list? x) (every symbol? x)))))
    125129  (FUNCTOR    (name symbol?) (args (lambda (x) (and (list? x) (every symbol? x)))) (type symbol?)  (decls list?))
     130  (DISPATCH   (value procedure?))
    126131  )
    127132
     
    376381                            (environment-extend! nemo-env sym (CONST name initial))))
    377382
     383              (('asgn)    (let ((rhs (lookup-def 'rhs alst)))
     384                            (if (not (eq? initial 'none))
     385                                (nemo:error 'env-extend!
     386                                                    ": state function definitions must have initial value of '(none)"))
     387                            (if (not rhs)
     388                                (nemo:error 'env-extend! ": state function definitions require an equation"))
     389                            (environment-extend! nemo-env sym (ASGN  name 0.0 (normalize-expr rhs)))))
     390
     391              (('rate)    (let ((rhs (lookup-def 'rhs alst))
     392                                (initial (lookup-def 'initial alst)))
     393                           
     394                            (if (not (rhs? rhs))
     395                                (nemo:error 'env-extend! ": rate law definitions require an equation"))
     396                            (if (not (rhs? initial) )
     397                                (nemo:error 'env-extend! ": rate law definitions require an initial value or expression"))
     398
     399                            (environment-extend! nemo-env sym (RATE  name initial (normalize-expr rhs)))))
     400
    378401              (('tscomp)  (begin
    379402                            (let ((power         (or (lookup-def 'power alst) 1))
     
    405428                                (environment-extend! nemo-env sym en)))))
    406429
    407               (('asgn)    (let ((rhs (lookup-def 'rhs alst)))
    408                             (if (not (eq? initial 'none))
    409                                 (nemo:error 'env-extend!
    410                                                     ": state function definitions must have initial value of '(none)"))
    411                             (if (not rhs)
    412                                 (nemo:error 'env-extend! ": state function definitions require an equation"))
    413                             (environment-extend! nemo-env sym (ASGN  name 0.0 (normalize-expr rhs)))))
    414430
    415431              (else       (begin
     
    620636                                                 (ss2 (map (lambda (x) (list name x))  ss1)))
    621637                                            (append ss2 ax)))
     638                                  (RATE (name initial rhs) (cons name ax))
    622639                                  (else ax))
    623640                           ax)))
     
    636653           (list) (environment-symbols nemo-env)))
    637654
     655
     656  (define (rates nemo-env)
     657      (filter-map (lambda (sym)
     658                    (let ((x (environment-ref nemo-env sym)))
     659                      (and (nemo:quantity? x)
     660                           (cases nemo:quantity x
     661                                  (RATE (name value rhs) name)
     662                                  (else #f)))))
     663           (environment-symbols nemo-env)))
    638664
    639665  (define (asgns nemo-env)
     
    670696                              (fprintf out "    value: ~a\n" value)))
    671697
    672                      (REACTION (name initial open transitions conserve power)
    673                              (begin
    674                                (fprintf out "~a: transition state complex\n" name)
    675                                (fprintf out "    initial value: ~a\n" initial)))
    676                      
    677698                     (CONST    (name value)
    678699                               (begin
     
    685706                                 (fprintf out "    value: ~a\n" value)))
    686707
     708                     (REACTION (name initial open transitions conserve power)
     709                             (begin
     710                               (fprintf out "~a: transition state complex\n" name)
     711                               (fprintf out "    initial value: ~a\n" initial)))
     712                     
     713                     (RATE     (name initial rhs)
     714                               (begin
     715                                 (fprintf out "~a: rate law\n" name)
     716                                 (fprintf out "    rhs: ~a\n" rhs)))
     717
    687718                     (else (nemo:error 'exam name ": unknown type of quantity"))))))))
    688719 
     
    715746         (cases nemo:quantity x
    716747                (REACTION (name initial open transitions)  #t)
     748                (RATE     (name initial rhs) #t)
    717749                (else #f))))
    718750
     
    724756                        (begin
    725757                          (map cadddr transitions)))
     758                (RATE  (name initial rhs)  rhs)
    726759                (ASGN  (name value rhs)  rhs)
    727760                (else #f))))
     
    805838                                     (REACTION (name initial open transitions)
    806839                                             (let ((rs (map cadddr transitions)))
    807                                                (list 'ts sym rs)))
     840                                               (list 're sym rs)))
     841                                     (RATE  (name initial rhs)
     842                                            (list 'r sym rhs))
    808843                                     (ASGN  (name value rhs)
    809844                                            (list 'a sym rhs))
     
    871906      ((states)              states)
    872907      ((reactions)           reactions)
     908      ((rates)               rates)
    873909      ((defuns)              defuns)
    874910      ((consts)              consts)
     
    951987
    952988                            ;; state transition complex
    953                             (((or 'reactive 'REACTION) ((and id (? symbol?)) . alst) )
     989                            (((or 'reaction 'REACTION) ((and id (? symbol?)) . alst) )
    954990                             (let* ((initial      (lookup-def 'initial alst))
    955991                                    (conserve-eq  (alist-ref 'conserve alst))
     
    10011037                           
    10021038                           
     1039                            ;; rate law
     1040                            (((or 'd 'D) ((and id (? symbol?))) '= (and expr (? expr?) ))
     1041                             (let* ((qid    (compute-qid id scope scope-subst))
     1042                                    (qexpr  (subst-expr (parse-expr expr) scope-subst)))
     1043                               (env-extend! qid '(rate) 0.0 `(rhs ,qexpr))
     1044                               (list (cons qid qs) (update-subst id qid scope-subst))))
     1045                           
    10031046                            ;; algebraic assignment
    10041047                            (((and id (? symbol?)) '= (and expr (? expr?) ))
  • release/3/nemo/trunk/nemo-matlab.scm

    r12835 r12836  
    294294
    295295
    296 (define (poset->state-eq-defs poset sys)
    297   (fold-right
    298    (lambda (lst ax)
    299      (fold  (lambda (x ax)
    300               (match-let (((i . n)  x))
    301                          (let ((en (environment-ref sys n)))
    302                            (if (nemo:quantity? en)
    303                                (cases nemo:quantity en
    304                                       (TSCOMP  (name initial open transitions conserve power)
    305                                                (append (state-eqs name initial open transitions power) ax))
    306                                       (else  ax))
    307                                ax))))
    308             ax lst))
    309    (list) poset))
    310 
    311 
    312 
    313 
    314296(define (poset->reaction-eq-defs poset sys)
    315297  (fold-right
     
    320302                           (if (nemo:quantity? en)
    321303                               (cases nemo:quantity en
    322                                       (TSCOMP  (name initial open transitions conserve power)
    323                                               (cons (reaction-eq name open transitions) ax))
     304                                      (REACTION  (name initial open transitions conserve power)
     305                                                (cons (reaction-eq name open transitions) ax))
    324306                                      (else  ax))
    325307                               ax))))
     
    336318                           (if (nemo:quantity? en)
    337319                               (cases nemo:quantity en
    338                                       (TSCOMP  (name initial open transitions conserve power)
    339                                               (if (nemo:rhs? initial)
    340                                                    (cons* (state-init name initial)
    341                                                           (state-init (matlab-state-name name open) name) ax)
    342                                                    ax))
     320                                      (REACTION  (name initial open transitions conserve power)
     321                                                (if (nemo:rhs? initial)
     322                                                     (cons* (state-init name initial)
     323                                                            (state-init (matlab-state-name name open) name) ax)
     324                                                     ax))
    343325                                      (else  ax))
    344326                               ax))))
     
    355337                           (if (nemo:quantity? en)
    356338                               (cases nemo:quantity en
    357                                       (TSCOMP (name initial open transitions conserve power)
    358                                               (if (and (list? conserve) (every nemo:lineq? conserve))
    359                                                   (cons (state-lineqs (matlab-name name) transitions conserve
    360                                                                       matlab-state-name) ax)
    361                                                   ax))
     339                                      (REACTION (name initial open transitions conserve power)
     340                                                (if (and (list? conserve) (every nemo:lineq? conserve))
     341                                                    (cons (state-lineqs (matlab-name name) transitions conserve
     342                                                                        matlab-state-name) ax)
     343                                                    ax))
    362344                                      (else  ax))
    363345                               ax))))
     
    366348
    367349
    368 (define (state-power sys n)
     350(define (reaction-power sys n)
    369351  (let ((en (environment-ref sys n)))
    370352    (if (nemo:quantity? en)
    371353        (cases nemo:quantity en
    372                (TSCOMP  (name initial open transitions conserve power)  power)
     354               (REACTION  (name initial open transitions conserve power)  power)
    373355               (else  #f))  #f)))
    374356
     
    486468                                               (e     (car permqs))
    487469                                               (gmax  (car ((dis 'component-exports) sys (cid pore))))
    488                                                (pwrs  (map (lambda (n) (state-power sys n)) sts))
     470                                               (pwrs  (map (lambda (n) (reaction-power sys n)) sts))
    489471                                               (sptms (map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))
    490472                                               (gion  `(* ,gmax ,@sptms)))
     
    494476                                               (e     (car permqs))
    495477                                               (gmax  (car ((dis 'component-exports) sys (cid pore))))
    496                                                (pwrs  (map (lambda (n) (state-power sys n)) sts))
     478                                               (pwrs  (map (lambda (n) (reaction-power sys n)) sts))
    497479                                               (sptms (map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))
    498480                                               (gion  `(* ,gmax ,@sptms)))
     
    512494                                     (let* ((i     (matlab-name (s+ 'i (cn acc))))
    513495                                            (gmax  (car ((dis 'component-exports) sys (cid pore))))
    514                                             (pwrs  (map (lambda (n) (state-power sys n)) sts))
     496                                            (pwrs  (map (lambda (n) (reaction-power sys n)) sts))
    515497                                            (sptms (map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))
    516498                                            (gion  `(* ,gmax ,@sptms)))
  • release/3/nemo/trunk/nemo-nmodl.scm

    r12835 r12836  
    370370 
    371371
    372 (define (state-eqs n initial open transitions power method)
     372(define (reaction-eqs n initial open transitions power method)
    373373  (match-let (((g  node-subs)  (transitions-graph n open transitions nmodl-state-name)))
    374374     (let* ((out-edges  (g 'out-edges))
     
    402402       
    403403
    404 (define (kstate-eqs n initial open transitions power)
     404(define (reaction-keqs n initial open transitions power)
    405405  (let* ((subst-convert  (subst-driver (lambda (x) (and (symbol? x) x))
    406406                                       nemo:binding? identity nemo:bind nemo:subst-term))
     
    417417                                       (loop (cons* s0 s1 lst) (cdr tlst)))
    418418                                      (else
    419                                        (nemo:error 'nemo:nmodl-kstate-eqs ": invalid transition equation "
     419                                       (nemo:error 'nemo:nmodl-reaction-keqs ": invalid transition equation "
    420420                                                   (car tlst) " in state complex " n))
    421421                                      (else (loop lst (cdr tlst)))))))
     
    447447                   
    448448                   
    449                     (else (nemo:error 'nemo:nmodl-kstate-eqs ": invalid transition equation "
     449                    (else (nemo:error 'nemo:nmodl-reaction-keqs ": invalid transition equation "
    450450                                      e " in state complex " n))))
    451451           transitions))))
     
    467467(define (reaction-eq n open transitions)
    468468  (list (nmodl-name n) (nmodl-name (nmodl-state-name n open))))
     469
     470(define (poset->reaction-eq-defs poset sys)
     471  (fold-right
     472   (lambda (lst ax)
     473     (fold  (lambda (x ax)
     474              (match-let (((i . n)  x))
     475                         (let ((en (environment-ref sys n)))
     476                           (if (and (not (member n kinetic)) (nemo:quantity? en))
     477                               (cases nemo:quantity en
     478                                      (REACTION  (name initial open transitions conserve power)
     479                                                 (append (reaction-eq name open transitions) ax))
     480
     481                                      (else  ax))
     482                               ax))))
     483            ax lst))
     484   (list) poset))
    469485
    470486
     
    492508                           (if (and (not (member n kinetic)) (nemo:quantity? en))
    493509                               (cases nemo:quantity en
    494                                       (TSCOMP  (name initial open transitions conserve power)
    495                                                (append (state-eqs name initial open transitions power method) ax))
     510                                      (REACTION  (name initial open transitions conserve power)
     511                                                 (append (reaction-eqs name initial open transitions power method) ax))
     512                                     
     513                                      (RATE (name initial rhs)
     514                                            (let ((fbody0  (rhsexpr rhs))
     515                                                  (dy      (s+ name "'")))
     516                                              (case method
     517                                                ((expeuler) 
     518                                                 (cons (list dy (canonicalize-expr/NMODL (expeuler 'dt name fbody0)))
     519                                                       ax))
     520                                                (else
     521                                                 (cons (list dy (canonicalize-expr/NMODL fbody0)) ax)))))
     522
    496523                                      (else  ax))
    497524                               ax))))
     
    508535                           (if (and (member n kinetic) (nemo:quantity? en))
    509536                               (cases nemo:quantity en
    510                                       (TSCOMP  (name initial open transitions conserve power)
    511                                                (cons (kstate-eqs name initial open transitions power) ax))
     537                                      (REACTION  (name initial open transitions conserve power)
     538                                                 (cons (reaction-keqs name initial open transitions power) ax))
    512539                                      (else  ax))
    513540                               ax))))
     
    515542   (list) poset))
    516543
    517 
    518 (define (poset->reaction-eq-defs poset sys)
    519   (fold-right
    520    (lambda (lst ax)
    521      (fold  (lambda (x ax)
    522               (match-let (((i . n)  x))
    523                          (let ((en (environment-ref sys n)))
    524                            (if (nemo:quantity? en)
    525                                (cases nemo:quantity en
    526                                       (TSCOMP  (name initial open transitions conserve power)
    527                                                (cons (reaction-eq name open transitions) ax))
    528                                       (else  ax))
    529                                ax))))
    530             ax lst))
    531    (list) poset))
    532544
    533545(define (poset->state-init-defs poset sys)
     
    539551                           (if (nemo:quantity? en)
    540552                               (cases nemo:quantity en
    541                                       (TSCOMP  (name initial open transitions conserve power)
    542                                               (if (nemo:rhs? initial)
    543                                                    (cons* (state-init name initial)
    544                                                           (state-init (nmodl-state-name name open) name) ax)
    545                                                    ax))
     553                                      (REACTION  (name initial open transitions conserve power)
     554                                                (if (nemo:rhs? initial)
     555                                                     (cons* (state-init name initial)
     556                                                            (state-init (nmodl-state-name name open) name) ax)
     557                                                     ax))
    546558                                      (else  ax))
    547559                               ax))))
     
    557569                           (if (nemo:quantity? en)
    558570                               (cases nemo:quantity en
    559                                       (TSCOMP (name initial open transitions conserve power)
    560                                               (if (and (list? conserve) (every nemo:lineq? conserve))
    561                                                   (cons (state-lineqs (nmodl-name name) transitions conserve
    562                                                                       nmodl-state-name) ax)
    563                                                   ax))
     571                                      (REACTION (name initial open transitions conserve power)
     572                                                (if (and (list? conserve) (every nemo:lineq? conserve))
     573                                                    (cons (state-lineqs (nmodl-name name) transitions conserve
     574                                                                        nmodl-state-name) ax)
     575                                                    ax))
    564576                                      (else  ax))
    565577                               ax))))
     
    572584
    573585
    574 (define (state-power sys n)
     586(define (reaction-power sys n)
    575587  (let ((en (environment-ref sys n)))
    576588    (if (nemo:quantity? en)
    577589        (cases nemo:quantity en
    578                (TSCOMP  (name initial open transitions conserve power)  power)
     590               (REACTION  (name initial open transitions conserve power)  power)
    579591               (else  #f))  #f)))
    580592
     
    593605(define (collect-epools sys)
    594606   (match-let ((($ nemo:quantity 'DISPATCH  dis) (environment-ref sys (nemo-intern 'dispatch))))
    595       (let recur ((comp-name (nemo-intern 'toplevel)) (ax (list)))
    596         (let* ((comp-symbols   ((dis 'component-symbols)   sys comp-name))
    597                (subcomps       ((dis 'component-subcomps)  sys comp-name)))
    598           (fold recur
    599                 (fold (lambda (sym ax)
    600                         (let ((en (environment-ref sys sym)))
    601                           (match en
    602                                  ((or (('decaying 'pool)  ('name (? symbol? ion)) . alst)
    603                                       (('decaying-pool)   ('name (? symbol? ion)) . alst))
    604                                   (cons (list ion alst) ax))
    605                                  (else ax)))) ax comp-symbols)
    606                 (map third subcomps))))))
     607     (let recur ((comp-name (nemo-intern 'toplevel)) (ax (list)))
     608                    (let* ((comp-symbols   ((dis 'component-symbols)   sys comp-name))
     609                           (subcomps       ((dis 'component-subcomps)  sys comp-name))
     610                           (iscomp?        (lambda (x) (match x (('decaying-pool name id) id)
     611                                                              (('decaying 'pool name id) id)
     612                                                              (else #f)))))
     613                      (let-values (((epool-comps other-comps)  (partition iscomp? subcomps)))
     614                        (let ((epools (map (lambda (x)
     615                                             (let ((exports ((dis 'component-exports) sys (cid x))))
     616                                               (if (null? exports)
     617                                                   (nemo:error 'nemo:nmodl-translator
     618                                                               ": ion pool component " (cid x)
     619                                                               " must export a state"))
     620                                               `(,@(cdr x) ,(car exports))))
     621                                           epools-comps)))
     622                          (fold recur other-comps (append epools ax))))))))
    607623
    608624
     
    626642             (kinetic     (if (eq? kinetic 'all) (delete-duplicates (map first states)) kinetic))
    627643             (reactions   ((dis 'reactions) sys))
     644             (rates       ((dis 'rates) sys))
    628645             (defuns      ((dis 'defuns)  sys))
    629646             (components  ((dis 'components) sys))
     
    659676                                         (list) ionchs))
    660677               (pool-ions          (map (lambda (ep)
    661                                           (let ((ion (car ep)))
    662                                             `(,(nmodl-name ion) ,(nmodl-name (s+ 'i ion)) ,(nmodl-name (s+ ion 'i)))))
     678                                          (let ((ion (first ep))
     679                                                (state (fourth ep)))
     680                                                `(,(nmodl-name state) ,(nmodl-name (s+ 'i ion))
     681                                                  ,(nmodl-name (s+ ion 'i)))))
    663682                                        epools))
    664683               (i-gates           (fold (lambda (ionch ax)
    665                                            (let* ((subcomps ((dis 'component-subcomps) sys (cid ionch)))
    666                                                   (i-gate-comp    (lookup-def 'binary-gate subcomps)))
     684                                           (let* ((subcomps     ((dis 'component-subcomps) sys (cid ionch)))
     685                                                  (i-gate-comp  (lookup-def 'binary-gate subcomps)))
    667686                                             (if i-gate-comp
    668687                                                 (let* ((i-gate-exps  ((dis 'component-exports) sys (cid i-gate-comp)))
     
    752771                         (let ((n (first def)) (b (second def)))
    753772                           (pp indent+ ,(expr->string/NMODL b n)))) const-defs)
    754              (for-each (lambda (ep)
    755                          (let* ((ep-name     (first ep))
    756                                 (ep-props    (second ep))
    757                                 (init-expr   (lookup-def 'initial ep-props))
    758                                 (temp-expr   (lookup-def 'temp-adj ep-props))
    759                                 (beta-expr   (lookup-def 'beta ep-props))
    760                                 (depth-expr  (lookup-def 'depth ep-props))
    761                                 (init-name   (nmodl-name (s+ ep-name '-init)))
    762                                 (temp-name   (nmodl-name (s+ ep-name '-temp-adj)))
    763                                 (beta-name   (nmodl-name (s+ ep-name '-beta)))
    764                                 (depth-name  (nmodl-name (s+ ep-name '-depth))))
    765                            (if (or (not beta-expr) (not depth-expr) (not init-expr))
    766                                (nemo:error 'nemo:nmodl-translator
    767                                            ": ion pool " ep-name " requires initial value, depth and beta parameters"))
    768                            (let ((temp-val  (and temp-expr (eval-const sys temp-expr)))
    769                                  (init-val  (eval-const sys init-expr))
    770                                  (beta-val  (eval-const sys beta-expr))
    771                                  (depth-val (eval-const sys depth-expr)))
    772                              (pp indent+ ,(expr->string/NMODL init-val init-name))
    773                              (pp indent+ ,(expr->string/NMODL temp-val temp-name))
    774                              (pp indent+ ,(expr->string/NMODL beta-val beta-name))
    775                              (pp indent+ ,(expr->string/NMODL depth-val depth-name)))))
    776                        epools))
    777            (case method  ((expeuler)  (pp indent+ dt)))
    778            (pp indent "}")
     773             
     774             (case method  ((expeuler)  (pp indent+ dt)))
     775             (pp indent "}"))
    779776           
    780777           (let* ((define-fn (make-define-fn table? min-v max-v table-with depend)))
     
    793790           (for-each (lambda (st) (apply define-state (list indent+ st)))
    794791                     reactions)
     792           (for-each (lambda (st) (apply define-state (list indent+ st)))
     793                     rates)
    795794           (for-each (lambda (pool-ion) (apply define-state (list indent+ (first pool-ion))))
    796795                     pool-ions)
     
    809808           (if (not (null? asgns))
    810809               (begin
    811                  (pp indent ,nl (PROCEDURE rates () "{"))
     810                 (pp indent ,nl (PROCEDURE asgns () "{"))
    812811                 (let ((locals    (find-locals (map second asgn-eq-defs))) )
    813812                   (if (not (null? locals)) (pp indent+ (LOCAL ,(sl\ ", " locals)))))
     
    830829               (begin
    831830                 (pp indent ,nl (PROCEDURE reactions () "{"))
    832                  (let* ((eq-defs   (poset->reactions-eq-defs poset sys))
     831                 (let* ((eq-defs   (poset->reaction-eq-defs poset sys))
    833832                        (locals    (find-locals (map second eq-defs))) )
    834833                   (if (not (null? locals)) (pp indent+ (LOCAL ,(sl\ ", " locals))))
     
    871870                                               (e     (car permqs))
    872871                                               (gmax  (car ((dis 'component-exports) sys (cid pore))))
    873                                                (pwrs  (map (lambda (n) (state-power sys n)) sts))
     872                                               (pwrs  (map (lambda (n) (reaction-power sys n)) sts))
    874873                                               (sptms (map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))
    875874                                               (gion  `(* ,gmax ,@sptms)))
     
    879878                                               (e     (nmodl-name (s+ 'e (cn perm))))
    880879                                               (gmax  (car ((dis 'component-exports) sys (cid pore))))
    881                                                (pwrs  (map (lambda (n) (state-power sys n)) sts))
     880                                               (pwrs  (map (lambda (n) (reaction-power sys n)) sts))
    882881                                               (sptms (map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))
    883882                                               (gion  `(* ,gmax ,@sptms)))
     
    900899                                       (let* ((i     (nmodl-name (s+ 'i (cn acc))))
    901900                                              (gmax  (car ((dis 'component-exports) sys (cid pore))))
    902                                               (pwrs  (map (lambda (n) (state-power sys n)) sts))
     901                                              (pwrs  (map (lambda (n) (reaction-power sys n)) sts))
    903902                                              (sptms (map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))
    904903                                              (gion  `(* ,gmax ,@sptms)))
     
    935934                  (locals (find-locals (map second i-eqs))))
    936935             (if (not (null? locals))    (pp indent+ (LOCAL ,(sl\ ", " locals))))
    937              (if (not (null? asgns))     (pp indent+ (rates ())))
     936             (if (not (null? asgns))     (pp indent+ (asgns ())))
    938937             (if has-ode?
    939938                 (case method
     
    947946           
    948947           (if has-ode?
    949                (let* ((state-eq-defs  (reverse (poset->state-eq-defs poset sys kinetic method)))
    950                       (pool-eq-defs
    951                        (map (lambda (ep)
    952                               (let* ((ep-name     (first ep))
    953                                      (pool-ion    (assoc ep-name pool-ions))
    954                                      (i-name      (second pool-ion))
    955                                      (init-name   (nmodl-name (s+ ep-name '-init)))
    956                                      (temp-name   (nmodl-name (s+ ep-name '-temp-adj)))
    957                                      (beta-name   (nmodl-name (s+ ep-name '-beta)))
    958                                      (depth-name  (nmodl-name (s+ ep-name '-depth)))
    959                                      (rhs         `(let ((F 96485.0))
    960                                                      (- (/ (neg ,i-name) (* 2 F ,init-name ,depth-name))
    961                                                         (* ,ep-name ,beta-name .
    962                                                            ,(if temp-name (list temp-name) (list)))))))
    963                                 (case method
    964                                   ((expeuler)  `(,ep-name ,(canonicalize-expr/NMODL (expeuler 'dt ep-name rhs))))
    965                                   (else        `(,(s+ ep-name "'") ,(canonicalize-expr/NMODL rhs))))))
    966                             epools))
    967                       (eq-defs (append pool-eq-defs state-eq-defs))
    968                       (locals  (find-locals (map second eq-defs))))
     948               (let* ((eq-defs  (reverse (poset->state-eq-defs poset sys kinetic method)))
     949                      (locals   (find-locals (map second eq-defs))))
    969950                 (case method
    970951                   ((expeuler) (pp indent ,nl (PROCEDURE states () "{")))
     
    1016997               (pp indent ,nl (INITIAL "{"))
    1017998               (if (not (null? locals)) (pp indent+ (LOCAL ,(sl\ ", " locals))))
    1018                (if (not (null? asgns))  (pp indent+ (rates ())))
     999               (if (not (null? asgns))  (pp indent+ (asgns ())))
    10191000               (for-each (lambda (def)
    10201001                           (let ((n (first def)) (b (second def)))
Note: See TracChangeset for help on using the changeset viewer.