R/MS2_SpectrumDbCreate.R

Defines functions createMs2Db

Documented in createMs2Db

#' 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)
}
michaelwitting/masstrixR documentation built on Nov. 8, 2019, 8:12 p.m.