diff --git a/R/api.R b/R/api.R index a9a5e9adf15f2fcea38a2f9aee099bb2816dfd5e..e001ad320ccdd6f927c586d0322dd64fec77e7c4 100644 --- a/R/api.R +++ b/R/api.R @@ -325,7 +325,61 @@ extr_data2 <-function(m) { } extr_data <-function(m) { -m + + fine = create_fine_table(m) + ## fine_with_rt = fine[!is.na(rt_min)] + ## fine_wo_rt = fine[is.na(rt_min)] + + ## fine_mz_rt = as.matrix(fine[,.(iso_fine_min,iso_fine_max)]) + ## fine_rt_rt = as.matrix(fine[,.(rt_min,rt_max)]) + + dpath = m$run$paths$data + + cg1 = data.table(isofine=integer(0), + rt=numeric(0), + intensity=numeric(0), + scan=character(0), + key = c("isofine","rt")) + + for (fn in fine[,unique(file)]) { + + fncg1 = data.table(isofine=integer(0), + rt=numeric(0), + intensity=numeric(0), + scan=character(0), + key = c("isofine","rt")) + + ## Read data. + ms = read_data_file(file=file.path(dpath,fn)) + + ## Get input entries for a particular file. + ftab = fine[.(fn),on="file"] + + ## Extract input data that is needed. + isotab = ftab[,.(iso_fine_min,iso_fine_max,rt_min,rt_max),by="isofine"] + isotab1 = isotab[is.na(rt_min),.(isofine,iso_fine_min,iso_fine_max)] + isotab2 = isotab[!is.na(rt_min),.(isofine,iso_fine_min,iso_fine_max,rt_min,rt_max)] + + + ## Extract MS1 chromatograms. + fncg1 = extr_ms1_cgm(ms=ms, + isotab=isotab1, + qrt=F, + fncg1) + fncg1 = extr_ms1_cgm(ms=ms, + isotab=isotab2, + qrt=T, + fncg1) + + cg1 = cg1[fncg1,.(isofine, + rt, + intensity=i.intensity, + scan=i.scan)] + + } + m$db$extr$cgm$ms1 = res + m + } extr_data_future <- function(m) { diff --git a/R/data-model.R b/R/data-model.R index cd99df8ac4305653c9f970f63902978025984e65..eb2c42b217ad34a07b82ff9f769b9ed8ee489e19 100644 --- a/R/data-model.R +++ b/R/data-model.R @@ -97,6 +97,9 @@ make_db_precursors <- function(m) { iso_fine_max=max(mz_fine_max)), by=isofine] setindex(masses,isocoarse,isofine) + ## Add files. + filetab = m$input$tab$mzml[m$db$cat,.(catid=i.catid,file=file),on=c("set","tag"),nomatch=NULL] + masses[filetab,file:=i.file,on="catid"] m$db$precursors = masses m } diff --git a/R/extraction.R b/R/extraction.R index bf558eb8e46d23d6f4057c1eba0d2902d27d344e..0410eec4770579a712deb31dce575c298d4965dc 100644 --- a/R/extraction.R +++ b/R/extraction.R @@ -611,3 +611,70 @@ gen_ms2_spec_blk <- function(spectra) { ## NEW FUNCTIONS. +create_fine_table <- function(m) { + ## Select fine mz-ranges and split them into those with rt entries + ## and those without. + precs = m$db$precursors + precs[,unique(.SD),.SDcols=c("iso_fine_min", + "iso_fine_max", + "rt_min", + "rt_max", + "file"), + keyby=c("file","isofine")] + +} + +create_coarse_table <- function(m) { + ## Select coarse mz-ranges and split them into those with rt entries + ## and those without. + precs = m$db$precursors + precs[,unique(.SD),.SDcols=c("iso_coarse_min", + "iso_coarse_max", + "rt_min", + "rt_max", + "file"), + keyby=c("file","isocoarse")] + +} + +read_data_file <- function(file) { + MSnbase::readMSData(file=file,msLevel=c(1,2),mode="onDisk") +} + +extr_ms1_cgm <- function(ms,isotab,qrt,res) { + ## Extract chromatograms. + + ## Get mz ranges in matrix format. + mzrng = as.matrix(isotab[,.(iso_fine_min,iso_fine_max)]) + x = if (!qrt) { + ## Call without rt argument. + MSnbase::chromatogram(ms,mz = mzrng) + } else { + ## Call with rt argument (in seconds). + rtrng = as.matrix(isotab[,.(rt_min*60,rt_max*60)]) + MSnbase::chromatogram(ms,mz = mzrng, rt = rtrng) + } + + ## If there were any input masses actually, + if (dim(mzrng)[[1L]] > 0L) { + ## fill the data table. + for (i in 1L:nrow(mzrng)) { + rt = rtime(x[i,1]) + isofine = isotab[(i),isofine] + chunk = data.table(isofine=isofine, + rt=rt, + intensity=intensity(x[i,1]), + scan = names(rt), + key = c("isofine","rt")) + + res = res[chunk,.(isofine, + rt, + intensity=i.intensity, + scan=i.scan)] + + } + } + res +} + + diff --git a/tests/testthat/test-integration.R b/tests/testthat/test-integration.R index e6f4da310a0237a65f32450923b815e711a4ab0c..44d1cc9f623454890d6a9032b301eaaff685d8d8 100644 --- a/tests/testthat/test-integration.R +++ b/tests/testthat/test-integration.R @@ -10,8 +10,9 @@ test_that("Extraction returns what is needed.",{ phase=c("setup","comptab","db")) cat = m$db$cat + print(m$db$precursors[,.(mz,file)]) m = run(envopts=eo,m=m,phase="extract") - + print(m$db$extr$cgm$ms1) expect_true(1==1) })