Changeset 12369 in project


Ignore:
Timestamp:
11/06/08 04:52:15 (11 years ago)
Author:
Ivan Raikov
Message:

Added support for conservation equations, binary gated conductances, some bug fixes.

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

Legend:

Unmodified
Added
Removed
  • release/3/nemo/trunk/examples/AKP06/OFF_ON_OFF.ses

    r11848 r12369  
    2121graphList[1].append(save_window_)
    2222save_window_.save_name("graphList[1].")
    23 save_window_.addvar("soma.ik_Kbin( 0.5 )", 1, 1, 0.8, 0.9, 2)
     23save_window_.addvar("soma.i_PotIhCa( 0.5 )", 1, 1, 0.8, 0.9, 2)
    2424}
    2525objectvar scene_vector_[1]
  • release/3/nemo/trunk/examples/AKP06/PotIhCa.nemo

    r12269 r12369  
    5555             
    5656              ) ;; end Kv1 current
     57
     58   (component (type ion-channel) (name Kv3)
     59             
     60              (component (type gate)
     61                         
     62                         ;; rate functions
     63                         (defun Kv3_amf (v)
     64                           (let ((ca   0.22)
     65                                 (cva  16)
     66                                 (cka  -26.5))
     67                             (ca * exp((neg (v + cva)) / cka) )))
     68                         
     69                         (defun Kv3_bmf (v)
     70                           (let ((ca   0.22)
     71                                 (cvb  16)
     72                                 (ckb  26.5))
     73                             (ca * exp((neg (v + cvb)) / ckb) )))
     74                         
     75                         (hh-ionic-conductance
     76                          (Kv3  ;; ion name: exported variables will be of the form {ion}_{id}
     77                           (initial-m (Kv3_amf (Vrest) / (Kv3_amf (Vrest) + Kv3_bmf (Vrest))))
     78                           (m-power   4)
     79                           (h-power   0)
     80                           (m-alpha   (temp_adj * Kv3_amf (v) ))
     81                           (m-beta    (temp_adj * Kv3_bmf (v) ))))
     82                         
     83                         )
     84             
     85              (component (type pore)
     86                         (const  gbar_Kv3  = 0.005)
     87                         (output gbar_Kv3 ))
     88             
     89              (component (type permeating-substance) (name k)
     90                         (const e_Kv3 = -85)
     91                         (output e_Kv3 ))
     92
     93              (component (type binary-gate)
     94                         (const switch_Kv3 = 0)
     95                         
     96                         (const e0 = 1.60217646e-19)
     97                         (const gunit = 16)
     98                         (const nc = (1e12 * gbar_Kv3 / gunit))
     99                         (const zn = 1.9196)
     100
     101                         (defun gate_flip_Kv3 (v m)
     102                           (let ((a    (Kv3_amf (v)))
     103                                 (ab   (a + Kv3_bmf (v)))
     104                                 (tau  (1 / ab))
     105                                 (inf  (a / ab)))
     106                             ((inf - m) / tau)))
     107
     108                         (i_gate_Kv3 =
     109                           (if (switch_Kv3 > 0) then (nc * 1e6 * e0 * 4 * zn * gate_flip_Kv3(v Kv3_m)) else 0))
     110
     111                         (output i_gate_Kv3 ))
     112
     113              ) ;; end Kv3 current
     114
     115
    57116
    58117   (component (type ion-channel) (name Kv4)
  • release/3/nemo/trunk/examples/AKP06/morphology_mechanisms.hoc

    r12269 r12369  
    1313//insert Kv1
    1414//insert Kv4
    15 insert Kbin
     15//insert Kbin
    1616//insert Ih
    1717//insert CaBK
     
    3535//soma.gbar_Kv4 = 0.0039
    3636soma.gbar_Kv4_PotIhCa = 0.0039
    37 soma.gmax_Kbin = 0.0016
     37//soma.gmax_Kbin = 0.0016
     38soma.gbar_Kv3_PotIhCa = 0.0016
    3839//soma.gkbar_CaBK = 0.014
    3940soma.gbar_CaBK_PotIhCa = 0.014
  • release/3/nemo/trunk/nemo-core.scm

    r12367 r12369  
    423423
    424424    (lambda (name formals body)
    425         (let ((base-env (make-base-env))
     425        (let ((const-env (make-const-env nemo-env))
    426426              (sym (if (symbol? name) name (string->symbol name))))
    427427          (letrec ((enumconsts
     
    434434                               ((s . es)     (if (symbol? s)  (cons s (fold (enumconsts lb) ax es)) ax))
    435435                               (s            (cond
    436                                                ((and (symbol? s) (not (member s lb)) (environment-includes? base-env s))
     436                                               ((and (symbol? s) (not (member s lb)) (environment-includes? const-env s))
    437437                                                (cons s ax) )
    438438                                               ((and (symbol? s) (not (member s lb)))
     
    443443                (let* ((body    (normalize-expr body))
    444444                       (consts  (delete-duplicates ((enumconsts formals) body (list))))
    445                        (fc     `(lambda (base-env)
    446                                   (let ,(map (lambda (v) `(,v (environment-ref base-env ',v))) consts)
     445                       (fc     `(lambda (const-env)
     446                                  (let ,(map (lambda (v) `(,v (environment-ref const-env ',v))) consts)
    447447                                    (lambda ,formals ,body))))
    448                        (f      ((eval fc) base-env)))
     448                       (f      ((eval fc) const-env)))
    449449                 
    450450                  (let* ((ftenv  (make-environment))
  • release/3/nemo/trunk/nemo-nmodl.scm

    r12367 r12369  
    119119    ((pp indent val ...) (ppf indent (quasiquote val) ...))))
    120120
     121
     122(define (letblk/NMODL e1 e2)
     123  (cond ((equal? e1 (doc:empty)) (doc:group (doc:nest 2 e2)))
     124        ((equal? e2 (doc:empty)) (doc:group (doc:nest 2 e1)))
     125        (else (doc:connect (doc:group (doc:nest 2 e1))
     126                           (doc:group (doc:nest 2 e2))))))
     127       
    121128(define ifthen/NMODL  (doc:ifthen 0 (doc:text "if") (doc:text "") (doc:text "else")))
    122 (define letblk/NMODL  (doc:letblk 2 (doc:break) (doc:break) (doc:empty)))
    123129(define group/NMODL   (doc:block 2 (doc:text "(") (doc:text ")")))
    124130(define block/NMODL   (doc:block 2 (doc:text "{") (doc:text "}")))
     
    819825                                            `(,(nmodl-name ion) ,(nmodl-name (s+ 'i ion)) ,(nmodl-name (s+ ion 'i)))))
    820826                                        epools))
     827               (i-gates           (fold (lambda (ionch ax)
     828                                           (let* ((subcomps ((dis 'component-subcomps) sys (cid ionch)))
     829                                                  (i-gate-comp    (lookup-def 'binary-gate subcomps)))
     830                                             (if i-gate-comp
     831                                                 (let* ((i-gate-exps  ((dis 'component-exports) sys (cid i-gate-comp)))
     832                                                        (asgn-names   asgns)
     833                                                        (i-gate-var   (find (lambda (x) (member x asgn-names))
     834                                                                            i-gate-exps)))
     835                                                   (if (not i-gate-var)
     836                                                       (nemo:error 'nemo:nmodl-translator
     837                                                                   ": binary gate in channel " (cn ionch)
     838                                                                   " must export an assignment"))
     839                                                   (cons (list i-gate-var ) ax))
     840                                                 ax)))
     841                                         (list) ionchs))
    821842               (has-kinetic?       (or (not (null? (filter (lambda (x) (member (car x) kinetic)) states)))))
    822843               (has-ode?           (or (not (null? (filter (lambda (x) (not (member (car x) kinetic))) states)))
     
    9791000                           pool-ions)
    9801001                 (pp indent "}")))
    981              
     1002
    9821003           (pp indent ,nl (BREAKPOINT "{"))
    9831004           (let* ((i-eqs (filter-map
     
    10331054                                      )))
    10341055                          ionchs))
     1056                  (i-eqs  (fold  (lambda (i-gate ax)
     1057                                   (let ((i-gate-var (first i-gate)))
     1058                                     (cons (list (nmodl-name 'i) #f i-gate-var) ax)))
     1059                                 i-eqs i-gates))
    10351060                  (i-bkts (bucket-partition (lambda (x y) (eq? (car x) (car y))) i-eqs))
    10361061                  (i-eqs  (fold (lambda (b ax)
    10371062                                  (match b
    1038                                          ((and ps ((i e gion) . rst)) 
    1039                                           (let* ((sum   (if e (sum (map (lambda (b) `(* ,(third b) (- v ,(second b))))
    1040                                                                         ps))
    1041                                                             (sum (map third ps))))
    1042                                                  (sum0  (rhsexpr sum))
    1043                                                  (sum1  (canonicalize-expr/NMODL sum0)))
    1044                                             (cons (list i sum1) ax)))
     1063                                         ((and ps ((i e gion) . rst))
     1064                                          (let loop ((ps ps) (summands (list)))
     1065                                            (if (null? ps)
     1066                                                (let* ((sum0  (sum summands))
     1067                                                       (sum1  (rhsexpr sum0))
     1068                                                       (sum2  (canonicalize-expr/NMODL sum1)))
     1069                                                  (cons (list i sum2) ax))
     1070                                                (match-let (((i e gion) (car ps)))
     1071                                                  (loop (cdr ps) (cons (if e `(* ,gion (- v ,e)) gion) summands))))))
    10451072                                           
    10461073                                         ((i e gion)
    10471074                                          (let* ((expr0  (rhsexpr (if e `(* ,gion (- v ,e)) gion)))
    10481075                                                 (expr1  (canonicalize-expr/NMODL expr0)))
    1049                                               (cons (list i expr1) ax)))
     1076                                            (cons (list i expr1) ax)))
    10501077                                         
    10511078                                         (else ax)))
  • release/3/nemo/trunk/nemo.setup

    r12353 r12369  
    2323
    2424  ; Assoc list with properties for your extension:
    25   `((version 1.11)
     25  `((version 1.12)
    2626    ;(documentation "nemo.html")
    2727    ,@(if has-exports? `((exports "nemo-core.exports")) (list)) ))
     
    3131 'nemo-macros
    3232 `("nemo-macros.scm" )
    33  `((version 1.11)
     33 `((version 1.12)
    3434   (syntax)
    3535   (require-at-runtime nemo-core)))
     
    5050
    5151  ; Assoc list with properties for your extension:
    52   `((version 1.11)
     52  `((version 1.12)
    5353    ,@(if has-exports? `((exports "nemo-nmodl.exports")) (list)) ))
    5454
     
    6969     
    7070     ;; Assoc list with properties for your extension:
    71      `((version 1.11)
     71     `((version 1.12)
    7272       ,@(if has-exports? `((exports "nemo-matlab.exports")) (list)) )))
    7373
     
    8888
    8989  ; Assoc list with properties for your extension:
    90   `((version 1.11)
     90  `((version 1.12)
    9191    ,@(if has-exports? `((exports "nemo-hh.exports")) (list)) ))
    9292
     
    102102
    103103  ; Assoc list with properties for the program:
    104   '((version 1.11)
     104  '((version 1.12)
    105105    (documentation "nemo.html")))
    106106
Note: See TracChangeset for help on using the changeset viewer.