Changeset 30866 in project


Ignore:
Timestamp:
05/14/14 15:17:44 (6 years ago)
Author:
Ivan Raikov
Message:

9ML-toolkit: fixed parsing of onevent entities

Location:
release/4/9ML-toolkit/trunk
Files:
3 edited

Legend:

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

    r30152 r30866  
    363363(copy-file-to-9ML-dir "examples/Destexhe94.9ML")
    364364(copy-file-to-9ML-dir "examples/LeakyIAF.9ML")
    365 (copy-file-to-9ML-dir "examples/ExcInhNetwork.9ML")
    366365
    367366(copy-file-to-9ML-dir "templates/Network.sml.tmpl")
  • release/4/9ML-toolkit/trunk/examples/Brunel00/BrunelIaF.xml

    r30005 r30866  
    66  <ComponentClass name="BrunelIaFdelta">
    77
    8     <Parameter name="tau" dimension='time'/> <!-- membrane constant -->
    9     <Parameter name="theta" dimension='voltage'/> <!-- firing threshold -->
    10     <Parameter name="tau_rp" dimension='time'/> <!-- refractory period -->
     8    <Parameter name="tau" dimension='time'/>       <!-- membrane constant -->
     9    <Parameter name="theta" dimension='voltage'/>  <!-- firing threshold -->
     10    <Parameter name="tau_rp" dimension='time'/>    <!-- refractory period -->
    1111    <Parameter name="Vreset" dimension='voltage'/> <!-- reset potential -->
    12     <Parameter name="R" dimension='resistance'/> <!-- membrane resistance -->
     12    <Parameter name="R" dimension='resistance'/>   <!-- membrane resistance -->
    1313
    1414    <AnalogPort name="Isyn" mode='reduce' dimension='current'/>
  • release/4/9ML-toolkit/trunk/parse.scm

    r30835 r30866  
    430430
    431431(define (make-rtransition state-name relations aliases
    432                           ode-variables1 ode-rhss1 trigger-name1 trigger-rhs1 assign-variables1 assign-rhss1
    433                           ode-variables2 ode-rhss2 trigger-name2 trigger-rhs2 assign-variables2 assign-rhss2)
     432                          ode-variables1 ode-rhss1 trigger-name1 trigger-rhs1 assign-variables1 assign-rhss1 e1
     433                          ode-variables2 ode-rhss2 trigger-name2 trigger-rhs2 assign-variables2 assign-rhss2 e2)
    434434
    435435  (let (
     
    492492      (Apply diagram-rtransition
    493493             
     494             ((lambda (sys)
     495                (if e1
     496                    (Apply (Apply diagram-sequence e1 sys))
     497                    sys))
     498
    494499              (if assignments1
    495500                  (Apply
    496501                   (Apply diagram-sequence odes1)
    497502                   assignments1)
    498                   odes1))
     503                  odes1)))
    499504     
    500       (if (null? ode-variables2)
    501          
    502           (if (null? relations)
    503              
    504               assignments2
    505              
    506               (make-relations relations assignments2))
    507          
    508           (if assignments2
    509               (Apply
    510                (Apply diagram-sequence odes2)
    511                assignments2)
    512               odes2)))
     505      ((lambda (sys)
     506         (if e2
     507             (Apply (Apply diagram-sequence e2 sys))
     508             sys))
     509
     510       (if (null? ode-variables2)
     511           
     512           (if (null? relations)
     513               
     514               assignments2
     515               
     516               (make-relations relations assignments2))
     517           
     518           (if assignments2
     519               (Apply
     520                (Apply diagram-sequence odes2)
     521                assignments2)
     522               odes2))
     523       ))
    513524     
    514525     (Apply
     
    616627
    617628
     629(define (make-event e aliases)
     630  (let* (
     631         (e-state-assignments ((sxpath `(nml:StateAssignment)) e))
     632         (e-assign-variables (map (lambda (x)
     633                                    (string->symbol (sxml:attr  x 'variable)))
     634                                  e-state-assignments))
     635         (e-assign-rhss      (map (lambda (x)
     636                                    (parse-string-expr
     637                                     (sxml:kidn-cadr 'nml:MathInline x)
     638                                     'parse-al-sxml-dynamics))
     639                                  e-state-assignments))
     640         (e-port             (sxml:attr e 'port))
     641         )
     642
     643    (apply diagram-transient
     644           (make-algebraic-eqn-lst-expr
     645            (map (lambda (var rhs) (make-algebraic-eqn var (make-signal-expr rhs aliases))  )
     646                 e-assign-variables e-assign-rhss))
     647           (make-algebraic-eqn-lst-expr
     648            (map (lambda (var rhs) (make-algebraic-eqn var (make-signal-expr rhs aliases))  )
     649                 e-assign-variables e-assign-variables))
     650           (Apply
     651            (Apply signal-boolsig (Const `(label ,e-port)))
     652            (Apply signal-boolconst (Const `(bool #f)))))
     653    ))
     654
     655
    618656(define (make-alsys-union eq-list)
    619657  (let ((n (length eq-list)))
     
    711749                  (time-derivatives   ((sxpath `(nml:TimeDerivative)) r))
    712750                  (on-conditions      ((sxpath `(nml:OnCondition)) r))
     751                  (on-events          ((sxpath `(nml:OnEvent)) r))
    713752                  (state-assignments  ((sxpath `(nml:StateAssignment)) r))
    714753                  )
    715754             
    716755              (if (> (length on-conditions) 1)
    717                   (error 'parse-al-sxml-dynamics "multiple on-conditions blocks in regime" r))
     756                  (error 'parse-al-sxml-dynamics "multiple on-conditions blocks in regime are not supported" r))
     757
     758              (if (> (length on-events) 1)
     759                  (error 'parse-al-sxml-dynamics "multiple on-events in regime are not supported" r))
    718760             
    719761              (if (null? time-derivatives)
    720762                  (error 'parse-al-sxml-dynamics "regime does not contain time derivative blocks" r))
    721763             
    722               (let
     764              (let*
    723765                  (
    724766                    (ode-variables    (map (lambda (x)
     
    765807                                         aliases))
    766808
     809                    (on-event (and (not (null? on-events))
     810                                   (make-event (car on-events) aliases)))
    767811                    )
    768812               
     
    780824                                 (map (lambda (var rhs) (make-algebraic-eqn var (make-signal-expr rhs aliases))  )
    781825                                      assign-variables assign-rhss))))
     826
    782827                          )
    783828
    784                       (if assignments
    785 
    786                           (Apply
    787                            (Apply
    788                             diagram-sequence
    789                             (if (null? relations)
    790                                 (make-ode-eqn-lst-expr odes)
    791                                 (make-dae-eqn-lst-expr (append relations odes))
    792                                 ))
    793                            assignments)
    794 
    795                           (if (null? relations)
     829                      ((lambda (sys)
     830                         (if on-event
     831                             (Apply (Apply diagram-sequence on-event) sys)
     832                             sys))
     833
     834                       ((lambda (rels+odes)
     835                          (if assignments
     836                             
     837                              (Apply
     838                               (Apply diagram-sequence rels+odes)
     839                               assignments)
     840                             
     841                              rels+odes))
     842                       
     843                        (if (null? relations)
    796844                            (make-ode-eqn-lst-expr odes)
    797845                            (make-dae-eqn-lst-expr (append relations odes))
    798                             )
    799                           
    800                           ))
     846                            ))
     847                       
     848                       ))
    801849                   
    802850                    (let ((c (car on-conditions)))
     
    836884                                                        state-assignments1)))
    837885                           
    838                             (make-transient relations aliases
    839                                             ode-variables ode-rhss assign-variables assign-rhss
    840                                             trigger-name trigger-rhs
    841                                             ode-variables1 ode-rhss1 assign-variables1 assign-rhss1)
     886                            ((lambda (sys)
     887                               (if on-event
     888                                   (Apply (Apply diagram-sequence on-event) sys)
     889                                   sys))
     890                                   
     891                             (make-transient relations aliases
     892                                             ode-variables ode-rhss assign-variables assign-rhss
     893                                             trigger-name trigger-rhs
     894                                             ode-variables1 ode-rhss1 assign-variables1 assign-rhss1))
    842895                           
    843896                            ))
     
    855908                  (time-derivatives  (map (sxpath `(nml:TimeDerivative)) rs))
    856909                  (on-conditions     (map (sxpath `(nml:OnCondition)) rs))
     910                  (on-events         (map (sxpath `(nml:OnEvent)) rs))
    857911                  )
    858912             
    859913              (for-each
    860                (lambda (r cs)
     914               (lambda (r cs evs)
    861915                 (cond
    862916                  ((null? cs)
    863917                   (error 'parse-al-sxml-dynamics "regime does not contain on-conditions blocks" rs))
    864918                  ((> (length cs) 1)
    865                    (error 'parse-al-sxml-dynamics "multiple on-conditions blocks in regime" r))
     919                   (error 'parse-al-sxml-dynamics "multiple on-conditions blocks in regime are not supported" r))
     920                  ((> (length evs) 1)
     921                   (error 'parse-al-sxml-dynamics "multiple on-events in regime are not supported" r))
    866922                  ))
    867                rs on-conditions)
     923               rs on-conditions on-events)
    868924             
    869925
     
    887943                    (regimes
    888944                     (map
    889                       (lambda (r time-derivatives on-conditions)
     945                      (lambda (r time-derivatives on-conditions on-events)
    890946
    891947                        (let ((ode-variables (map (lambda (x)
     
    899955                                                  time-derivatives))
    900956
    901                               ( state-assignments ((sxpath `(nml:StateAssignment)) r))
     957                              (state-assignments ((sxpath `(nml:StateAssignment)) r))
    902958                             
    903                               (c (car on-conditions)))
     959                              (c (and (not (null? on-conditions)) (car on-conditions)))
     960                              )
    904961                           
    905962                          (let (
     
    920977                                                 'parse-al-sxml-dynamics))
    921978                                   
    922                                    ( c-state-assignments ((sxpath `(nml:StateAssignment)) c))
     979                                   (c-state-assignments ((sxpath `(nml:StateAssignment)) c))
    923980                                   
    924981                                   (assign-variables (map (lambda (x)
     
    934991                                                                  c-state-assignments)))
    935992                                   )
    936                               (list ode-variables ode-rhss trigger-name trigger-rhs assign-variables assign-rhss))
     993                              (list ode-variables ode-rhss trigger-name trigger-rhs assign-variables assign-rhss
     994                                    (and (not (null? on-events))
     995                                         (make-event (car on-events) aliases)))
    937996                             
    938997                              ))
    939                         )
    940                       regimes time-derivatives on-conditions))
     998                        ))
     999                      regimes time-derivatives on-conditions on-events))
    9411000
    9421001                    )
    9431002
    944                 (match-let ((((ode-variables1 ode-rhss1 trigger-name1 trigger-rhs1 assign-variables1 assign-rhss1)
    945                               (ode-variables2 ode-rhss2 trigger-name2 trigger-rhs2 assign-variables2 assign-rhss2))
     1003                (match-let ((((ode-variables1 ode-rhss1 trigger-name1 trigger-rhs1 assign-variables1 assign-rhss1 e1)
     1004                              (ode-variables2 ode-rhss2 trigger-name2 trigger-rhs2 assign-variables2 assign-rhss2 e2))
    9461005                             regimes))
    9471006
    9481007                      (make-rtransition state-name relations aliases
    949                                         ode-variables1 ode-rhss1 trigger-name1 trigger-rhs1 assign-variables1 assign-rhss1
    950                                         ode-variables2 ode-rhss2 trigger-name2 trigger-rhs2 assign-variables2 assign-rhss2))
     1008                                        ode-variables1 ode-rhss1 trigger-name1 trigger-rhs1 assign-variables1 assign-rhss1 e1
     1009                                        ode-variables2 ode-rhss2 trigger-name2 trigger-rhs2 assign-variables2 assign-rhss2 e2))
    9511010               
    9521011                ))
     
    9871046
    9881047         (relations        (map (lambda (x)
    989                                   (let ((quantity (sxml:attr x 'name))
    990                                         (var      (sxml:attr x 'argument))
    991                                         (rhs      (parse-string-expr
     1048                                   (let ((quantity (sxml:attr x 'name))
     1049                                         (var      (sxml:attr x 'argument))
     1050                                         (rhs      (parse-string-expr
    9921051                                                   (sxml:kidn-cadr 'nml:MathInline x )
    9931052                                                   'parse-al-sxml-alsys)))
    994                                     (make-relation (string->symbol quantity)
    995                                                    (string->symbol var)
    996                                                    (make-signal-expr rhs '()))
    997                                     ))
    998                                 relations))
     1053                                     (make-relation (string->symbol quantity)
     1054                                                    (string->symbol var)
     1055                                                    (make-signal-expr rhs '()))
     1056                                     ))
     1057                                 relations))
    9991058
    10001059         (assignments
Note: See TracChangeset for help on using the changeset viewer.