Mercurial > repos > mingchen0919 > elastic_fastq_dump
view elastic_tool.Rmd @ 0:28ce9fcb06c7 draft
planemo upload
author | mingchen0919 |
---|---|
date | Mon, 26 Mar 2018 00:09:35 -0400 |
parents | |
children | 1aeef205e648 |
line wrap: on
line source
--- title: 'Dynamic tool' output: html_document --- <style> pre code, pre, code { white-space: pre !important; overflow-x: scroll !important; word-break: keep-all !important; word-wrap: initial !important; } </style> ```{r setup, include=FALSE, warning=FALSE, message=FALSE} knitr::opts_chunk$set(error = TRUE) ``` ## User input ```{r, echo=FALSE} ##-------- build script files ----------- # build script file: script.sh df = read.table(paste0(Sys.getenv('REPORT_FILES_PATH'), '/options_and_arguments.txt'), sep = '|', header = TRUE) # prepend A_TOOL_OUTPUT_PATH if (nrow(df[df$type == 'path_relative_to_a_tool', ]) > 0) { for (i in 1:nrow(df[df$type == 'path_relative_to_a_tool', ])) { root_path = readLines(df[df$type == 'path_relative_to_a_tool', ][i, 'path_type'])[1] df[df$type == 'path_relative_to_a_tool', ][i, 'value'] = paste(root_path, df[df$type == 'path_relative_to_a_tool', ][i, 'value'], sep = '/') } } # get tool name tool_name = df[df$type == 'tool_name', 'value'] # build script for displaying help messages (this probably should be tool specific) write(paste0(tool_name, ' -h'), file = paste0(Sys.getenv('REPORT_FILES_PATH'), '/help.sh')) knitr::kable(df) # if the number of option/argument pairs is larger than 0, build script file df2 = df[df$type != 'tool_name', ] if (nrow(df2) > 0) { # write tool name as the first line of the script.sh # before running the job, cd into the ${REPORT_FILES_PATH} directory write(paste0(tool_name, ' \\'), paste0(Sys.getenv('REPORT_FILES_PATH'), '/script.sh')) df2 = df[df$type != 'tool_name', ] write(paste(' ', df2$flag, df2$value, '\\', sep = ' '), file = paste0(Sys.getenv('REPORT_FILES_PATH'), '/script.sh'), append = TRUE ) # remember that after writing option/argument lines to the script.sh, the last line # has an extra newline character '\' which causes a problem. We can either remove that extra # '\' or add a new line to the end. We choose to add a new line. # add an extra line to the end to redirect stdout to stdout.txt and stderr to stderr.txt write(' > ${REPORT_FILES_PATH}/stdout.txt 2>${REPORT_FILES_PATH}/stderr.txt', paste0(Sys.getenv('REPORT_FILES_PATH'), '/script.sh'), append = TRUE) } else { # if no option/argument input, simply display the help message write(paste0(tool_name, ' -h'), file = paste0(Sys.getenv('REPORT_FILES_PATH'), '/script.sh')) } ``` ```{bash, echo=FALSE} ## code to open help documentation sh ${REPORT_FILES_PATH}/help.sh > ${TOOL_HELP_DOC} ``` ```{r, echo=FALSE} # create paths before running the job script df_paths = df[df$type == 'path_relative_to_this_tool', ] if (nrow(df_paths) > 0) { for (i in 1:nrow(df_paths)) { path = paste0(Sys.getenv('REPORT_FILES_PATH'), '/', df_paths[i, 'value']) path_type = df_paths[i, 'path_type'] # create file paths if ((path_type == 'file_path') & !file.exists(path)) { dir_path = paste(head(strsplit(path, '/')[[1]], -1), collapse = '/' ) if (!dir.exists(dir_path)) { dir.create(dir_path, recursive = TRUE) } file.create(path) } # create dir paths if ((path_type == 'dir_path') & !dir.exists(path)) { dir.create(path, recursive = TRUE) } } } ``` ```{bash, echo=FALSE} # run job script # it's important to run the job within the REPORT_FILES_PATH cd ${REPORT_FILES_PATH} && sh script.sh ``` ```{bash, results='asis', echo=FALSE} echo '## Job script' echo '' echo '' echo '```bash' cat ${REPORT_FILES_PATH}/script.sh echo '```' ``` ```{r, echo=FALSE} ## obtain REPORT_FILES_PAHT and save it to a galaxy output. database_root = paste(head(strsplit(Sys.getenv('TOOL_LOG'), '/')[[1]], -1), collapse = '/') tool_output_dir_id = tail(strsplit(Sys.getenv('REPORT_FILES_PATH'), '/')[[1]], 1) tool_output_dir = paste0(database_root, '/', tool_output_dir_id) write(tool_output_dir, Sys.getenv('TOOL_OUTPUT_DIR')) ``` ```{r, results='asis', echo=FALSE} cat('##All output files') cat('\n\n') all_files = list.files(path = Sys.getenv('REPORT_FILES_PATH'), full.names = TRUE, recursive = TRUE) for (f in sub(Sys.getenv('REPORT_FILES_PATH'), '.', all_files) ) { cat('* [', f, '](', f, ')\n') } cat('\n') ```