Mercurial > repos > ecology > otb_mean_shift_smoothing
view OTB_MeanShiftSmoothing.R @ 1:dd397752ad21 draft default tip
planemo upload for repository https://github.com/galaxyecology/tools-ecology/tree/master/tools/interpolation commit 5e963dcfe6e22e42473987179b70ad490f918cb9
author | ecology |
---|---|
date | Fri, 12 Apr 2024 18:41:57 +0000 |
parents | 6c6e8b16dba6 |
children |
line wrap: on
line source
# Run with Rscript ./OTB_MeanShiftSmoothing.R #--file otb_band_math_test_input.txt #--fOut float --fOutpos float --processingMemory 1024 --spatialR 5 --rangeR 15 #--thresHold 0.1 --maxIter 100 --rangeRamp 0 --modeSearch False #--outputType png #--outputFormat download --outputData test1.png library("httr2") library("jsonlite") library("getopt") args <- commandArgs(trailingOnly = TRUE) option_specification <- matrix(c( "file", "i1", 1, "character", "fOut", "i2", 1, "character", "fOutpos", "i3", 1, "character", "processingMemory", "i4", 1, "integer", "spatialR", "i5", 2, "integer", "rangeR", "i6", 2, "double", "thresHold", "i7", 2, "double", "maxIter", "i8", 2, "integer", "rangeRamp", "i9", 2, "double", "modeSearch", "i10", 1, "character", "outputType", "i11", 1, "character", "outputFormat", "i12", 1, "character", "outputData", "o", 1, "character" ), byrow = TRUE, ncol = 4) options <- getopt(option_specification) file <- options$file fout <- options$fOut foutpos <- options$fOutpos processing_memory <- options$processingMemory spatialr <- options$spatialR ranger <- options$rangeR threshold <- options$thresHold maxiter <- options$maxIter rangeramp <- options$rangeRamp modesearch <- options$modeSearch output_type <- paste0("image/", options$outputType) output_format <- options$outputFormat output_data <- options$outputData cat("\n file: ", file) cat("\n fout: ", fout) cat("\n foutpos: ", foutpos) cat("\n processing_memory: ", processing_memory) cat("\n spatialr: ", spatialr) cat("\n ranger: ", ranger) cat("\n threshold: ", threshold) cat("\n maxiter: ", maxiter) cat("\n rangeramp: ", rangeramp) cat("\n modesearch: ", modesearch) cat("\n output_type: ", output_type) cat("\n output_format: ", output_format) base_url <- "https://ospd.geolabs.fr:8300/ogc-api/" execute <- "processes/OTB.MeanShiftSmoothing/execution" get_status <- "jobs/" get_result <- "/results" file_urls <- readLines(file, warn = FALSE) il_list <- lapply(file_urls, function(url) { list("href" = url) }) json_data <- list( "inputs" = list( "in" = il_list, "fout" = fout, "foutpos" = foutpos, "ram" = processing_memory, "spatialr" = spatialr, "ranger" = ranger, "thres" = threshold, "maxiter" = maxiter, "rangeramp" = rangeramp, "modesearch" = modesearch ), "outputs" = list( "fout" = list( "format" = list( "mediaType" = output_type ), "transmissionMode" = "reference" ), "foutpos" = list( "format" = list( "mediaType" = output_type ), "transmissionMode" = "reference" ) ) ) make_response_body_readable <- function(body) { hex <- c(body) int_values <- as.integer(hex) raw_vector <- as.raw(int_values) readable_output <- rawToChar(raw_vector) json_object <- jsonlite::fromJSON(readable_output) return(json_object) } tryCatch({ # Request 1 resp1 <- request(paste0(base_url, execute)) %>% req_headers( "accept" = "/*", "Prefer" = "respond-async;return=representation", "Content-Type" = "application/json" ) %>% req_body_json(json_data) %>% req_perform() response <- make_response_body_readable(resp1$body) status_code1 <- resp1$status_code if (status_code1 == 201) { status <- "running" attempt <- 1 while (status == "running") { # Request 2 resp2 <- request(paste0(base_url, get_status, response$jobID)) %>% req_headers( "accept" = "application/json" ) %>% req_perform() status_code2 <- resp2$status_code if (status_code2 == 200) { response2 <- make_response_body_readable(resp2$body) cat("\n", response2$status) if (response2$status == "successful") { status <- "successful" # Request 3 resp3 <- request(paste0( base_url, get_status, response2$jobID, get_result )) %>% req_headers( "accept" = "application/json" ) %>% req_perform() status_code3 <- resp3$status_code if (status_code3 == 200) { response3 <- make_response_body_readable(resp3$body) if (output_format == "download") { options(timeout = 600) download.file(response3$fout$href, destfile = paste0("output1.", options$outputType), mode = "wb" ) download.file(response3$foutpos$href, destfile = paste0("output2.", options$outputType), mode = "wb" ) } else if (output_format == "getUrl") { writeLines(paste(response3$fout$href, response3$foutpos$href, sep = "\n" ), con = "output.txt") } } else if (status_code3 == 404) { print("The requested URI was not found.") } else if (status_code3 == 500) { print("A server error occurred.") } else { print(paste("HTTP", status_code3, "Error:", resp3$status_message)) } } else if (response2$status == "failed") { status <- "failed" message("An error occurred. For further details, check OGC Job status through https://ospd.geolabs.fr:8300/ogc-api/jobs/", response2$jobID) q(status = 1) } } else { status <- "failed" print(paste("HTTP", status_code2, "Error:", resp2$status_message, "An error occurred. For further details, check OGC Job status through https://ospd.geolabs.fr:8300/ogc-api/jobs/", response2$jobID)) q(status = 1) } Sys.sleep(3) } print(status) } else if (status_code1 == 400) { print("A query parameter has an invalid value.") } else if (status_code1 == 404) { print("The requested URI was not found.") } else if (status_code1 == 500) { print("The requested URI was not found.") } else { print(paste("HTTP", status_code1, "Error:", resp1$status_message)) } }, error = function(e) { message("An error occurred:", e) # Exit with code 1 q(status = 1) })