From e4cb959730ed5d89c8f5e96de2ddbd405fcf2cc9 Mon Sep 17 00:00:00 2001 From: Pjotr Prins Date: Tue, 21 Nov 2023 11:26:07 +0100 Subject: Adding GEMMA --- .guix-shell | 2 +- gn/data/hits.scm | 13 +++++++++++-- gn/runner/gemma.scm | 29 +++++++++++++++++++++++++++++ scripts/precompute/precompute-hits.scm | 19 +++++++++---------- 4 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 gn/runner/gemma.scm diff --git a/.guix-shell b/.guix-shell index 502f4b1..9f5b009 100755 --- a/.guix-shell +++ b/.guix-shell @@ -4,4 +4,4 @@ echo "Create a shell to run tools. In the container" -guix shell -C -F --network coreutils guile guile-dbi guile-dbd-mysql guile-fibers guile-json guile-gnutls guile-readline guile-redis openssl nss-certs $* +guix shell -C -F --network coreutils guile guile-dbi guile-dbd-mysql guile-fibers guile-json guile-gnutls guile-readline guile-redis openssl nss-certs gemma $* diff --git a/gn/data/hits.scm b/gn/data/hits.scm index f0a24f3..5108bd0 100644 --- a/gn/data/hits.scm +++ b/gn/data/hits.scm @@ -13,9 +13,18 @@ #:use-module (web gn-uri) #:export ( - get-next-hit-for-precompute + get-precompute-hit + set-precompute-hit-status! )) -(define (get-next-hit-for-precompute db prev-id) +(define (get-precompute-hit db prev-id) (dbi-query db (string-append "select Locus, DataId, ProbeSetId, ProbeSetFreezeId from ProbeSetXRef where DataId>" (int-to-string prev-id) " AND Locus_old is NULL ORDER BY DataId LIMIT 1")) (get-row db)) + +(define (set-precompute-hit-status! db data-id-str status-str) + "Set status of precompute record - typically 'RUN' or 'NON-BXD'. +This is a temporary measure to get precompute going. +Note we are counting on automated MariaDB transactions to not compete." + (dbi-query db (string-append "UPDATE ProbeSetXRef SET Locus_old=\"" status-str "\" WHERE DataId=" data-id-str " AND Locus_old is NULL")) + (ensure db) + ) diff --git a/gn/runner/gemma.scm b/gn/runner/gemma.scm new file mode 100644 index 0000000..31a14f7 --- /dev/null +++ b/gn/runner/gemma.scm @@ -0,0 +1,29 @@ +(define-module (gn runner gemma) + #:use-module (json) + #:use-module (ice-9 match) + #:use-module (ice-9 format) + #:use-module (ice-9 iconv) + #:use-module (ice-9 receive) + #:use-module (ice-9 string-fun) + + #:export ( + run-gemma + )) + +(define (run-gemma data-id name trait-name traits) + (if name + (display (string-append "WE HAVE OUR BXD DATASET " name " and trait " trait-name " for precompute!\n"))) + (display data-id) + (display traits) + (newline) + ;; ---- write phenotype file + (call-with-output-file "test.tmp" + (lambda (port) + (write 12 port) + (newline port) + (write "HELLO" port) + )) + + ;; ---- start GEMMA precompute + (system "gemma") + ) diff --git a/scripts/precompute/precompute-hits.scm b/scripts/precompute/precompute-hits.scm index d8170db..0bce8d7 100755 --- a/scripts/precompute/precompute-hits.scm +++ b/scripts/precompute/precompute-hits.scm @@ -10,6 +10,7 @@ (gn data hits) (gn data strains) (gn util convert) + (gn runner gemma) (rnrs base) (ice-9 match) (srfi srfi-1) @@ -54,7 +55,7 @@ ) (define (run-precompute db prev-id) - (let* [(hit (get-next-hit-for-precompute db prev-id)) + (let* [(hit (get-precompute-hit db prev-id)) (data-id (assoc-ref hit "DataId")) (data-id-str (int-to-string data-id)) (probesetfreeze-id (assoc-ref hit "ProbeSetFreezeId")) @@ -81,16 +82,14 @@ '() traits)) - (if (= 0 (length non-bxd)) + ;; (if (= 0 (length non-bxd)) + (if (eq? non-bxd '()) (begin - (if name - (display (string-append "WE HAVE OUR BXD DATASET " name " and trait " trait-name " for precompute!\n"))) - (display data-id) - (display traits) - (newline) - - )) - (run-precompute db data-id) + (set-precompute-hit-status! db data-id-str "GEMMA-START") + (run-gemma data-id name trait-name traits))) + ;; disable precompute if non-bxd, for now, so it won't try again + (set-precompute-hit-status! db data-id-str "NON-BXD") + ;;(run-precompute db data-id) )) (run-precompute db 0) ))) -- cgit v1.2.3