about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPjotr Prins2025-08-02 13:31:43 +0200
committerPjotr Prins2025-08-02 13:31:43 +0200
commit6e1e275813fb55c9a53e37b004262f3070ef42b3 (patch)
tree104712bdd7b9e490dfc02ff2efa1ab6758c5ee74
parentf5ec159d3c14bd12f410ca2fa64560121308f25b (diff)
downloadgn-guile-6e1e275813fb55c9a53e37b004262f3070ef42b3.tar.gz
API: endpoint gets trait values for BXD in GEMMA format
-rw-r--r--gn/data/dataset.scm26
-rw-r--r--gn/runner/gemma.scm15
-rw-r--r--web/webserver.scm5
3 files changed, 17 insertions, 29 deletions
diff --git a/gn/data/dataset.scm b/gn/data/dataset.scm
index f099171..b552b21 100644
--- a/gn/data/dataset.scm
+++ b/gn/data/dataset.scm
@@ -18,7 +18,6 @@
             get-bxd-publish-list
             get-bxd-publish-values-list
             get-bxd-publish-name-value-dict
-            write-pheno-file
             ))
 
 (define (get-dataset db probesetfreeze-id)
@@ -71,28 +70,3 @@
                                                `(,(assoc-ref r "Name") . ,(assoc-ref r "value"))
                                                ) '())))
            )))))
-
-
-(define (write-pheno-file fn traits)
-  (define bxd-inds (geno-inds-bxd (pk "BXD.json")))
-  (assert (= 235 (length bxd-inds)))
-  (display bxd-inds)
-  (call-with-output-file fn
-    (lambda (port)
-      (for-each
-       (lambda (ind)
-         (begin
-           (let* [(value (assoc-ref traits ind))
-                  (outvalue (if value
-                                value
-                                "NA"))]
-             (if value
-                 (begin
-                   (format #t "~s ~s" ind outvalue)
-                   (newline)))
-             (display outvalue port)
-             (newline port))))
-       bxd-inds)
-      (close port)
-      ))
-)
diff --git a/gn/runner/gemma.scm b/gn/runner/gemma.scm
index 9a5c0fc..c577305 100644
--- a/gn/runner/gemma.scm
+++ b/gn/runner/gemma.scm
@@ -10,11 +10,24 @@
   #:use-module (rnrs base)
 
   #:export (
-            write-pheno-file
+            gemma-pheno-txt
             invoke-gemma-wrapper-loco
             run-gemma
             ))
 
+(define (gemma-pheno-txt family traits)
+  "Return a list of values for GEMMA"
+  (assert (string=? family "BXD")) ; only supported right now
+  (define bxd-inds (geno-inds-bxd "BXD.json"))
+  (assert (= 235 (length bxd-inds)))
+  (map (lambda (ind)
+         (let [(value (assoc-ref traits ind))]
+           (if value
+               (format #f "~a" value)
+               "NA\n")
+           ))
+       bxd-inds))
+
 (define (write-pheno-file fn traits)
   (define bxd-inds (geno-inds-bxd "BXD.json"))
   (assert (= 235 (length bxd-inds)))
diff --git a/web/webserver.scm b/web/webserver.scm
index c242b9d..28e33cd 100644
--- a/web/webserver.scm
+++ b/web/webserver.scm
@@ -24,6 +24,7 @@
              (gn data dataset)
              (gn data species)
              (gn data group)
+             (gn runner gemma)
              (web sxml)
              (web view view)
              (web view doc)
@@ -261,8 +262,8 @@ otherwise search for set/group data"
        (".json"
         (render-json (get-bxd-publish-values (basename page ".json"))))
        (".tsv"  (render-string "TEST1\nTEST2"))
-       (".gemma" (write-pheno-file page (get-bxd-publish-values (basename page ".gemma"))))
-       (else    (display "ERROR: unknown file type"))))
+       (".gemma" (render-string (string-join (gemma-pheno-txt "BXD" (get-bxd-publish-values (basename page ".gemma"))) "")))
+       (else    (display "ERROR: unknown file extension"))))
     (('GET "dataset" "bxd-publish" "mapping" "values" (string-append dataid ".json"))
      (render-json (get-bxd-publish-values dataid  #:used-for-mapping? #t)))
     (('GET "doc" "species.html")