Skip to content

Instantly share code, notes, and snippets.

@sgibb
Created November 6, 2018 21:22
Show Gist options
  • Save sgibb/b46a543d4bd1476a2abd412d23bf3780 to your computer and use it in GitHub Desktop.
Save sgibb/b46a543d4bd1476a2abd412d23bf3780 to your computer and use it in GitHub Desktop.
Example of an on-disk MassSpectrum class for MALDIquant
library("MALDIquant")
setClass("MassSpectrumOnDisk",
slots=list(path="character", n="numeric"),
prototype=list(mass=numeric(), intensity=numeric(), metaData=list(),
path=character(), n=numeric()),
contains="AbstractMassObject")
## overwrite default validation method (checks for non-empty intensity etc)
## needs to be rewritten obviously
.validAbstractMassObject <- function(object) {
TRUE
}
setValidity("AbstractMassObject", method=.validAbstractMassObject)
createMassSpectrumOnDisk <- function(mass, intensity, metaData=list()) {
object <- new("MassSpectrumOnDisk",
mass=numeric(), intensity=numeric(), n=length(mass), metaData=metaData,
path=setNames(
paste(
tempfile("spectrum"), c("mass", "intensity"), sep="."),
c("mass", "intensity")
)
)
mass(object) <- mass
intensity(object) <- intensity
object
}
setMethod(f="show",
signature=signature(object="MassSpectrumOnDisk"),
definition=function(object) {
callNextMethod()
cat("Path:", object@path, sep="\n")
})
setMethod(f="mass",
signature=signature(object="MassSpectrumOnDisk"),
definition=function(object, ...) {
readBin(object@path["mass"], "double", object@n)
})
setReplaceMethod(f="mass",
signature=signature(object="MassSpectrumOnDisk", value="numeric"),
definition=function(object, value) {
if (length(value) == object@n) {
writeBin(as.double(value), object@path["mass"])
} else {
stop("Lengths of mass (", object@n, ") and value (",
length(value), ") have to be equal.")
}
object
})
setMethod(f="intensity",
signature=signature(object="MassSpectrumOnDisk"),
definition=function(object, ...) {
readBin(object@path["intensity"], "double", object@n)
})
setReplaceMethod(f="intensity",
signature=signature(object="MassSpectrumOnDisk", value="numeric"),
definition=function(object, value) {
if (length(value) == object@n) {
writeBin(as.double(value), object@path["intensity"])
} else {
stop("Lengths of intensity (", object@n, ") and value (",
length(value), ") have to be equal.")
}
object
})
s <- createMassSpectrumOnDisk(1:10, 1:10)
# S4 class type : MassSpectrumOnDisk
# Number of m/z values : 10
# Range of m/z values : 1 - 10
# Range of intensity values: 1e+00 - 1e+01
# Memory usage : 1.805 KiB
# Path:
# /tmp/RtmpyVT7vx/spectrum1f7f67cbd33d.mass
# /tmp/RtmpyVT7vx/spectrum1f7f67cbd33d.intensity
s
mass(s)
intensity(s)
intensity(s) <- 11:20
intensity(s)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment