#' This function creates a MS2 library that can be used for MS2 database searches.
#' @param librarySpectra A Spectra object with fitting metadata columns (e.g. generated by the <code>readMassBankFile</code> function)
#' @param ms2dbFileName File name that shall be used for the database.
#'
#' @import MSnbase
#' @export
createMs2Db <- function(librarySpectra, ms2dbFileName) {
# get/generate required values
# generate filename
dbFileName <- paste0(ms2dbFileName, ".sqlite")
# data frames for upload
# data frames for different information
metaData <- data.frame()
spectra <- data.frame()
massSpec <- data.frame()
# iterate over library spectra and create data frames for DB upload
for(i in 1:length(librarySpectra)){
# create internal ID
intID <- stringr::str_pad(i, 6, pad = "0")
# fill data frame
# TODO add ion formulas ??
metaData <- rbind.data.frame(metaData, cbind(intID = intID,
id = librarySpectra@elementMetadata$id[i],
name = librarySpectra@elementMetadata$name[i],
formula = librarySpectra@elementMetadata$formula[i],
precursorType = librarySpectra@elementMetadata$precursorType[i],
exactMass = librarySpectra@elementMetadata$exactMass[i],
inchi = librarySpectra@elementMetadata$inchi[i],
inchiKey = "",
smiles = librarySpectra@elementMetadata$smiles[i],
rt = if(is.null(librarySpectra@elementMetadata$rt[i])) {0} else {librarySpectra@elementMetadata$rt[i]},
ccs = if(is.null(librarySpectra@elementMetadata$ccs[i])) {0} else {librarySpectra@elementMetadata$ccs[i]}))
spectra <- rbind.data.frame(spectra, cbind(intID = intID,
id = librarySpectra@elementMetadata$id[i],
mz = mz(librarySpectra[[i]]),
int = intensity(librarySpectra[[i]])))
massSpec <- rbind.data.frame(massSpec, cbind(intID = intID,
id = librarySpectra@elementMetadata$id[i],
instrument = librarySpectra@elementMetadata$instrument[i],
instrumentType = librarySpectra@elementMetadata$instrumentType[i],
msType = librarySpectra@elementMetadata$msType[i],
ionMode = librarySpectra@elementMetadata$ionMode[i],
precursorMz = MSnbase::precursorMz(librarySpectra[[i]]),
precursorType = librarySpectra@elementMetadata$precursorType[i],
collisionEnergy = MSnbase::collisionEnergy(librarySpectra[[i]]),
peaksCount = MSnbase::peaksCount(librarySpectra[[i]])))
}
# Generate SQLite DB
# upload to DB
mydb <- DBI::dbConnect(RSQLite::SQLite(), dbFileName)
DBI::dbWriteTable(mydb, "metaData", metaData, overwrite = TRUE)
DBI::dbWriteTable(mydb, "spectra", spectra, overwrite = TRUE)
DBI::dbWriteTable(mydb, "massSpec", massSpec, overwrite = TRUE)
# disconnect DB
DBI::dbDisconnect(mydb)
# return file name
return(dbFileName)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.