view MassbankConn.R @ 5:fb9c0409d85c draft

planemo upload for repository https://github.com/workflow4metabolomics/lcmsmatching.git commit 608d9e59a0d2dcf85a037968ddb2c61137fb9bce
author prog
date Wed, 19 Apr 2017 10:00:05 -0400
parents 20d69a062da3
children
line wrap: on
line source

#####################
# CLASS DECLARATION #
#####################

MassbankConn <- methods::setRefClass("MassbankConn", contains = c("RemotedbConn", "MassdbConn"), fields = list( .url = "character" ))

###############
# CONSTRUCTOR #
###############

MassbankConn$methods( initialize = function(url = NA_character_, ...) {

	# Set URL
	.url <<- if (is.null(url) || is.na(url)) BIODB.MASSBANK.EU.WS.URL else url

	callSuper(...)
})

##########################
# GET ENTRY CONTENT TYPE #
##########################

MassbankConn$methods( getEntryContentType = function() {
	return(BIODB.TXT) 
})

#####################
# GET ENTRY CONTENT #
#####################

MassbankConn$methods( getEntryContent = function(ids) {

	# Debug
	.self$.print.debug.msg(paste0("Get entry content(s) for ", length(ids)," id(s)..."))

	URL.MAX.LENGTH <- 2083

	# Initialize return values
	content <- rep(NA_character_, length(ids))

	# Loop on all
	n <- 0
	while (n < length(ids)) {

		# Get list of accession ids to retrieve
		accessions <- ids[(n + 1):length(ids)]

		# Create URL request
		x <- get.entry.url(class = BIODB.MASSBANK, accession = accessions, content.type = BIODB.TXT, max.length = URL.MAX.LENGTH, base.url = .self$.url)

		# Debug
		.self$.print.debug.msg(paste0("Send URL request for ", x$n," id(s)..."))

		# Send request
		xmlstr <- .self$.get.url(x$url)

		# Increase number of entries retrieved
		n <- n + x$n

		# Parse XML and get text
		if ( ! is.na(xmlstr)) {
			xml <-  xmlInternalTreeParse(xmlstr, asText = TRUE)
			ns <- c(ax21 = "http://api.massbank/xsd")
			returned.ids <- xpathSApply(xml, "//ax21:id", xmlValue, namespaces = ns)
			if (length(returned.ids) > 0)
				content[match(returned.ids, ids)] <- xpathSApply(xml, "//ax21:info", xmlValue, namespaces = ns)
		}

		# Debug
		.self$.print.debug.msg(paste0("Now ", length(ids) - n," id(s) left to be retrieved..."))
	}

	return(content)
})

################
# CREATE ENTRY #
################

# Creates a Spectrum instance from file content.
# content       A file content, downloaded from the public database.
# RETURN        A spectrum instance.
MassbankConn$methods( createEntry = function(content, drop = TRUE) {
	return(createMassbankEntryFromTxt(content, drop = drop))
})

#################
# GET MZ VALUES #
#################

MassbankConn$methods( getMzValues = function(mode = NULL, max.results = NA_integer_) {
})

#################
# GET ENTRY IDS #
#################

MassbankConn$methods( getEntryIds = function(max.results = NA_integer_) {

	# Set URL
	url <- paste0(.self$.url, 'searchPeak?mzs=1000&relativeIntensity=100&tolerance=1000&instrumentTypes=all&ionMode=Both')
	url <- paste0(url, '&maxNumResults=', (if (is.na(max.results)) 0 else max.results))

	# Send request
	xmlstr <- .self$.get.url(url)

	# Parse XML and get text
	if ( ! is.na(xmlstr)) {
		xml <-  xmlInternalTreeParse(xmlstr, asText = TRUE)
		ns <- c(ax21 = "http://api.massbank/xsd")
		returned.ids <- xpathSApply(xml, "//ax21:id", xmlValue, namespaces = ns)
		return(returned.ids)
	}
})

##################
# GET NB ENTRIES #
##################

MassbankConn$methods( getNbEntries = function() {
	return(length(.self$getEntryIds()))
})