From 43d6b7a255e5d944ababb07e15b1bea8af6bb96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Todor=20Kondi=C4=87?= <kontrapunkt@uclmail.net> Date: Sun, 15 Jan 2023 19:45:06 +0100 Subject: [PATCH] Adapt MetFrag system to work off a subsection of `summ'. --- DESCRIPTION | 1 + R/base.R | 9 ++ R/metfrag.R | 235 +++++++++++++++++++++++++++++++ R/state.R | 139 ------------------ tests/testthat/_snaps/metfrag.md | 52 ------- tests/testthat/test-metfrag.R | 108 +++++++------- 6 files changed, 302 insertions(+), 242 deletions(-) create mode 100644 R/metfrag.R diff --git a/DESCRIPTION b/DESCRIPTION index 98cb42d..b7979e9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -56,6 +56,7 @@ Collate: 'shiny-state.R' 'shiny-ui-base.R' Depends: + R (>= 4.0.0), RMassBank, RChemMass, mzR, diff --git a/R/base.R b/R/base.R index 575fe86..901734c 100644 --- a/R/base.R +++ b/R/base.R @@ -105,3 +105,12 @@ write_keyval_file <- function(namedl,fname) { } close(con) } + +gen_1d_keytab <- function(dt) { + dkey = data.table::key(dt) + s = dt[,.(key1d=""),by=dkey] + nms = sapply(dkey, as.name,simplify=F,USE.NAMES=F) + ex=bquote(paste(paste0(.(dkey),c(..(nms))),collapse="_"),splice=T) + eval(bquote(s[,`:=`(key1d=.(ex)),by=key(s)])) + +} diff --git a/R/metfrag.R b/R/metfrag.R new file mode 100644 index 0000000..93630f6 --- /dev/null +++ b/R/metfrag.R @@ -0,0 +1,235 @@ +## Copyright (C) 2020,2021,2023 by University of Luxembourg + +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at + +## http://www.apache.org/licenses/LICENSE-2.0 + +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +## Description: +## +## Functions supporting MetFrag. + + +## Overall concept: +## +## For some input entries from `summ': +## +## 1. Generate unique "stags" based on key of `summ'. +## 2. Deduce file names based on stags. +## 3. Run MetFrag on them. +## 4. Summarise Results. + + +metfrag_get_stag_tab <- function(summ) { + ## Argument summ can be a subset of actual `summ' table. + x = gen_1d_keytab(summ) + data.table::setnames(x,old="key1d",new="stag") + x[summ,`:=`(CE=i.CE,ion_mz=mz)] +} + +metfrag_get_ms2_spec <- function(ms2,stag_entry) { + x = ms2[kval_tab,.(mz,intensity),on=names(stag_entry)] + + x +} + +metfrag_run <- function(param,path,subpaths,db_path,stag_tab,ms2,runtime,java_bin) { + keys = intersect(colnames(stag_tab),colnames(ms2)) + message("Generating MetFrag configs.") + file_tab = ms2[stag_tab,{ + r = write_metfrag_config(param = ..param, + path = ..path, + subpaths = ..subpaths, + db_path = ..db_path, + stag = stag, + adduct = adduct, + ion_mz = ion_mz, + spec = data.table(mz=mz,intensity=intensity)) + c(r,stag = stag) + },by=.EACHI,on=keys] + message("Done generating MetFrag configs.") + + withr::with_dir(path,{ + metfrag_run_many(fn_jar = runtime, + file_tab = file_tab, + java_bin = java_bin) + }) +} + + + +get_metfrag_targets <- function(stag_tab,ms2) { + ## Take the columns we need from summ. + x = summ[ms2_sel==T,.SD,.SDcols=c(key(summ),"mz")] + mrg_keys = c(intersect(key(ms2),key(summ)),"an") + x=ms2[x,.(CE=CE,ion_mz=i.mz,mz,intensity),on=mrg_keys,by=.EACHI] + ## Get column order so that `an' follows `CE'. + resnms = setdiff(mrg_keys,"an") + nms = union(union(resnms,"CE"),c("an","ion_mz","mz","intensity")) + data.table::setcolorder(x,neworder = nms) + setkeyv(x,unique(c(resnms,"CE","an"))) + x + +} + +## get_metfrag_run_data(stag_tab,ms2,n=1) { +## } + + +metfrag_on_state <- function(mconf,mrun,summ) { + + +} + +## metfrag_on_state <- function(m,fmany=metfrag_run_many) { +## tgts = get_metfrag_targets(m$out$tab$summ,m$extr$ms2) + +## if (NROW(tgts)==0L) stop("No good spectra for MetFrag.") + +## files = tgts[,write_metfrag_config(param=m$conf$metfrag$param, +## path = m$run$metfrag$path, +## subpaths = m$run$metfrag$subpaths, +## db_path = m$run$metfrag$db_path, +## stag = paste0(.BY,collapse="_"), +## adduct = adduct, +## ion_mz = ion_mz[1], +## spec = .SD[,c("mz","intensity")]), +## by=key(tgts)] + +## data.table::setnames(files,old="V1",new="files") + +## withr::with_dir(m$run$metfrag$path,{ +## x = files[,data.table(fn_conf= .SD[1,files], +## fn_log= .SD[2,files]) +## ,by=key(files)] +## fmany(fn_jar = m$run$metfrag$runtime, +## fn_conf = x$fn_conf, +## fn_log = x$fn_log, +## java_bin = m$run$metfrag$java_bin) + +## list(targets=files) +## }) +## } + + +write_metfrag_config <- function(param,path,subpaths,db_path,stag,adduct,ion_mz,spec) { + check_not_one(ion_mz,"ion_mz") + check_not_one(adduct,"adduct") + dir_res = subpaths$results + dir_spec = subpaths$spec + dir_conf = subpaths$config + dir_log = subpaths$log + + f_spec = file.path(dir_spec,paste0(param$SampleName,"_",stag,".csv")) + f_conf = file.path(dir_conf,paste0(param$SampleName,"_",stag,".conf")) + f_log = file.path(dir_log,paste0(param$SampleName,"_",stag,".log")) + f_res = paste0(param$SampleName,"_",stag) + withr::with_dir(path,{ + param$SampleName = f_res + param = c(param,list(IonizedPrecursorMass=ion_mz, + IsPositiveIonMode=ifelse(grepl(r"(\+$)",adduct),"True","False"), + PrecursorIonMode=METFRAG_ADDUCT_SWITCHES[[adduct]], + ResultsPath="results", + PeakListPath=f_spec)) + + if (nchar(db_path)>0L) param = c(param,list(LocalDatabasePath = db_path)) + data.table::fwrite(spec,file=f_spec,col.names=F,sep=" ") + write_keyval_file(namedl=param,fname=f_conf) + }) + + list(f_conf=f_conf, + f_log=f_log, + f_spec=f_spec) + +} + + +metfrag_run_one <- function(fn_jar, fn_conf, fn_log, mem = NA_character_, java_bin = "java") { + ## Check if file exists. + + ## Assemble arguments. + args <- c('-jar',fn_jar,fn_conf) + message(fn_conf) + ## If total heap memory given (in quantities like '4m', or '2g') + ## then make this argument. + if (!is.na(mem)) args <- c(paste0('-Xmx', mem),args) + ## Start new java process. + p <- processx::process$new(java_bin,args=args,stdout=fn_log,stderr='2>&1') + ## p$wait() + ## p$get_exit_status() + p +} + + +metfrag_run_many_w_futures <- function(fn_jar,fn_conf,fn_log, mem = NA_character_, java_bin = "java") { + ntasks = length(fn_conf) + procs = list() + compl_prev = 0 + message("MetFrag started: ", ntasks," tasks.") + for (n in 1:ntasks) { + procs = c(future::future({ + + st = metfrag_run(fn_jar = fn_jar, + fn_conf = fn_conf[n], + fn_log = fn_log[n], + mem = mem, + java_bin = java_bin) + st + + + },seed = T), procs) + + reslv = which(sapply(procs,future::resolved)) + compl = length(reslv) + + if (compl > compl_prev) { + message("Completed MetFrag tasks: ", compl, "/",ntasks) + compl_prev <- compl + } + + + } +} + + +metfrag_run_many <- function(fn_jar,file_tab, mem = NA_character_, java_bin = "java",nproc=1L) { + ntasks = NROW(file_tab) + + k = ntasks %/% nproc + ndone = 0L + lc = 1L + while (ndone < ntasks) { + ncurr_last = min(ndone + k*lc,ntasks) + procs = list() + for (i in (ndone + 1):ncurr_last) { + fn_conf = file_tab[i,f_conf] + fn_log = file_tab[i,f_log] + message("fn_conf:", fn_conf) + procs[[i-ndone]] = metfrag_run_one(fn_jar, + fn_conf= fn_conf, + fn_log = fn_log, + mem = mem, + java_bin = java_bin) + } + for (p in procs) { + p$wait() + } + message("Completed MetFrag tasks: ", ncurr_last,"/",ntasks,".") + ndone = ncurr_last + lc = lc + 1L + } + + +} + + +summarise_metfrag_results <- function(m) { +} diff --git a/R/state.R b/R/state.R index 9c83bf3..7bfde3c 100644 --- a/R/state.R +++ b/R/state.R @@ -372,143 +372,4 @@ pack_ms2_w_summ <- function(summ,ms2) { } -get_metfrag_targets <- function(summ,ms2) { - ## Take the columns we need from summ. - x = summ[ms2_sel==T,.SD,.SDcols=c(key(summ),"mz")] - mrg_keys = c(intersect(key(ms2),key(summ)),"an") - x=ms2[x,.(CE=CE,ion_mz=i.mz,mz,intensity),on=mrg_keys,by=.EACHI] - ## Get column order so that `an' follows `CE'. - resnms = setdiff(mrg_keys,"an") - nms = union(union(resnms,"CE"),c("an","ion_mz","mz","intensity")) - data.table::setcolorder(x,neworder = nms) - setkeyv(x,unique(c(resnms,"CE","an"))) - x - -} - - -metfrag_on_state <- function(m,fmany=metfrag_run_many) { - tgts = get_metfrag_targets(m$out$tab$summ,m$extr$ms2) - - if (NROW(tgts)==0L) stop("No good spectra for MetFrag.") - - files = tgts[,write_metfrag_config(param=m$conf$metfrag$param, - path = m$run$metfrag$path, - subpaths = m$run$metfrag$subpaths, - db_path = m$run$metfrag$db_path, - stag = paste0(.BY,collapse="_"), - adduct = adduct, - ion_mz = ion_mz[1], - spec = .SD[,c("mz","intensity")]), - by=key(tgts)] - - data.table::setnames(files,old="V1",new="files") - - withr::with_dir(m$run$metfrag$path,{ - x = files[,data.table(fn_conf= .SD[1,files], - fn_log= .SD[2,files]) - ,by=key(files)] - fmany(fn_jar = m$run$metfrag$runtime, - fn_conf = x$fn_conf, - fn_log = x$fn_log, - java_bin = m$run$metfrag$java_bin) - - list(targets=files) - }) -} - - -write_metfrag_config <- function(param,path,subpaths,db_path,stag,adduct,ion_mz,spec) { - check_not_one(ion_mz,"ion_mz") - check_not_one(adduct,"adduct") - dir_res = subpaths$results - dir_spec = subpaths$spec - dir_conf = subpaths$config - dir_log = subpaths$log - - f_spec = file.path(dir_spec,paste0(param$SampleName,"_",stag,".csv")) - f_conf = file.path(dir_conf,paste0(param$SampleName,"_",stag,".conf")) - f_log = file.path(dir_log,paste0(param$SampleName,"_",stag,".log")) - f_res = paste0(param$SampleName,"_",stag) - withr::with_dir(path,{ - param$SampleName = f_res - param = c(param,list(IonizedPrecursorMass=ion_mz, - IsPositiveIonMode=ifelse(grepl(r"(\+$)",adduct),"True","False"), - PrecursorIonMode=METFRAG_ADDUCT_SWITCHES[[adduct]], - ResultsPath="results", - PeakListPath=f_spec)) - - if (nchar(db_path)>0L) param = c(param,list(LocalDatabasePath = db_path)) - data.table::fwrite(spec,file=f_spec,col.names=F,sep=" ") - write_keyval_file(namedl=param,fname=f_conf) - }) - - c(f_conf=f_conf, - f_log=f_log, - f_spec=f_spec) - -} - - -metfrag_run <- function(fn_jar, fn_conf, fn_log, mem = NA_character_, java_bin = "java") { - ## Check if file exists. - - ## Assemble arguments. - args <- c('-jar',fn_jar,fn_conf) - ## If total heap memory given (in quantities like '4m', or '2g') - ## then make this argument. - if (!is.na(mem)) args <- c(paste0('-Xmx', mem),args) - ## Start new java process. - p <- processx::process$new(java_bin,args=args,stdout=fn_log,stderr='2>&1') - p$wait() - p$get_exit_status() - -} - - -metfrag_run_many_w_futures <- function(fn_jar,fn_conf,fn_log, mem = NA_character_, java_bin = "java") { - ntasks = length(fn_conf) - procs = list() - compl_prev = 0 - message("MetFrag started: ", ntasks," tasks.") - for (n in 1:ntasks) { - procs = c(future::future({ - - st = metfrag_run(fn_jar = fn_jar, - fn_conf = fn_conf[n], - fn_log = fn_log[n], - mem = mem, - java_bin = java_bin) - st - - - },seed = T), procs) - - reslv = which(sapply(procs,future::resolved)) - compl = length(reslv) - - if (compl > compl_prev) { - message("Completed MetFrag tasks: ", compl, "/",ntasks) - compl_prev <- compl - } - - } -} - - -metfrag_run_many <- function(fn_jar,fn_conf, fn_log, mem = NA_character_, java_bin = "java") { - ntasks = length(fn_conf) - message("MetFrag started: ", ntasks," tasks.") - for (n in 1:ntasks) { - metfrag_run(fn_jar = fn_jar, - fn_conf = fn_conf[[n]], - fn_log = fn_log[[n]], - mem = mem, - java_bin = java_bin) - - message("Completed MetFrag tasks: ", n, "/",ntasks) - } - - -} diff --git a/tests/testthat/_snaps/metfrag.md b/tests/testthat/_snaps/metfrag.md index 8d07aed..2f4c222 100644 --- a/tests/testthat/_snaps/metfrag.md +++ b/tests/testthat/_snaps/metfrag.md @@ -18,55 +18,3 @@ [13] "MetFragDatabaseType = \nFragmentPeakMatchAbsoluteMassDeviation = 0.001\nFragmentPeakMatchRelativeMassDeviation = 5\nDatabaseSearchRelativeMassDeviation = 5\nMetFragScoreTypes = FragmenterScore,OfflineIndividualMoNAScore\nMetFragScoreWeights = 1,1\nMetFragCandidateWriter = CSV\nSampleName = sample_a_[M+]+_a\nMaximumTreeDepth = 2\nMetFragPreProcessingCandidateFilter = UnconnectedCompoundFilter,IsotopeFilter\nMetFragPostProcessingCandidateFilter = InChIKeyFilter\nIonizedPrecursorMass = 777.7789\nIsPositiveIonMode = True\nPrecursorIonMode = 0\nResultsPath = results\nPeakListPath = spec/sample_a_[M+]+_a.csv\n\n" [14] "MetFragDatabaseType = \nFragmentPeakMatchAbsoluteMassDeviation = 0.001\nFragmentPeakMatchRelativeMassDeviation = 5\nDatabaseSearchRelativeMassDeviation = 5\nMetFragScoreTypes = FragmenterScore,OfflineIndividualMoNAScore\nMetFragScoreWeights = 1,1\nMetFragCandidateWriter = CSV\nSampleName = sample_a_[M-]-_a\nMaximumTreeDepth = 2\nMetFragPreProcessingCandidateFilter = UnconnectedCompoundFilter,IsotopeFilter\nMetFragPostProcessingCandidateFilter = InChIKeyFilter\nIonizedPrecursorMass = 777.7789\nIsPositiveIonMode = False\nPrecursorIonMode = 0\nResultsPath = results\nPeakListPath = spec/sample_a_[M-]-_a.csv\n\n" -# Function get_metfrag_targets behaves as expected. - - Code - head(res, 5) - Output - adduct tag ID CE an ion_mz mz intensity - 1: [M+H]+ AA 100 10 5413 182.0816 60.30273 14530.50 - 2: [M+H]+ AA 100 10 5413 182.0816 69.03477 14933.95 - 3: [M+H]+ AA 100 10 5413 182.0816 72.08167 23162.33 - 4: [M+H]+ AA 100 10 5413 182.0816 73.58591 15178.13 - 5: [M+H]+ AA 100 10 5413 182.0816 84.21584 15690.25 - ---- - - Code - tail(res, 5) - Output - adduct tag ID CE an ion_mz mz intensity - 1: [M+H]+ WT 112 10 2838 268.1045 268.9995 5832.155 - 2: [M+H]+ WT 112 10 2838 268.1045 269.0623 12559.663 - 3: [M+H]+ WT 112 10 2838 268.1045 269.1075 25460.779 - 4: [M+H]+ WT 112 10 2838 268.1045 269.1560 2797.057 - 5: [M+H]+ WT 112 10 2838 268.1045 270.1093 2376.579 - -# function metfrag_on_state returns correct result. - - Code - fc_i - Output - [1] "MetFragDatabaseType = LocalCSV\nFragmentPeakMatchAbsoluteMassDeviation = 0.001\nFragmentPeakMatchRelativeMassDeviation = 5\nDatabaseSearchRelativeMassDeviation = 5\nMetFragScoreTypes = FragmenterScore,OfflineIndividualMoNAScore\nMetFragScoreWeights = 1,1\nMetFragCandidateWriter = CSV\nSampleName = testsample_[M+H]+_AA_100_10_5413\nMaximumTreeDepth = 2\nMetFragPreProcessingCandidateFilter = UnconnectedCompoundFilter,IsotopeFilter\nMetFragPostProcessingCandidateFilter = InChIKeyFilter\nIonizedPrecursorMass = 182.0816\nIsPositiveIonMode = True\nPrecursorIonMode = 1\nResultsPath = results\nPeakListPath = spec/testsample_[M+H]+_AA_100_10_5413.csv\n\n" - ---- - - Code - fs_i - Output - [1] "60.3027267456055 14530.4990234375\n69.0347747802734 14933.9462890625\n72.081672668457 23162.328125\n73.5859069824219 15178.1337890625\n84.2158432006836 15690.2490234375\n85.029182434082 25554.4140625\n87.0445098876953 18821.197265625\n89.0607986450195 16427.841796875\n89.1210479736328 18217.8828125\n91.0549774169922 134823.34375\n95.0499801635742 65502.11328125\n97.2613983154297 14389.7861328125\n97.6495895385742 18860.0859375\n98.9850387573242 40601.94140625\n103.05541229248 22867.087890625\n107.049621582031 27537.53125\n109.065811157227 18192.5703125\n114.104202270508 28663.447265625\n114.111488342285 49196.390625\n119.049705505371 847674.0625\n119.070999145508 30140.04296875\n120.052658081055 81358.890625\n121.065406799316 54804.33203125\n123.044578552246 1926560\n124.047966003418 157123.359375\n127.015647888184 26872.388671875\n136.076065063477 7931134.5\n137.079635620117 706313.5625\n138.082427978516 27748.052734375\n139.123321533203 34180.078125\n147.044372558594 1259233\n148.047698974609 131880.265625\n165.055038452148 5622034\n166.05842590332 623428.3125\n167.060729980469 20126.279296875\n167.091812133789 22329.521484375\n182.081588745117 856551.0625\n182.190643310547 21733.291015625\n183.085632324219 91777.6015625\n183.149627685547 185449.015625\n184.153289794922 20294.25\n185.558090209961 22628.728515625\n204.384399414063 31079.345703125\n" - ---- - - Code - fc_l - Output - [1] "MetFragDatabaseType = LocalCSV\nFragmentPeakMatchAbsoluteMassDeviation = 0.001\nFragmentPeakMatchRelativeMassDeviation = 5\nDatabaseSearchRelativeMassDeviation = 5\nMetFragScoreTypes = FragmenterScore,OfflineIndividualMoNAScore\nMetFragScoreWeights = 1,1\nMetFragCandidateWriter = CSV\nSampleName = testsample_[M+H]+_KO_100_10_5434\nMaximumTreeDepth = 2\nMetFragPreProcessingCandidateFilter = UnconnectedCompoundFilter,IsotopeFilter\nMetFragPostProcessingCandidateFilter = InChIKeyFilter\nIonizedPrecursorMass = 182.0816\nIsPositiveIonMode = True\nPrecursorIonMode = 1\nResultsPath = results\nPeakListPath = spec/testsample_[M+H]+_KO_100_10_5434.csv\n\n" - ---- - - Code - fs_l - Output - [1] "55.0188598632813 3557.97436523438\n55.0551605224609 2828.3818359375\n57.034553527832 13765.171875\n57.0708541870117 1948.08374023438\n57.1659469604492 1294.70715332031\n59.0502586364746 6707.33154296875\n60.0453071594238 2280.73193359375\n61.0294647216797 10715.017578125\n68.165412902832 1142.19506835938\n69.0345077514649 69053.140625\n70.0379028320313 1795.19860839844\n71.0501556396484 9510.4541015625\n72.0452346801758 1734.47155761719\n73.0293197631836 2689.95532226563\n73.065788269043 8034.94921875\n75.0449600219727 8084.9453125\n76.0398178100586 1468.29907226563\n81.0343551635742 4864.2607421875\n81.0707931518555 1732.8984375\n83.0500106811524 22246.251953125\n84.0452728271484 1727.80944824219\n85.0293273925781 42271.6171875\n86.0323944091797 3086.66723632813\n87.0448760986328 16722.26953125\n88.0402755737305 2417.91748046875\n89.060546875 15942.32421875\n90.0557708740234 3494.83618164063\n91.0398101806641 8827.8701171875\n91.0550689697266 2999.041015625\n93.0545349121094 1194.25952148438\n93.07080078125 1294.88610839844\n95.0501022338867 2660.26586914063\n95.0862503051758 2493.74291992188\n97.0291900634766 4663.837890625\n98.0607147216797 1322.10998535156\n98.9849700927734 40984.87890625\n99.0447998046875 11727.0556640625\n101.060676574707 2679.9345703125\n101.096702575684 3435.29125976563\n103.03978729248 11158.53125\n103.075958251953 1674.74304199219\n105.070327758789 1595.48498535156\n107.070823669434 8057.98388671875\n109.065361022949 1518.97705078125\n109.101905822754 1638.36547851563\n109.405807495117 1205.00219726563\n110.072074890137 1678.50036621094\n111.044761657715 24140.046875\n117.054695129395 1369.70556640625\n117.091796875 2421.29370117188\n119.049697875977 16888.525390625\n119.070739746094 8162.4892578125\n121.065284729004 4612.3271484375\n121.101821899414 1777.70166015625\n123.035430908203 1789.76208496094\n123.044593811035 34819.59375\n123.055351257324 4744.55517578125\n124.047988891602 2438.09399414063\n125.060935974121 1541.78198242188\n126.250373840332 1361.5244140625\n126.442039489746 1399.60339355469\n127.015960693359 30204.63671875\n127.039329528809 8304.6806640625\n129.055130004883 33418.078125\n131.070434570313 1761.48364257813\n135.012222290039 1908.33984375\n136.076080322266 143356.171875\n137.061340332031 1264.84484863281\n137.079620361328 15243.3076171875\n137.096588134766 3348.57373046875\n138.053924560547 1271.18615722656\n139.123443603516 1695.84375\n140.083526611328 1486.2216796875\n141.066513061523 1284.47790527344\n144.065872192383 2364.5400390625\n145.049682617188 6511.3193359375\n147.044479370117 26052.619140625\n147.065093994141 14748.5615234375\n148.04719543457 2680.55224609375\n149.08088684082 1496.30859375\n155.047012329102 14446.072265625\n155.107131958008 2343.6201171875\n162.076629638672 3849.05932617188\n163.132995605469 2855.625\n165.05500793457 99720.6875\n165.076019287109 13318.740234375\n165.091369628906 3072.4169921875\n166.058807373047 8357.986328125\n167.091888427734 5026.99609375\n179.046966552734 1596.17309570313\n180.068344116211 2513.84521484375\n180.086883544922 13910.0703125\n180.101852416992 1683.16101074219\n180.872436523438 1415.51440429688\n181.060562133789 3325.17578125\n181.089508056641 1909.15808105469\n181.108963012695 1384.07287597656\n181.122512817383 3012.08203125\n182.009887695313 6990.79443359375\n182.080902099609 16412.189453125\n182.11784362793 4357.50732421875\n182.190734863281 16766.787109375\n183.04133605957 1596.85913085938\n183.078674316406 4474.080078125\n183.100234985352 1810.49816894531\n183.11408996582 2864.93237304688\n183.194580078125 2266.71069335938\n184.097351074219 1749.04125976563\n" - diff --git a/tests/testthat/test-metfrag.R b/tests/testthat/test-metfrag.R index e92c538..45abcaf 100644 --- a/tests/testthat/test-metfrag.R +++ b/tests/testthat/test-metfrag.R @@ -19,7 +19,6 @@ test_that("Do adducts affect MetFrag config generation correctly?",{ cfspec = character(length(METFRAG_ADDUCTS)) names(cfconf) = METFRAG_ADDUCTS names(cfspec) = METFRAG_ADDUCTS - for (adduct in METFRAG_ADDUCTS) { res = write_metfrag_config(param = m$conf$metfrag$param, path = m$run$metfrag$path, @@ -48,62 +47,69 @@ test_that("Do adducts affect MetFrag config generation correctly?",{ }) -test_that("Function get_metfrag_targets behaves as expected.",{ - - summ = STATE_DATA$out$tab$summ - ms2 = STATE_DATA$extr$ms2 - res = get_metfrag_targets(summ=summ, - ms2=ms2) - - expect_snapshot(head(res,5)) - expect_snapshot(tail(res,5)) - -}) - -ok_return_val("metfrag_on_state",{ +ok_return_val("metfrag_run",{ skip_if_not(file.exists(Sys.getenv("METFRAG_JAR")),"Environment variable METFRAG_JAR does not contain a path to MetFrag jar package.") m = make_dummy_mf_project() - res = metfrag_on_state(m) + withr::with_dir(m$run$metfrag$path,{ - fc_i = readChar(res$targets[1,files],nchars=file.size(res$targets[1,files])) - fc_i = gsub(paste0("LocalDatabasePath = ",m$run$metfrag$db_path),"",fc_i) - expect_snapshot(fc_i) - - fs_i = readChar(res$targets[3,files],nchars=file.size(res$targets[3,files])) - fs_i = gsub(paste0("LocalDatabasePath = ",m$run$metfrag$db_path),"",fs_i) - expect_snapshot(fs_i) - - fc_l = readChar(res$targets[.N-2,files],nchars=file.size(res$targets[.N-2,files])) - fc_l = gsub(paste0("LocalDatabasePath = ",m$run$metfrag$db_path),"",fc_l) - expect_snapshot(fc_l) + stagtab = metfrag_get_stag_tab(m$out$tab$summ[ms2_sel == T]) - fs_l = readChar(res$targets[.N,files],nchars=file.size(res$targets[.N,files])) - fs_l = gsub(paste0("LocalDatabasePath = ",m$run$metfrag$db_path),"",fs_l) - expect_snapshot(fs_l) - }) -}) + metfrag_run(param = m$conf$metfrag$param, + path = m$run$metfrag$path, + subpaths = m$run$metfrag$subpaths, + db_path = m$run$metfrag$db_path, + stag_tab = stab, ms2 = m$extr$ms2, + runtime=m$run$metfrag$runtime, + java_bin=m$run$metfrag$java_bin) - - - -test_that("MetFrag example works.",{ - skip_if_not(file.exists(Sys.getenv("METFRAG_JAR")),"Environment variable METFRAG_JAR does not contain a path to MetFrag jar package.") - skip_if_offline() - withr::with_tempdir({ - runtime = path.expand(Sys.getenv("METFRAG_JAR")) - fn_conf = system.file("testdata/example_parameter_file.txt",package = "shinyscreen") - fn_peaks = system.file("testdata/example_data.txt",package = "shinyscreen") - fn_log = "metfrag.log" - file.copy(fn_conf,basename(fn_conf)) - file.copy(fn_peaks,basename(fn_peaks)) - - metfrag_run(fn_jar = runtime, - fn_conf = basename(fn_conf), - fn_log = fn_log) - - content = readChar(fn_log,nchars=file.size(fn_log)) - expect_true(grepl(r"(0 candidate\(s\) discarded during processing due to errors)",content)) + }) }) +## ok_return_val("metfrag_on_state",{ +## ## skip_if_not(file.exists(Sys.getenv("METFRAG_JAR")),"Environment variable METFRAG_JAR does not contain a path to MetFrag jar package.") +## ## m = make_dummy_mf_project() +## ## res = metfrag_on_state(m) +## ## withr::with_dir(m$run$metfrag$path,{ +## ## fc_i = readChar(res$targets[1,files],nchars=file.size(res$targets[1,files])) +## ## fc_i = gsub(paste0("LocalDatabasePath = ",m$run$metfrag$db_path),"",fc_i) +## ## expect_snapshot(fc_i) + +## ## fs_i = readChar(res$targets[3,files],nchars=file.size(res$targets[3,files])) +## ## fs_i = gsub(paste0("LocalDatabasePath = ",m$run$metfrag$db_path),"",fs_i) +## ## expect_snapshot(fs_i) + +## ## fc_l = readChar(res$targets[.N-2,files],nchars=file.size(res$targets[.N-2,files])) +## ## fc_l = gsub(paste0("LocalDatabasePath = ",m$run$metfrag$db_path),"",fc_l) +## ## expect_snapshot(fc_l) + +## ## fs_l = readChar(res$targets[.N,files],nchars=file.size(res$targets[.N,files])) +## ## fs_l = gsub(paste0("LocalDatabasePath = ",m$run$metfrag$db_path),"",fs_l) +## ## expect_snapshot(fs_l) +## ## }) +## }) + + + + +## test_that("MetFrag example works.",{ +## skip_if_not(file.exists(Sys.getenv("METFRAG_JAR")),"Environment variable METFRAG_JAR does not contain a path to MetFrag jar package.") +## skip_if_offline() +## withr::with_tempdir({ +## runtime = path.expand(Sys.getenv("METFRAG_JAR")) +## fn_conf = system.file("testdata/example_parameter_file.txt",package = "shinyscreen") +## fn_peaks = system.file("testdata/example_data.txt",package = "shinyscreen") +## fn_log = "metfrag.log" +## file.copy(fn_conf,basename(fn_conf)) +## file.copy(fn_peaks,basename(fn_peaks)) + +## metfrag_run(fn_jar = runtime, +## fn_conf = basename(fn_conf), +## fn_log = fn_log) + +## content = readChar(fn_log,nchars=file.size(fn_log)) +## expect_true(grepl(r"(0 candidate\(s\) discarded during processing due to errors)",content)) +## }) +## }) + -- GitLab