Changeset 11638 in project for release/3/oru/nmodl.scm


Ignore:
Timestamp:
08/14/08 06:20:31 (13 years ago)
Author:
Ivan Raikov
Message:

Some bugs fixed in processing defun declarations.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/3/oru/nmodl.scm

    r11603 r11638  
    516516                                    (if perm  (cons `(,perm ,i ,e ,erev) ax) ax)))
    517517                                (list) ionchs)
    518                            (lambda (x y) (eq? (car x) (car y))))
    519                           ))
     518                           (lambda (x y) (eq? (car x) (car y)))))
     519               (acc-ions (delete-duplicates
     520                           (fold (lambda (n ax)
     521                                  (let* ((subcomps ((dis 'component-subcomps) sys n))
     522                                         (acc   (lookup-def 'accumulating-substance subcomps))
     523                                         (i     (and acc (nmodl-name (s+ 'i acc))))
     524                                         (in    (and acc (nmodl-name (s+ acc 'i))))
     525                                         (out   (and acc (nmodl-name (s+ acc 'o)))))
     526                                    (if acc  (cons `(,acc ,i ,in ,out) ax) ax)))
     527                                (list) ionchs)
     528                           (lambda (x y) (eq? (car x) (car y)))))
     529               )
    520530               
    521531           (with-output-to-file sfname
     
    529539                               (USEION ,(first x) READ ,(third x) WRITE ,(second x))))
    530540                         perm-ions)
     541               (for-each (lambda (x)
     542                           (pp indent+ (RANGE ,(second x))
     543                               (USEION ,(first x) READ ,(third x) ", " ,(fourth x) WRITE ,(second x))))
     544                         acc-ions)
     545               
    531546               (pp indent "}")
    532547
     
    562577                         imports)
    563578               (for-each (lambda (x) (pp indent+ ,(second x) ,(third x))) perm-ions)
     579               (for-each (lambda (x) (pp indent+ ,(second x) ,(third x) ,(fourth x))) acc-ions)
    564580               (pp indent "}")
    565581
     
    592608                              (lambda (n)
    593609                                (let* ((subcomps ((dis 'component-subcomps) sys n))
     610                                       (acc   (lookup-def 'accumulating-substance subcomps))
    594611                                       (perm  (lookup-def 'permeating-substance subcomps))
    595612                                       (pore  (lookup-def 'pore subcomps))
    596613                                       (gate  (lookup-def 'gate subcomps))
    597614                                       (sts   (and gate ((dis 'component-exports) sys gate))))
    598                                   (and perm pore gate
    599                                        (let* ((i     (nmodl-name (s+ 'i perm)))
    600                                               (e     (nmodl-name (s+ 'e perm)))
    601                                               (gmax  (car ((dis 'component-exports) sys pore)))
    602                                               (pwrs  (map (lambda (n) (state-power sys n)) sts))
    603                                               (gion  `(* ,gmax . ,(map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))))
    604                                          (list i e gion)))))
     615                                  (cond ((and perm pore gate)
     616                                         (let* ((i     (nmodl-name (s+ 'i perm)))
     617                                                (e     (nmodl-name (s+ 'e perm)))
     618                                                (gmax  (car ((dis 'component-exports) sys pore)))
     619                                                (pwrs  (map (lambda (n) (state-power sys n)) sts))
     620                                                (gion  `(* ,gmax . ,(map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))))
     621                                           (list i e gion)))
     622                                         ((and acc pore gate)
     623                                          (let* ((i     (nmodl-name (s+ 'i acc)))
     624                                                 (gmax  (car ((dis 'component-exports) sys pore)))
     625                                                 (pwrs  (map (lambda (n) (state-power sys n)) sts))
     626                                                 (gion  `(* ,gmax . ,(map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))))
     627                                           (list i #f gion)))
     628                                         (else (oru:error 'oru:nmodl-translator ": invalid ion channel definition " n))
     629                                        )))
    605630                                 ionchs))
    606631                      (i-bkts (bucket-partition (lambda (x y) (eq? (car x) (car y))) i-eqs))
     
    608633                                      (match b
    609634                                             ((and ps ((i e gion) . rst)) 
    610                                               (let* ((sum   `(* ,(sum (map third ps)) (- v ,e)))
     635                                              (let* ((sum   (if e `(* ,(sum (map third ps)) (- v ,e))
     636                                                                (sum (map third ps))))
    611637                                                     (sum0  (rhsexpr sum))
    612638                                                     (sum1  (canonicalize-expr/NMODL sum0)))
     
    614640
    615641                                             ((i e gion)
    616                                               (let* ((expr0  (rhsexpr `(* ,gion (- v ,e))))
     642                                              (let* ((expr0  (rhsexpr (if e `(* ,gion (- v ,e)) gion)))
    617643                                                     (expr1  (canonicalize-expr/NMODL expr0)))
    618644                                                (cons (list i expr1) ax)))
Note: See TracChangeset for help on using the changeset viewer.