# HG changeset patch
# User mingchen0919
# Date 1522037375 14400
# Node ID 28ce9fcb06c7acf4774ccbe8f579e71ea18e6a5b
planemo upload
diff -r 000000000000 -r 28ce9fcb06c7 elastic_tool.Rmd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/elastic_tool.Rmd Mon Mar 26 00:09:35 2018 -0400
@@ -0,0 +1,145 @@
+---
+title: 'Dynamic tool'
+output: html_document
+---
+
+
+
+```{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')
+```
+
diff -r 000000000000 -r 28ce9fcb06c7 elastic_tool.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/elastic_tool.xml Mon Mar 26 00:09:35 2018 -0400
@@ -0,0 +1,26 @@
+
+
+
+ elastic_tool_wrappers_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 28ce9fcb06c7 elastic_tool_render.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/elastic_tool_render.R Mon Mar 26 00:09:35 2018 -0400
@@ -0,0 +1,33 @@
+##============ Sink warnings and errors to a file ==============
+## use the sink() function to wrap all code within it.
+##==============================================================
+zz = file(Sys.getenv('TOOL_LOG'))
+sink(zz)
+sink(zz, type = 'message')
+
+#------------import libraries--------------------
+options(stringsAsFactors = FALSE)
+
+library(rmarkdown)
+#------------------------------------------------
+
+#------------------------------------------------
+options_and_arguments = read.table(paste0(Sys.getenv('REPORT_FILES_PATH'), '/options_and_arguments.txt'),
+ sep = '|', header = TRUE)
+
+
+#-----------------render Rmd--------------
+render(paste0(Sys.getenv('TOOL_INSTALL_DIR'), '/elastic_tool.Rmd'),
+ output_file = paste0(Sys.getenv('REPORT_FILES_PATH'), '/report.html'))
+
+# for some unknow reason, directly using REPORT as the input value for output_file parameter
+# in the render function can cause empty report file when the tool runs in batch mode.
+# the solution is to render the rmarkdown to a explicitly specified file and then copy the
+# file to ${REPORT}
+system(command = 'cp ${REPORT_FILES_PATH}/report.html ${REPORT}')
+#------------------------------------------
+
+
+##--------end of code rendering .Rmd templates----------------
+sink()
+##=========== End of sinking output=============================
\ No newline at end of file
diff -r 000000000000 -r 28ce9fcb06c7 elastic_tool_wrappers_macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/elastic_tool_wrappers_macros.xml Mon Mar 26 00:09:35 2018 -0400
@@ -0,0 +1,169 @@
+
+
+
+ pandoc
+ r-rmarkdown
+ parallel-fastq-dump
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ options_and_arguments.txt &&
+
+ ############ tool_name
+ ##-t '$tool_name'
+ echo "tool_name|not available|${tool_name}|not available" >> options_and_arguments.txt &&
+
+ ####################################################
+ ## loop through repeats to get option/argument pairs
+ ####################################################
+
+ ############ option_argument_single_dataset
+ #for i in $option_argument_single_dataset_repeat:
+ #set $item = 'single_dataset|' + str($i.flag) + "|" + str($i.value) + "|"
+ echo '$item' >> options_and_arguments.txt &&
+ #end for
+
+ ############ option_argument_multiple_datasets
+ #for i in $option_argument_multiple_datasets_repeat:
+ #set $item = 'multiple_datasets|' + str($i.flag) + "|" + str($i.value).replace(',', str($i.delimiter)) + "|"
+ echo '$item' >> options_and_arguments.txt &&
+ #end for
+
+
+ ############ option_argument_path_relative_to_a_tool
+ #for i in $option_argument_path_relative_to_a_tool_repeat:
+ #set $item = 'path_relative_to_a_tool|' + str($i.flag) + "|" + str($i.value) + "|" + str($i.a_tool_output_dir)
+ echo '$item' >> options_and_arguments.txt &&
+ #end for
+
+ ############ option_argument_path_relative_to_this_tool
+ #for i in $option_argument_path_relative_to_this_tool_repeat:
+ #set $item = 'path_relative_to_this_tool|' + str($i.flag) + "|" + str($i.value) + "|" + str($i.path_type)
+ echo '$item' >> options_and_arguments.txt &&
+ #end for
+
+ ############ option_argument_string_float_integer
+ #for i in $option_argument_string_float_integer_repeat:
+ #set $item = 'value|' + str($i.flag) + "|" + str($i.value) + "|"
+ echo '$item' >> options_and_arguments.txt &&
+ #end for
+
+ ############ output_set
+ ## '$report'
+ ## '$report.files_path'
+ ## '$tool_help_doc'
+ ## '$tool_output_dir'
+ ## '$tool_log'
+ #######################
+ export REPORT='$report' &&
+ export REPORT_FILES_PATH='$report.files_path' &&
+ export TOOL_HELP_DOC='$tool_help_doc' &&
+ export TOOL_OUTPUT_DIR='$tool_output_dir' &&
+ export TOOL_LOG='$tool_log' &&
+
+
+ ############ run render R script to render R markdowns
+ Rscript '${__tool_directory__}/elastic_tool_render.R'
+
+ ]]>
+
+
+
+
+
+
+