Skip to content
Snippets Groups Projects
Commit 0e370fc5 authored by Todor Kondić's avatar Todor Kondić
Browse files

make_db_precursors: Add file handling.

parent 5f70a04a
No related branches found
No related tags found
No related merge requests found
...@@ -325,7 +325,61 @@ extr_data2 <-function(m) { ...@@ -325,7 +325,61 @@ extr_data2 <-function(m) {
} }
extr_data <-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) { extr_data_future <- function(m) {
......
...@@ -97,6 +97,9 @@ make_db_precursors <- function(m) { ...@@ -97,6 +97,9 @@ make_db_precursors <- function(m) {
iso_fine_max=max(mz_fine_max)), iso_fine_max=max(mz_fine_max)),
by=isofine] by=isofine]
setindex(masses,isocoarse,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$db$precursors = masses
m m
} }
......
...@@ -611,3 +611,70 @@ gen_ms2_spec_blk <- function(spectra) { ...@@ -611,3 +611,70 @@ gen_ms2_spec_blk <- function(spectra) {
## NEW FUNCTIONS. ## 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
}
...@@ -10,8 +10,9 @@ test_that("Extraction returns what is needed.",{ ...@@ -10,8 +10,9 @@ test_that("Extraction returns what is needed.",{
phase=c("setup","comptab","db")) phase=c("setup","comptab","db"))
cat = m$db$cat cat = m$db$cat
print(m$db$precursors[,.(mz,file)])
m = run(envopts=eo,m=m,phase="extract") m = run(envopts=eo,m=m,phase="extract")
print(m$db$extr$cgm$ms1)
expect_true(1==1) expect_true(1==1)
}) })
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment