Mercurial > repos > prog > lcmsmatching
diff MassdbConn.R @ 6:f86fec07f392 draft default tip
planemo upload commit c397cd8a93953798d733fd62653f7098caac30ce
author | prog |
---|---|
date | Fri, 22 Feb 2019 16:04:22 -0500 |
parents | fb9c0409d85c |
children |
line wrap: on
line diff
--- a/MassdbConn.R Wed Apr 19 10:00:05 2017 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -##################### -# CLASS DECLARATION # -##################### - -MassdbConn <- methods::setRefClass("MassdbConn", contains = "BiodbConn") - -############################### -# GET CHROMATOGRAPHIC COLUMNS # -############################### - -# Get a list of chromatographic columns contained in this database. -# compound.ids A list of compound IDs used to filter results. -# The returned value is a data.frame with two columns : one for the ID (BIODB.ID) and another one for the title (BIODB.TITLE). -MassdbConn$methods( getChromCol = function(compound.ids = NULL) { - stop("Method getChromCol() is not implemented in concrete class.") -}) - -################# -# GET MZ VALUES # -################# - -# Returns a numeric vector of all masses stored inside the database. -MassdbConn$methods( getMzValues = function(mode = NULL, max.results = NA_integer_) { - stop("Method getMzValues() not implemented in concrete class.") -}) - -################ -# GET NB PEAKS # -################ - -# Returns the number of peaks contained in the database -MassdbConn$methods( getNbPeaks = function(mode = NULL, compound.ids = NULL) { - stop("Method getNbPeaks() not implemented in concrete class.") -}) - -######################### -# FIND COMPOUND BY NAME # -######################### - -# Find a molecule by name -# name A vector of molecule names to search for. -# Return an integer vector of the same size as the name input vector, containing the found molecule IDs, in the same order. -MassdbConn$methods( findCompoundByName = function(name) { - stop("Method findCompoundByName() not implemented in concrete class.") -}) - -#################################### -# FIND SPECTRA IN GIVEN MASS RANGE # -#################################### -# Find spectra in the given mass range. -# rtype the type of return, objects, dfspecs data.frame of spectra, dfpeaks data.frame of peaks. -MassdbConn$methods( searchMzRange = function(mzmin, mzmax, rtype = c("objects","dfspecs","dfpeaks")){ - stop("Method searchMzRange() not implemented in concrete class.") -}) - -#################################### -# FIND SPECTRA IN GIVEN MASS RANGE # -#################################### -MassdbConn$methods( searchMzTol = function(mz, tol, tolunit=BIODB.MZTOLUNIT.PLAIN, rtype = c("objects","dfspecs","dfpeaks")){ - stop("Method searchMzTol() not implemented in concrete class.") -}) - -###################################################### -# FIND A MOLECULES WITH PRECURSOR WITHIN A TOLERANCE # -###################################################### - MassdbConn$methods( searchSpecPrecTol = function(mz, tol, tolunit=BIODB.MZTOLUNIT.PLAIN, mode = NULL){ - stop("Method searchSpecPrecTol not implemented in concrete class.") - }) - -################################# -#perform a database MS-MS search# -################################# - -### spec : the spec to match against the database. -### precursor : the mass/charge of the precursor to be looked for. -### mtol : the size of the windows arounf the precursor to be looked for. -### ppm : the matching ppm tolerance. -### fun : -### dmz : the mass tolerance is taken as the minium between this quantity and the ppm. -### npmin : the minimum number of peak to detect a match (2 recommended) - -MassdbConn$methods( msmsSearch = function(spec, precursor, mztol, tolunit, - ppm, fun = BIODB.MSMS.DIST.WCOSINE, - params = list(), npmin=2, dmz = 0.001, - mode = BIODB.MSMODE.POS, return.ids.only = TRUE){ - - - # TODO replace by msms precursor search when available. - lspec <- .self$searchSpecPrecTol( precursor, mztol, BIODB.MZTOLUNIT.PLAIN, mode = mode) - rspec <- lapply(lspec,function(x){ - peaks <- x$getFieldValue(BIODB.PEAKS) - - ####Getting the correct fields - vcomp <- c(BIODB.PEAK.MZ, BIODB.PEAK.RELATIVE.INTENSITY, BIODB.PEAK.INTENSITY) - - foundfields <- vcomp %in% colnames(peaks) - if(sum(foundfields ) < 2){ - stop(paste0("fields can't be coerced to mz and intensity : ",colnames(peaks))) - } - - peaks <- peaks[ , vcomp[which( foundfields ) ] ] - - peaks - }) - - # TODO Import compareSpectra into biodb and put it inside massdb-helper.R or hide it as a private method. - res <- compareSpectra(spec, rspec, npmin = npmin, fun = fun, params = params) - - if(is.null(res)) return(NULL) # To decide at MassdbConn level: return empty list (or empty data frame) or NULL. - ###Adiing the matched peaks and the smimlarity values to spectra. - - lret <-vector(length(lspec),mode = "list") - vsimilarity <- numeric( length( lspec ) ) - vmatched <- vector( mode = "list", length( lspec ) ) - - if( return.ids.only ){ - lret <- sapply( lspec, function( x ) { - x$getFieldValue( BIODB.ACCESSION ) - }) - }else{ - ###TODO implement three types of return. - lret <- lspec - } - - ###Reordering the list. - lret <- lret[ res$ord ] - - - return( list(measure = res$similarity[ res$ord ], matchedpeaks = res$matched [ res$ord ], id = lret)) -})