Changeset 11896 in project


Ignore:
Timestamp:
09/05/08 04:29:26 (12 years ago)
Author:
Ivan Raikov
Message:

Added support for generating XML in the frontend.

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

Legend:

Unmodified
Added
Removed
  • release/3/nemo/trunk/examples/AKP06/PotIhCa.sxml

    r11895 r11896  
    1 (*TOP* (*PI* (xml (@ (version 1.0))))
    2        (ncml:model (@ (name PotIhCa))
    3                    (ncml:input (@ (id v)))
    4                    (ncml:input (@ (id cai)))
    5                    (ncml:input (@ (id cao)))
    6 
    7                    (ncml:const (@ (id Vrest)) (expr -68))
    8                    (ncml:const (@ (id diam)) (expr 20))
    9                    (ncml:const (@ (id celsius)) (expr 24))
    10                    (ncml:const (@ (id F)) (expr 96485.0))
    11                    (ncml:const (@ (id R)) (expr 8.3145))
    12                    (ncml:const (@ (id temp_adj)) (expr (ncml:pow 3 (ncml:div (ncml:sub (ncml:id celsius) 22) 10))))
    13 
    14                    (ncml:component (@ (type ion-channel))
    15 
    16                                    (ncml:component (@ (type pore))
    17                                                    (ncml:const (@ (id gbar_Kv1)) (expr 0.011))
    18                                                    (ncml:output (@ (id gbar_Kv1 ))))
    19 
    20                                    (ncml:component (@ (type "permeating-substance") (name k))
    21                                                    (ncml:const  (@ (id e_Kv1)) (expr -85))
    22                                                    (ncml:output (@ (id e_Kv1 ))))
    23  
    24                                    (ncml:component (@ (type gate))
    25                                                    (ncml:const (@ (id cma)) (expr 0.12889))
    26                                                    (ncml:const (@ (id cka)) (expr -33.90877))
    27                                                    (ncml:const (@ (id cva)) (expr 45))
    28                                                    (ncml:defun (@ (id Kv1_amf)) (ncml:arg v)
    29                                                                (ncml:body
    30                                                                 (ncml:mul
    31                                                                  (ncml:id temp_adj) (ncml:id cma)
    32                                                                  (ncml:exp
    33                                                                   (ncml:neg
    34                                                                    (ncml:div
    35                                                                     (ncml:sum (ncml:id v) (ncml:id cva))
    36                                                                     (ncml:id cka)))))))
    37 
    38                                                    (ncml:const (@ (id cmb)) (expr 0.12889))
    39                                                    (ncml:const (@ (id ckb)) (expr 12.42101))
    40                                                    (ncml:const (@ (id cvb)) (expr 45))
    41 
    42                                                    (ncml:defun (@ (id Kv1_bmf)) (ncml:arg v)
    43                                                                (ncml:body
    44                                                                 (ncml:mul
    45                                                                  (ncml:id temp_adj) (ncml:id cmb)
    46                                                                  (ncml:exp (ncml:neg
    47                                                                             (ncml:div
    48                                                                              (ncml:sum (ncml:id v)
    49                                                                                        (ncml:id cvb))
    50                                                                              (ncml:id ckb)))))))
    51 
    52                                                    (ncml:hh_ionic_conductance
    53                                                     (@ (id Kv1))
    54                                                     (ncml:initial_m (ncml:div (ncml:apply (ncml:id Kv1_amf)
    55                                                                                           (ncml:id Vrest))
    56                                                                               (ncml:sum (ncml:apply (ncml:id Kv1_amf)
    57                                                                                                     (ncml:id Vrest))
    58                                                                                         (ncml:apply (ncml:id Kv1_bmf)
    59                                                                                                     (ncml:id Vrest)))))
    60                                                     (ncml:m_power 4)
    61                                                     (ncml:h_power 0)
    62                                                     (ncml:m_alpha (ncml:apply (ncml:id Kv1_amf) (ncml:id v)))
    63                                                     (ncml:m_beta (ncml:apply (ncml:id Kv1_bmf) (ncml:id v))))))))
     1(*TOP* (*PI* (xml (@ (version 1.0))))
     2       (ncml:model
     3         (@ (name PotIhCa))
     4         (ncml:input (@ (id v)))
     5         (ncml:input (@ (id cai)))
     6         (ncml:input (@ (id cao)))
     7         (ncml:const (@ (id Vrest)) (expr -68))
     8         (ncml:const (@ (id diam)) (expr 20))
     9         (ncml:const (@ (id celsius)) (expr 24))
     10         (ncml:const (@ (id F)) (expr 96485.0))
     11         (ncml:const (@ (id R)) (expr 8.3145))
     12         (ncml:const
     13           (@ (id temp_adj))
     14           (expr (ncml:pow 3 (ncml:div (ncml:sub (ncml:id celsius) 22) 10))))
     15         (ncml:component
     16           (@ (type ion-channel))
     17           (ncml:component
     18             (@ (type pore))
     19             (ncml:const (@ (id gbar_Kv1)) (expr 0.011))
     20             (ncml:output (@ (id gbar_Kv1))))
     21           (ncml:component
     22             (@ (type "permeating-substance") (name k))
     23             (ncml:const (@ (id e_Kv1)) (expr -85))
     24             (ncml:output (@ (id e_Kv1))))
     25           (ncml:component
     26             (@ (type gate))
     27             (ncml:const (@ (id cma)) (expr 0.12889))
     28             (ncml:const (@ (id cka)) (expr -33.90877))
     29             (ncml:const (@ (id cva)) (expr 45))
     30             (ncml:defun
     31               (@ (id Kv1_amf))
     32               (ncml:arg v)
     33               (ncml:body
     34                 (ncml:mul
     35                   (ncml:id temp_adj)
     36                   (ncml:id cma)
     37                   (ncml:exp
     38                     (ncml:neg
     39                       (ncml:div
     40                         (ncml:sum (ncml:id v) (ncml:id cva))
     41                         (ncml:id cka)))))))
     42             (ncml:const (@ (id cmb)) (expr 0.12889))
     43             (ncml:const (@ (id ckb)) (expr 12.42101))
     44             (ncml:const (@ (id cvb)) (expr 45))
     45             (ncml:defun
     46               (@ (id Kv1_bmf))
     47               (ncml:arg v)
     48               (ncml:body
     49                 (ncml:mul
     50                   (ncml:id temp_adj)
     51                   (ncml:id cmb)
     52                   (ncml:exp
     53                     (ncml:neg
     54                       (ncml:div
     55                         (ncml:sum (ncml:id v) (ncml:id cvb))
     56                         (ncml:id ckb)))))))
     57             (ncml:hh_ionic_conductance
     58               (@ (id Kv1))
     59               (ncml:initial_m
     60                 (ncml:div
     61                   (ncml:apply (ncml:id Kv1_amf) (ncml:id Vrest))
     62                   (ncml:sum
     63                     (ncml:apply (ncml:id Kv1_amf) (ncml:id Vrest))
     64                     (ncml:apply (ncml:id Kv1_bmf) (ncml:id Vrest)))))
     65               (ncml:m_power 4)
     66               (ncml:h_power 0)
     67               (ncml:m_alpha (ncml:apply (ncml:id Kv1_amf) (ncml:id v)))
     68               (ncml:m_beta (ncml:apply (ncml:id Kv1_bmf) (ncml:id v))))))))
  • release/3/nemo/trunk/nemo.scm

    r11895 r11896  
    5858                       (s+ "specify input format (xml, sxml)")
    5959                       (string->symbol arg))
     60    ,(args:make-option (xml)       (optional: "FILE")   
     61                       (s+ "write XML output to file (default: <model-name>.xml)"))
    6062    ,(args:make-option (sxml)       (optional: "FILE")   
    6163                       (s+ "write SXML output to file (default: <model-name>.sxml)"))
     
    6668                       (string->symbol arg))
    6769    ,(args:make-option (t)       #:none
    68                        (s+ "use interpolation tables")
     70                       (s+ "use interpolation tables in generated code")
    6971                       #t)
    7072    ,(args:make-option (h help)  #:none               "Print help"
     
    354356    (list sys nemo)))
    355357
     358
     359;; based on SRV:send-reply by Oleg Kiselyov
     360(define (print-fragments b)
     361  (let loop ((fragments b) (result #f))
     362    (cond
     363      ((null? fragments) result)
     364      ((not (car fragments)) (loop (cdr fragments) result))
     365      ((null? (car fragments)) (loop (cdr fragments) result))
     366      ((eq? #t (car fragments)) (loop (cdr fragments) #t))
     367      ((pair? (car fragments))
     368        (loop (cdr fragments) (loop (car fragments) result)))
     369      ((procedure? (car fragments))
     370        ((car fragments))
     371        (loop (cdr fragments) #t))
     372      (else
     373       (display (car fragments))
     374       (loop (cdr fragments) #t)))))
     375
    356376 
    357377(define (main options operands)
     
    375395                                                     (s+  (pathname-strip-extension operand) ".sxml"))))
    376396                              (assoc 'sxml options)))
     397                (xml-fname  ((lambda (x) (and x (if (string? (cdr x)) (s+ (pathname-strip-extension (cdr x)) ".xml")
     398                                                    (s+  (pathname-strip-extension operand) ".xml"))))
     399                              (assoc 'xml options)))
    377400                (mod-fname  ((lambda (x) (and x (if (string? (cdr x)) (s+ (pathname-strip-extension (cdr x)) ".mod")
    378401                                                    (s+  (pathname-strip-extension operand) ".mod"))))
     
    383406                     ((cnexp derivimplicit #f) method)
    384407                     (else (error "nmodl-method must be one of cnexp, derivimplicit"))))))
    385            (if sxml-fname (with-output-to-file sxml-fname (lambda () (print doc))))
     408           (if sxml-fname (with-output-to-file sxml-fname (lambda () (pretty-print doc))))
     409           (if xml-fname  (let ((doc1 (cond ((eq? (car doc) '*TOP*)
     410                                             (if (eq? (car (cadr doc)) '*PI*) (cddr doc) (cdr doc)))
     411                                            (else doc))))
     412                            (with-output-to-file xml-fname (lambda () (print-fragments (generate-XML `(begin ,doc1)))))))
    386413           (with-output-to-file
    387414               mod-fname  (lambda ()
Note: See TracChangeset for help on using the changeset viewer.