diff --git a/R/methods-MSnExp.R b/R/methods-MSnExp.R index 191a11a5c..91d848f75 100644 --- a/R/methods-MSnExp.R +++ b/R/methods-MSnExp.R @@ -265,24 +265,46 @@ setMethod("removeReporters", "MSnExp", setMethod("addIdentificationData", c("MSnExp", "character"), function(object, id, fcol = c("spectrum.file", "acquisition.number"), - icol = c("spectrumFile", "acquisitionnum"), + icol = c("spectrumID", "acquisitionNum"), + acc = "DatabaseAccess", + desc = "DatabaseDescription", + pepseq = "sequence", verbose = isMSnbaseVerbose()) { - addIdentificationData(object, id = mzID(id, verbose = verbose), - fcol = fcol, icol = icol) + addIdentificationData(object, id = mzR::openIDfile(id), + fcol = fcol, icol = icol, + acc, desc, pepseq) + }) + +setMethod("addIdentificationData", c("MSnExp", "mzRident"), + function(object, id, + fcol = c("spectrum.file", "acquisition.number"), + icol = c("spectrumID", "acquisitionNum"), + acc = "DatabaseAccess", + desc = "DatabaseDescription", + pepseq = "sequence", + ...) { + ## prepare id + addIdentificationData(object, id, + fcol = fcol, icol = icol, + acc, desc, pepseq) }) setMethod("addIdentificationData", c("MSnExp", "mzIDClasses"), function(object, id, fcol = c("spectrum.file", "acquisition.number"), - icol = c("spectrumFile", "acquisitionnum"), ...) { + icol = c("spectrumFile", "acquisitionnum"), + acc = "accession", + desc = "description", + pepseq = "pepseq", + ...) { addIdentificationData(object, id = flatten(id), - fcol = fcol, icol = icol) + fcol = fcol, icol = icol, + acc, desc, pepseq) }) setMethod("addIdentificationData", c("MSnExp", "data.frame"), - function(object, id, - fcol = c("spectrum.file", "acquisition.number"), - icol = c("spectrumFile", "acquisitionnum"), ...) { + function(object, id, fcol, icol, acc, desc, pepseq, + ...) { ## we temporaly add the spectrum.file/acquisition.number information ## to our fData data.frame because ## utils.mergeSpectraAndIdentificationData needs this information @@ -297,7 +319,10 @@ setMethod("addIdentificationData", c("MSnExp", "data.frame"), fd <- utils.mergeSpectraAndIdentificationData(fd, id, fcol = fcol, - icol = icol) + icol = icol, + acc = acc, + desc = desc, + pepseq = pepseq) ## after adding the identification data we remove the ## temporary data to avoid duplication and problems in quantify diff --git a/R/utils.R b/R/utils.R index 3ec633c07..d523f8a83 100644 --- a/R/utils.R +++ b/R/utils.R @@ -765,7 +765,8 @@ utils.leftJoin <- function(x, y, by, by.x=by, by.y=by, # @noRd utils.mergeSpectraAndIdentificationData <- function(featureData, id, fcol = c("file", "acquisition.number"), - icol = c("file", "acquisitionnum")) { + icol = c("file", "acquisitionnum"), + acc, desc, pepseq) { ## mzR::acquisitionNum (stored in fData()[, "acquisition.number"] and ## mzID::acquisitionnum should be identical if (!all(fcol %in% colnames(featureData))) { @@ -789,8 +790,8 @@ utils.mergeSpectraAndIdentificationData <- function(featureData, id, id <- id[o, ] ## use flat version of accession/description if multiple ones are available - id$accession <- ave(id$accession, id[, icol], FUN=utils.vec2ssv) - id$description <- ave(id$description, id[, icol], FUN=utils.vec2ssv) + id[, acc] <- ave(id[, acc], id[, icol], FUN=utils.vec2ssv) + id[, desc] <- ave(id[, desc], id[, icol], FUN=utils.vec2ssv) ## remove duplicated entries id <- id[!duplicated(id[, icol]), ] @@ -802,23 +803,23 @@ utils.mergeSpectraAndIdentificationData <- function(featureData, id, ) ## number of members in the protein group - featureData$nprot <- sapply(utils.ssv2list(featureData$accession), + featureData$nprot <- sapply(utils.ssv2list(featureData[, acc]), function(x) { n <- length(x) if (n == 1 && is.na(x)) return(NA) n }) ## number of peptides observed for each protein - featureData$npep.prot <- as.integer(ave(featureData$accession, - featureData$pepseq, + featureData$npep.prot <- as.integer(ave(featureData[, acc], + featureData[, pepseq], FUN = length)) ## number of PSMs observed for each protein - featureData$npsm.prot <- as.integer(ave(featureData$accession, - featureData$accession, + featureData$npsm.prot <- as.integer(ave(featureData[, acc], + featureData[, acc], FUN = length)) ## number of PSMs observed for each protein - featureData$npsm.pep <- as.integer(ave(featureData$pepseq, - featureData$pepseq, + featureData$npsm.pep <- as.integer(ave(featureData[, pepseq], + featureData[, pepseq], FUN = length)) return(featureData) }