Changeset 27368 in project


Ignore:
Timestamp:
09/03/12 07:32:59 (7 years ago)
Author:
Ivan Raikov
Message:

nemo: using reversal potential for ionic species in generated nmodl equations

File:
1 edited

Legend:

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

    r27321 r27368  
    699699             )
    700700
    701            (pp indent ,nl (TITLE ,sysname))
    702            
    703            (pp indent ,nl (NEURON "{"))
    704            (let recur ((exports exports))
    705              (if (not (null? exports))
    706                 (begin
    707                    (pp indent+ (RANGE ,(slp ", " (map nmodl-name (take exports (min 10 (length exports)))))))
    708                    (recur (drop exports (min 10 (length exports)))))))
    709 
    710            (let ((currents (append (map (lambda (gate-complex) (nmodl-name (s+ 'i_ (first gate-complex)))) gate-complexes )
    711                                    (map (lambda (i-gate) (nmodl-name (s+ 'i_ (second i-gate)))) i-gates ))))
    712              (if (not (null? currents)) (pp indent+ (RANGE ,(slp ", " currents)))))
    713 
    714            (for-each (lambda (x)
     701        (pp indent ,nl (TITLE ,sysname))
     702       
     703        (pp indent ,nl (NEURON "{"))
     704        (let recur ((exports exports))
     705          (if (not (null? exports))
     706              (begin
     707                (pp indent+ (RANGE ,(slp ", " (map nmodl-name (take exports (min 10 (length exports)))))))
     708                (recur (drop exports (min 10 (length exports)))))))
     709       
     710        (let ((currents (append (map (lambda (gate-complex) (nmodl-name (s+ 'i_ (first gate-complex)))) gate-complexes )
     711                                (map (lambda (i-gate) (nmodl-name (s+ 'i_ (second i-gate)))) i-gates ))))
     712          (if (not (null? currents)) (pp indent+ (RANGE ,(slp ", " currents)))))
     713       
     714        (for-each (lambda (x)
    715715                       (case (first x)
    716716                         ((non-specific)
    717                           (pp indent+ (RANGE ,(third x))
     717                          (pp indent+
     718                              (RANGE ,(third x))
    718719                              (NONSPECIFIC_CURRENT ,(second x))))
    719720                         (else
     
    725726                                                              (safe-car (member-imports (string->symbol (s+ ion 'o)) imports)))))
    726727                                        )
    727                                    (pp indent+ (RANGE ,(second x))
     728                                   (pp indent+
     729                                       (RANGE ,(second x))
     730                                       (RANGE ,(third x))
    728731                                       (USEION ,ion READ ,(slp ", " readqs) WRITE ,(second x)))))
    729732                                (else (pp indent+ (RANGE ,(second x))))))))
     
    913916                                     (case (cn perm)
    914917                                       ((non-specific)
    915                                         (let* ((i     (nmodl-name 'i))
    916                                                (e     (car permqs))
    917                                                (gmax  (car ((dis 'component-exports) sys (cid pore))))
    918                                                (pwrs  (map (lambda (n) (rate/reaction-power sys n)) sts))
    919                                                (sptms (map (lambda (st pwr) (if pwr `(pow ,st ,pwr) st)) sts pwrs))
     918                                        (let* ((i      (nmodl-name 'i))
     919                                               (e      (nmodl-name 'e))
     920                                               (gmax   (car ((dis 'component-exports) sys (cid pore))))
     921                                               (pwrs   (map (lambda (n) (rate/reaction-power sys n)) sts))
     922                                               (sptms  (map (lambda (st pwr) (if pwr `(pow ,st ,pwr) st)) sts pwrs))
    920923                                               (gion  `(* ,gmax ,@sptms)))
    921924                                          (list i e gion (nmodl-name (s+ 'i_ label) ))))
    922925
    923926                                       (else
    924                                         (let* ((i     (nmodl-name (s+ 'i (cn perm))))
    925                                                (e     (nmodl-name (car permqs)))
    926                                                (gmax  (car ((dis 'component-exports) sys (cid pore))))
    927                                                (pwrs  (map (lambda (n) (rate/reaction-power sys n)) sts))
    928                                                (sptms (map (lambda (st pwr) (if pwr `(pow ,st ,pwr) st)) sts pwrs))
    929                                                (gion  `(* ,gmax ,@sptms)))
     927                                        (let* ((i          (nmodl-name (s+ 'i (cn perm))))
     928                                               (e          (nmodl-name (s+ 'e (cn perm))))
     929                                               (gmax       (car ((dis 'component-exports) sys (cid pore))))
     930                                               (pwrs       (map (lambda (n) (rate/reaction-power sys n)) sts))
     931                                               (sptms      (map (lambda (st pwr) (if pwr `(pow ,st ,pwr) st)) sts pwrs))
     932                                               (gion       `(* ,gmax ,@sptms)))
    930933
    931934                                          (list i e gion (nmodl-name (s+ 'i_ label)))))))
     
    934937                                     (case (cn perm)
    935938                                       ((non-specific)
    936                                         (let* ((i     (nmodl-name 'i))
    937                                                (e     (car permqs))
    938                                                (gmax  (car ((dis 'component-exports) sys (cid pore)))))
     939                                        (let* ((i      (nmodl-name 'i))
     940                                               (e      (nmodl-name (s+ 'e (cn perm))))
     941                                               (gmax   (car ((dis 'component-exports) sys (cid pore)))))
    939942                                          (list i e gmax (nmodl-name (s+ 'i_ label)))))
    940943                                       (else
     
    10591062           (let ((locals (find-locals (map second state-init-defs))))
    10601063               (pp indent ,nl (INITIAL "{"))
     1064
    10611065               (if (not (null? locals)) (pp indent+ (LOCAL ,(slp ", " locals))))
    10621066               (if (not (null? asgns))  (pp indent+ (asgns ())))
     
    10641068                           (let ((n (first def)) (b (second def)))
    10651069                             (pp indent+ ,(expr->string/NMODL b n)))) state-init-defs)
    1066 
    10671070               (if has-kinetic?
    10681071                   (pp indent+ (SOLVE kstates STEADYSTATE sparse)))
     1072
     1073               (for-each
     1074                (lambda (gate-complex)
     1075
     1076                  (let* ((label             (first gate-complex))
     1077                         (n                 (second gate-complex))
     1078                         (subcomps          ((dis 'component-subcomps) sys n))
     1079                         (perm              (lookup-def 'permeating-ion subcomps))
     1080                         (permqs            (and perm ((dis 'component-exports) sys (cid perm))))
     1081                         )
     1082 
     1083                    (if perm
     1084                           
     1085                           (case (cn perm)
     1086                             ((non-specific)
     1087                              (let* ((e       (nmodl-name 'e))
     1088                                     (elocal  (car permqs)))
     1089                                (if (not (equal? e elocal))
     1090                                    (pp indent+ ,(expr->string/NMODL (nmodl-name elocal) e)))))
     1091                             
     1092                             (else
     1093                              (let* ((e      (nmodl-name (s+ 'e (cn perm))))
     1094                                     (elocal (car permqs)))
     1095                                (if (not (equal? e elocal))
     1096                                    (pp indent+ ,(expr->string/NMODL (nmodl-name elocal) e)))))))
     1097                    ))
     1098                gate-complexes)
     1099               
    10691100               
    10701101               (pp indent "}")
Note: See TracChangeset for help on using the changeset viewer.