# HG changeset patch # User mingchen0919 # Date 1522615733 14400 # Node ID 1aeef205e648c37e68812bfacc53af01eec25a1c # Parent 28ce9fcb06c7acf4774ccbe8f579e71ea18e6a5b planemo upload diff -r 28ce9fcb06c7 -r 1aeef205e648 LICENSE --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LICENSE Sun Apr 01 16:48:53 2018 -0400 @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Staton Laboratory + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff -r 28ce9fcb06c7 -r 1aeef205e648 README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Sun Apr 01 16:48:53 2018 -0400 @@ -0,0 +1,63 @@ +# Elastic Galaxy Tools + +* [What are Elastic Galaxy Tools](#what-are-elastic-galaxy-tools?) +* [How to use Elastic Galaxy Tools](#how-to-use-elastic-galaxy-tools?) +* [How to develop an Elastic Galaxy Tool](#how-to-develop-an-elastic-galaxy-tool?) + + [Publish a Galaxy Tool](#publish-a-galaxy-tool) + + + + +## What are Elastic Galaxy Tools? + +**Elastic Galaxy tools** is a type of Galaxy tools that have elastic user interfaces. Users can adjust the +number of input fields a tool can have, just like using a command line tool. When using a command line tool, +users can choose which (non-required) options to use. I hope Galaxy users can do the same thing, but without +actually writing any command line scripts. + + +## How to use Elastic Galaxy Tools? + +Although any (Elastic) Galaxy tool is a wrapper of a command line tool which enables performing data analysis +through web interfaces without actually writing any command line script, understanding how to read command line +manuals will help you use Elastic Galaxy tools. + +Running a command line tool is very simple. You start with the tool name, then you specify options (also called flags) +that the tool can recognize. The tool manual should tell you which options the tool can recognize. An option may or may +not have a value followed. Some options are required and some are optional. You have to use all required options to +successfully run a command line tool. However, you can use as many optional options as you want in a call of a command +line tool. + +## How to develop an Elastic Galaxy Tool? + +### Publish a Galaxy tool + +We can use the tool **planemo** to easily publish our Galaxy tools to Tool Shed or test Tool Shed. +More details can be found **[here](http://planemo.readthedocs.io/en/latest/publishing.html)**. + +* Publish to test Tool Shed + +```bash +planemo shed_create --shed_target testtoolshed +``` + +* Update tool repository in test Tool Shed + +```bash +planemo shed_update --check_diff --shed_target testtoolshed +``` + +* Publish to Tool Shed + +```bash +planemo shed_create --shed_target toolshed +``` + +* Update tool repository in Tool Shed + +```bash +planemo shed_update --check_diff --shed_target toolshed +``` + + + diff -r 28ce9fcb06c7 -r 1aeef205e648 elastic_tool.Rmd --- a/elastic_tool.Rmd Mon Mar 26 00:09:35 2018 -0400 +++ b/elastic_tool.Rmd Sun Apr 01 16:48:53 2018 -0400 @@ -1,5 +1,5 @@ --- -title: 'Dynamic tool' +title: 'Tool Report' output: html_document --- @@ -18,14 +18,13 @@ ## User input -```{r, echo=FALSE} -##-------- build script files ----------- - -# build script file: script.sh +```{r, 'display user input'} +# get user input and save it into a data frame. df = read.table(paste0(Sys.getenv('REPORT_FILES_PATH'), '/options_and_arguments.txt'), sep = '|', header = TRUE) -# prepend A_TOOL_OUTPUT_PATH +# if the input type is 'path_relative_to_a_tool', prepend A_TOOL_OUTPUT_PATH to the value to make +# the value a full 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] @@ -35,13 +34,16 @@ } } -# get tool name +## display user input as a table +knitr::kable(df) +``` + + +```{r, 'build script', echo=FALSE} +##-------- build script files ----------- + +# get tool name, the first line of the script is always the 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', ] @@ -51,7 +53,7 @@ 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 = ' '), + write(paste(' ', df2$option, 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 @@ -66,17 +68,13 @@ 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, 'create paths if they do not exist', echo=FALSE} +## if the input type is 'path_relative_to_this_tool', that means +## we need to create a directory or file path. - -```{r, echo=FALSE} # create paths before running the job script df_paths = df[df$type == 'path_relative_to_this_tool', ] @@ -103,15 +101,14 @@ ``` -```{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, 'run jobs', echo=FALSE} +# run job script, always use absolute path. +# we want to run all jobs within the working path. +sh ${REPORT_FILES_PATH}/script.sh ``` - -```{bash, results='asis', echo=FALSE} +```{bash, 'display script', results='asis', echo=FALSE} echo '## Job script' echo '' echo '' @@ -121,16 +118,10 @@ ``` -```{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, 'display output directory contents', results='asis', echo=FALSE} +## after the job is done, we list all files from the output directory. +## full relative path to the output directory needs to be displayed. - -```{r, results='asis', echo=FALSE} cat('##All output files') cat('\n\n') all_files = list.files(path = Sys.getenv('REPORT_FILES_PATH'), @@ -143,3 +134,14 @@ cat('\n') ``` + +```{r, 'save output directory of this tool', echo=FALSE} +## each elastic tool has a galaxy history output which contains the REPORT_FILES_PATH of this tool +## so that other tools can reference the outputs from this tool. + +## 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')) +``` diff -r 28ce9fcb06c7 -r 1aeef205e648 elastic_tool.xml --- a/elastic_tool.xml Mon Mar 26 00:09:35 2018 -0400 +++ b/elastic_tool.xml Sun Apr 01 16:48:53 2018 -0400 @@ -1,26 +1,154 @@ - - - - elastic_tool_wrappers_macros.xml - - - - - - - - - - - - - - - - - - - - - + + + elastic_tool_macros.xml + + + + + + + + + $report.files_path/options_and_arguments.txt && + + ############ tool_name + ##-t '$tool_name' + echo "tool_name|not available|${tool_name}|not available" >> $report.files_path/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.option) + "|" + str($i.value) + "|" + echo '$item' >> $report.files_path/options_and_arguments.txt && + #end for + + ############ option_argument_multiple_datasets + #for i in $option_argument_multiple_datasets_repeat: + #set $item = 'multiple_datasets|' + str($i.option) + "|" + str($i.value).replace(',', str($i.delimiter)) + "|" + echo '$item' >> $report.files_path/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.option) + "|" + str($i.value) + "|" + str($i.a_tool_output_dir) + echo '$item' >> $report.files_path/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.option) + "|" + str($i.value) + "|" + str($i.path_type) + echo '$item' >> $report.files_path/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.option) + "|" + str($i.value) + "|" + echo '$item' >> $report.files_path/options_and_arguments.txt && + #end for + + ############ output_set + ## '$report' + ## '$report.files_path' + ## '$tool_output_dir' + ## '$tool_log' + ####################### + export REPORT='$report' && + export REPORT_FILES_PATH='$report.files_path' && + 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' + + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 28ce9fcb06c7 -r 1aeef205e648 elastic_tool_macros.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/elastic_tool_macros.xml Sun Apr 01 16:48:53 2018 -0400 @@ -0,0 +1,31 @@ + + + + + pandoc + r-rmarkdown + parallel-fastq-dump + + + + + fastq-dump tool wrapper with elastic user interface. + + + + + + + + + + + + + + + + + diff -r 28ce9fcb06c7 -r 1aeef205e648 elastic_tool_wrappers_macros.xml --- a/elastic_tool_wrappers_macros.xml Mon Mar 26 00:09:35 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ - - - - 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' - - ]]> - - - - - - -