diff --git a/.Rbuildignore b/.Rbuildignore index 2da0e4f..f3c1d09 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -7,3 +7,5 @@ ^hooks$ ^playground$ ^revdep$ +^.*\.Rproj$ +^\.Rproj\.user$ diff --git a/.gitignore b/.gitignore index 46a42de..da0db21 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.so *.o *.rds +.Rproj.user diff --git a/DESCRIPTION b/DESCRIPTION index 28967f8..82fe648 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,13 +1,14 @@ Package: MALDIquant -Version: 1.19 +Version: 1.19.50 Date: 2018-11-26 Title: Quantitative Analysis of Mass Spectrometry Data Authors@R: c(person("Sebastian", "Gibb", role=c("aut", "cre"), email="mail@sebastiangibb.de", comment=c(ORCID="0000-0001-7406-4443")), person("Korbinian", "Strimmer", role="ths")) +biocViews: Depends: R (>= 3.2.0), methods -Imports: parallel +Imports: parallel, matter (>= 1.8.0) Suggests: knitr, testthat (>= 0.8) Description: A complete analysis pipeline for matrix-assisted laser desorption/ionization-time-of-flight (MALDI-TOF) and other diff --git a/NAMESPACE b/NAMESPACE index af0c7c0..8f3ebad 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -47,15 +47,24 @@ importFrom("utils", "relist", "tail") +importFrom("matter", + "matter_vec", + "matter_fc") + +importClassesFrom("matter", + "matter_vec", + "matter_fc") exportClasses("MassPeaks", - "MassSpectrum") + "MassSpectrum", + "MassSpectrumOnDisk") export("alignSpectra", "averageMassSpectra", "binPeaks", "createMassPeaks", "createMassSpectrum", + "createMassSpectrumOnDisk", "determineWarpingFunctions", "filterPeaks", "findEmptyMassObjects", diff --git a/R/AllClasses.R b/R/AllClasses.R index 5045c55..0c4aa32 100644 --- a/R/AllClasses.R +++ b/R/AllClasses.R @@ -1,8 +1,16 @@ ## basic class for all spectra based information + +## Set a class union to extend slots +# type to matter Objects +setClassUnion("NumericOrOnDisk", c("numeric", "matter_vec")) + + setClass("AbstractMassObject", - slots=list(mass="numeric", intensity="numeric", + slots=list(mass="NumericOrOnDisk", + intensity="NumericOrOnDisk", metaData="list"), - prototype=list(mass=numeric(), intensity=numeric(), + prototype=list(mass=numeric(), + intensity=numeric(), metaData=list()), contains="VIRTUAL") @@ -10,6 +18,12 @@ setClass("AbstractMassObject", setClass("MassSpectrum", contains="AbstractMassObject") +## represent an On-disk spectrum +setClass("MassSpectrumOnDisk", + slots = list(path = "character"), + prototype = list(path = character()), + contains="AbstractMassObject") + ## represent a peak list from a single spectrum setClass("MassPeaks", slots=list(snr="numeric"), diff --git a/R/AllGenerics.R b/R/AllGenerics.R index b0733e5..82b1c79 100644 --- a/R/AllGenerics.R +++ b/R/AllGenerics.R @@ -130,6 +130,60 @@ if (is.null(getGeneric("totalIonCurrent"))) { } ## end of MassSpectrum +## MassSpectrumOnDisk +if (is.null(getGeneric("approxfun"))) { + setGeneric("approxfun", + function(x, y=NULL, method="linear", yleft, yright, rule=1, f=0, + ties=mean) + standardGeneric("approxfun")) +} +if (is.null(getGeneric("calibrateIntensity"))) { + setGeneric("calibrateIntensity", + function(object, ...) standardGeneric("calibrateIntensity")) +} +if (is.null(getGeneric("detectPeaks"))) { + setGeneric("detectPeaks", + function(object, ...) standardGeneric("detectPeaks")) +} +if (is.null(getGeneric("estimateBaseline"))) { + setGeneric("estimateBaseline", + function(object, method=c("SNIP", "ConvexHull", "Median"), ...) + standardGeneric("estimateBaseline")) +} +if (is.null(getGeneric("estimateNoise"))) { + setGeneric("estimateNoise", + function(object, ...) standardGeneric("estimateNoise")) +} +if (is.null(getGeneric(".findLocalMaxima"))) { + setGeneric(".findLocalMaxima", + function(object, halfWindowSize=20L) + standardGeneric(".findLocalMaxima")) +} +if (is.null(getGeneric(".findLocalMaximaLogical"))) { + setGeneric(".findLocalMaximaLogical", + function(object, halfWindowSize=20L) + standardGeneric(".findLocalMaximaLogical")) +} +if (is.null(getGeneric("isRegular"))) { + setGeneric("isRegular", + function(object, ...) standardGeneric("isRegular")) +} +if (is.null(getGeneric("removeBaseline"))) { + setGeneric("removeBaseline", + function(object, ...) standardGeneric("removeBaseline")) +} +if (is.null(getGeneric("smoothIntensity"))) { + setGeneric("smoothIntensity", + function(object, ...) + standardGeneric("smoothIntensity")) +} +if (is.null(getGeneric("totalIonCurrent"))) { + setGeneric("totalIonCurrent", + function(object) standardGeneric("totalIonCurrent")) +} +## end of MassSpectrumOnDisk + + ## MassPeaks if (is.null(getGeneric("labelPeaks"))) { setGeneric("labelPeaks", function(object, ...) standardGeneric("labelPeaks")) diff --git a/R/approxfun-methods.R b/R/approxfun-methods.R index 5bfe6b6..b4892b9 100644 --- a/R/approxfun-methods.R +++ b/R/approxfun-methods.R @@ -6,7 +6,20 @@ setMethod(f="approxfun", if (isEmpty(x)) { function(x)rep.int(NA, length(x)) } else { - approxfun(x=x@mass, y=x@intensity, method=method, + approxfun(x=mass(x), y=intensity(x), method=method, yleft=yleft, yright=yright, rule=rule, f=f, ties=ties) } }) + +## MassSpectrumOnDisk +setMethod(f="approxfun", + signature=signature(x="MassSpectrumOnDisk"), + definition=function(x, y=NULL, method="linear", yleft, yright, + rule=1L, f=0L, ties=mean) { + if (isEmpty(x)) { + function(x)rep.int(NA, length(x)) + } else { + approxfun(x=mass(x), y=intensity(x), method=method, + yleft=yleft, yright=yright, rule=rule, f=f, ties=ties) + } + }) diff --git a/R/as-methods.R b/R/as-methods.R index b74e504..ade3c5f 100644 --- a/R/as-methods.R +++ b/R/as-methods.R @@ -4,6 +4,6 @@ ## a MassSpectrum object setAs(from="MassPeaks", to="MassSpectrum", - function (from)createMassSpectrum(mass=from@mass, - intensity=from@intensity, - metaData=from@metaData)) + function (from)createMassSpectrum(mass=mass(from), + intensity=intensity(from), + metaData=metaData(from))) diff --git a/R/as.matrix-functions.R b/R/as.matrix-functions.R index e9472de..188586b 100644 --- a/R/as.matrix-functions.R +++ b/R/as.matrix-functions.R @@ -10,8 +10,8 @@ .as.matrix.MassObjectList <- function(l) { .stopIfNotIsMassObjectList(l) - mass <- .unlist(lapply(l, function(x)x@mass)) - intensity <- .unlist(lapply(l, function(x)x@intensity)) + mass <- .unlist(lapply(l, function(x)mass(x))) + intensity <- .unlist(lapply(l, function(x)intensity(x))) uniqueMass <- sort.int(unique(mass)) n <- lengths(l) r <- rep.int(seq_along(l), n) diff --git a/R/as.matrix-methods.R b/R/as.matrix-methods.R index 03ff2a9..325ffab 100644 --- a/R/as.matrix-methods.R +++ b/R/as.matrix-methods.R @@ -3,6 +3,6 @@ setMethod(f="as.matrix", signature=signature(x="AbstractMassObject"), definition=function(x, index) { - matrix(c(x@mass[index], x@intensity[index]), ncol=2L, byrow=FALSE, + matrix(c(mass(x)[index], intensity(x)[index]), ncol=2L, byrow=FALSE, dimnames=list(NULL, c("mass", "intensity"))) }) diff --git a/R/averageMassSpectra-functions.R b/R/averageMassSpectra-functions.R index 94c39ef..e547730 100644 --- a/R/averageMassSpectra-functions.R +++ b/R/averageMassSpectra-functions.R @@ -49,7 +49,7 @@ averageMassSpectra <- function(l, labels, method=c("mean", "median", "sum"), ## merge metaData if (mergeMetaData) { - metaData <- .mergeMetaData(lapply(l, function(x)x@metaData)) + metaData <- .mergeMetaData(lapply(l, function(x)metaData(x))) } else { metaData <- list() } @@ -57,7 +57,7 @@ averageMassSpectra <- function(l, labels, method=c("mean", "median", "sum"), ## use the first non empty spectrum as reference i <- which(!vapply(l, isEmpty, logical(1L)))[1L] if (!is.na(i)) { - mass <- l[[i]]@mass + mass <- mass(l[[i]]) } else { mass <- NA_real_ } diff --git a/R/calibrateIntensity-functions.R b/R/calibrateIntensity-functions.R index 35a24e9..399ff2d 100644 --- a/R/calibrateIntensity-functions.R +++ b/R/calibrateIntensity-functions.R @@ -22,7 +22,7 @@ totalIonCurrent(object) }, "median" = { - median(object@intensity) + median(intensity(object)) } ) } @@ -85,7 +85,7 @@ lapply(l, function(x) { ## 3. quotient calculation - q <- approxfun(x)(reference@mass) / reference@intensity + q <- approxfun(x)(mass(reference)) / intensity(reference) ## 4. median m <- median(q, na.rm=TRUE) ## 5. divide by median diff --git a/R/calibrateIntensity-methods.R b/R/calibrateIntensity-methods.R index 0444d65..0aef703 100644 --- a/R/calibrateIntensity-methods.R +++ b/R/calibrateIntensity-methods.R @@ -21,6 +21,30 @@ setMethod(f="calibrateIntensity", }) }) +## MassSpectrumOnDisk +setMethod(f="calibrateIntensity", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, + method=c("TIC", "PQN", "median"), + range, ...) { + + method <- match.arg(method) + + switch(method, + "TIC" = , + "median" = { + .transformIntensity(object, fun=.calibrateIntensitySimple, + offset=0L, + scaling=.scalingFactor(object, method=method, + range=range)) + }, + "PQN" = { + stop(dQuote("PQN"), + " is not supported for a single MassSpectrum object.") + }) + }) + + ## list setMethod(f="calibrateIntensity", signature=signature(object="list"), diff --git a/R/constructor-functions.R b/R/constructor-functions.R index 341d6ad..ef04dc4 100644 --- a/R/constructor-functions.R +++ b/R/constructor-functions.R @@ -16,6 +16,42 @@ createMassSpectrum <- function(mass, intensity, metaData=list()) { .reorder(object) } + +## MassSpectrumOnDisk + +## createMassSpectrumOnDisk +## default constructor: MassSpectrumOnDisk class +## +## params: +## mass: matter_vec, spectrum mass +## intensity: matter_vec, spectrum intensities +## metaData: list, metadata +## +## returns: +## a MassSpectrumOnDisk object +## +createMassSpectrumOnDisk <- function(mass, intensity, metaData=list()) { + + onDiskMass <- matter::matter_vec(data=mass, datamode="double", filemode="rb+", + paths=tempfile("spectrum", fileext=".mass") + onDiskIntensity <- matter::matter_vec(data=intensity, datamode="double", filemode="rb+", + paths=tempfile("spectrum", fileext=".intensity") + + object <- new(Class="MassSpectrumOnDisk", + mass=onDiskMass, + intensity=onDiskIntensity, + metaData=metaData, + path=setNames( + c(onDiskMass@paths, onDiskIntensity@paths), + c("mass", "intensity") + )) + + + .reorder(object) + +} + + ## end of MassSpectrum ## MassPeaks diff --git a/R/detectPeaks-methods.R b/R/detectPeaks-methods.R index 7638c9a..61c7b28 100644 --- a/R/detectPeaks-methods.R +++ b/R/detectPeaks-methods.R @@ -28,13 +28,51 @@ setMethod(f="detectPeaks", metaData=object@metaData) }) -## list + + + +## MassSpectrumOnDisk +setMethod(f="detectPeaks", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, halfWindowSize=20L, + method=c("MAD", "SuperSmoother"), SNR=2L, ...) { + + tmpMass <- mass(object) + tmpIntensity <- intensity(object) + + ## empty spectrum? + if (.isEmptyWarning(object)) { + return(createMassPeaks(mass=tmpMass, intensity=tmpIntensity, + metaData=object@metaData)) + } + + ## estimate noise + noise <- .estimateNoise(x=tmpMass, y=tmpIntensity, method=method, ...) + + ## find local maxima + isLocalMaxima <- .findLocalMaximaLogical(object, + halfWindowSize=halfWindowSize) + + ## include only local maxima which are above the noise + isAboveNoise <- tmpIntensity > (SNR * noise) + + peakIdx <- which(isAboveNoise & isLocalMaxima) + + createMassPeaks(mass=tmpMass[peakIdx], + intensity=tmpIntensity[peakIdx], + snr=tmpIntensity[peakIdx] / noise[peakIdx], + metaData=object@metaData) + }) + +## list setMethod(f="detectPeaks", signature=signature(object="list"), definition=function(object, ...) { + + ## test arguments + .stopIfNotIsMassSpectrumList(object) + + .mapply(detectPeaks, object, ...) + }) - ## test arguments - .stopIfNotIsMassSpectrumList(object) - .mapply(detectPeaks, object, ...) -}) diff --git a/R/estimateBaseline-methods.R b/R/estimateBaseline-methods.R index 6dc211f..a653696 100644 --- a/R/estimateBaseline-methods.R +++ b/R/estimateBaseline-methods.R @@ -12,3 +12,18 @@ setMethod(f="estimateBaseline", intensity=.estimateBaseline(x=object@mass, y=object@intensity, method=method, ...)) }) + +## MassSpectrumOnDisk +setMethod(f="estimateBaseline", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, method=c("SNIP", "TopHat", "ConvexHull", + "median"), + ...) { + if (.isEmptyWarning(object)) { + return(NA) + } + + cbind(mass=mass(object), + intensity=.estimateBaseline(x=mass(object), y=intensity(object), + method=method, ...)) + }) diff --git a/R/estimateNoise-methods.R b/R/estimateNoise-methods.R index ee37bf6..4d89e54 100644 --- a/R/estimateNoise-methods.R +++ b/R/estimateNoise-methods.R @@ -11,3 +11,17 @@ setMethod(f="estimateNoise", intensity=.estimateNoise(x=object@mass, y=object@intensity, method=method, ...)) }) + +## MassSpectrumOnDisk +setMethod(f="estimateNoise", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, method=c("MAD", "SuperSmoother"), + ...) { + if (.isEmptyWarning(object)) { + return(0L) + } + + cbind(mass=mass(object), + intensity=.estimateNoise(x=mass(object), y=intensity(object), + method=method, ...)) + }) \ No newline at end of file diff --git a/R/findLocalMaxima-methods.R b/R/findLocalMaxima-methods.R index 138acb3..acf1208 100644 --- a/R/findLocalMaxima-methods.R +++ b/R/findLocalMaxima-methods.R @@ -25,3 +25,31 @@ setMethod(f=".findLocalMaximaLogical", .localMaxima(object@intensity, halfWindowSize=halfWindowSize) }) + +## MassSpectrumOnDisk +setMethod(f=".findLocalMaxima", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, halfWindowSize=20L) { + + if (.isEmptyWarning(object)) { + return(matrix(ncol=2L, dimnames=list(list(), list("mass", "intensity")))) + } + + localMaxima <- .findLocalMaximaLogical(object, halfWindowSize=halfWindowSize) + + cbind(mass=mass(object), intensity=intensity(object))[localMaxima,] + }) + +setMethod(f=".findLocalMaximaLogical", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, halfWindowSize=20L) { + + if (.isEmptyWarning(object)) { + return(logical()) + } + + .stopIfNotIsValidHalfWindowSize(halfWindowSize=halfWindowSize, + n=length(object)) + + .localMaxima(intensity(object), halfWindowSize=halfWindowSize) + }) diff --git a/R/intensity-methods.R b/R/intensity-methods.R index 00a3443..0f9fc43 100644 --- a/R/intensity-methods.R +++ b/R/intensity-methods.R @@ -3,20 +3,25 @@ setMethod(f="intensity", signature=signature(object="AbstractMassObject"), definition=function(object, ...) { - object@intensity + object@intensity[] }) + + + + ## AbstractMassObject setReplaceMethod(f="intensity", signature=signature(object="AbstractMassObject", value="numeric"), definition=function(object, value) { - if (length(object@intensity) == length(value)) { - object@intensity <- as.double(value) + if (length(object@intensity[]) == length(value)) { + object@intensity[] <- as.double(value) } else { - stop("Lengths of intensity(", length(object@intensity), + stop("Lengths of intensity(", length(object@intensity[]), ") and value (", length(value), ") have to be equal.") } object }) + diff --git a/R/isEmpty-methods.R b/R/isEmpty-methods.R index 2e9b8ea..334db2a 100644 --- a/R/isEmpty-methods.R +++ b/R/isEmpty-methods.R @@ -6,6 +6,14 @@ setMethod(f="isEmpty", !sum(as.double(x@intensity), na.rm=TRUE) }) +## MassSpectrumOnDisk +setMethod(f="isEmpty", + signature=signature(x="MassSpectrumOnDisk"), + definition=function(x) { + + !sum(as.double(x@intensity[]), na.rm=TRUE) + }) + setMethod(f=".isEmptyWarning", signature=signature(x="AbstractMassObject"), definition=function(x) { diff --git a/R/isMassObject-functions.R b/R/isMassObject-functions.R index 6905081..2a3c996 100644 --- a/R/isMassObject-functions.R +++ b/R/isMassObject-functions.R @@ -1,11 +1,14 @@ +## AbstractMassObject .isMassObject <- function(x) { inherits(x=x, what="AbstractMassObject") } +## MassSpectrum or MassSpectrumOnDisk isMassSpectrum <- function(x) { - is(object=x, class2="MassSpectrum") + (is(object=x, class2="MassSpectrum") || is(object=x, class2="MassSpectrumOnDisk")) } +## MassPeaks isMassPeaks <- function(x) { is(object=x, class2="MassPeaks") } diff --git a/R/isMassObjectList-functions.R b/R/isMassObjectList-functions.R index 2e62f2f..5acc87d 100644 --- a/R/isMassObjectList-functions.R +++ b/R/isMassObjectList-functions.R @@ -1,3 +1,4 @@ +## AbstractMassObject .isMassObjectList <- function(x) { if (!is.list(x)) { return(FALSE) @@ -15,6 +16,7 @@ TRUE } +## MassSpectrum or MassSpectrumOnDisk isMassSpectrumList <- function(x) { if (!is.list(x)) { return(FALSE) @@ -27,11 +29,14 @@ isMassSpectrumList <- function(x) { if (!isMassSpectrumList(x)) { parentCall <- deparse(sys.call(-1L)) stop(parentCall, " : ", sQuote(deparse(substitute(x))), - " is no list of MALDIquant::MassSpectrum objects!", call.=FALSE) + " is no list of MALDIquant::MassSpectrum/MALDIquant::MassSpectrumOnDisk objects!", call.=FALSE) } TRUE } + + +## MassPeaks isMassPeaksList <- function(x) { if (!is.list(x)) { return(FALSE) diff --git a/R/isRegular-methods.R b/R/isRegular-methods.R index 26ad726..9b143d8 100644 --- a/R/isRegular-methods.R +++ b/R/isRegular-methods.R @@ -6,3 +6,12 @@ setMethod(f="isRegular", s <- .irregularScore(object@mass) <= threshold !is.na(s) & s }) + +## MassSpectrumOnDisk +setMethod(f="isRegular", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, threshold=1e-3) { + + s <- .irregularScore(mass(object)) <= threshold + !is.na(s) & s + }) diff --git a/R/length-methods.R b/R/length-methods.R index 751418e..6701856 100644 --- a/R/length-methods.R +++ b/R/length-methods.R @@ -3,5 +3,5 @@ setMethod(f="length", signature=signature(x="AbstractMassObject"), definition=function(x) { - length(x@intensity) + length(intensity(x)) }) diff --git a/R/lines-methods.R b/R/lines-methods.R index c3d7e66..de35e6b 100644 --- a/R/lines-methods.R +++ b/R/lines-methods.R @@ -5,5 +5,5 @@ setMethod(f="lines", type=ifelse(isMassPeaks(x), "h", "l"), ...) { - lines(x=x@mass, y=x@intensity, type, ...) + lines(x=mass(x), y=intensity(x), type, ...) }) diff --git a/R/mass-methods.R b/R/mass-methods.R index 1ca6b33..3525796 100644 --- a/R/mass-methods.R +++ b/R/mass-methods.R @@ -3,19 +3,25 @@ setMethod(f="mass", signature=signature(object="AbstractMassObject"), definition=function(object, ...) { - object@mass + object@mass[] }) + + + ## AbstractMassObject setReplaceMethod(f="mass", signature=signature(object="AbstractMassObject", value="numeric"), definition=function(object, value) { - if (length(object@mass) == length(value)) { - object@mass <- as.double(value) + if (length(object@mass[]) == length(value)) { + object@mass[] <- as.double(value) } else { - stop("Lengths of mass (", length(object@mass), ") and value (", + stop("Lengths of mass (", length(object@mass[]), ") and value (", length(value), ") have to be equal.") } object }) + + + diff --git a/R/plot-methods.R b/R/plot-methods.R index 56a1689..1c47b9f 100644 --- a/R/plot-methods.R +++ b/R/plot-methods.R @@ -4,12 +4,12 @@ setMethod(f="plot", definition=function(x, col="black", xlab=expression(italic(m/z)), ylab="intensity", type=ifelse(isMassPeaks(x), "h", "l"), - xlim=c(ifelse(length(x@mass), - min(x@mass, na.rm=TRUE), 0L), - ifelse(length(x@mass), - max(x@mass, na.rm=TRUE), 1L)), - ylim=c(0, ifelse(length(x@intensity), - max(x@intensity, na.rm=TRUE), + xlim=c(ifelse(length(mass(x)), + min(mass(x), na.rm=TRUE), 0L), + ifelse(length(mass(x)), + max(mass(x), na.rm=TRUE), 1L)), + ylim=c(0, ifelse(length(intensity(x)), + max(intensity(x), na.rm=TRUE), 1L)), main=x@metaData$name, sub=x@metaData$file, cex.sub=0.75, col.sub="#808080", ...) { @@ -22,7 +22,7 @@ setMethod(f="plot", " objects") } - plot(x=x@mass, y=x@intensity, col=col, type=type, xlab=xlab, ylab=ylab, + plot(x=mass(x), y=intensity(x), col=col, type=type, xlab=xlab, ylab=ylab, xlim=xlim, ylim=ylim, main=main, sub=sub, cex.sub=cex.sub, col.sub=col.sub, ...) }) diff --git a/R/points-methods.R b/R/points-methods.R index e8f4d9f..6c6cb1c 100644 --- a/R/points-methods.R +++ b/R/points-methods.R @@ -3,5 +3,5 @@ setMethod(f="points", signature=signature(x="AbstractMassObject"), definition=function(x, ...) { - points(x=x@mass, y=x@intensity, ...) + points(x=mass(x), y=intensity(x), ...) }) diff --git a/R/range-functions.R b/R/range-functions.R index 6d5332b..29b8182 100644 --- a/R/range-functions.R +++ b/R/range-functions.R @@ -13,8 +13,11 @@ .stopIfNotIsMassObjectList(l) ## mass values are already sorted - leftMass <- .unlist(lapply(l, function(x)x@mass[1L])) - rightMass <- .unlist(lapply(l, function(x)x@mass[length(x@mass)])) + leftMass <- .unlist(lapply(l, function(x)mass(x)[1L])) + rightMass <- .unlist(lapply(l, function(x){ + tmpMass <- mass(x) + tmpMass[length(tmpMass)] + })) if (length(rightMass)) { r <- c(max(leftMass, na.rm=TRUE), min(rightMass, na.rm=TRUE)) diff --git a/R/removeBaseline-methods.R b/R/removeBaseline-methods.R index 6ded904..ef69534 100644 --- a/R/removeBaseline-methods.R +++ b/R/removeBaseline-methods.R @@ -20,6 +20,32 @@ setMethod(f="removeBaseline", object }) +## MassSpectrumOnDisk +setMethod(f="removeBaseline", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, + method=c("SNIP", "TopHat", "ConvexHull", + "median"), + ...) { + ## empty spectrum? + if (.isEmptyWarning(object)) { + return(object) + } + + ## temp variables + tmpMass <- mass(object) + tmpIntensity <- intensity(object) + + ## estimate baseline + baseline <- .estimateBaseline(x=tmpMass, y=tmpIntensity, + method=method, ...) + + ## substract baseline + intensity(object) <- tmpIntensity - baseline + + object + }) + ## list setMethod(f="removeBaseline", signature=signature(object="list"), diff --git a/R/reorder-functions.R b/R/reorder-functions.R index a34d91c..7c4540e 100644 --- a/R/reorder-functions.R +++ b/R/reorder-functions.R @@ -9,13 +9,14 @@ ## an AbstractMass object ## .reorder <- function(object, warn=TRUE) { - if (is.unsorted(object@mass)) { + tmpMass <- mass(object) + if (is.unsorted(tmpMass)) { if (warn) { warning("Mass and intensity values are reordered.") } - i <- sort.int(object@mass, index.return=TRUE) - object@mass <- i$x - object@intensity <- object@intensity[i$ix] + i <- sort.int(tmpMass, index.return=TRUE) + mass(object) <- i$x + intensity(object) <- intensity(object)[i$ix] } object } diff --git a/R/replaceNegativeIntensityValues-functions.R b/R/replaceNegativeIntensityValues-functions.R index 280d21c..27dc01b 100644 --- a/R/replaceNegativeIntensityValues-functions.R +++ b/R/replaceNegativeIntensityValues-functions.R @@ -9,11 +9,12 @@ ## an AbstractMass object ## .replaceNegativeIntensityValues <- function(object, warn=TRUE) { - if (any(object@intensity < 0L, na.rm=TRUE) && !isEmpty(object)) { + tmpIntensity <- intensity(object) + if (any(tmpIntensity < 0L, na.rm=TRUE) && !isEmpty(object)) { if (warn) { warning("Negative intensity values are replaced by zeros.") } - object@intensity[which(object@intensity < 0L)] <- 0L + intensity(object)[which(tmpIntensity < 0L)] <- 0L } object } diff --git a/R/show-methods.R b/R/show-methods.R index 07600cc..c8fdaf1 100644 --- a/R/show-methods.R +++ b/R/show-methods.R @@ -2,71 +2,102 @@ setMethod(f="show", signature=signature(object="AbstractMassObject"), definition=function(object) { - - l <- .prepareShow(object) - - isFilename <- grepl(pattern="^File.*", x=l$groups) - - ## to avoid newlines in other values don't format filenames - ## (they could be very long) - l$values[!isFilename] <- format(l$values[!isFilename], justify="left") - - l$groups <- format(l$groups, justify="left") - - cat(paste0(l$groups, ": ", l$values, collapse="\n"), sep="\n") -}) + + l <- .prepareShow(object) + + isFilename <- grepl(pattern="(^File.*)|(^Path.*)", x=l$groups) + + ## to avoid newlines in other values don't format filenames and paths + ## (they could be very long) + l$values[!isFilename] <- format(l$values[!isFilename], justify="left") + + l$groups <- format(l$groups, justify="left") + + cat(paste0(l$groups, ": ", l$values, collapse="\n"), sep="\n") + }) setMethod(f=".prepareShow", signature=signature(object="AbstractMassObject"), definition=function(object) { + + groups <- c("S4 class type", + "Number of m/z values", + "Range of m/z values", + "Range of intensity values", + "Memory usage") + + values <- class(object)[1L] + + if (isEmpty(object)) { + values <- c(values, 0L, NA, NA) + } else { + values <- c(values, + length(mass(object)), + paste0(round(range(mass(object)), digits=3L), collapse=" - "), + paste0(format(min(intensity(object)), digits=4L, + scientific=TRUE), " - ", + format(max(intensity(object)), digits=4L, + scientific=TRUE))) + } + values <- c(values, .memoryUsageStr(object)) + + groups <- c(groups, .prepareShowGroupName(object@metaData$name, "Name")) + values <- c(values, object@metaData$name) + + groups <- c(groups, .prepareShowGroupName(object@metaData$file, "File")) + values <- c(values, object@metaData$file) + + list(groups=groups, values=values) + }) - groups <- c("S4 class type", - "Number of m/z values", - "Range of m/z values", - "Range of intensity values", - "Memory usage") - - values <- class(object)[1L] - - if (isEmpty(object)) { - values <- c(values, 0L, NA, NA) - } else { - values <- c(values, - length(object@mass), - paste0(round(range(object@mass), digits=3L), collapse=" - "), - paste0(format(min(object@intensity), digits=4L, - scientific=TRUE), " - ", - format(max(object@intensity), digits=4L, - scientific=TRUE))) - } - values <- c(values, .memoryUsageStr(object)) - groups <- c(groups, .prepareShowGroupName(object@metaData$name, "Name")) - values <- c(values, object@metaData$name) - groups <- c(groups, .prepareShowGroupName(object@metaData$file, "File")) - values <- c(values, object@metaData$file) - list(groups=groups, values=values) -}) +setMethod(f=".prepareShow", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object) { + + l <- callNextMethod(object) + + + + if (isEmpty(object)) { + values <- NA + } else { + values <- object@path + } + + + groups <- "Path to on-disk spectra" + + if (length(values) == 2) { + groups <- c(groups, " ") + } + + ## append path info + l$groups <- append(l$groups, groups) + l$values <- append(l$values, values) + + list(groups=l$groups, values=l$values) + }) setMethod(f=".prepareShow", signature=signature(object="MassPeaks"), definition=function(object) { - - l <- callNextMethod(object) - - groups <- "Range of snr values" - - if (isEmpty(object)) { - values <- NA - } else { - values <- paste0(round(range(object@snr), digits=3), collapse=" - ") - } - - ## append snr info after intensity - l$groups <- append(l$groups, groups, after=4L) - l$values <- append(l$values, values, after=4L) - - list(groups=l$groups, values=l$values) -}) + + l <- callNextMethod(object) + + groups <- "Range of snr values" + + if (isEmpty(object)) { + values <- NA + } else { + values <- paste0(round(range(object@snr), digits=3), collapse=" - ") + } + + ## append snr info after intensity + l$groups <- append(l$groups, groups, after=4L) + l$values <- append(l$values, values, after=4L) + + list(groups=l$groups, values=l$values) + }) \ No newline at end of file diff --git a/R/smoothIntensity-methods.R b/R/smoothIntensity-methods.R index 2721ecc..80e03d4 100644 --- a/R/smoothIntensity-methods.R +++ b/R/smoothIntensity-methods.R @@ -1,4 +1,4 @@ -## AbstractMassObject +## MassSpectrum setMethod(f="smoothIntensity", signature=signature(object="MassSpectrum"), definition=function(object, @@ -29,6 +29,39 @@ setMethod(f="smoothIntensity", .transformIntensity(object, fun=fun, halfWindowSize=halfWindowSize, ...) }) + +## MassSpectrumOnDisk +setMethod(f="smoothIntensity", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object, + method=c("SavitzkyGolay", "MovingAverage"), + halfWindowSize, ...) { + ## empty spectrum? + if (.isEmptyWarning(object)) { + return(object) + } + + method <- match.arg(method) + + fun <- switch(method, + "SavitzkyGolay" = { + if (missing(halfWindowSize)) { + halfWindowSize <- 10L + } + .savitzkyGolay + }, + "MovingAverage" = { + if (missing(halfWindowSize)) { + halfWindowSize <- 2L + } + .movingAverage + } + ) + + .transformIntensity(object, fun=fun, halfWindowSize=halfWindowSize, ...) + }) + + ## list setMethod(f="smoothIntensity", signature=signature(object="list"), diff --git a/R/subset-methods.R b/R/subset-methods.R index f0b6a80..bc52e2a 100644 --- a/R/subset-methods.R +++ b/R/subset-methods.R @@ -3,10 +3,10 @@ setMethod(f="[", signature=signature(x="AbstractMassObject", i="numeric", j="missing"), definition=function(x, i, j, ..., drop=TRUE) { - x@mass <- x@mass[i] - x@intensity <- x@intensity[i] - - x + x@mass <- x@mass[i] + x@intensity <- x@intensity[i] + + x }) ## AbstractMassObject @@ -18,10 +18,50 @@ setMethod(f="[", i <- which(i) x@mass <- x@mass[i] x@intensity <- x@intensity[i] - + x }) +## MassSpectrumOnDisk + +## In the case of MassSpectrumOnDisk objects subsetting the original on-disk data in not possible. In +## this situation a new subsetted MassSpectrum object is returned + +setMethod(f="[", + signature=signature(x="MassSpectrumOnDisk", i="numeric", j="missing"), + definition=function(x, i, j, ..., drop=TRUE) { + + warning("For the supplied MassSpectrumOnDisk object, subsetting the original on-disk data ", + "is not possible. In this situation a new subsetted MassSpectrum object is returned.\n") + + + + createMassSpectrum(mass=mass(x)[i], + intensity=intensity(x)[i], + metaData=x@metaData) + + + }) + +## MassSpectrumOnDisk +setMethod(f="[", + signature=signature(x="MassSpectrumOnDisk", i="logical", j="missing"), + definition=function(x, i, j, ..., drop=TRUE) { + + warning("For the supplied MassSpectrumOnDisk object, subsetting the original on-disk data ", + "is not possible. In this situation a new subsetted MassSpectrum object is returned.\n") + + ## seems to be faster than evaluating the logical expression twice + i <- which(i) + + createMassSpectrum(mass=mass(x)[i], + intensity=intensity(x)[i], + metaData=x@metaData) + + + }) + +## MassPeaks setMethod(f="[", signature=signature(x="MassPeaks", i="numeric", j="missing"), definition=function(x, i, j, ..., drop=TRUE) { @@ -33,7 +73,7 @@ setMethod(f="[", x }) -## AbstractMassObject +## MassPeaks setMethod(f="[", signature=signature(x="MassPeaks", i="logical", j="missing"), definition=function(x, i, j, ..., drop=TRUE) { diff --git a/R/totalIonCurrent-methods.R b/R/totalIonCurrent-methods.R index 8774c82..38675b5 100644 --- a/R/totalIonCurrent-methods.R +++ b/R/totalIonCurrent-methods.R @@ -8,3 +8,15 @@ setMethod(f="totalIonCurrent", as.double(sum((left + right) / 2L * diff(object@mass), na.rm=TRUE)) }) + +## MassSpectrumOnDisk +setMethod(f="totalIonCurrent", + signature=signature(object="MassSpectrumOnDisk"), + definition=function(object) { + + tmpIntensity <- intensity(object) + left <- as.double(head(tmpIntensity, -1L)) + right <- as.double(tail(tmpIntensity, -1L)) + + as.double(sum((left + right) / 2L * diff(mass(object)), na.rm=TRUE)) + }) diff --git a/R/transformIntensity-methods.R b/R/transformIntensity-methods.R index 2220666..03f65b4 100644 --- a/R/transformIntensity-methods.R +++ b/R/transformIntensity-methods.R @@ -37,12 +37,12 @@ setMethod(f=".transformIntensity", if (!isEmpty(object)) { fun <- match.fun(fun) - object@intensity <- fun(object@intensity, ...) + intensity(object) <- fun(intensity(object), ...) if (na.rm) { - naIdx <- which(!is.na(object@intensity)) - object@intensity <- object@intensity[naIdx] - object@mass <- object@mass[naIdx] + naIdx <- which(!is.na(intensity(object))) + intensity(object) <- intensity(object)[naIdx] + mass(object) <- mass(object)[naIdx] } object <- .replaceNegativeIntensityValues(object) diff --git a/R/trim-methods.R b/R/trim-methods.R index 6a494ad..0de2ac8 100644 --- a/R/trim-methods.R +++ b/R/trim-methods.R @@ -8,7 +8,7 @@ setMethod("trim", range <- .reorderRange(range) - sel <- which(findInterval(object@mass, range, rightmost.closed=TRUE) == 1L) + sel <- which(findInterval(mass(object), range, rightmost.closed=TRUE) == 1L) if (!length(sel)) { warning("The mass range (", paste0(range, collapse=":"), @@ -18,6 +18,39 @@ setMethod("trim", object[sel] }) +## MassSpectrumOnDisk + +## In the case of MassSpectrumOnDisk objects subsetting/trimming the original on-disk data in not possible. In +## this situation a new subsetted/trimmed MassSpectrum object is returned + +setMethod("trim", + signature=signature(object="MassSpectrumOnDisk", range="numeric"), + definition=function(object, range) { + if (length(range) != 2L) { + stop(sQuote("range"), " has to be a vector of length 2.") + } + + range <- .reorderRange(range) + + sel <- which(findInterval(mass(object), range, rightmost.closed=TRUE) == 1L) + + if (!length(sel)) { + warning("The mass range (", paste0(range, collapse=":"), + ") is outside of the stored mass values. No data points left.") + } + + warning("For the supplied MassSpectrumOnDisk object, trimming the original on-disk data ", + "is not possible. In this situation a new trimmed MassSpectrum object is returned.\n") + + + + createMassSpectrum(mass=mass(object)[sel], + intensity=intensity(object)[sel], + metaData=object@metaData) + + + }) + ## list setMethod("trim", signature=signature(object="list", range="numeric"), diff --git a/R/valid-methods.R b/R/valid-methods.R index 70efc6f..6b0bd7b 100644 --- a/R/valid-methods.R +++ b/R/valid-methods.R @@ -1,35 +1,39 @@ ## AbstractMassObject .validAbstractMassObject <- function(object) { - if (length(object@mass) != length(object@intensity)) { - return(paste0("Lengths of mass (", length(object@mass), - ") and intensity (", length(object@intensity), - ") have to be equal.")) - } - if (is.numeric(object@mass) && - length(object@mass) && - any(object@mass < 0L)) { - warning("Negative mass values found.") - } - if (is.numeric(object@intensity) && - !isEmpty(object) && - any(object@intensity < 0L)) { - warning("Negative intensity values found.") - } - if (is.unsorted(object@mass)) { - warning("Unsorted mass values found.") - } - TRUE + + tmpMass <- mass(object) + tmpIntensity <- intensity(object) + + if (length(tmpMass) != length(tmpIntensity)) { + return(paste0("Lengths of mass (", length(tmpMass), + ") and intensity (", length(tmpIntensity), + ") have to be equal.")) + } + if (is.numeric(tmpMass) && + length(tmpMass) && + any(tmpMass < 0L)) { + warning("Negative mass values found.") + } + if (is.numeric(tmpIntensity) && + !isEmpty(object) && + any(tmpIntensity < 0L)) { + warning("Negative intensity values found.") + } + if (is.unsorted(tmpMass)) { + warning("Unsorted mass values found.") + } + TRUE } setValidity("AbstractMassObject", method=.validAbstractMassObject) .validMassPeaks <- function(object) { - if (length(object@intensity) != length(object@snr)) { - return(paste0("Lengths of intensity (", length(object@intensity), - ") and snr (", length(object@snr), - ") have to be equal.")) - } - .validAbstractMassObject(object) + if (length(object@intensity) != length(object@snr)) { + return(paste0("Lengths of intensity (", length(object@intensity), + ") and snr (", length(object@snr), + ") have to be equal.")) + } + .validAbstractMassObject(object) } -setValidity("MassPeaks", method=.validMassPeaks) +setValidity("MassPeaks", method=.validMassPeaks) \ No newline at end of file diff --git a/R/warp-functions.R b/R/warp-functions.R index a8b66d7..04a1489 100644 --- a/R/warp-functions.R +++ b/R/warp-functions.R @@ -54,11 +54,12 @@ warpMassPeaks <- function(l, w, emptyNoMatches=FALSE) { } l[notNa] <- .mapply(function(m, wf) { - m@mass <- m@mass + wf(m@mass) + massOfm <- mass(m) + mass(m) <- massOfm + wf(massOfm) m }, m=ml, wf=wl) if (emptyNoMatches) { - l[!notNa] <- lapply(l[!notNa], function(m) { m@intensity[] <- 0; m }) + l[!notNa] <- lapply(l[!notNa], function(m) { intensity(m) <- 0; m }) } l } diff --git a/man/AbstractMassObject-class.Rd b/man/AbstractMassObject-class.Rd index ec0c973..90b0815 100644 --- a/man/AbstractMassObject-class.Rd +++ b/man/AbstractMassObject-class.Rd @@ -39,13 +39,14 @@ \title{Class "AbstractMassObject"} \description{ \code{\linkS4class{AbstractMassObject}} is an abstract (means pure virtual) -class. It is the parent class of \code{\linkS4class{MassSpectrum}} and -\code{\linkS4class{MassPeaks}}. +class. It is the parent class of \code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}} and \code{\linkS4class{MassPeaks}}. It shouldn't create or handle by the user because it is for internal use only. } \section{Derived classes}{ \code{\linkS4class{MassPeaks}}, -\code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}} } \section{Slots}{ \describe{ @@ -124,6 +125,7 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \seealso{ \code{\linkS4class{MassPeaks}}, \code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}}, \code{\link[MALDIquant]{plot,AbstractMassObject,missing-method}}, \code{\link[MALDIquant]{transformIntensity,AbstractMassObject-method}}, \code{\link[MALDIquant]{trim,AbstractMassObject,numeric-method}} diff --git a/man/MALDIquant-package.Rd b/man/MALDIquant-package.Rd index 3e05b59..6ff6524 100644 --- a/man/MALDIquant-package.Rd +++ b/man/MALDIquant-package.Rd @@ -34,6 +34,7 @@ Main classes: \item \code{\linkS4class{MassPeaks}}: Represents a peak list of a single spectrum. \item \code{\linkS4class{MassSpectrum}}: Represents a single spectrum. + \item \code{\linkS4class{MassSpectrumOnDisk}}: Represents a single spectrum and used for direct on-disk manipulation. } The accompanying website (see below) provides example R scripts to illustrate diff --git a/man/MassSpectrumOnDisk-class.Rd b/man/MassSpectrumOnDisk-class.Rd new file mode 100644 index 0000000..0d9e5a2 --- /dev/null +++ b/man/MassSpectrumOnDisk-class.Rd @@ -0,0 +1,115 @@ +\name{MassSpectrumOnDisk-class} +\Rdversion{1.1} +\docType{class} +\alias{MassSpectrumOnDisk} +\alias{MassSpectrumOnDisk-class} +\alias{isRegular} +\alias{isRegular,MassSpectrumOnDisk-method} +\alias{totalIonCurrent} +\alias{totalIonCurrent,MassSpectrumOnDisk-method} + +\title{Class "MassSpectrumOnDisk"} +\description{ +\code{\linkS4class{MassSpectrumOnDisk}} represents a single spectrum of a MALDI-TOF +mass spectrometry measurement. It provides an easy framework for doing +some preprocessing steps like peak detection, baseline correction and +much more. This class is identical to the \code{\linkS4class{MassSpectrum}} object except that it uses +the \code{matter} package internally to interface directly with mass spectra on disk +without loading them into memory. This is handy when dealing with mass spectrometry +imaging (MSI) data which usually has high memory-footprint. The \code{mass} and \code{intensity} slots +are \code{matter::matter_vec} objects with only the \code{metaData} slot loaded into memory. +When used with \code{\href{https://ms-imaging.org/wp/imzml/}{imzML}} MSI files, the spectra can be +directly attached to the binary \code{ibd} file via \code{MALDIquantForeign::importImzMl; attachOnly = TRUE} without the need to load them into memory. \cr +} +\section{Objects from the Class}{ +\code{\link[MALDIquant]{createMassSpectrumOnDisk}}: Creates a +\code{\linkS4class{MassSpectrumOnDisk}} object. +} +\section{Extends}{ +Class \code{\linkS4class{AbstractMassObject}}, directly. +} +\section{Methods}{ +\describe{ + \item{calibrateIntensity}{\code{signature(x = "MassSpectrumOnDisk")}: + Calibrates the intensity of a + \code{\linkS4class{MassSpectrumOnDisk}} object. + See \code{\link[MALDIquant]{calibrateIntensity,MassSpectrumOnDisk-method}} for + details.} + \item{detectPeaks}{\code{signature(x = "MassSpectrumOnDisk")}: + Look for local maxima and estimate noise to extract peaks out of a + \code{\linkS4class{MassSpectrumOnDisk}} object. + See \code{\link[MALDIquant]{detectPeaks,MassSpectrumOnDisk-method}} for + details.} + \item{estimateBaseline}{\code{signature(x = "MassSpectrumOnDisk")}: + Estimates the baseline of a + \code{\linkS4class{MassSpectrumOnDisk}} object. + See \code{\link[MALDIquant]{estimateBaseline,MassSpectrumOnDisk-method}} for + details.} + \item{estimateNoise}{\code{signature(x = "MassSpectrumOnDisk")}: + Estimates the noise of a + \code{\linkS4class{MassSpectrumOnDisk}} object. + See \code{\link[MALDIquant]{estimateNoise,MassSpectrumOnDisk-method}} for + details.} + \item{isRegular}{\code{signature(object = "MassSpectrumOnDisk")}: + Returns \code{FALSE} if the frequency of mass values with irregular + intervals is greater than \code{threshold} (because \code{object} + was measured in \emph{centroid} mode or some \code{intensity} + values were filtered).} + \item{removeBaseline}{\code{signature(x = "MassSpectrumOnDisk")}: + Estimates and removes the baseline of a + \code{\linkS4class{MassSpectrumOnDisk}} object. + See \code{\link[MALDIquant]{removeBaseline,MassSpectrumOnDisk-method}} for + details.} + \item{smoothIntensity}{\code{signature(object = "MassSpectrumOnDisk")}: + Smoothes the intensities of an \code{MassSpectrumOnDisk} object. + See \code{\link[MALDIquant]{smoothIntensity,MassSpectrumOnDisk-method}} for + details.} + \item{totalIonCurrent}{\code{signature(object = "MassSpectrumOnDisk")}: + Accessor function for Total Ion Current (TIC, area under the curve).} +} +} +\author{ +Denis Abu Sammour \email{d.abu-sammour@hs-mannheim.de} +} + +\references{ +\code{"matter"}:\cr +Kylie A. Bemis (2018). matter: A framework for rapid prototyping with binary data on disk. R + package version 1.8.0. \url{https://github.com/kuwisdelu/matter}. +} + +\seealso{ +\code{\linkS4class{MassPeaks}}, +\code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{AbstractMassObject}} + +Website: \url{http://strimmerlab.org/software/maldiquant/} +} +\examples{ +## load package +library("MALDIquant") + +## create a MassSpectrumOnDisk object by default constructor +## This creates two matter::matter_vec objects in the temp +## directory representing mass and intensity values, respectfully. +s <- createMassSpectrumOnDisk(mass=1:100, intensity=rnorm(100)^2, + metaData=list(name="example")) + +## show some details +s + +## plot spectrum +plot(s) + +## get TIC +totalIonCurrent(s) + +## modify intensity and metaData +intensity(s)[1:50] <- 0 +metaData(s) <- list(name="modified example") + +## plot again +plot(s) +} +\keyword{classes} + diff --git a/man/alignSpectra-functions.Rd b/man/alignSpectra-functions.Rd index 11345a4..84e2095 100644 --- a/man/alignSpectra-functions.Rd +++ b/man/alignSpectra-functions.Rd @@ -1,11 +1,11 @@ \name{alignSpectra} \alias{alignSpectra} \title{ -Align MassSpectrum objects. +Align MassSpectrum/MassSpectrumOnDisk objects. } \description{ -This function aligns a list of \code{\linkS4class{MassSpectrum}} objects -(spectra alignment is also known as \emph{warping/phase correction}). \cr +This function aligns a list of \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassSpectrumOnDisk}} +objects (spectra alignment is also known as \emph{warping/phase correction}). \cr } \usage{ alignSpectra(spectra, halfWindowSize=20, noiseMethod="MAD", SNR=2, @@ -14,7 +14,7 @@ alignSpectra(spectra, halfWindowSize=20, noiseMethod="MAD", SNR=2, } \arguments{ \item{spectra}{ - \code{list}, list of \code{\linkS4class{MassSpectrum}} objects. + \code{list}, list of \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassSpectrumOnDisk}} objects. } \item{halfWindowSize}{\code{numeric}, half window size; see \code{\link[MALDIquant]{detectPeaks}}. @@ -50,14 +50,14 @@ alignSpectra(spectra, halfWindowSize=20, noiseMethod="MAD", SNR=2, \item{emptyNoMatches}{ \code{logical}, if \code{TRUE} (default: \code{FALSE}) the intensity values of - \code{\linkS4class{MassSpectrum}} or + \code{\linkS4class{MassSpectrum}}, \code{\linkS4class{MassSpectrumOnDisk}} or \code{\linkS4class{MassPeaks}} objects with missing (\code{NA}) warping functions are set to zero; see \code{\link[MALDIquant]{warpMassSpectra}}. } \item{\dots}{arguments to be passed to - \code{\link[MALDIquant]{detectPeaks,MassSpectrum-method}}.} -} + \code{\link[MALDIquant]{detectPeaks}.} +}} \details{ \code{alignSpectra} is a wrapper function around \code{\link[MALDIquant]{detectPeaks}}, @@ -66,7 +66,7 @@ alignSpectra(spectra, halfWindowSize=20, noiseMethod="MAD", SNR=2, manually if you need finer control (e.g. plotting of warping functions). } \value{ -Returns a \code{list} of aligned \code{\linkS4class{MassSpectrum}} objects. +Returns a \code{list} of aligned \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassSpectrumOnDisk}} objects. } \author{ Sebastian Gibb \email{mail@sebastiangibb.de} @@ -76,7 +76,7 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \code{\link[MALDIquant]{determineWarpingFunctions}}, \code{\link[MALDIquant]{referencePeaks}}, \code{\link[MALDIquant]{warpMassSpectra}}, -\code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum/MassSpectrumOnDisk}} \code{demo("warping")} diff --git a/man/averageMassSpectra-functions.Rd b/man/averageMassSpectra-functions.Rd index 982c6af..c7a6847 100644 --- a/man/averageMassSpectra-functions.Rd +++ b/man/averageMassSpectra-functions.Rd @@ -1,21 +1,21 @@ \name{averageMassSpectra} \alias{averageMassSpectra} \title{ -Averages \code{\linkS4class{MassSpectrum}} objects. +Averages \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects. } \description{ -This function averages \code{\linkS4class{MassSpectrum}} objects. +This function averages \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects. If \code{MassSpectrumOnDisk} objects are supplied, the result will be of \code{MassSpectrum} type. } \usage{ averageMassSpectra(l, labels, method=c("mean", "median", "sum"), \dots) } \arguments{ \item{l}{ - \code{list}, list of \code{\linkS4class{MassSpectrum}} objects. + \code{list}, list of \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects. } \item{labels}{ \code{list}, list of \code{\link{factor}}s (one for each - \code{\linkS4class{MassSpectrum}} object) to do groupwise averaging. + \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object) to do groupwise averaging. } \item{method}{used aggregation function.} \item{\dots}{arguments to be passed to underlying functions (currently only @@ -24,7 +24,7 @@ averageMassSpectra(l, labels, method=c("mean", "median", "sum"), \dots) \details{ The mass of the averaged \code{\linkS4class{MassSpectrum}} object will be the mass of the first non-empty -\code{\linkS4class{MassSpectrum}} object (of each group). +\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object (of each group). } \value{ Returns a single (no \code{labels} given) or a \code{\link{list}} @@ -35,6 +35,7 @@ Sebastian Gibb \email{mail@sebastiangibb.de} } \seealso{ \code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}}, \code{\link[MALDIquant]{mergeMassPeaks}} Website: \url{http://strimmerlab.org/software/maldiquant/} diff --git a/man/calibrateIntensity-methods.Rd b/man/calibrateIntensity-methods.Rd index 74b4224..2a7ad0b 100644 --- a/man/calibrateIntensity-methods.Rd +++ b/man/calibrateIntensity-methods.Rd @@ -2,22 +2,25 @@ \docType{methods} \alias{calibrateIntensity} \alias{calibrateIntensity,MassSpectrum-method} +\alias{calibrateIntensity,MassSpectrumOnDisk-method} \alias{calibrateIntensity,list-method} \title{Calibrates intensities of a MassSpectrum object.} \description{ This function calibrates (normalize) intensities of -\code{\linkS4class{MassSpectrum}} objects. +\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects. } \usage{ \S4method{calibrateIntensity}{MassSpectrum}(object, method=c("TIC", "PQN", "median"), range, \dots) +\S4method{calibrateIntensity}{MassSpectrumOnDisk}(object, + method=c("TIC", "PQN", "median"), range, \dots) \S4method{calibrateIntensity}{list}(object, method=c("TIC", "PQN", "median"), range, \dots) } \arguments{ - \item{object}{\code{\linkS4class{MassSpectrum}} object or a \code{list} of - \code{\linkS4class{MassSpectrum}} objects.} + \item{object}{\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object or a \code{list} of + \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects.} \item{method}{the calibration method to be used. This should be one of \code{"TIC"}, \code{"PQN"} or \code{"median"}. See \sQuote{Details} section.} @@ -31,7 +34,7 @@ This function calibrates (normalize) intensities of A number of different calibration methods are provided: \describe{ \item{\code{"TIC"}:}{The TIC (\emph{T}otal \emph{I}on \emph{C}urrent) of a - \code{\linkS4class{MassSpectrum}} object is set to one. If \code{range} is + \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object is set to one. If \code{range} is given the \emph{TIC} is only calculated for the intensities in the specified mass range.} \item{\code{"PQN"}:}{The PQN (\emph{P}robabilistic \emph{Q}uotient @@ -48,11 +51,11 @@ This function calibrates (normalize) intensities of } } \item{\code{"median"}:}{The median of intensities of a - \code{\linkS4class{MassSpectrum}} object is set to one.} + \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object is set to one.} } } \value{ -Returns a modified \code{\linkS4class{MassSpectrum}} object with calibrated +Returns a modified \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object with calibrated intensities. } \references{ @@ -65,7 +68,8 @@ Analytical Chemistry 78(13): 4281-4290. Sebastian Gibb \email{mail@sebastiangibb.de} } \seealso{ -\code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}} Website: \url{http://strimmerlab.org/software/maldiquant/} } diff --git a/man/createMassPeaks-functions.Rd b/man/createMassPeaks-functions.Rd index eda2d90..59e9ea6 100644 --- a/man/createMassPeaks-functions.Rd +++ b/man/createMassPeaks-functions.Rd @@ -6,7 +6,7 @@ Creates a MassPeaks object. \description{ This function creates a \code{\linkS4class{MassPeaks}} object. Normally it shouldn't called by the user. Try -\code{\link[MALDIquant]{detectPeaks,MassSpectrum-method}} instead. +\code{\link[MALDIquant]{detectPeaks},MassSpectrum/MassSpectrumOnDisk-method} instead. } \usage{ createMassPeaks(mass, intensity, snr=rep.int(NA_real_, length(intensity)), @@ -33,7 +33,7 @@ Returns a \code{\linkS4class{MassPeaks}} object. Sebastian Gibb \email{mail@sebastiangibb.de} } \seealso{ -\code{\link[MALDIquant]{detectPeaks,MassSpectrum-method}}, +\code{\link[MALDIquant]{detectPeaks},MassSpectrum/MassSpectrumOnDisk-method}, \code{\linkS4class{MassPeaks}} Website: \url{http://strimmerlab.org/software/maldiquant/} diff --git a/man/createMassSpectrumOnDisk.Rd b/man/createMassSpectrumOnDisk.Rd new file mode 100644 index 0000000..741a43d --- /dev/null +++ b/man/createMassSpectrumOnDisk.Rd @@ -0,0 +1,53 @@ +\name{createMassSpectrumOnDisk} +\alias{createMassSpectrumOnDisk} +\title{ +Creates a MassSpectrumOnDisk object. +} +\description{ +This function creates a \code{createMassSpectrumOnDisk} object. It is identical to \code{createMassSpectrum} except that it uses the \code{matter} package internally to interface directly with mass spectra on disk without loading them into memory. The mass and intensity slots are \code{matter::matter_vec} objects with only the metaData slot loaded into memory. +} +\usage{ +createMassSpectrumOnDisk(mass, intensity, metaData=list()) +} +\arguments{ + \item{mass}{ + \code{vector}, mass or mass-to-charge ratio + } + \item{intensity}{ + \code{vector}, intensities for measured mass-to-charge ratios + } + \item{metaData}{ + \code{list}, some metadata to describe the spectrum + } +} +\value{ +Returns a \code{createMassSpectrumOnDisk} object. +} +\author{ +Denis Abu Sammour \email{d.abu-sammour@hs-mannheim.de} +} + +\references{ +\code{"matter"}:\cr +Kylie A. Bemis (2018). matter: A framework for rapid prototyping with binary data on disk. R + package version 1.8.0. \url{https://github.com/kuwisdelu/matter}. + } + +\seealso{ +\code{\linkS4class{createMassSpectrum}} + +} +\examples{ +## load package +library("MALDIquant") + +## create a MassSpectrumOnDisk object by default constructor +s <- createMassSpectrumOnDisk(mass=1:100, intensity=rnorm(100)^2, + metaData=list(name="example spectrum")) + +## show some details +s +} + +\keyword{methods} + diff --git a/man/detectPeaks-methods.Rd b/man/detectPeaks-methods.Rd index 5496f41..474f6c8 100644 --- a/man/detectPeaks-methods.Rd +++ b/man/detectPeaks-methods.Rd @@ -2,38 +2,41 @@ \docType{methods} \alias{detectPeaks} \alias{detectPeaks,MassSpectrum-method} +\alias{detectPeaks,MassSpectrumOnDisk-method} \alias{detectPeaks,list-method} \title{Detects peaks in a MassSpectrum object.} \description{ This method looks for peaks in mass spectrometry data -(represented by a \code{\linkS4class{MassSpectrum}} object).\cr +(represented by a \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object).\cr A peak is a local maximum above a user defined noise threshold. } \usage{ \S4method{detectPeaks}{MassSpectrum}(object, halfWindowSize=20, method=c("MAD", "SuperSmoother"), SNR=2, \dots) +\S4method{detectPeaks}{MassSpectrumOnDisk}(object, + halfWindowSize=20, method=c("MAD", "SuperSmoother"), SNR=2, + \dots) \S4method{detectPeaks}{list}(object, \dots) } \arguments{ - \item{object}{\code{\linkS4class{MassSpectrum}} object or a \code{list} of - \code{\linkS4class{MassSpectrum}} objects.} + \item{object}{\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object or a \code{list} thereof. } \item{halfWindowSize}{\code{numeric}, half window size. \cr The resulting window reaches from \code{mass[currentIndex-halfWindowSize]} to \code{mass[currentIndex+halfWindowSize]}. A local maximum have to be the highest one in the given window to be recognized as peak.} \item{method}{a noise estimation function; see - \code{\link[MALDIquant]{estimateNoise,MassSpectrum-method}}. + \code{\link[MALDIquant]{estimateNoise}}. } \item{SNR}{single numeric value. \code{SNR} is an abbreviation for \emph{s}ignal-to-\emph{n}oise-\emph{r}atio. A local maximum has to be higher than \code{SNR*noise} to be recognize as peak.} \item{\dots}{arguments to be passed to - \code{\link[MALDIquant]{estimateNoise,MassSpectrum-method}}. If + \code{\link[MALDIquant]{estimateNoise}}. If \code{object} is a \code{list} \code{mc.cores} is also supported.} } \value{ -Returns a \code{\linkS4class{MassPeaks}} object. +Returns a \code{\linkS4class{MassPeaks}} object or a \code{list} thereof. } \author{ Sebastian Gibb \email{mail@sebastiangibb.de} @@ -41,7 +44,8 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \seealso{ \code{\linkS4class{MassPeaks}}, \code{\linkS4class{MassSpectrum}}, -\code{\link[MALDIquant]{estimateNoise,MassSpectrum-method}} +\code{\linkS4class{MassSpectrumOnDisk}}, +\code{\link[MALDIquant]{estimateNoise}} \code{demo("peaks")} diff --git a/man/estimateBaseline-methods.Rd b/man/estimateBaseline-methods.Rd index 98f8e51..df90cb5 100644 --- a/man/estimateBaseline-methods.Rd +++ b/man/estimateBaseline-methods.Rd @@ -2,6 +2,7 @@ \docType{methods} \alias{estimateBaseline} \alias{estimateBaseline,MassSpectrum-method} +\alias{estimateBaseline,MassSpectrumOnDisk-method} \title{Estimates the baseline of a MassSpectrum object.} \description{ This method estimates the baseline of mass spectrometry data @@ -11,9 +12,12 @@ This method estimates the baseline of mass spectrometry data \S4method{estimateBaseline}{MassSpectrum}(object, method=c("SNIP", "TopHat", "ConvexHull", "median"), \dots) +\S4method{estimateBaseline}{MassSpectrumOnDisk}(object, + method=c("SNIP", "TopHat", "ConvexHull", "median"), + \dots) } \arguments{ - \item{object}{\code{\linkS4class{MassSpectrum}} object} + \item{object}{\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk} object}} \item{method}{used baseline estimation method, one of \code{"SNIP"}, \code{"TopHat"}, \code{"ConvexHull"} or \code{"median"}. } @@ -64,6 +68,7 @@ This method estimates the baseline of mass spectrometry data } } } + \value{ Returns a two column matrix (first column: mass, second column: intensity) of the estimated baseline. @@ -103,7 +108,7 @@ Information Processing Letters, 9(5), 216-219. } \seealso{ \code{\linkS4class{MassSpectrum}}, -\code{\link[MALDIquant]{removeBaseline,MassSpectrum-method}} +\code{\link[MALDIquant]{removeBaseline}} \code{demo("baseline")} diff --git a/man/estimateNoise-methods.Rd b/man/estimateNoise-methods.Rd index ca9c446..90945c0 100644 --- a/man/estimateNoise-methods.Rd +++ b/man/estimateNoise-methods.Rd @@ -2,18 +2,22 @@ \docType{methods} \alias{estimateNoise} \alias{estimateNoise,MassSpectrum-method} +\alias{estimateNoise,MassSpectrumOnDisk-method} \title{Estimates the noise of a MassSpectrum object.} \description{ This method estimates the noise of mass spectrometry data -(represented by a \code{\linkS4class{MassSpectrum}} object).\cr +(represented by a \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object).\cr } \usage{ \S4method{estimateNoise}{MassSpectrum}(object, method=c("MAD", "SuperSmoother"), \dots) +\S4method{estimateNoise}{MassSpectrumOnDisk}(object, + method=c("MAD", "SuperSmoother"), + \dots) } \arguments{ - \item{object}{\code{\linkS4class{MassSpectrum}} object} + \item{object}{\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object} \item{method}{used noise estimation method, one of \code{"MAD"} or \code{"SuperSmoother"}. } @@ -42,7 +46,7 @@ Sebastian Gibb \email{mail@sebastiangibb.de} } \seealso{ \code{\linkS4class{MassSpectrum}}, -\code{\link[MALDIquant]{detectPeaks,MassSpectrum-method}}, +\code{\link[MALDIquant]{detectPeaks}}, \code{\link[stats]{mad}}, \code{\link[stats]{supsmu}} diff --git a/man/intensityMatrix-functions.Rd b/man/intensityMatrix-functions.Rd index 73cf5b5..5d4c0ab 100644 --- a/man/intensityMatrix-functions.Rd +++ b/man/intensityMatrix-functions.Rd @@ -15,7 +15,7 @@ intensityMatrix(peaks, spectra) \code{list}, list of \code{\linkS4class{MassPeaks}} objects. } \item{spectra}{ - \code{list}, list of \code{\linkS4class{MassSpectrum}} objects. If a peak + \code{list}, list of \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects. If a peak is missing the corresponding intensity value of the spectrum is used. If \code{spectra} is missing \code{NA} is used instead. } @@ -39,7 +39,8 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \seealso{ \code{\link[MALDIquant]{binPeaks}}, \code{\linkS4class{MassPeaks}}, -\code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}} Website: \url{http://strimmerlab.org/software/maldiquant/} } diff --git a/man/isMassObject-functions.Rd b/man/isMassObject-functions.Rd index e3026ff..690e2a0 100644 --- a/man/isMassObject-functions.Rd +++ b/man/isMassObject-functions.Rd @@ -2,10 +2,10 @@ \alias{isMassSpectrum} \alias{isMassPeaks} \title{ -Tests for MassSpectrum or MassPeaks object. +Tests for MassSpectrum/MassSpectrumOnDisk or MassPeaks object. } \description{ -These functions test for a \code{\linkS4class{MassSpectrum}} or +These functions test for a \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} or \code{\linkS4class{MassPeaks}} object. } \usage{ @@ -20,7 +20,7 @@ isMassPeaks(x) } \value{ Returns \code{\link{TRUE}} or \code{\link{FALSE}} depending on whether its -argument is an \code{\linkS4class{MassSpectrum}} or +argument is an \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} or \code{\linkS4class{MassPeaks}} object. } \author{ @@ -29,6 +29,7 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \seealso{ \code{\linkS4class{MassPeaks}}, \code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}}, \code{\linkS4class{AbstractMassObject}} Website: \url{http://strimmerlab.org/software/maldiquant/} diff --git a/man/isMassObjectList-functions.Rd b/man/isMassObjectList-functions.Rd index da84ecc..bd9b61b 100644 --- a/man/isMassObjectList-functions.Rd +++ b/man/isMassObjectList-functions.Rd @@ -2,11 +2,11 @@ \alias{isMassSpectrumList} \alias{isMassPeaksList} \title{ -Tests a list of MassSpectrum or MassPeaks objects. +Tests a list of MassSpectrum/MassSpectrumOnDisk or MassPeaks objects. } \description{ These functions test a \code{\link{list}} whether containing -\code{\linkS4class{MassSpectrum}} or \code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum}} or \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects. } \usage{ @@ -21,7 +21,7 @@ isMassPeaksList(x) } \value{ Returns \code{\link{TRUE}} or \code{\link{FALSE}} depending on whether its -argument is a \code{\link{list}} of \code{\linkS4class{MassSpectrum}} +argument is a \code{\link{list}} of \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} or \code{\linkS4class{MassPeaks}} objects. } \author{ @@ -30,6 +30,7 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \seealso{ \code{\linkS4class{MassPeaks}}, \code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}}, \code{\linkS4class{AbstractMassObject}} Website: \url{http://strimmerlab.org/software/maldiquant/} diff --git a/man/msiSlices-functions.Rd b/man/msiSlices-functions.Rd index 7f77551..ce06369 100644 --- a/man/msiSlices-functions.Rd +++ b/man/msiSlices-functions.Rd @@ -13,7 +13,7 @@ msiSlices(x, center, tolerance, method=c("sum", "mean", "median"), adjust=TRUE) } \arguments{ - \item{x}{a \code{list} of \code{\linkS4class{MassSpectrum}}/ + \item{x}{a \code{list} of \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassSpectrumOnDisk}}/ \code{\linkS4class{MassPeaks}} objects.} \item{center}{\code{double}, the \code{center} mas value of each slice.} \item{tolerance}{\code{double}, specifies the thickness of the slices @@ -24,8 +24,7 @@ msiSlices(x, center, tolerance, method=c("sum", "mean", "median"), adjust=TRUE) \code{NA} values at the borders.} } \details{ -Each \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassPeaks}} object in -\code{x} must contain a \code{list} named \code{imaging} with an element +Each \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassSpectrumOnDisk}}/\code{\linkS4class{MassPeaks}} object in \code{x} must contain a \code{list} named \code{imaging} with an element \code{pos} that stores the \code{x} and \code{y} value of the spectrum, e.g.: \preformatted{ > metaData(spectra[[1]])$imaging$pos @@ -47,6 +46,7 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \code{\linkS4class{AbstractMassObject}}, \code{\linkS4class{MassSpectrum}}, \code{\linkS4class{MassPeaks}}, +\code{\linkS4class{MassSpectrumOnDisk}}, \code{\link[MALDIquant]{coordinates,AbstractMassObject-method}}, \code{\link[MALDIquant]{plotMsiSlice,list-method}} diff --git a/man/plot-methods.Rd b/man/plot-methods.Rd index 45286aa..35793c2 100644 --- a/man/plot-methods.Rd +++ b/man/plot-methods.Rd @@ -18,7 +18,7 @@ This is an overloaded method to allow plotting of an cex.sub=0.75, col.sub="#808080", \dots) } \arguments{ - \item{x}{\code{\linkS4class{MassSpectrum}} object.} + \item{x}{\code{\linkS4class{AbstractMassObject}} object.} \item{col}{line colour, see \code{\link[graphics]{par}}.} \item{xlab}{title for the x-axis, see \code{\link[graphics]{title}}.} \item{ylab}{title for the y-axis, see \code{\link[graphics]{title}}.} diff --git a/man/plotMsiSlice-methods.Rd b/man/plotMsiSlice-methods.Rd index 3870998..a4f69fd 100644 --- a/man/plotMsiSlice-methods.Rd +++ b/man/plotMsiSlice-methods.Rd @@ -25,7 +25,8 @@ or an \code{array} or a \code{matrix}. } \arguments{ \item{x}{The mass spectrometry imaging dataset. It could be a \code{list} of - \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassPeaks}} objects or + \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassSpectrumOnDisk}}/ + \code{\linkS4class{MassPeaks}} objects or an \code{array} (e.g. generated by \code{\link[MALDIquant]{msiSlices}}) or a \code{matrix}.} \item{center}{\code{double}, if \code{x} is a \code{list} of @@ -65,7 +66,8 @@ or an \code{array} or a \code{matrix}. \code{main}.} } \details{ -Each \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassPeaks}} object in +Each \code{\linkS4class{MassSpectrum}}/\code{\linkS4class{MassSpectrumOnDisk}}/ +\code{\linkS4class{MassPeaks}} object in \code{x} must contain a \code{list} named \code{imaging} with an element \code{pos} that stores the \code{x} and \code{y} value of the spectrum, e.g.: \preformatted{ diff --git a/man/removeBaseline-methods.Rd b/man/removeBaseline-methods.Rd index 9cc2322..73ae4c2 100644 --- a/man/removeBaseline-methods.Rd +++ b/man/removeBaseline-methods.Rd @@ -2,23 +2,26 @@ \docType{methods} \alias{removeBaseline} \alias{removeBaseline,MassSpectrum-method} +\alias{removeBaseline,MassSpectrumOnDisk-method} \alias{removeBaseline,list-method} \title{Removes the baseline of a MassSpectrum object.} \description{ This method removes the baseline of mass spectrometry data -(represented by a \code{\linkS4class{MassSpectrum}} object).\cr -The intensity of the mass spectrometry data would be reduced by +(represented by a \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object). +The intensity of the mass spectrometry \cr data would be reduced by \code{baseline}. } \usage{ \S4method{removeBaseline}{MassSpectrum}(object, method=c("SNIP", "TopHat", "ConvexHull", "median"), \dots) +\S4method{removeBaseline}{MassSpectrumOnDisk}(object, + method=c("SNIP", "TopHat", "ConvexHull", "median"), + \dots) \S4method{removeBaseline}{list}(object, \dots) } \arguments{ - \item{object}{\code{\linkS4class{MassSpectrum}} object or a \code{list} of - \code{\linkS4class{MassSpectrum}} objects.} + \item{object}{\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object or a \code{list} thereof.} \item{method}{used baseline estimation method, one of \code{"SNIP"}, \code{"TopHat"}, \code{"ConvexHull"} or \code{"median"}. See @@ -29,7 +32,7 @@ The intensity of the mass spectrometry data would be reduced by \code{object} is a \code{list} \code{mc.cores} is also supported.} } \value{ - Returns a modified \code{\linkS4class{MassSpectrum}} object with reduced + Returns a modified \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object with reduced intensities. } \author{ diff --git a/man/smoothIntensity-methods.Rd b/man/smoothIntensity-methods.Rd index 62d4494..ca2331f 100644 --- a/man/smoothIntensity-methods.Rd +++ b/man/smoothIntensity-methods.Rd @@ -2,16 +2,20 @@ \docType{methods} \alias{smoothIntensity} \alias{smoothIntensity,MassSpectrum-method} +\alias{smoothIntensity,MassSpectrumOnDisk-method} \alias{smoothIntensity,list-method} \title{Smoothes intensities of a MassSpectrum object.} \description{ This method smoothes the intensity values of a -\code{\linkS4class{MassSpectrum}} object. +\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} object. } \usage{ \S4method{smoothIntensity}{MassSpectrum}(object, method=c("SavitzkyGolay", "MovingAverage"), halfWindowSize, \dots) +\S4method{smoothIntensity}{MassSpectrumOnDisk}(object, + method=c("SavitzkyGolay", "MovingAverage"), halfWindowSize, + \dots) } \arguments{ \item{object}{\code{\linkS4class{AbstractMassObject}} object or a @@ -55,7 +59,8 @@ Application hints for Savitzky-Golay digital smoothing filters. Analytical Chemistry, 53(11), 1583-1586. } \seealso{ -\code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}}, Website: \url{http://strimmerlab.org/software/maldiquant/} } diff --git a/man/transformIntensity-methods.Rd b/man/transformIntensity-methods.Rd index 218fcac..cbd7b64 100644 --- a/man/transformIntensity-methods.Rd +++ b/man/transformIntensity-methods.Rd @@ -25,7 +25,8 @@ Sebastian Gibb \email{mail@sebastiangibb.de} } \seealso{ \code{\linkS4class{AbstractMassObject}}, -\code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}}, Website: \url{http://strimmerlab.org/software/maldiquant/} } diff --git a/man/trim-methods.Rd b/man/trim-methods.Rd index 35bc5dd..13c526f 100644 --- a/man/trim-methods.Rd +++ b/man/trim-methods.Rd @@ -7,7 +7,9 @@ \title{Trim an AbstractMassObject object.} \description{ This method trims an \code{\linkS4class{AbstractMassObject}} object. -That is useful if some mass ranges should be excluded from further analysis. +That is useful if some mass ranges should be excluded from further analysis. Note that +when trimming \code{\linkS4class{MassSpectrumOnDisk}} objects, new in-memory trimmed +\code{\linkS4class{MassSpectrum}} objects are returned. } \usage{ \S4method{trim}{AbstractMassObject,numeric}(object, range) @@ -30,7 +32,8 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \seealso{ \code{\linkS4class{AbstractMassObject}}, \code{\linkS4class{MassPeaks}}, -\code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}}, Website: \url{http://strimmerlab.org/software/maldiquant/} } diff --git a/man/warp-functions.Rd b/man/warp-functions.Rd index 18fdd42..8e214bb 100644 --- a/man/warp-functions.Rd +++ b/man/warp-functions.Rd @@ -17,7 +17,7 @@ warpMassSpectra(l, w, emptyNoMatches=FALSE) \arguments{ \item{l}{ \code{list}, list of \code{\linkS4class{MassPeaks}} or - \code{\linkS4class{MassSpectrum}} objects. + \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects. } \item{w}{ a \code{list} of warping functions determined by @@ -27,7 +27,7 @@ warpMassSpectra(l, w, emptyNoMatches=FALSE) \item{emptyNoMatches}{ \code{logical}, if \code{TRUE} (default: \code{FALSE}) the intensity values of - \code{\linkS4class{MassSpectrum}} or + \code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} or \code{\linkS4class{MassPeaks}} objects with missing (\code{NA}) warping functions are set to zero. } @@ -38,7 +38,7 @@ The warping function \code{w} is called in the following way: } \value{ Returns a \code{list} of warped \code{\linkS4class{MassPeaks}} or -\code{\linkS4class{MassSpectrum}} objects. +\code{\linkS4class{MassSpectrum}/\linkS4class{MassSpectrumOnDisk}} objects. } \author{ Sebastian Gibb \email{mail@sebastiangibb.de} @@ -46,7 +46,8 @@ Sebastian Gibb \email{mail@sebastiangibb.de} \seealso{ \code{\link[MALDIquant]{determineWarpingFunctions}}, \code{\linkS4class{MassPeaks}}, -\code{\linkS4class{MassSpectrum}} +\code{\linkS4class{MassSpectrum}}, +\code{\linkS4class{MassSpectrumOnDisk}} Website: \url{http://strimmerlab.org/software/maldiquant/} } @@ -73,5 +74,4 @@ warpMassPeaks(list(p), list(NA)) ## no warping (intensity values of MassPeaks object are set to zero) warpMassPeaks(list(p), list(NA), emptyNoMatches=TRUE) } -\keyword{methods} - +\keyword{methods} \ No newline at end of file diff --git a/src/MALDIquant.dll b/src/MALDIquant.dll new file mode 100644 index 0000000..3d4ecc9 Binary files /dev/null and b/src/MALDIquant.dll differ