aboutsummaryrefslogtreecommitdiff
path: root/gn/data/hits.scm
blob: 88dee1175fd9ba34f2c9ebb0e67ad395c32b5abd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
(define-module (gn data hits)
  #: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)
  #:use-module (srfi srfi-9)
  ;; #:use-module (gn db sparql)
  #:use-module (dbi dbi)
  #:use-module (gn db mysql)
  #:use-module (gn data group)
  #:use-module (gn util convert)
  #:use-module (web gn-uri)

  #:export (
            get-precompute-hits
            get-precompute-hit
            set-precompute-hit-status!
            update-precompute!
            hit-data-id
            hit-probeset-id
            ))


(define-record-type <hit>
  (make-hit data-id probeset-id)
  hit?
  (data-id hit-data-id)
  (probeset-id hit-probeset-id)
  )

(define (get-precompute-hits db first-id num)
  (dbi-query db (string-append "select Locus, DataId, ProbeSetId, ProbeSetFreezeId from ProbeSetXRef where DataId>" (int-to-string first-id) " AND Locus_old is NULL ORDER BY DataId LIMIT " (format #f "~d" num)))
  (map (lambda (r)
         (make-hit (assoc-ref r "DataId") (assoc-ref r "ProbeSetId")))
         (get-rows db '())
  ))

(define (get-precompute-hit db prev-id)
  (car (get-precompute-hits db prev-id 1)))

(define (set-precompute-hit-status! db data-id-str status-str)
  "Set status of precompute record - typically from NULL to 'GEMMA-START' or 'NON-BXD'.
On completion it is set to 'GEMMA-DONE'.
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))
  (ensure db)
  )

;; MariaDB [db_webqtl]> UPDATE ProbeSetXRef SET Locus_old=Locus,LRS_old=LRS,Locus="new",LRS=9.9,pValue=1.0,additive=1.0 WHERE ProbeSetFreezeId=1 AND DataId=2 AND Locus_old="GEMMA-START" ;

(define (update-precompute! db data-id-str status-str locus lrs pvalue, additive)
  "Once precompute is run we can update the table moving old values and plugging in the new.
"
  (dbi-query db (string-append "UPDATE ProbeSetXRef SET Locus_old=Locus,LRS_old=LRS,Locus=\"" locus "\",LRS=" lrs ",pValue=" pvalue ",additive=" additive " WHERE DataId=" data-id-str " AND Locus_old is \"GEMMA-START\""))
  (ensure db)
  )