Changeset 27142 in project for release/4/nemo/trunk/nemo-nmodl.scm


Ignore:
Timestamp:
07/31/12 07:50:19 (9 years ago)
Author:
Ivan Raikov
Message:

nemo: support channels where reversal potential is computed as a function of ionic concentration in NMODL

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/nemo/trunk/nemo-nmodl.scm

    r27140 r27142  
    2828                           varsubst datatype
    2929                           nemo-core nemo-utils nemo-gate-complex)
     30
     31(define (safe-car x)
     32  (and x (car x)))
    3033
    3134(define nmodl-builtin-consts
     
    603606                    defs)))
    604607
     608(define (member-imports x imports)
     609  (safe-car (member x imports (lambda (x y) (equal? x (car y))))))
     610
    605611
    606612(define (rate/reaction-power sys n)
     
    706712             (if (not (null? currents)) (pp indent+ (RANGE ,(slp ", " currents)))))
    707713
    708 
    709714           (for-each (lambda (x)
    710715                       (case (first x)
     
    714719                         (else
    715720                          (cond ((fourth x)
    716                                  (pp indent+ (RANGE ,(second x))
    717                                      (USEION ,(first x) READ ,(third x) WRITE ,(second x))))
     721                                 (let* ((ion (first x))
     722                                        (readqs (filter identity
     723                                                        (list (third x)
     724                                                              (safe-car (member-imports (string->symbol (s+ ion 'i)) imports))
     725                                                              (safe-car (member-imports (string->symbol (s+ ion 'o)) imports)))))
     726                                        )
     727                                   (pp indent+ (RANGE ,(second x))
     728                                       (USEION ,ion READ ,(slp ", " readqs) WRITE ,(second x)))))
    718729                                (else (pp indent+ (RANGE ,(second x))))))))
    719730                     (delete-duplicates perm-ions (lambda (x y) (eq? (car x) (car y)))))
     
    774785                             (list (first nv) v1))))
    775786                    consts))
     787
    776788                  (parameter-locals  (find-locals (map second parameter-defs)))
     789
    777790                  (state-defs
    778791                   (append
     
    782795                         states)
    783796                    (map nmodl-name reactions)))
     797
    784798                  (assigned-defs
    785799                   (filter-map
     
    796810                             (map (lambda (gate-complex) (nmodl-name (s+ 'i_ (first gate-complex)))) gate-complexes )
    797811                             (map (lambda (i-gate) (nmodl-name (s+ 'i_ (second i-gate)))) i-gates )
    798                              )))))
     812                             ))))
     813                  )
    799814             
    800815             (pp indent ,nl (PARAMETER "{"))
Note: See TracChangeset for help on using the changeset viewer.