Skip to content

Commit

Permalink
eicWorkflow: added fragment eic retrieval
Browse files Browse the repository at this point in the history
  • Loading branch information
Michele Stravs committed May 3, 2024
1 parent 6030da3 commit fb9c1d2
Showing 1 changed file with 104 additions and 2 deletions.
106 changes: 104 additions & 2 deletions R/eicWorkflow.R
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,29 @@ eicWorkflow <- function(
as("SimpleList")
do.call(progressbar, list(object=pb, close=TRUE))
}

# Step 2: acquire EIC for fragments from files
if(2 %in% steps)
{

rmb_log_info("eicWorkflow: Step 2. Acquire fragment EIC from files")
spectra_count <- length(w@spectra)
pb <- do.call(progressbar,
list(object=NULL, value=0, min=0, max=spectra_count))

w@spectra <- w@spectra |> as.list() |>
purrr::map2(w@files,
extractCpdFragmentEics,
mode=mode,
ppm=settings$findMsMsRawSettings$ppmFine,
precursor_dmz = settings$findMsMsRawSettings$mzCoarse,
rt_window = settings$rtMargin,
progressbar = list(hook=progressbar, pb=pb)
) |>
as("SimpleList")
do.call(progressbar, list(object=pb, close=TRUE))
}

w

}
Expand All @@ -46,10 +69,89 @@ extractCpdParentEic <- function(cpd, file, mode, ppm, progressbar = NULL) {
return(cpd)
}

extractCpdFragmentEics <- function(cpd) {

.fixHeaderData <- function(headerData) {

headerData$precursorScanNum <- NA
headerData[which(headerData$msLevel == 1),"precursorScanNum"] <-
headerData[which(headerData$msLevel == 1),"acquisitionNum"]
headerData[,"precursorScanNum"] <- RMassBank:::.locf(headerData[,"precursorScanNum"])
# Clear the actual MS1 precursor scan number again
headerData[which(headerData$msLevel == 1),"precursorScanNum"] <- 0
# Remove precursors which are still NA in precursor scan num.
# This removes a bug when filling precursor if the first scan(s) are MS2 before a
# MS1 scan appears. The resulting NA values in precursorScanNum are problematic downstream.
headerData <- headerData[!is.na(headerData$precursorScanNum),]

return(headerData)
}

extractCpdFragmentEics <- function(cpd, file, mode,
ppm, precursor_dmz, rt_window,
progressbar = NULL) {

attr(cpd, "file") <- file

d <- mzR::openMSfile(file)
h <- mzR::header(d)
p <- RMassBank::makePeaksCache(d, h)

# 1.6.22: For Exploris data, we need to fill precursor here.
h <- .fixHeaderData(h)

if(length(cpd@children) == 0)
return(cpd)

if(!cpd@found)
return(cpd)

cpd@children <- cpd@children |>
as.list() |>
purrr::map(extractSpectrumFragmentEics,
header = h, peaksCache = p,
ppm=ppm, precursor_dmz=precursor_dmz, rt_window=rt_window * 60) |>
as("SimpleList")




if(!is.null(progressbar)) {
value <- do.call(progressbar$hook, list(object=progressbar$pb, value=NULL))
do.call(progressbar$hook, list(object=progressbar$pb, value=value+1))
}

return(cpd)
}

extractSpectrumFragmentEics <- function(cpd, sp) {
extractSpectrumFragmentEics <- function(
sp, header, peaksCache,
ppm, precursor_dmz, rt_window) {
hSub <- header |> dplyr::filter(
abs(precursorMZ - sp@precursorMz) < precursor_dmz,
msLevel == sp@msLevel,
polarity == sp@polarity,
abs(retentionTime - sp@rt) < rt_window,
collisionEnergy == sp@collisionEnergy
)
if(nrow(hSub) == 0)
{
attr(sp, "eics") <- list()
return(sp)
}
hSub$msLevel <- 1
pSub <- peaksCache[hSub$seqNum]

mzs <- sp@mz
if(!is.null(RMassBank::property(sp, "mzRaw")))
mzs <- RMassBank::property(sp, "mzRaw")

eics <- lapply(mzs, function(mz) {
eic <- RMassBank::findEIC(d, mz, RMassBank::ppm(mz, ppm, p = TRUE), headerCache = hSub, peaksCache = pSub)
eic$precursorScan <- hSub$precursorScanNum
eic$mz <- mz
eic
})

attr(sp, "eics") <- eics
return(sp)
}

0 comments on commit fb9c1d2

Please sign in to comment.