Mercurial > repos > prog > lcmsmatching
diff PeakforestConn.R @ 2:20d69a062da3 draft
planemo upload for repository https://github.com/workflow4metabolomics/lcmsmatching.git commit d4048accde6bdfd5b3e14f5394902d38991854f8
author | prog |
---|---|
date | Thu, 02 Mar 2017 08:55:00 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PeakforestConn.R Thu Mar 02 08:55:00 2017 -0500 @@ -0,0 +1,176 @@ +##################### +# CLASS DECLARATION # +##################### +#'A class to connect to peakforest +#'@export +#'@field .url An urel to the database +PeakforestConn <- methods::setRefClass("PeakforestConn", contains = c("RemotedbConn","MassdbConn"), fields = list( .url = "character" )) # TODO Inherits also from MassdbConn + +########################## +# GET ENTRY CONTENT TYPE # +########################## + +PeakforestConn$methods( getEntryContentType = function(type) { + return(BIODB.JSON) +}) + +##################### +# GET ENTRY CONTENT # +##################### + +PeakforestConn$methods( getEntryContent = function(id) { + + + # Initialize return values + content <- rep(NA_character_, length(id)) + # Request + + url <- get.entry.url(BIODB.PEAKFOREST, id[i], BIODB.JSON,token = .self$.token) + jsonstr <- .self$.get.url(url) + if(startsWith("<html>", jsonstr) ){ + next + } + + return(content) +}) + + +########################################## +# SEARCH FOR SPECTRA IN GIVEN MASS RANGE # +########################################## + +PeakforestConn$methods( searchMzRange = function(mzmin, mzmax, rtype = c("object","spec","peak")){ + + rtype <- match.arg(rtype) + if(mzmin>mzmax){ + stop("mzmin shloud be inferior to mzmax in searchMzRange.") + } + + url <- paste0("https://rest.peakforest.org/spectra/lcms/peaks/get-range/",mzmin,"/",mzmax) + + contents <- .self$.get.url(url) + + jsontree <- fromJSON(contents) + + ###No match form the output. + if( length(jsontree)==0 ) return(NULL) + + # Getting a list of all the id. + lid <- sapply(jsontree,function(x){ + x$source$id + }) + + # Returning the content for all the spectra + contents <- .self$getEntryContent(lid) + + entries <- .self$createEntry(contents) + + # Checking the return type + if( rtype=="object" ){ + return( entries ) + } + + ### XXXX See if we don't want to reduce the output and factorize this shit. + toreturn <- NULL + if( rtype=="spec" ){ + toreturn <- sapply(entries,function(x){ + x$getFieldsAsDataFrame() + }) + } + if( rtype=="peak" ){ + toreturn <- lapply(entries,function(x){ + temp <- as.data.frame( x$getFieldValue( BIODB.PEAKS )) + temp$accession = x$getFieldValue( BIODB.ACCESSION) + return(temp) + + }) + } + ###Trying to convert in data.frame + if(!is.data.frame(toreturn)){ + temp <- colnames(toreturn[[1]]) + toreturn <- do.call("rbind.fill",toreturn) + colnames(toreturn) <- temp + } + + return(toreturn) +}) + + +################################################# +# SEARCH FOR SPECTRA IN A TOLERANCE AROUND A MZ # +################################################# + +PeakforestConn$methods( searchMzTol = function(mz, tol, tolunit=BIODB.MZTOLUNIT.VALS, + rtype = c("object","spec","peak")){ + + rtype <- match.arg(rtype) + tolunit <- match.arg(tolunit) + + if( tolunit == BIODB.MZTOLUNIT.PPM){ + tol <- tol * mz * 10^-6 + } + + mzmin <- mz - tol + mzmax <- mz + tol + + return(.self$searchMzRange(mzmin, mzmax, rtype = rtype)) + +}) + +################################################## +# SEARCH FOR MSMS SPECTRA PRECUSOR AROUND A MASS # +################################################## + + +PeakforestConn$methods( + searchSpecPrecTol = function(mz, + tol, + tolunit = "plain", + mode = NULL) { + #TODO handle the units + #tolunit <- match.arg(tolunit) + + strmode <- '' + + if (!is.null(mode)) { + if (mode %in% c(BIODB.MSMODE.NEG, BIODB.MSMODE.POS)) { + strmode <- paste0('?polarity=', mode) + } + + } + + if (tolunit == BIODB.MZTOLUNIT.PPM) { + tol <- tol * mz * 10 ^ -6 + } + + ##Request which return peak and not spectra. + url <- + paste0( + "https://rest.peakforest.org/spectra/lcms/search-naive/", + mz, + "/", + tol, + strmode + ) + contents <- .self$.get.url(url) + entries <- .self$createReducedEntry(contents, drop = TRUE) + return(entries) + } +) + + +################ +# CREATE ENTRY # +################ + +# Creates a Spectrum instance from file content. +# content A file content, downloaded from the public database. +# RETURN A spectrum instance. +PeakforestConn$methods( createEntry = function(content, drop = TRUE) { + return(createPeakforestSpectraFromJSON(content, drop = drop)) +}) + +PeakforestConn$methods( createReducedEntry = function(content , drop = TRUE){ + entries <- createReducedSpectraFromJSON(content, drop = drop) + return(entries) +})