Changeset 29158 in project


Ignore:
Timestamp:
06/23/13 11:30:11 (8 years ago)
Author:
Ivan Raikov
Message:

nemo: added ~ as a function call argument separator in s-exp parsing frontend; bug fixes related to let expressions with multiple bindings; syntactic errors in CA3 example

Location:
release/4/nemo/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • release/4/nemo/trunk/examples/CA3/CA3_Hemond08.nemo

    r29140 r29158  
    1515   (const  R = 8.3134)
    1616   (const  KTOMV = .0853); (mV/degC)
    17    
     17
     18   (const ek    = -90)   
     19   (const ena   = 55)   
    1820   (const ki     = .001)
    1921
     
    2628   (defun efun (z)
    2729     (if (abs (z) < 1e-4)
    28          then (1 - z/2)
     30         then (1 - z / 2)
    2931         else (z / (exp (z) - 1)))
    3032     )
     
    3335     (let ((f (KTF (celsius) / 2))
    3436           (nu (v / f)))
    35        (neg (f) * (1. - (ci / co) * exp (nu)) * efun (nu))
     37       (neg (f) * (1.0 - (ci / co) * exp (nu)) * efun (nu))
    3638       ))
    3739
     
    9193
    9294                 (mtau = (1 / (alpha_c (v c) + beta_c (v c))))
    93                  (minf = ((alpha_c (v c) * tau)))
     95                 (minf = ((alpha_c (v c) * mtau)))
    9496             
    9597                 (hh-ionic-gate
     
    116118     
    117119      ) ;; end KCa current
    118 
    119120
    120121   
     
    162163                           (exp (0.0378 * zetam * gmm * (v - vhalfm))))
    163164                         
    164                          (qt = (pow (q10 ((celsius - 25) / 10))))
    165                          
    166                          (a = alpha (v))
    167                          (b = (1 / ((a + beta (v)))))
     165                         (qt = (pow (q10 ~ ((celsius - 25) / 10))))
     166                         
     167                         (a    = (alpha (v)))
     168                         (b    = (1 / ((a + beta (v)))))
    168169                         (minf = (a * b))
    169170                         
     
    185186              (component (type permeability)
    186187                         
    187                          (const gcanbar = .003)
     188                         (const gcalbar = .003)
    188189
    189190                         (p   = (gcalbar * ghk (v cai cao celsius) * h2 (cai)))
    190191                         
    191                          (output p)
     192                         (output p gcalbar)
    192193                         )
    193194             
     
    235236
    236237
    237                  (qt = (pow (q10 ((celsius - 25) / 10))))
     238                 (qt = (pow (q10 ~ ((celsius - 25) / 10))))
    238239
    239240                 (am  = (alpha_m (v)))
     
    256257                  (CaN  ;; ion name: exported variables will be of the form {ion}_{id}
    257258                   (initial-m  (minf))
     259                   (initial-h  (hinf))
    258260                   (m-power    2)
    259261                   (h-power    1)
     
    271273                 (p = (gcanbar * ghk (v cai cao celsius) * h2 (cai)))
    272274                 
    273                  (output p)
     275                 (output p gcanbar)
    274276                 )
    275277             
     
    290292                 (component (type gate)
    291293
    292                             (const gcatbar = 0.003)
    293        
    294294                            (const q10  = 5)
    295295                            (const mmin = 0.2)
    296296                            (const hmin = 10)
    297297                            (const a0h  = 0.015)
    298                             (zetah      = 3.5)
     298                            (const zetah  = 3.5)
    299299                            (const vhalfh = -75)
    300300                            (const gmh    = 0.6)
     
    317317                              (exp (0.0378 * zetam * gmm * (v - vhalfm))))
    318318
    319                             (qt = (pow (q10 ((celsius - 25) / 10))))
    320 
    321                             (a_m = (0.2 * (-1.0 * v +19.26) / (exp ((-1.0 * v + 19.26) / 10.0) - 1.0)))
    322                             (b_m = (0.009 * exp(neg (v) / 22.03)))
    323                            
    324                             (minf = (a / (a+b)))
     319                            (qt = (pow (q10 ~ ((celsius - 25) / 10))))
     320
     321                            (am = (0.2 * (-1.0 * v + 19.26) / (exp ((-1.0 * v + 19.26) / 10.0) - 1.0)))
     322                            (bm = (0.009 * exp(neg (v) / 22.03)))
     323                           
     324                            (minf = (am / (am + bm)))
    325325                            (mtau = (let ((u (beta_mt(v) / (qt * a0m * (1 + alpha_mt (v))))))
    326326                                      if (u < mmin) then mmin else u))
    327327
    328328
    329                             (a_h = (1e-6 * exp (neg (v) / 16.26)))
    330                             (b_h = (1 / (exp ((neg (v) + 29.79) / 10.) + 1.)))
    331 
    332                             (hinf = (a / (a + b)))
     329                            (ah = (1e-6 * exp (neg (v) / 16.26)))
     330                            (bh = (1 / (exp ((neg (v) + 29.79) / 10.) + 1.)))
     331
     332                            (hinf = (ah / (ah + bh)))
    333333                            (htau = (let ((u (beta_h (v) / (a0h * (1 + alpha_h (v))))))
    334334                                      (if (u < hmin) then hmin else u)))
     
    338338                             (CaT  ;; ion name: exported variables will be of the form {ion}_{id}
    339339                              (initial-m  (minf))
     340                              (initial-h  (hinf))
    340341                              (m-power    2)
    341342                              (h-power    1)
     
    355356                            (p = (gcatbar * ghk (v cai cao celsius) * h2 (cai)))
    356357                           
    357                             (output p)
     358                            (output p gcatbar)
    358359                            )
    359360             
     
    363364                 
    364365                 ) ;; end CaT current
    365 
    366366
    367367     
     
    387387                              (exp (0.0378 * zetat * gmt * (v - vhalft))))
    388388
    389                             (qt = (pow (q10 ((celsius - 33) / 10))))
     389                            (qt = (pow (q10 ~ ((celsius - 33) / 10))))
    390390                           
    391391                            (a    = (alpha_t (v)))
     
    428428                            (const a0 = 1e8) ;; (/ms-mM-mM-mM-mM)
    429429                            (const b0 = .5e-2) ;;  (/ms)
     430
     431                            (const q10 = 3)
    430432                           
    431433                            (defun alpha (cai)
    432                               (a0 * pow (cai n)))
    433                            
    434                             (qt = (pow (q10 ((celsius - 25) / 10))))
     434                              (a0 * pow (cai ~ 4)))
     435                           
     436                            (qt = (pow (q10 ~ ((celsius - 25) / 10))))
    435437                           
    436438                            (a    = (alpha (cai)))
    437439                            (atau = (1 / (qt * (a + b0))))
    438                             (ainf = (a * tau * qt))
     440                            (ainf = (a * atau * qt))
    439441                           
    440442                            (hh-ionic-gate
     
    507509                              (exp (1e-3 * zetal * gml * (v - vhalfl - sh) * 9.648e4 / (8.315 * (273.16 + celsius)))))
    508510
    509                             (qt = (pow (q10 ((celsius - 24) / 10))))
    510 
    511                             (a_n  = (alpha_n (v)))
    512                             (ninf = (1 / (1 + a_n)))
    513                             (ntau = (let ((u (beta_n (v) / (qt * a0n * (1 + a)))))
    514                                       (if (ntau < nmin) then nmin else u)))
     511                            (qt = (pow (q10 ~ ((celsius - 24) / 10))))
     512
     513                            (an   = (alpha_n (v)))
     514                            (ninf = (1 / (1 + an)))
     515                            (ntau = (let ((u (beta_n (v) / (qt * a0n * (1 + an)))))
     516                                      (if (u < nmin) then nmin else u)))
    515517
    516518                            (a_l  = (alpha_l (v)))
    517519                            (linf = (1 / (1 + a_l)))
    518                             (taul = (let ((u (0.26 * (v + 50 - sh) / qtl)))
    519                                       (if (taul < (lmin / qtl)) then  (lmin / qtl) else u)))
     520                            (ltau = (let ((u (0.26 * (v + 50 - sh) / qtl)))
     521                                      (if (u < (lmin / qtl)) then  (lmin / qtl) else u)))
    520522                           
    521523
     
    568570                              (exp (1e-3 * zetan * gmn * (v - vhalfn - sh) * 9.648e4 / (8.315 * (273.16 + celsius)))))
    569571
    570                             (qt = (pow (q10 ((celsius - 24) / 10))))
     572                            (qt = (pow (q10 ~ ((celsius - 24) / 10))))
    571573
    572574                            (a    = (alpha_n (v)))
    573575                            (ninf = (1 / (1 + a)))
    574                             (taun = (let ((u (beta_n (v) / (qt * a0n * (1 + a)))))
    575                                       (if (ntau < nmax) then  (nmax / qt) else u)))
     576                            (ntau = (let ((u (beta_n (v) / (qt * a0n * (1 + a)))))
     577                                      (if (u < nmax) then  (nmax / qt) else u)))
    576578
    577579
     
    600602     
    601603
     604
    602605      ;; K-DR channel from Klee Ficker and Heinemann modified to account for Dax et al.
    603606      (component (type ionic-current) (name KDR )
     
    621624                              (exp (1e-3 * zetan * gmn * (v - vhalfn - sh) * 9.648e4 / (8.315 * (273.16 + celsius)))))
    622625
    623                             (qt = (pow (q10 ((celsius - 24) / 10))))
     626                            (qt = (pow (q10 ~ ((celsius - 24) / 10))))
    624627
    625628                            (a    = (alpha_n (v)))
    626629                            (ninf = (1 / (1 + a)))
    627                             (taun = (let ((u (beta_n (v) / (qt * a0n * (1 + a)))))
    628                                       (if (ntau < nmax) then  (nmax / qt) else u)))
     630                            (ntau = (let ((u (beta_n (v) / (qt * a0n * (1 + a)))))
     631                                      (if (u < nmax) then  (nmax / qt) else u)))
    629632
    630633
     
    677680                              (exp (0.0378 * zetat * gmt * (v - vhalft - sh))))
    678681
    679                             (qt = (pow (q10 ((celsius - 35) / 10))))
     682                            (qt = (pow (q10 ~ ((celsius - 35) / 10))))
    680683
    681684                            (inf = (1 / (1 + exp ((v - vhalfl - sh) / kl))))
    682                             (a   = alpha_t (v))
     685                            (a   = (alpha_t (v)))
    683686                            (tau = ((b0 + beta_t(v) / (a0t * (1 + a)))))
    684687
     
    734737
    735738
    736                             (qt = (pow (q10 ((celsius - 34) / 10))))
     739                            (qt = (pow (q10 ~ ((celsius - 34) / 10))))
    737740
    738741
    739742                            (defun trap0 (v th a q)
    740                               (if (abs(v-th) > 1e-6)
     743                              (if (abs (v - th) > 1e-6)
    741744                                  then (a * (v - th) / (1 - exp (neg (v - th) / q)))
    742745                                  else (a * q)))
    743746
    744                             (a = (trap0 (vm (tha + sh2) Ra qa)))
    745                             (b = (trap0 ((neg (vm)) (neg (tha) - sh2) Rb qa)))
    746 
    747                             (mtau = (let ((u (1 / ((a + b) / qt))))
    748                                       (if (mtau < mmin) then mmin else u)))
    749                             (minf = (a / (a + b)))
    750 
    751                             (a = (trap0 (vm (thi1 + sh2) Rd qd)))
    752                             (b = (trap0 ((neg (vm)) (neg (thi2) - sh2) Rg qg)))
    753 
    754                             (htau =  (let ((u (1 / (a + b) / qt)))
    755                                        (if (htau < hmin) then hmin else u)))
    756 
    757                             (hinf = (1 / (1 + exp((vm - thinf - sh2) / qinf))))
     747                            (am = (trap0 (v ~ (tha + sh) ~ Ra ~ qa)))
     748                            (bm = (trap0 ((neg (v)) ~ (neg (tha) - sh) ~ Rb ~ qa)))
     749
     750                            (mtau = (let ((u (1 / ((am + bm) / qt))))
     751                                      (if (u < mmin) then mmin else u)))
     752                            (minf = (am / (am + bm)))
     753
     754                            (ah = (trap0 (v ~ (thi1 + sh) ~ Rd ~ qd)))
     755                            (bh = (trap0 ((neg (v)) ~ (neg (thi2) - sh) ~ Rg qg)))
     756
     757                            (htau =  (let ((u (1 / (ah + bh) / qt)))
     758                                       (if (u < hmin) then hmin else u)))
     759                            (hinf = (1 / (1 + exp ((v - thinf - sh) / qinf))))
    758760
    759761
     
    786788
    787789
     790
    788791      ;; Na current
    789792      (component (type ionic-current) (name Na )
     
    834837                              (exp (1e-3 * zetas * gms * (v - vhalfs - sh) * 9.648e4 / (8.315 * (273.16 + celsius)))))
    835838
    836                             (qt = (pow (q10 ((celsius - 24) / 10))))
    837 
    838                             (am = (trap0 (vm (tha + sh2) Ra qa)))
    839                             (bm = (trap0 ((neg (vm)) (neg (tha) - sh2) Rb qa)))
     839                            (qt = (pow (q10 ~ ((celsius - 24) / 10))))
     840
     841                            (defun trap0 (v th a q)
     842                              (if (abs (v - th) > 1e-6)
     843                                  then (a * (v - th) / (1 - exp (neg (v - th) / q)))
     844                                  else (a * q)))
     845
     846                            (am = (trap0 (v ~ (tha + sh) ~ Ra ~ qa)))
     847                            (bm = (trap0 ((neg (v)) ~ (neg (tha) - sh) ~ Rb ~ qa)))
    840848
    841849                            (mtau = (let ((u (1 / (am + bm) / qt)))
    842850                                      (if (u < mmin) then mmin else u)))
    843851
    844                             (minf = (a / (a + b)))
    845 
    846                             (ah = (trap0 (vm (thi1 + sh2) Rd qd)))
    847                             (bh = (trap0 ((neg (vm)) (neg (thi2) - sh2) Rg qg)))
     852                            (minf = (am / (am + bm)))
     853
     854                            (ah = (trap0 (v ~ (thi1 + sh) ~ Rd ~ qd)))
     855                            (bh = (trap0 ((neg (v)) ~ (neg (thi2) - sh) ~ Rg ~ qg)))
    848856
    849857                            (htau =  (let ((u (1 / (ah + bh) / qt)))
    850858                                       (if (u < hmin) then hmin else u)))
    851859
    852                             (hinf = (1 / (1 + exp ((vm - thinf - sh2) / qinf))))
    853 
    854                             (c    = (alpha_v (vm)))
    855                             (sinf = (c + a2 * (1 - c)))
    856                             (stau = (let ((u (beta_s(vm) / (a0s * (1 + alps (vm))))))
     860                            (hinf = (1 / (1 + exp ((v - thinf - sh) / qinf))))
     861
     862                            (c    = (alpha_v (v)))
     863                            (sinf = (c + ar * (1 - c)))
     864                            (stau = (let ((u (beta_s (v) / (a0s * (1 + alpha_s (v))))))
    857865                                      (if (u < smax) then smax else u)))
    858866
     
    890898              )
    891899
    892                            
    893 )
     900))
  • release/4/nemo/trunk/expr-parser.scm

    r27689 r29158  
    125125         ((char=? c #\:)       (tok loc COLON))
    126126         ((char=? c #\,)       (tok loc COMMA))
     127         ((char=? c #\~)       (tok loc COMMA))
    127128         ((char=? c #\()       (tok loc LPAREN))
    128129         ((char=? c #\))       (tok loc RPAREN))
     
    186187                                          ('?           (tok loc QUESTION))
    187188                                          (':           (tok loc COLON))
     189                                          ('~           (tok loc COMMA))
    188190                                          ((or 'let 'LET)     (tok loc LET))
    189191                                          ((or 'if  'IF)      (tok loc IF))
     
    192194                                          ((? number?)  (tok loc NUM x))
    193195                                          ((? symbol?)  (tok loc ID x))
    194                                           ((? list?)    (begin (stack-push! is x)
    195                                                                (tok loc LPAREN)))
     196                                          ((? list?)    (begin
     197                                                          (stack-push! is x)
     198                                                          (tok loc LPAREN)))
    196199                                          (else (errorp "invalid input: " x))))
    197200                            (if (not (stack-empty? is)) (tok loc RPAREN) '*eoi*))))
  • release/4/nemo/trunk/expr.grm

    r27689 r29158  
    1010   ;; --- token definitions
    1111   ( ID NUM LET IF THEN ELSE RPAREN
    12        (right: QUESTION COLON)
    13        (left: < > = <= >=)
    14        (left: + -)
    15        (left: * /)
    16        (left: uminus)
    17        (right: ^ )
    18        (left: LPAREN)
    19        )
     12        (nonassoc: LPAREN)
     13        (right: QUESTION COLON COMMA)
     14        (left: < > = <= >=)
     15        (left: + -)
     16        (left: * /)
     17        (left: uminus)
     18        (right: ^ )
     19        )
    2020
    2121
     
    4343
    4444   (args     (expr)                   : (list $1)
     45             (args COMMA expr)        : (cons $3 $1)
    4546             (args expr)              : (cons $2 $1))
    4647
  • release/4/nemo/trunk/nemo-constraints.scm

    r29136 r29158  
    7373               
    7474               
    75                
    7675               (cond ((and perm permeability (pair? gates))
    7776                      (let* (
     77                             
    7878                             (pmax  (cadr (component-exports (cid permeability))))
    7979                             (pwrs  (map (lambda (st) (map (lambda (n) (state-power n)) st)) sts))
  • release/4/nemo/trunk/nemo-core.scm

    r29139 r29158  
    333333      (let recur ((expr expr) (lbs '()))
    334334        (match expr
    335                (('let bs e)         (let ((normalize-bnd  (lambda (x) `(,(first x) ,(recur (second x) lbs))))
     335               (('let bs e)         (let ((normalize-bnd  (lambda (lbs) (lambda (x) `(,(first x) ,(recur (second x) lbs)))))
    336336                                          (lbs1 (append (map first bs) lbs)))
    337                                       `(let ,(map normalize-bnd bs) ,(recur e lbs1))))
     337                                      `(let ,(map (normalize-bnd lbs1) bs) ,(recur e lbs1))))
    338338               (('if c t e)         `(if ,(recur c lbs) ,(recur t lbs) ,(recur e lbs)))
    339339               (('+ . es)           (binop-fold '+ (map (lambda (x) (recur x lbs)) es)))
     
    686686                   )
    687687
     688
    688689            (if (hash-table-exists? nemo-env sym)
    689690                (nemo:error 'defun! ": quantity " sym " already defined")
    690691                (let* (
    691                        (body    (normalize-expr body (sprintf "function definition ~A" sym)))
     692                       (body    (normalize-expr body (sprintf "function ~A" sym)))
    692693                       (consts  (delete-duplicates ((enumconsts formals) body (list))
    693694                                                   (lambda (x y) (equal? (car x) (car y)))))
     
    785786             (cases nemo:quantity x
    786787                    (COMPONENT (name type lst _) 
    787                                (filter-map (lambda (x) ((lambda (x) (and x (car x))) (member x lst))) all-exports))
     788                               (begin
     789                                 (filter (lambda (x) (member x lst)) all-exports)))
    788790                    (else #f))))))
    789791
  • release/4/nemo/trunk/nemo-currents.scm

    r29119 r29158  
    7070                         (nemo:error 'nemo:currents ": ion channel definition " label
    7171                                     "lacks any pore or permeability components"))
     72
     73                     (if permeability
     74                         (let ((exports (component-exports (cid permeability))))
     75                           (if (not (>= (length exports) 2))
     76                               (nemo:error 'nemo:currents ": permeability component " (cn permeability)
     77                                           "needs to export at least permeability state and maximum permeability"))
     78                           ))
    7279
    7380
  • release/4/nemo/trunk/nemo-version.scm

    r29116 r29158  
    11
    2 (define nemo-version 8.24)
     2(define nemo-version 8.25)
Note: See TracChangeset for help on using the changeset viewer.