Changeset 31356 in project


Ignore:
Timestamp:
09/10/14 10:46:37 (5 years ago)
Author:
Ivan Raikov
Message:

nemo: further refactoring to template form

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

Legend:

Unmodified
Added
Removed
  • release/4/nemo/trunk/examples/Granule/plot_neuron_nest_v.scm

    r31324 r31356  
    104104                 `(("title"     . "Granule Diwakar 2009 voltage trace (NEST simulation, soma)")
    105105                   ("titledetails"     . "adjust=0,0.2")
    106                    ("rectangle" . "1 10 8 14")
     106                   ("rectangle" . "1 10 9 14")
    107107                   ("areacolor" . "white")
    108108                   ("xrange" . "0 3000")
  • release/4/nemo/trunk/nemo-nest.scm

    r29940 r31356  
    22;; An extension for translating NEMO models to NEST code.
    33;;
    4 ;; Copyright 2011-2013 Ivan Raikov and the Okinawa Institute of Science and Technology
     4;; Copyright 2011-2014 Ivan Raikov and the Okinawa Institute of Science and Technology
    55;;
    66;; This program is free software: you can redistribute it and/or
  • release/4/nemo/trunk/nemo-nmodl.scm

    r31354 r31356  
    582582{% endfor %}
    583583
     584
    584585}
    585586EOF
    586587))
     588
     589
     590
     591(define parameter-template
     592  (ersatz:statements-from-string
     593   (ersatz:template-std-env autoescape: #f)
     594#<<EOF
     595PARAMETER {
     596{% if (!(currents == [])) %}
     597  LOCAL {{join(",", parameterLocals)}}
     598{% endif %}
     599
     600{% for parameterDef in parameterDefs %}
     601{{parameterDef}}
     602{% endfor %}
     603
     604}
     605
     606EOF
     607))
     608
     609
     610(define state-template
     611  (ersatz:statements-from-string
     612   (ersatz:template-std-env autoescape: #f)
     613#<<EOF
     614STATE {
     615
     616{% for stateDef in stateDefs %}
     617{{stateDef}}
     618{% endfor %}
     619
     620}
     621
     622EOF
     623))
     624
     625
     626(define assigned-template
     627  (ersatz:statements-from-string
     628   (ersatz:template-std-env autoescape: #f)
     629#<<EOF
     630ASSIGNED {
     631
     632{% for assignmentDef in assignmentDefs %}
     633{{assignmentDef}}
     634{% endfor %}
     635
     636}
     637
     638EOF
     639))
     640
     641
     642
     643(define asgns-template
     644  (ersatz:statements-from-string
     645   (ersatz:template-std-env autoescape: #f)
     646#<<EOF
     647{% if (!(assignmentEqDefs == [])) %}
     648PROCEDURE asgns () {
     649{% if (!(assignmentLocals == [])) %}
     650LOCAL {{join(",", assignmentLocals)}}
     651{% endif %}
     652{% for assignmentEqDef in assignmentEqDefs %}
     653{{assignmentDef}}
     654{% endfor %}
     655}
     656
     657{% endif %}
     658EOF
     659))
     660
     661
     662
     663(define reactions-template
     664  (ersatz:statements-from-string
     665   (ersatz:template-std-env autoescape: #f)
     666#<<EOF
     667{% if (!(reactionEqDefs == [])) %}
     668PROCEDURE reactions () {
     669{% if (!(reactionLocals == [])) %}
     670LOCAL {{join(",", reactionLocals)}}
     671{% endif %}
     672{% for reactionEqDef in reactionEqDefs %}
     673{{reactionEqDef}}
     674{% endfor %}
     675}
     676
     677{% endif %}
     678EOF
     679))
     680
     681
     682(define pools-template
     683  (ersatz:statements-from-string
     684   (ersatz:template-std-env autoescape: #f)
     685#<<EOF
     686{% if (!(poolIons == [])) %}
     687PROCEDURE pools () {
     688{% for poolIon in poolIons %}
     689{{poolIon.in}} = {{poolIon.inq}}
     690{{poolIon.out}} = {{poolIon.outq}}
     691{% endfor %}
     692}
     693
     694EOF
     695))
     696
     697
     698       
     699(define pools-template
     700  (ersatz:statements-from-string
     701   (ersatz:template-std-env autoescape: #f)
     702#<<EOF
     703BREAKPOINT {
     704       
     705        (if (not (null? i-locals)) (pp indent+ (LOCAL ,(slp ", " i-locals))))
     706
     707        (if has-ode?
     708            (case method
     709              ((#f expeuler)  (pp indent+ (SOLVE states)))
     710              (else           (pp indent+ (SOLVE states METHOD ,method)))))
     711
     712        (if has-kinetic?   (pp indent+  (SOLVE kstates METHOD sparse)))
     713        (if (not (null? reactions))   (pp indent+ (reactions ())))
     714        (if (not (null? pool-ions)) (pp indent+ (pools ())))
     715        (for-each (lambda (p) (pp indent+ ,(expr->string/NMODL (second p) (first p)))) i-eqs)
     716
     717        (pp indent "}")
     718
     719
    587720
    588721(define (nemo:nmodl-translator sys . rest)
     
    9651098                                (list) i-bkts))
    9661099               
    967                (locals (find-locals (map second i-eqs)))
     1100               (current-locals (find-locals (map second i-eqs)))
     1101
     1102               (parameter-locals  (find-locals (map second parameter-defs)))
     1103               
     1104               (state-defs
     1105                (append
     1106                 (map (lambda (st)
     1107                        (if (pair? st) (nmodl-state-name (first st) (second st))
     1108                            (nmodl-name st)))
     1109                      states)
     1110                 (map nmodl-name reactions)))
     1111               
     1112               (assigned-defs
     1113                (filter-map
     1114                 (lambda (x)
     1115                   (let ((x1 (nmodl-name x)))
     1116                     (and (not (or (member x1 state-defs) (assoc x1 parameter-defs)))
     1117                          x1)))
     1118                 (delete-duplicates
     1119                  (append asgns
     1120                          (filter-map first imports)
     1121                          (filter-map (lambda (x) (and (not (equal? (third x) 'event)) (second x))) imports)
     1122                          (map second perm-ions) (map third perm-ions)
     1123                          (map second acc-ions)  (map fourth acc-ions)
     1124                          (map pool-ion-in pool-ions) (map pool-ion-out pool-ions)
     1125                          (map (lambda (gate-complex) (nmodl-name (s+ 'i_ (first gate-complex)))) gate-complexes )
     1126                          (map (lambda (i-gate) (nmodl-name (s+ 'i_ (second i-gate)))) i-gates )
     1127                          (map (lambda (isyn) (nmodl-name (first isyn))) isyns )
     1128                          (map (lambda (psc) (nmodl-name (s+ 'i_ (first psc)))) pscs )
     1129                          ))
     1130                 ))
     1131
     1132               (asgn-locals (find-locals (map second asgn-eq-defs)))
     1133
     1134               (reaction-locals (find-locals (map second reaction-eq-defs)))
     1135
     1136               )
     1137             
    9681138
    9691139               (tmpl-vars
     
    9981168                                                           (in . ,(nmodl-name in)) (out . ,(nmodl-name out)))))
    9991169                                          acc-ions))
     1170
     1171                  (poolIons           . ,(map
     1172                                          (lambda (pool-ion)
     1173                                            `((ion      . ,(pool-ion-name pool-ion))
     1174                                              (inq      . ,(pool-ion-inq pool-ion))
     1175                                              (outq     . ,(pool-ion-outq pool-ion))
     1176                                              (cur      . ,(pool-ion-cur pool-ion))
     1177                                              (in       . ,(pool-ion-in pool-ion))
     1178                                              (out      . ,(pool-ion-out pool-ion))
     1179                                              (valence  . ,(pool-ion-valence pool-ion))))
     1180                                          pool-ions))
    10001181                 
    10011182                  (useIons            . ,(map
     
    10351216                                                  (list)
    10361217                                                  (append asgn-eq-defs rate-eq-defs reaction-eq-defs defuns )))))
     1218                 
     1219                  (parametersLocals . ,parameter-locals)
     1220
     1221                  (parameterDefs . ,(map (lambda (def)
     1222                                           (let ((n (nmodl-name (first def))) (b (second def)))
     1223                                             (expr->string/NMODL b n)))
     1224                                         parameter-defs))
     1225
     1226                  (stateDefs . ,state-defs)
     1227
     1228                  (assignedDefs . ,assigned-defs)
     1229
     1230                  (assignedEqDefs . ,(map (lambda (def)
     1231                                            (let ((n (nmodl-name (first def))) (b (second def)))
     1232                                              (expr->string/NMODL b n)))
     1233                                          asgn-eq-defs))
     1234
     1235                  (reactionsEqDefs . ,(map (lambda (def)
     1236                                             (let ((n (nmodl-name (first def))) (b (second def)))
     1237                                               (expr->string/NMODL b n)))
     1238                                           reaction-eq-defs))
     1239
    10371240
    10381241                  ))
     1242
     1243
    10391244               )
    10401245
    10411246        (pp indent
    1042 
    10431247            ,(instantiate-template prelude-template tmpl-vars)
    10441248            ,(instantiate-template neuron-template tmpl-vars)
    1045 
     1249            ,(instantiate-template parameter-template tmpl-vars)
     1250            ,(instantiate-template state-template tmpl-vars)
     1251            ,(instantiate-template assigned-template tmpl-vars)
    10461252            )
    10471253       
     
    10521258                  defuns)
    10531259       
    1054         (let* (
    1055                
    1056                (parameter-locals  (find-locals (map second parameter-defs)))
    1057                
    1058                (state-defs
    1059                 (append
    1060                  (map (lambda (st)
    1061                         (if (pair? st) (nmodl-state-name (first st) (second st))
    1062                             (nmodl-name st)))
    1063                       states)
    1064                  (map nmodl-name reactions)))
    1065                
    1066                (assigned-defs
    1067                 (filter-map
    1068                  (lambda (x)
    1069                    (let ((x1 (nmodl-name x)))
    1070                      (and (not (or (member x1 state-defs) (assoc x1 parameter-defs)))
    1071                           x1)))
    1072                  (delete-duplicates
    1073                   (append asgns
    1074                           (filter-map first imports)
    1075                           (filter-map (lambda (x) (and (not (equal? (third x) 'event)) (second x))) imports)
    1076                           (map second perm-ions) (map third perm-ions)
    1077                           (map second acc-ions)  (map fourth acc-ions)
    1078                           (map pool-ion-in pool-ions) (map pool-ion-out pool-ions)
    1079                           (map (lambda (gate-complex) (nmodl-name (s+ 'i_ (first gate-complex)))) gate-complexes )
    1080                           (map (lambda (i-gate) (nmodl-name (s+ 'i_ (second i-gate)))) i-gates )
    1081                           (map (lambda (isyn) (nmodl-name (first isyn))) isyns )
    1082                           (map (lambda (psc) (nmodl-name (s+ 'i_ (first psc)))) pscs )
    1083                           ))
    1084                  ))
    1085                )
    1086              
    1087           (pp indent ,nl (PARAMETER "{"))
    1088           (if (not (null? parameter-locals)) (pp indent+ (LOCAL ,(slp ", " parameter-locals))))
    1089           (for-each (lambda (def)
    1090                       (let ((n (nmodl-name (first def))) (b (second def)))
    1091                         (pp indent+ ,(expr->string/NMODL b n)))) parameter-defs)
    1092           (case method  ((expeuler)  (pp indent+ dt)))
    1093           (pp indent "}")
    1094           (pp indent ,nl (STATE "{"))
    1095           (for-each (lambda (x) (pp indent+ ,x)) state-defs)
    1096           (pp indent "}")
    1097           (pp indent ,nl (ASSIGNED "{"))
    1098           (for-each (lambda (x) (pp indent+ ,x)) assigned-defs)
    1099           (pp indent "}"))
    1100        
    1101         (if (not (null? asgns))
    1102             (begin
    1103               (pp indent ,nl (PROCEDURE asgns () "{"))
    1104               (let ((locals    (find-locals (map second asgn-eq-defs))) )
    1105                 (if (not (null? locals)) (pp indent+ (LOCAL ,(slp ", " locals)))))
    1106              
    1107               (for-each (lambda (def)
    1108                           (let ((n (nmodl-name (first def)) )
    1109                                 (b (second def)))
    1110                             (pp indent+ ,(expr->string/NMODL b n)))) asgn-eq-defs)
    1111 
    1112                  
    1113 
    1114 
    1115               (pp indent "}")))
    1116        
    1117         (if (not (null? reactions))
    1118             (begin
    1119               (pp indent ,nl (PROCEDURE reactions () "{"))
    1120               (let ((locals    (find-locals (map second reaction-eq-defs))) )
    1121                 (if (not (null? locals)) (pp indent+ (LOCAL ,(slp ", " locals))))
    1122                 (for-each (lambda (def)
    1123                             (let ((n (nmodl-name (first def))) (b (second def)))
    1124                               (pp indent+ ,(expr->string/NMODL b n))))
    1125                           reaction-eq-defs))
    1126               (pp indent "}")))
    1127        
    1128         (if (not (null? pool-ions))
    1129             (begin
    1130               (pp indent ,nl (PROCEDURE pools () "{"))
    1131                  (for-each (lambda (pool-ion)
    1132                              (pp indent+
    1133                                  (,(pool-ion-in pool-ion) = ,(pool-ion-inq pool-ion))
    1134                                  (,(pool-ion-out pool-ion) = ,(pool-ion-outq pool-ion))))
    1135                            pool-ions)
    1136                  (pp indent "}")))
    1137        
    1138         (pp indent ,nl (BREAKPOINT "{"))
    1139        
    1140         (if (not (null? locals))    (pp indent+ (LOCAL ,(slp ", " locals))))
    1141         (if has-ode?
    1142             (case method
    1143               ((#f expeuler)  (pp indent+ (SOLVE states)))
    1144               (else           (pp indent+ (SOLVE states METHOD ,method)))))
    1145         (if has-kinetic?   (pp indent+  (SOLVE kstates METHOD sparse)))
    1146         (if (not (null? reactions))   (pp indent+ (reactions ())))
    1147         (if (not (null? pool-ions)) (pp indent+ (pools ())))
    1148         (for-each (lambda (p) (pp indent+ ,(expr->string/NMODL (second p) (first p)))) i-eqs)
    1149 
    1150         (pp indent "}")
     1260
     1261        (pp indent
     1262            ,(instantiate-template asgns-template tmpl-vars)
     1263            ,(instantiate-template reactions-template tmpl-vars)
     1264            ,(instantiate-template pools-template tmpl-vars)
     1265            )
    11511266       
    11521267        (if has-ode?
     
    11561271                (else       (pp indent ,nl (DERIVATIVE states "{"))))
    11571272
    1158               (if (not (null? locals)) (pp indent+ (LOCAL ,(slp ", " locals))))
     1273              (if (not (null? current-locals)) (pp indent+ (LOCAL ,(slp ", " current-locals))))
    11591274
    11601275              (for-each (lambda (def)
  • release/4/nemo/trunk/nemo.scm

    r29940 r31356  
    11;;
    2 ;; NEMO
     2;; NEMO: a description language for models of neuronal ionic currents.
    33;;
    4 ;; Copyright 2008-2013 Ivan Raikov and the Okinawa Institute of
     4;; Copyright 2008-2014 Ivan Raikov and the Okinawa Institute of
    55;; Science and Technology.
    66;;
Note: See TracChangeset for help on using the changeset viewer.