Changeset 29644 in project


Ignore:
Timestamp:
08/26/13 11:07:23 (7 years ago)
Author:
Ivan Raikov
Message:

9ML-toolkit: some updates to accommodate spike generators

Location:
release/4/9ML-toolkit/trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • release/4/9ML-toolkit/trunk/NineMLivp.scm

    r28566 r29644  
    3131             (Type_sig ident-ivp (make-typedecl (make-kind 0) #f))
    3232             
    33              (Value_sig (ident-create "construct")
     33             (Value_sig (ident-create "initial")
     34                        (make-valtype `()
     35                              (arrow-type diagram-type
     36                                     (arrow-type label-type
     37                                      (arrow-type label-type
     38                                                  ivp-type)))))
     39
     40             (Value_sig (ident-create "run")
    3441                        (make-valtype `()
    3542                              (arrow-type diagram-type
     
    4855                       (make-deftype '() (Tcon (Tpath path-ivp) '()) ))
    4956             
    50              (datacon 'ivp 'construct 5)
     57             (datacon 'ivp 'initial 3)
     58             (datacon 'ivp 'run 5)
    5159             
    5260             )))
  • release/4/9ML-toolkit/trunk/eval.scm

    r28736 r29644  
    791791             (if (pair? sexpr)
    792792                 (case (car sexpr)
    793                    
     793
     794                   ((generator)
     795                    (let ((sexpr (cdr sexpr)))
     796                      (case (car sexpr)
     797                        ((poisson)
     798                         (PRIM (make-prim '(st zt)
     799                                          '(rate t h)
     800                                          '(poisson rate t h)
     801                                          '(poissonInit)
     802                                          ))
     803                         )
     804                        (else
     805                         (error 'sexpr->diagram "invalid generator" sexpr))
     806                        )))
     807
    794808                   ((diagram)
    795809                    (let ((sexpr (cdr sexpr)))
  • release/4/9ML-toolkit/trunk/examples/Brunel00/Brunel00_network.xml

    r29630 r29644  
    5252        <value>false</value>
    5353      </Initial>
     54
     55      <Initial>
     56        <label>rpstate</label>
     57        <value>false</value>
     58      </Initial>
    5459     
    5560    </properties>
     
    129134  </Component>
    130135
    131   <Component name="Excitatory">
    132 
    133     <Definition language="NineML">
    134       http://www.NineML.org/weights/Static.9ml
    135     </Definition>
    136 
    137     <properties>
    138       <Property>
    139         <label>weight</label>
    140         <value>0.2</value>
    141       </Property>
    142     </properties>
    143 
    144   </Component>
    145 
    146   <Component name="Inhibitory">
    147 
    148     <Definition language="NineML">
    149       http://www.NineML.org/weights/Static.9ml
    150     </Definition>
    151 
    152     <properties>
    153       <Property>
    154         <label>weight</label>
    155         <value>0.2</value>
    156       </Property>
    157     </properties>
    158 
    159   </Component>
    160 
    161   <Component name="unstructured">
    162     <Definition language="NineML">
    163       http://www.NineML.org/layouts/Unstructured.9ml
    164     </Definition>
    165   </Component>
    166136
    167137  <group name="Network">
  • release/4/9ML-toolkit/trunk/ivp-lib.scm

    r29624 r29644  
    1919;; <http://www.gnu.org/licenses/>.
    2020;;
     21
     22#|
     23
     24TODO:
     25
     26fun SrcPoisson (rate) =
     27 let
     28     val zt = RandomMTZig.ztnew()
     29     val st = RandomMTZig.fromEntropy()
     30 in
     31   fn (input as {t,h,spike,spikecount}) =
     32   let
     33      val rv     = RandomMTZig.randPoisson (rate*0.001*h,st,zt)
     34      val spike' = Real.> (rv,0.0)
     35      val spikecount' = if spike' then rv else 0.0
     36    in
     37      {t=t+h,h=h,spike=spike',spikecount=spikecount',rate=rate}
     38    end
     39  end
     40|#
    2141
    2242(module 9ML-ivp-lib
     
    96116
    97117
    98 (define (construct-signal-diagram prefix name sxml-tuple)
     118(define (construct-ivp prefix name sxml-tuple)
     119
    99120  (let ((sexpr
    100121         (let ((sexpr (sxml-value->sexpr sxml-tuple)))
     
    103124              (and (pair? (cdr sexpr))
    104125                   (case (cadr sexpr)
    105                      ((construct)  (cddr sexpr))
     126                     ((initial)  (cddr sexpr))
    106127                     (else #f))))
    107128             (else #f)))))
     129
    108130      (and sexpr
    109            (match-let (((ivar hvar start end) (cdr sexpr)))
     131           (match-let (((ivar hvar) (cdr sexpr)))
    110132
    111133             (let* ((diagram+initial (sexpr->diagram+initial hvar (car sexpr)))
     
    114136
    115137               (if (not (alist-ref ivar ic))
    116                    (error 'construct-signal-diagram "IVP independent variable is not present in given system" ivar))
     138                   (error 'construct-ivp "IVP independent variable is not present in given system" ivar))
    117139               (if (not (alist-ref hvar ic))
    118                    (error 'construct-signal-diagram "IVP step variable is not present in given system" hvar))
     140                   (error 'construct-ivp "IVP step variable is not present in given system" hvar))
    119141               (let* ((dfe (dataflow sd '()))
    120142                      (dvars (lset-difference eq?
     
    141163                 
    142164
    143 (define (generate-ivp-code prefix name sxml-tuple  #!key (platform 'chicken))
    144 
    145   (let ((ivp-id (gensym (string->symbol (string-append (->string name) "ivp"))))
    146         (sdinfo (construct-signal-diagram prefix name sxml-tuple)))
     165(define (generate-ivp-code prefix ivp-id sxml-tuple #!key (platform 'chicken))
     166
     167  (let ((sdinfo (construct-ivp prefix ivp-id sxml-tuple)))
    147168
    148169    (let (
     
    194215              (and (pair? (cdr sexpr))
    195216                   (case (cadr sexpr)
    196                      ((construct)  (cddr sexpr))
     217                     ((run)  (cddr sexpr))
    197218                     (else #f))))
    198219             (else #f)))))
     
    248269
    249270
    250 (define (make-ivp-cgen-hook)
     271(define (make-ivp-cgen-hook ivp-env)
    251272  (lambda (prefix name label value)
     273
     274    (print "make-ivp-cgen-hook: name = " name " label = " label)
    252275
    253276    (cond
     
    255278     ((or (and (string? label) (string=? label "ivp"))
    256279          (and (pair? label) (string=? (car label) "ivp"))) ;; value is an IVP
    257       (let ((ivp-id (gensym (string->symbol (string-append (->string name) "ivp")))))
    258         (let ((ivp-info (generate-ivp-code prefix ivp-id value platform: (simulation-platform))))
    259           ivp-info
     280      (let ((ivp-info (generate-ivp-code prefix name value platform: (simulation-platform))))
     281        (print "ivp-env = " (ivp-env))
     282        (ivp-env (cons `(,name . ,ivp-info) (ivp-env)))
     283        ivp-info
    260284        ))
    261       )
    262285     
    263286     (else #f)
  • release/4/9ML-toolkit/trunk/parse.scm

    r29630 r29644  
    761761                          )
    762762                     
     763
     764                      (print "ode-rhss1 = " ode-rhss1) (print "ode-variables1 = " ode-variables1) (print "assignments1 = " assignments1)
     765                      (print "assignments2 = " assignments2)
    763766                     
    764767                      (make-rtransition state-name relations
  • release/4/9ML-toolkit/trunk/ulp.scm

    r29630 r29644  
    101101(include "NineMLgraph.scm")
    102102(include "NineMLivp.scm")
     103(include "NineMLgenerator.scm")
    103104
    104105
     
    174175    (output-xml         "sets output format to XML")
    175176
    176     (data               "save data from simulations in files ${OPERAND}_NAME.log"
     177    (eval-ivp          "evaluate all IVP problems and save data in files ${OPERAND}_NAME.log"
    177178                        (single-char #\d))
    178179
     
    421422
    422423
    423 (define (eval-source def current-scope current-type-env current-eval-env)
    424   (d "eval-source: def = ~A~%" def)
     424(define (eval-source defs current-scope current-type-env current-eval-env)
     425  (d "eval-source: defs = ~A~%" defs)
    425426  (let* (
    426          (scoped-defs      (scope-moddef (current-scope) def))
     427         (scoped-defs      (scope-moddef (current-scope) defs))
    427428         (mty              (type-moddef (current-type-env) '() scoped-defs))
    428429         (typed-defs         (map (lambda (x) (cases modspec x
     
    490491(define (match-builtin-model name uri)
    491492 
    492   (define diagram-pure (Longid (Pdot (Pident (ident-create "Diagram")) "PURE")))
    493   (define stim-poisson (Longid (Pdot (Pident (ident-create "Stim")) "Poisson")))
     493  (define src-poisson (Longid (Pdot (Pident (ident-create "Generator")) "poisson")))
    494494
    495495  (case (uri-scheme uri)
     
    503503                       (Value_def (ident-create name)
    504504                                  (Function (ident-create "rate")
    505                                             (Apply diagram-pure
    506                                                    (Apply
    507                                                     (Apply stim-poisson
    508                                                            (Longid (Pident (ident-create "rate"))))
    509                                                     (Longid (Pident (ident-create "seed"))))
    510                                                    
    511 
    512                                       ))
    513                           (else #f))))
    514           (and def (eval-source def current-scope current-type-env current-eval-env))))
     505                                            (Apply src-poisson
     506                                                   (Longid (Pident (ident-create "rate"))))
     507                                            ))
     508                       )
     509                      (else #f))))
     510          (and def (eval-source (list def) current-scope current-type-env current-eval-env))))
    515511      ))
    516512    (else #f)))
     
    539535      (let* (
    540536             (uenv.tbls
    541               (or (match-builtin-model uri)
     537              (or (match-builtin-model node-name uri)
    542538                  (let ((src (fetch uri)))
    543539                    (d "NineML abstraction layer source: ~A~%" src)
     
    547543                                     current-scope current-type-env current-eval-env)))
    548544                  ))
     545             
     546             (dd    (d "NineML abstraction layer uenv: ~A~%" uenv.tbls))
    549547             (uenv  (car uenv.tbls))
    550548             (tbls  (cadr uenv.tbls))
    551              (dd    (d "NineML abstraction layer uenv: ~A~%" uenv))
    552549             )
    553550       
     
    620617                 
    621618                 (ivp-name    (and ivp (sxml:attr ivp 'name)))
    622                  (ivp-node    (and ivp-values
    623                                    (Value_def (ident-create ivp-name)
    624                                               (apply-terms (Longid
    625                                                             (Pdot (Pident (ident-create "IVP")) "construct"))
    626                                                            ivp-values))))
     619                 (ivp-node    (or
     620                               (and ivp-values
     621                                    (Value_def (ident-create ivp-name)
     622                                               (apply-terms (Longid
     623                                                             (Pdot (Pident (ident-create "IVP")) "run"))
     624                                                            ivp-values)))
     625                                    (Value_def (ident-create (string-append "ivp_" node-name) )
     626                                               (apply-terms (Longid
     627                                                             (Pdot (Pident (ident-create "IVP")) "initial"))
     628                                                            (list (Longid (Pident (ident-create node-name)))
     629                                                                  (Const `(label t))
     630                                                                  (Const `(label h)))))
     631                               ))
    627632                 )
    628633           
     
    632637           
    633638            (let ((v (car
    634                       (eval-source (or (and ivp (list node ivp-node)) (list node))
     639                      (eval-source (list node ivp-node)
    635640                                   current-scope current-type-env current-eval-env) )))
    636641              (d "NineML eval-ul-component: after eval-source~%")
     
    641646
    642647(define (make-prototype-tenv prefix name env)
     648  (d "NineML make-prototype-tenv: env = ~A~%" env)
    643649  (let ((sdinfo (lookup-def name env)))
    644     (if (not val) (error 'make-prototype "unable to find prototype" name))
     650    (if (not sdinfo) (error 'make-prototype "unable to find prototype" name))
    645651    (let ((ivar   (lookup-def 'ivar sdinfo))
    646652          (dvars  (lookup-def 'dvars sdinfo)))
     
    779785
    780786
    781 (define (eval-ul-group prefix x env)
     787(define (eval-ul-group prefix node env)
     788
    782789  (let (
    783         (group-name  (sxml:attr x 'name))
    784         (properties-sxml  ((sxpath `(// nml:Property))  x))
    785         (populations-sxml ((sxpath `(// nml:Population))  x))
    786         (sets-sxml        ((sxpath `(// nml:set))  x))
    787         (projections-sxml ((sxpath `(// nml:Projection)) x))
     790        (group-name  (sxml:attr node 'name))
     791        (properties-sxml  ((sxpath `(// nml:Property))  node))
     792        (populations-sxml ((sxpath `(// nml:Population))  node))
     793        (sets-sxml        ((sxpath `(// nml:set))  node))
     794        (projections-sxml ((sxpath `(// nml:Projection)) node))
    788795        )
    789796
    790797    (d "UL group: ~A properties: ~A populations: ~A sets: ~A projections: ~A~%"
    791        properties-sxml populations-sxml sets-sxml projections-sxml)
     798       group-name properties-sxml populations-sxml sets-sxml projections-sxml)
    792799
    793800    (if (null? populations-sxml)
    794         (error 'eval-ul-group "group without populations" x))
     801        (error 'eval-ul-group "group without populations" node))
    795802
    796803    (let* ((properties
    797804            (let ((sxml ((sxpath `(// nml:Property)) node)))
    798805              (map (lambda (x) (let ((name ($ (sxml:attr node 'name)))
    799                                      (value (sxml:text (sxml:kidn* 'nml:value x))))
     806                                     (value (sxml:text (sxml:kidn* 'nml:value node))))
    800807                                 `(,name . ,(string->number value))))
    801808                   sxml)))
     
    864871                    Interval:module-initialize
    865872                    Graph:module-initialize
    866                     IVP:module-initialize )
    867               (list "Real" "Random" "Signal" "Diagram" "Interval" "Graph" "IVP" )) )
     873                    IVP:module-initialize
     874                    Generator:module-initialize   )
     875              (list "Real" "Random" "Signal" "Diagram" "Interval" "Graph" "IVP" "Generator"  )) )
    868876
    869877  (if (null? operands)
     
    895903                    (ul-component-uenvs (map eval-ul-component ul-components))
    896904                   
    897                     (component-cgen-env (make-parameter '()))
     905                    (ivp-cgen-env (make-parameter '()))
    898906                    )
    899907
     
    926934                        (print-source-defs source-defs output-type))
    927935                   
    928                     (if (options 'data)
     936                    (if (options 'eval-ivp)
    929937                        (begin
    930938                          (traverse-definitions operand uenv value-hook: (make-ivp-data-hook ivp: #t))
    931939                          (process-wait) )
    932                         (component-cgen-env
    933                          (append
    934                           (traverse-definitions operand uenv value-hook: (make-ivp-cgen-hook))
    935                           (component-cgen-env)))
     940                        (traverse-definitions operand uenv value-hook: (make-ivp-cgen-hook ivp-cgen-env))
    936941                        )
    937942                   
     
    939944                 ul-component-uenvs)
    940945
    941                (for-each (lambda (x) (eval-ul-group operand x (component-cgen-env))) ul-groups)
     946               (for-each (lambda (x) (eval-ul-group operand x (ivp-cgen-env))) ul-groups)
    942947
    943948               ))
Note: See TracChangeset for help on using the changeset viewer.