#' @include features.R
NULL
#' @rdname features-class
#' @export
featuresXCMS3 <- setClass("featuresXCMS3", slots = list(xdata = "ANY"), contains = "features")
setMethod("initialize", "featuresXCMS3",
function(.Object, ...) callNextMethod(.Object, algorithm = "xcms3", ...))
#' @rdname features-class
#' @export
setMethod("delete", "featuresXCMS3", function(obj, i = NULL, j = NULL, ...)
{
old <- obj
obj <- callNextMethod()
# simple ana subset
if (is.null(j) && !setequal(analyses(old), analyses(obj)))
obj@xdata <- xcms::filterFile(obj@xdata, which(analyses(old) %in% analyses(obj)))
else if (!is.null(j)) # sync features
obj@xdata <- xcms::filterChromPeaks(obj@xdata, getKeptXCMSPeakInds(old, obj))
return(obj)
})
#' Find features using XCMS (new interface)
#'
#' Uses the new \code{xcms3} interface from the \pkg{xcms} package to find features.
#'
#' @templateVar algo XCMS3
#' @templateVar do automatically find features
#' @templateVar generic findFeatures
#' @templateVar algoParam xcms3
#' @template algo_generator
#'
#' @details The file format of analyses must be \code{mzML} or \code{mzXML}.
#'
#' @template centroid_note_mandatory
#'
#' @inheritParams findFeatures
#'
#' @param param The method parameters used by XCMS peak finding, see
#' \code{\link[xcms:findChromPeaks]{xcms::findChromPeaks}}
#' @param \dots Further parameters passed to \code{\link[xcms:findChromPeaks]{xcms::findChromPeaks}}.
#'
#' @references \addCitations{xcms}{1} \cr\cr \addCitations{xcms}{2} \cr\cr \addCitations{xcms}{3}
#'
#' @inherit findFeatures return
#'
#' @export
findFeaturesXCMS3 <- function(analysisInfo, param = xcms::CentWaveParam(), ..., verbose = TRUE)
{
ac <- checkmate::makeAssertCollection()
analysisInfo <- assertAndPrepareAnaInfo(analysisInfo, c("mzXML", "mzML"), verifyCentroided = TRUE, add = ac)
assertS4(param, add = ac)
checkmate::assertFlag(verbose, add = ac)
checkmate::reportAssertions(ac)
files <- sapply(seq_len(nrow(analysisInfo)),
function(i) getMzMLOrMzXMLAnalysisPath(analysisInfo$analysis[i], analysisInfo$path[i]),
USE.NAMES = FALSE)
hash <- makeHash(analysisInfo, do.call(makeFileHash, as.list(files)), param)
cachef <- loadCacheData("featuresXCMS3", hash)
if (!is.null(cachef))
return(cachef)
if (verbose)
printf("Finding features with XCMS for %d analyses ...\n", nrow(analysisInfo))
if (verbose)
printf("Loading raw data...\n")
rawData <- readMSDataForXCMS3(analysisInfo)
if (verbose)
xdata <- xcms::findChromPeaks(rawData, param = param, ...)
else
suppressMessages(xdata <- xcms::findChromPeaks(rawData, param = param, ...))
ret <- importFeaturesXCMS3(xdata, analysisInfo)
saveCacheData("featuresXCMS3", ret, hash)
if (verbose)
{
printf("Done!\n")
printFeatStats(ret@features)
}
return(ret)
}
#' Imports features from XCMS (new interface)
#'
#' Imports feature data generated from an existing \code{\link{XCMSnExp}} object generated by the \pkg{xcms} package.
#'
#' @templateVar algo XCMS3
#' @templateVar generic importFeatures
#' @templateVar algoParam xcms3
#' @template algo_importer
#'
#' @inheritParams importFeatures
#'
#' @param xdata An \code{\link{XCMSnExp}} object.
#'
#' @inherit findFeaturesXCMS3 references
#' @inherit importFeatures return
#'
#' @export
importFeaturesXCMS3 <- function(xdata, analysisInfo)
{
ac <- checkmate::makeAssertCollection()
checkmate::assertClass(xdata, "XCMSnExp", add = ac)
analysisInfo <- assertAndPrepareAnaInfo(analysisInfo, c("mzXML", "mzML"), verifyCentroided = TRUE, add = ac)
checkmate::reportAssertions(ac)
feat <- importXCMSPeaks(xcms::chromPeaks(xdata), analysisInfo)
return(featuresXCMS3(xdata = xdata, features = feat, analysisInfo = analysisInfo))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.