Skip to content

Instantly share code, notes, and snippets.

@sgibb
Created February 12, 2013 21:18
Show Gist options
  • Save sgibb/4773484 to your computer and use it in GitHub Desktop.
Save sgibb/4773484 to your computer and use it in GitHub Desktop.
quick & dirty approach to import Bruker xml files.
## code to import peaks from Bruker xml files
importBrukerXml <- function(file) {
require("MALDIquant")
## read file
r <- readLines(file)
## remove useless stuff
r <- gsub(pattern="^.*<ms_peaks>|</ms_peaks>.*$", replacement="", x=r)
## fetch mass (mz), intensity (i), snr (sn) and fwhm
tags <- c("mz", "i", "sn", "fwhm")
patterns <- paste(tags, "=\\\"[0-9.]+\\\"", sep="")
results <- vector(mode="list", length=length(tags))
names(results) <- tags
for (i in seq(along=tags)) {
## grep pattern
rx <- gregexpr(pattern=patterns[i], text=r)[[1]]
## extract numeric value
## start offset == nchar(tag) + 2 (e.g. mz=", offset == 4)
## end offset = 1
num <- substring(text=r, first=rx+nchar(tags[i])+2,
last=rx+attr(rx, "match.length")-2)
## convert character to double
results[[i]] <- as.double(num)
}
## create MassPeaks object
return(createMassPeaks(mass=results$mz, intensity=results$i, snr=results$sn,
metaData=list(file=normalizePath(file),
fwhm=results$fwhm)))
# ## if you really want to create a MassSpectrum object out of this file
# return(createMassSpectrum(mass=results$mz, intensity=results$i,
# metaData=list(file=normalizePath(file),
# fwhm=results$fwhm,
# snr=results$sn)))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment