From 5f70a04ae5c3ceb269aad1f530212f1c83b20e7e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Todor=20Kondi=C4=87?= <kontrapunkt@uclmail.net>
Date: Thu, 9 Mar 2023 16:50:41 +0100
Subject: [PATCH] data-model: make_db_catalogue: Calculation of rt interval.

---
 R/data-model.R | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/R/data-model.R b/R/data-model.R
index cf82e7d..cd99df8 100644
--- a/R/data-model.R
+++ b/R/data-model.R
@@ -21,15 +21,25 @@ make_db_catalogue <- function(m) {
 make_db_precursors <- function(m) {
     ## Generate masses and label isobars.
 
-    ## Get tolerance.
-    tmp = get_val_unit(m$conf$tolerance[['ms1 fine']])
-    ms1tol = as.numeric(tmp[['val']])
-    ms1unit = tmp[['unit']]
     cat = m$db$cat
-    masses = m$out$tab$comp[cat,.(catid=catid,mz=mz),on=key(cat)]
+    masses = m$out$tab$comp[cat,.(catid=catid,mz=mz,rt=rt),on=key(cat)]
     setkey(masses,mz)
+
+    ## Retention time.
+    tmp = get_val_unit(m$conf$tolerance[['rt']])
+    rttol = as.numeric(tmp[['val']])
+    rtunit = tmp[['unit']]
+    if (rtunit == "s") {
+        rttol = rttol/60.
+    } else if (rtunit != "min") {
+        stop('make_db_precursors: Unknown retention time unit.')
+    }
+    masses[!is.na(rt),`:=`(rt_min=rt-rttol,rt_max=rt+rttol)]
     
     ## Fine error.
+    tmp = get_val_unit(m$conf$tolerance[['ms1 fine']])
+    ms1tol = as.numeric(tmp[['val']])
+    ms1unit = tmp[['unit']]
     if (ms1unit == "ppm") {
         masses[,`:=`(mz_fine_min=mz-ms1tol*mz*1e-6,mz_fine_max=mz+ms1tol*mz*1e-6)]
     } else if (ms1unit == "Da") {
-- 
GitLab