Created
November 6, 2018 21:22
-
-
Save sgibb/b46a543d4bd1476a2abd412d23bf3780 to your computer and use it in GitHub Desktop.
Example of an on-disk MassSpectrum class for MALDIquant
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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