Files
biobox/target/executable/sortmerna/sortmerna
CI beb7940138 Build branch main with version main (320d044)
Build pipeline: viash-hub.biobox.main-4vvfj

Source commit: 320d044fe4

Source message: Sortmerna (#146)
2024-09-09 07:10:14 +00:00

2271 lines
98 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# sortmerna main
#
# This wrapper script is auto-generated by viash 0.9.0-RC7 and is thus a
# derivative work thereof. This software comes with ABSOLUTELY NO WARRANTY from
# Data Intuitive.
#
# The component may contain files which fall under a different license. The
# authors of this component should specify the license in the header of such
# files, or include a separate license file detailing the licenses of all included
# files.
set -e
if [ -z "$VIASH_TEMP" ]; then
VIASH_TEMP=${VIASH_TEMP:-$VIASH_TMPDIR}
VIASH_TEMP=${VIASH_TEMP:-$VIASH_TEMPDIR}
VIASH_TEMP=${VIASH_TEMP:-$VIASH_TMP}
VIASH_TEMP=${VIASH_TEMP:-$TMPDIR}
VIASH_TEMP=${VIASH_TEMP:-$TMP}
VIASH_TEMP=${VIASH_TEMP:-$TEMPDIR}
VIASH_TEMP=${VIASH_TEMP:-$TEMP}
VIASH_TEMP=${VIASH_TEMP:-/tmp}
fi
# define helper functions
# ViashQuote: put quotes around non flag values
# $1 : unquoted string
# return : possibly quoted string
# examples:
# ViashQuote --foo # returns --foo
# ViashQuote bar # returns 'bar'
# Viashquote --foo=bar # returns --foo='bar'
function ViashQuote {
if [[ "$1" =~ ^-+[a-zA-Z0-9_\-]+=.+$ ]]; then
echo "$1" | sed "s#=\(.*\)#='\1'#"
elif [[ "$1" =~ ^-+[a-zA-Z0-9_\-]+$ ]]; then
echo "$1"
else
echo "'$1'"
fi
}
# ViashRemoveFlags: Remove leading flag
# $1 : string with a possible leading flag
# return : string without possible leading flag
# examples:
# ViashRemoveFlags --foo=bar # returns bar
function ViashRemoveFlags {
echo "$1" | sed 's/^--*[a-zA-Z0-9_\-]*=//'
}
# ViashSourceDir: return the path of a bash file, following symlinks
# usage : ViashSourceDir ${BASH_SOURCE[0]}
# $1 : Should always be set to ${BASH_SOURCE[0]}
# returns : The absolute path of the bash file
function ViashSourceDir {
local source="$1"
while [ -h "$source" ]; do
local dir="$( cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd )"
source="$(readlink "$source")"
[[ $source != /* ]] && source="$dir/$source"
done
cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd
}
# ViashFindTargetDir: return the path of the '.build.yaml' file, following symlinks
# usage : ViashFindTargetDir 'ScriptPath'
# $1 : The location from where to start the upward search
# returns : The absolute path of the '.build.yaml' file
function ViashFindTargetDir {
local source="$1"
while [[ "$source" != "" && ! -e "$source/.build.yaml" ]]; do
source=${source%/*}
done
echo $source
}
# see https://en.wikipedia.org/wiki/Syslog#Severity_level
VIASH_LOGCODE_EMERGENCY=0
VIASH_LOGCODE_ALERT=1
VIASH_LOGCODE_CRITICAL=2
VIASH_LOGCODE_ERROR=3
VIASH_LOGCODE_WARNING=4
VIASH_LOGCODE_NOTICE=5
VIASH_LOGCODE_INFO=6
VIASH_LOGCODE_DEBUG=7
VIASH_VERBOSITY=$VIASH_LOGCODE_NOTICE
# ViashLog: Log events depending on the verbosity level
# usage: ViashLog 1 alert Oh no something went wrong!
# $1: required verbosity level
# $2: display tag
# $3+: messages to display
# stdout: Your input, prepended by '[$2] '.
function ViashLog {
local required_level="$1"
local display_tag="$2"
shift 2
if [ $VIASH_VERBOSITY -ge $required_level ]; then
>&2 echo "[$display_tag]" "$@"
fi
}
# ViashEmergency: log events when the system is unstable
# usage: ViashEmergency Oh no something went wrong.
# stdout: Your input, prepended by '[emergency] '.
function ViashEmergency {
ViashLog $VIASH_LOGCODE_EMERGENCY emergency "$@"
}
# ViashAlert: log events when actions must be taken immediately (e.g. corrupted system database)
# usage: ViashAlert Oh no something went wrong.
# stdout: Your input, prepended by '[alert] '.
function ViashAlert {
ViashLog $VIASH_LOGCODE_ALERT alert "$@"
}
# ViashCritical: log events when a critical condition occurs
# usage: ViashCritical Oh no something went wrong.
# stdout: Your input, prepended by '[critical] '.
function ViashCritical {
ViashLog $VIASH_LOGCODE_CRITICAL critical "$@"
}
# ViashError: log events when an error condition occurs
# usage: ViashError Oh no something went wrong.
# stdout: Your input, prepended by '[error] '.
function ViashError {
ViashLog $VIASH_LOGCODE_ERROR error "$@"
}
# ViashWarning: log potentially abnormal events
# usage: ViashWarning Something may have gone wrong.
# stdout: Your input, prepended by '[warning] '.
function ViashWarning {
ViashLog $VIASH_LOGCODE_WARNING warning "$@"
}
# ViashNotice: log significant but normal events
# usage: ViashNotice This just happened.
# stdout: Your input, prepended by '[notice] '.
function ViashNotice {
ViashLog $VIASH_LOGCODE_NOTICE notice "$@"
}
# ViashInfo: log normal events
# usage: ViashInfo This just happened.
# stdout: Your input, prepended by '[info] '.
function ViashInfo {
ViashLog $VIASH_LOGCODE_INFO info "$@"
}
# ViashDebug: log all events, for debugging purposes
# usage: ViashDebug This just happened.
# stdout: Your input, prepended by '[debug] '.
function ViashDebug {
ViashLog $VIASH_LOGCODE_DEBUG debug "$@"
}
# find source folder of this component
VIASH_META_RESOURCES_DIR=`ViashSourceDir ${BASH_SOURCE[0]}`
# find the root of the built components & dependencies
VIASH_TARGET_DIR=`ViashFindTargetDir $VIASH_META_RESOURCES_DIR`
# define meta fields
VIASH_META_NAME="sortmerna"
VIASH_META_FUNCTIONALITY_NAME="sortmerna"
VIASH_META_EXECUTABLE="$VIASH_META_RESOURCES_DIR/$VIASH_META_NAME"
VIASH_META_CONFIG="$VIASH_META_RESOURCES_DIR/.config.vsh.yaml"
VIASH_META_TEMP_DIR="$VIASH_TEMP"
# ViashHelp: Display helpful explanation about this executable
function ViashHelp {
echo "sortmerna main"
echo ""
echo "Local sequence alignment tool for filtering, mapping and clustering. The main"
echo "application of SortMeRNA is filtering rRNA from metatranscriptomic data."
echo ""
echo "Input:"
echo " --paired"
echo " type: boolean_true"
echo " Reads are paired-end. If a single reads file is provided, use this"
echo " option"
echo " to indicate the file contains interleaved paired reads when neither"
echo " 'paired_in' | 'paired_out' | 'out2' | 'sout' are specified."
echo ""
echo " --input"
echo " type: file, multiple values allowed, file must exist"
echo " Input fastq"
echo ""
echo " --ref"
echo " type: file, multiple values allowed, file must exist"
echo " Reference fasta file(s) for rRNA database."
echo ""
echo " --ribo_database_manifest"
echo " type: file, file must exist"
echo " Text file containing paths to fasta files (one per line) that will be"
echo " used to create the database for SortMeRNA."
echo ""
echo "Output:"
echo " --log"
echo " type: file, output"
echo " example: \$id.sortmerna.log"
echo " Sortmerna log file."
echo ""
echo " --aligned, --output"
echo " type: string"
echo " Directory and file prefix for aligned output. The appropriate extension:"
echo " (fasta|fastq|blast|sam|etc) is automatically added."
echo " If 'dir' is not specified, the output is created in the WORKDIR/out/."
echo " If 'pfx' is not specified, the prefix 'aligned' is used."
echo ""
echo " --other"
echo " type: string"
echo " Create Non-aligned reads output file with this path/prefix. Must be used"
echo " with fastx."
echo ""
echo "Options:"
echo " --kvdb"
echo " type: string"
echo " Path to directory of the key-value database file, used for storing the"
echo " alignment results."
echo ""
echo " --idx_dir"
echo " type: string"
echo " Path to the directory for storing the reference index files."
echo ""
echo " --readb"
echo " type: string"
echo " Path to the directory for storing pre-processed reads."
echo ""
echo " --fastx"
echo " type: boolean_true"
echo " Output aligned reads into FASTA/FASTQ file"
echo ""
echo " --sam"
echo " type: boolean_true"
echo " Output SAM alignment for aligned reads."
echo ""
echo " --sq"
echo " type: boolean_true"
echo " Add SQ tags to the SAM file"
echo ""
echo " --blast"
echo " type: string"
echo " choices: [ 0, 1, 1 cigar, 1 cigar qcov, 1 cigar qcov qstrand ]"
echo " Blast options:"
echo " * '0' - pairwise"
echo " * '1' - tabular(Blast - m 8 format)"
echo " * '1 cigar' - tabular + column for CIGAR"
echo " * '1 cigar qcov' - tabular + columns for CIGAR and query"
echo " coverage"
echo " * '1 cigar qcov qstrand' - tabular + columns for CIGAR, query coverage"
echo " and strand"
echo ""
echo " --num_alignments"
echo " type: integer"
echo " example: 0"
echo " Report first INT alignments per read reaching E-value. If Int = 0, all"
echo " alignments will be output. Default: '0'"
echo ""
echo " --min_lis"
echo " type: integer"
echo " example: 2"
echo " search all alignments having the first INT longest LIS. LIS stands for"
echo " Longest Increasing Subsequence, it is"
echo " computed using seeds positions to expand hits into longer matches prior"
echo " to Smith-Waterman alignment. Default: '2'."
echo ""
echo " --print_all_reads"
echo " type: boolean_true"
echo " output null alignment strings for non-aligned reads to SAM and/or BLAST"
echo " tabular files."
echo ""
echo " --paired_in"
echo " type: boolean_true"
echo " In the case where a pair of reads is aligned with a score above the"
echo " threshold, the output of the reads is controlled"
echo " by the following options:"
echo " * --paired_in and --paired_out are both false: Only one read per pair is"
echo " output to the aligned fasta file."
echo " * --paired_in is true and --paired_out is false: Both reads of the pair"
echo " are output to the aligned fasta file."
echo " * --paired_in is false and --paired_out is true: Both reads are output"
echo " the the other fasta file (if it is specified)."
echo ""
echo " --paired_out"
echo " type: boolean_true"
echo " See description of --paired_in."
echo ""
echo " --out2"
echo " type: boolean_true"
echo " Output paired reads into separate files. Must be used with '--fastx'. If"
echo " a single reads file is provided, this options"
echo " implies interleaved paired reads. When used with 'sout', four (4) output"
echo " files for aligned reads will be generated:"
echo " 'aligned-paired-fwd, aligned-paired-rev, aligned-singleton-fwd,"
echo " aligned-singleton-rev'. If 'other' option is also used,"
echo " eight (8) output files will be generated."
echo ""
echo " --sout"
echo " type: boolean_true"
echo " Separate paired and singleton aligned reads. Must be used with"
echo " '--fastx'. If a single reads file is provided,"
echo " this options implies interleaved paired reads. Cannot be used with"
echo " '--paired_in' or '--paired_out'."
echo ""
echo " --zip_out"
echo " type: string"
echo " example: -1"
echo " choices: [ 1, true, t, yes, y, 0, false, f, no, n, -1 ]"
echo " Compress the output files. The possible values are:"
echo " * '1/true/t/yes/y'"
echo " * '0/false/f/no/n'"
echo " *'-1' (the same format as input - default)"
echo " The values are Not case sensitive."
echo ""
echo " --match"
echo " type: integer"
echo " example: 2"
echo " Smith-Waterman score for a match (positive integer). Default: '2'."
echo ""
echo " --mismatch"
echo " type: integer"
echo " example: -3"
echo " Smith-Waterman penalty for a mismatch (negative integer). Default: '-3'."
echo ""
echo " --gap_open"
echo " type: integer"
echo " example: 5"
echo " Smith-Waterman penalty for introducing a gap (positive integer)."
echo " Default: '5'."
echo ""
echo " --gap_ext"
echo " type: integer"
echo " example: 2"
echo " Smith-Waterman penalty for extending a gap (positive integer). Default:"
echo " '2'."
echo ""
echo " --N"
echo " type: integer"
echo " example: -1"
echo " Smith-Waterman penalty for ambiguous letters (Ns) scored as --mismatch."
echo " Default: '-1'.\\"
echo ""
echo " --a"
echo " type: integer"
echo " example: 1"
echo " Number of threads to use. Default: '1'."
echo ""
echo " --e"
echo " type: double"
echo " example: 1.0"
echo " E-value threshold. Default: '1'."
echo ""
echo " --F"
echo " type: boolean_true"
echo " Search only the forward strand."
echo ""
echo " --R"
echo " type: boolean_true"
echo " Search only the reverse-complementary strand."
echo ""
echo " --num_alignment"
echo " type: integer"
echo " example: -1"
echo " Report first INT alignments per read reaching E-value (--num_alignments"
echo " 0 signifies all alignments will be output)."
echo " Default: '-1'"
echo ""
echo " --best"
echo " type: integer"
echo " example: 1"
echo " Report INT best alignments per read reaching E-value by searching"
echo " --min_lis INT candidate alignments (--best 0"
echo " signifies all candidate alignments will be searched) Default: '1'."
echo ""
echo " -v, --verbose"
echo " type: boolean_true"
echo " Verbose output."
echo ""
echo "OTU picking options:"
echo " --id"
echo " type: double"
echo " example: 0.97"
echo " %id similarity threshold (the alignment must still pass the E-value"
echo " threshold). Default: '0.97'."
echo ""
echo " --coverage"
echo " type: double"
echo " example: 0.97"
echo " %query coverage threshold (the alignment must still pass the E-value"
echo " threshold). Default: '0.97'."
echo ""
echo " --de_novo"
echo " type: boolean_true"
echo " FASTA/FASTQ file for reads matching database < %id off (set using --id)"
echo " and < %cov (set using --coverage)"
echo " (alignment must still pass the E-value threshold)."
echo ""
echo " --otu_map"
echo " type: boolean_true"
echo " Output OTU map (input to QIIMEs make_otu_table.py)."
echo ""
echo "Advanced options:"
echo " --num_seed"
echo " type: integer"
echo " example: 2"
echo " Number of seeds matched before searching for candidate LIS. Default:"
echo " '2'."
echo ""
echo " --passes"
echo " type: integer, multiple values allowed"
echo " Three intervals at which to place the seed on the read L,L/2,3 (L is the"
echo " seed length set in ./indexdb_rna)."
echo ""
echo " --edge"
echo " type: string"
echo " example: 4"
echo " The number (or percentage if followed by %) of nucleotides to add to"
echo " each edge of the alignment region on the"
echo " reference sequence before performing Smith-Waterman alignment. Default:"
echo " '4'."
echo ""
echo " --full_search"
echo " type: boolean_true"
echo " Search for all 0-error and 1-error seed off matches in the index rather"
echo " than stopping after finding a 0-error match"
echo " (<1% gain in sensitivity with up four-fold decrease in speed)."
echo ""
echo "Indexing Options:"
echo " --index"
echo " type: integer"
echo " example: 2"
echo " choices: [ 0, 1, 2 ]"
echo " Create index files for the reference database. By default when this"
echo " option is not used, the program checks the"
echo " reference index and builds it if not already existing."
echo " This can be changed by using '-index' as follows:"
echo " * '-index 0' - skip indexing. If the index does not exist, the program"
echo " will terminate"
echo " and warn to build the index prior performing the"
echo " alignment"
echo " * '-index 1' - only perform the indexing and terminate"
echo " * '-index 2' - the default behaviour, the same as when not using this"
echo " option at all"
echo ""
echo " -L"
echo " type: double"
echo " example: 18.0"
echo " Indexing seed length. Default: '18'"
echo ""
echo " --interval"
echo " type: integer"
echo " example: 1"
echo " Index every Nth L-mer in the reference database. Default: '1'"
echo ""
echo " --max_pos"
echo " type: integer"
echo " example: 1000"
echo " Maximum number of positions to store for each unique L-mer. Set to 0 to"
echo " store all positions. Default: '1000'"
}
# initialise variables
VIASH_MODE='run'
VIASH_ENGINE_ID='docker'
######## Helper functions for setting up Docker images for viash ########
# expects: ViashDockerBuild
# ViashDockerInstallationCheck: check whether Docker is installed correctly
#
# examples:
# ViashDockerInstallationCheck
function ViashDockerInstallationCheck {
ViashDebug "Checking whether Docker is installed"
if [ ! command -v docker &> /dev/null ]; then
ViashCritical "Docker doesn't seem to be installed. See 'https://docs.docker.com/get-docker/' for instructions."
exit 1
fi
ViashDebug "Checking whether the Docker daemon is running"
local save=$-; set +e
local docker_version=$(docker version --format '{{.Client.APIVersion}}' 2> /dev/null)
local out=$?
[[ $save =~ e ]] && set -e
if [ $out -ne 0 ]; then
ViashCritical "Docker daemon does not seem to be running. Try one of the following:"
ViashCritical "- Try running 'dockerd' in the command line"
ViashCritical "- See https://docs.docker.com/config/daemon/"
exit 1
fi
}
# ViashDockerRemoteTagCheck: check whether a Docker image is available
# on a remote. Assumes `docker login` has been performed, if relevant.
#
# $1 : image identifier with format `[registry/]image[:tag]`
# exit code $? : whether or not the image was found
# examples:
# ViashDockerRemoteTagCheck python:latest
# echo $? # returns '0'
# ViashDockerRemoteTagCheck sdaizudceahifu
# echo $? # returns '1'
function ViashDockerRemoteTagCheck {
docker manifest inspect $1 > /dev/null 2> /dev/null
}
# ViashDockerLocalTagCheck: check whether a Docker image is available locally
#
# $1 : image identifier with format `[registry/]image[:tag]`
# exit code $? : whether or not the image was found
# examples:
# docker pull python:latest
# ViashDockerLocalTagCheck python:latest
# echo $? # returns '0'
# ViashDockerLocalTagCheck sdaizudceahifu
# echo $? # returns '1'
function ViashDockerLocalTagCheck {
[ -n "$(docker images -q $1)" ]
}
# ViashDockerPull: pull a Docker image
#
# $1 : image identifier with format `[registry/]image[:tag]`
# exit code $? : whether or not the image was found
# examples:
# ViashDockerPull python:latest
# echo $? # returns '0'
# ViashDockerPull sdaizudceahifu
# echo $? # returns '1'
function ViashDockerPull {
ViashNotice "Checking if Docker image is available at '$1'"
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
docker pull $1 && return 0 || return 1
else
local save=$-; set +e
docker pull $1 2> /dev/null > /dev/null
local out=$?
[[ $save =~ e ]] && set -e
if [ $out -ne 0 ]; then
ViashWarning "Could not pull from '$1'. Docker image doesn't exist or is not accessible."
fi
return $out
fi
}
# ViashDockerPush: push a Docker image
#
# $1 : image identifier with format `[registry/]image[:tag]`
# exit code $? : whether or not the image was found
# examples:
# ViashDockerPush python:latest
# echo $? # returns '0'
# ViashDockerPush sdaizudceahifu
# echo $? # returns '1'
function ViashDockerPush {
ViashNotice "Pushing image to '$1'"
local save=$-; set +e
local out
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
docker push $1
out=$?
else
docker push $1 2> /dev/null > /dev/null
out=$?
fi
[[ $save =~ e ]] && set -e
if [ $out -eq 0 ]; then
ViashNotice "Container '$1' push succeeded."
else
ViashError "Container '$1' push errored. You might not be logged in or have the necessary permissions."
fi
return $out
}
# ViashDockerPullElseBuild: pull a Docker image, else build it
#
# $1 : image identifier with format `[registry/]image[:tag]`
# ViashDockerBuild : a Bash function which builds a docker image, takes image identifier as argument.
# examples:
# ViashDockerPullElseBuild mynewcomponent
function ViashDockerPullElseBuild {
local save=$-; set +e
ViashDockerPull $1
local out=$?
[[ $save =~ e ]] && set -e
if [ $out -ne 0 ]; then
ViashDockerBuild $@
fi
}
# ViashDockerSetup: create a Docker image, according to specified docker setup strategy
#
# $1 : image identifier with format `[registry/]image[:tag]`
# $2 : docker setup strategy, see DockerSetupStrategy.scala
# examples:
# ViashDockerSetup mynewcomponent alwaysbuild
function ViashDockerSetup {
local image_id="$1"
local setup_strategy="$2"
if [ "$setup_strategy" == "alwaysbuild" -o "$setup_strategy" == "build" -o "$setup_strategy" == "b" ]; then
ViashDockerBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
elif [ "$setup_strategy" == "alwayspull" -o "$setup_strategy" == "pull" -o "$setup_strategy" == "p" ]; then
ViashDockerPull $image_id
elif [ "$setup_strategy" == "alwayspullelsebuild" -o "$setup_strategy" == "pullelsebuild" ]; then
ViashDockerPullElseBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
elif [ "$setup_strategy" == "alwayspullelsecachedbuild" -o "$setup_strategy" == "pullelsecachedbuild" ]; then
ViashDockerPullElseBuild $image_id $(ViashDockerBuildArgs "$engine_id")
elif [ "$setup_strategy" == "alwayscachedbuild" -o "$setup_strategy" == "cachedbuild" -o "$setup_strategy" == "cb" ]; then
ViashDockerBuild $image_id $(ViashDockerBuildArgs "$engine_id")
elif [[ "$setup_strategy" =~ ^ifneedbe ]]; then
local save=$-; set +e
ViashDockerLocalTagCheck $image_id
local outCheck=$?
[[ $save =~ e ]] && set -e
if [ $outCheck -eq 0 ]; then
ViashInfo "Image $image_id already exists"
elif [ "$setup_strategy" == "ifneedbebuild" ]; then
ViashDockerBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
elif [ "$setup_strategy" == "ifneedbecachedbuild" ]; then
ViashDockerBuild $image_id $(ViashDockerBuildArgs "$engine_id")
elif [ "$setup_strategy" == "ifneedbepull" ]; then
ViashDockerPull $image_id
elif [ "$setup_strategy" == "ifneedbepullelsebuild" ]; then
ViashDockerPullElseBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
elif [ "$setup_strategy" == "ifneedbepullelsecachedbuild" ]; then
ViashDockerPullElseBuild $image_id $(ViashDockerBuildArgs "$engine_id")
else
ViashError "Unrecognised Docker strategy: $setup_strategy"
exit 1
fi
elif [ "$setup_strategy" == "push" -o "$setup_strategy" == "forcepush" -o "$setup_strategy" == "alwayspush" ]; then
ViashDockerPush "$image_id"
elif [ "$setup_strategy" == "pushifnotpresent" -o "$setup_strategy" == "gentlepush" -o "$setup_strategy" == "maybepush" ]; then
local save=$-; set +e
ViashDockerRemoteTagCheck $image_id
local outCheck=$?
[[ $save =~ e ]] && set -e
if [ $outCheck -eq 0 ]; then
ViashNotice "Container '$image_id' exists, doing nothing."
else
ViashNotice "Container '$image_id' does not yet exist."
ViashDockerPush "$image_id"
fi
elif [ "$setup_strategy" == "donothing" -o "$setup_strategy" == "meh" ]; then
ViashNotice "Skipping setup."
else
ViashError "Unrecognised Docker strategy: $setup_strategy"
exit 1
fi
}
# ViashDockerCheckCommands: Check whether a docker container has the required commands
#
# $1 : image identifier with format `[registry/]image[:tag]`
# $@ : commands to verify being present
# examples:
# ViashDockerCheckCommands bash:4.0 bash ps foo
function ViashDockerCheckCommands {
local image_id="$1"
shift 1
local commands="$@"
local save=$-; set +e
local missing # mark 'missing' as local in advance, otherwise the exit code of the command will be missing and always be '0'
missing=$(docker run --rm --entrypoint=sh "$image_id" -c "for command in $commands; do command -v \$command >/dev/null 2>&1; if [ \$? -ne 0 ]; then echo \$command; exit 1; fi; done")
local outCheck=$?
[[ $save =~ e ]] && set -e
if [ $outCheck -ne 0 ]; then
ViashError "Docker container '$image_id' does not contain command '$missing'."
exit 1
fi
}
# ViashDockerBuild: build a docker image
# $1 : image identifier with format `[registry/]image[:tag]`
# $... : additional arguments to pass to docker build
# $VIASH_META_TEMP_DIR : temporary directory to store dockerfile & optional resources in
# $VIASH_META_NAME : name of the component
# $VIASH_META_RESOURCES_DIR : directory containing the resources
# $VIASH_VERBOSITY : verbosity level
# exit code $? : whether or not the image was built successfully
function ViashDockerBuild {
local image_id="$1"
shift 1
# create temporary directory to store dockerfile & optional resources in
local tmpdir=$(mktemp -d "$VIASH_META_TEMP_DIR/dockerbuild-$VIASH_META_NAME-XXXXXX")
local dockerfile="$tmpdir/Dockerfile"
function clean_up {
rm -rf "$tmpdir"
}
trap clean_up EXIT
# store dockerfile and resources
ViashDockerfile "$VIASH_ENGINE_ID" > "$dockerfile"
# generate the build command
local docker_build_cmd="docker build -t '$image_id' $@ '$VIASH_META_RESOURCES_DIR' -f '$dockerfile'"
# build the container
ViashNotice "Building container '$image_id' with Dockerfile"
ViashInfo "$docker_build_cmd"
local save=$-; set +e
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
eval $docker_build_cmd
else
eval $docker_build_cmd &> "$tmpdir/docker_build.log"
fi
# check exit code
local out=$?
[[ $save =~ e ]] && set -e
if [ $out -ne 0 ]; then
ViashError "Error occurred while building container '$image_id'"
if [ $VIASH_VERBOSITY -lt $VIASH_LOGCODE_INFO ]; then
ViashError "Transcript: --------------------------------"
cat "$tmpdir/docker_build.log"
ViashError "End of transcript --------------------------"
fi
exit 1
fi
}
######## End of helper functions for setting up Docker images for viash ########
# ViashDockerFile: print the dockerfile to stdout
# $1 : engine identifier
# return : dockerfile required to run this component
# examples:
# ViashDockerFile
function ViashDockerfile {
local engine_id="$1"
if [[ "$engine_id" == "docker" ]]; then
cat << 'VIASHDOCKER'
FROM ubuntu:22.04
ENTRYPOINT []
RUN apt-get update && \
apt-get install -y --no-install-recommends gzip cmake g++ wget && \
apt-get clean && \
wget --no-check-certificate https://github.com/sortmerna/sortmerna/releases/download/v4.3.6/sortmerna-4.3.6-Linux.sh && \
bash sortmerna-4.3.6-Linux.sh --skip-license
LABEL org.opencontainers.image.description="Companion container for running component sortmerna"
LABEL org.opencontainers.image.created="2024-09-09T06:53:31Z"
LABEL org.opencontainers.image.source="https://github.com/sortmerna/sortmerna"
LABEL org.opencontainers.image.revision="320d044fe45e565fbc9772640ebf6f39c5584b4a"
LABEL org.opencontainers.image.version="main"
VIASHDOCKER
fi
}
# ViashDockerBuildArgs: return the arguments to pass to docker build
# $1 : engine identifier
# return : arguments to pass to docker build
function ViashDockerBuildArgs {
local engine_id="$1"
if [[ "$engine_id" == "docker" ]]; then
echo ""
fi
}
# ViashAbsolutePath: generate absolute path from relative path
# borrowed from https://stackoverflow.com/a/21951256
# $1 : relative filename
# return : absolute path
# examples:
# ViashAbsolutePath some_file.txt # returns /path/to/some_file.txt
# ViashAbsolutePath /foo/bar/.. # returns /foo
function ViashAbsolutePath {
local thePath
local parr
local outp
local len
if [[ ! "$1" =~ ^/ ]]; then
thePath="$PWD/$1"
else
thePath="$1"
fi
echo "$thePath" | (
IFS=/
read -a parr
declare -a outp
for i in "${parr[@]}"; do
case "$i" in
''|.) continue ;;
..)
len=${#outp[@]}
if ((len==0)); then
continue
else
unset outp[$((len-1))]
fi
;;
*)
len=${#outp[@]}
outp[$len]="$i"
;;
esac
done
echo /"${outp[*]}"
)
}
# ViashDockerAutodetectMount: auto configuring docker mounts from parameters
# $1 : The parameter value
# returns : New parameter
# $VIASH_DIRECTORY_MOUNTS : Added another parameter to be passed to docker
# $VIASH_DOCKER_AUTOMOUNT_PREFIX : The prefix to be used for the automounts
# examples:
# ViashDockerAutodetectMount /path/to/bar # returns '/viash_automount/path/to/bar'
# ViashDockerAutodetectMountArg /path/to/bar # returns '--volume="/path/to:/viash_automount/path/to"'
function ViashDockerAutodetectMount {
local abs_path=$(ViashAbsolutePath "$1")
local mount_source
local base_name
if [ -d "$abs_path" ]; then
mount_source="$abs_path"
base_name=""
else
mount_source=`dirname "$abs_path"`
base_name=`basename "$abs_path"`
fi
local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source"
if [ -z "$base_name" ]; then
echo "$mount_target"
else
echo "$mount_target/$base_name"
fi
}
function ViashDockerAutodetectMountArg {
local abs_path=$(ViashAbsolutePath "$1")
local mount_source
local base_name
if [ -d "$abs_path" ]; then
mount_source="$abs_path"
base_name=""
else
mount_source=`dirname "$abs_path"`
base_name=`basename "$abs_path"`
fi
local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source"
ViashDebug "ViashDockerAutodetectMountArg $1 -> $mount_source -> $mount_target"
echo "--volume=\"$mount_source:$mount_target\""
}
function ViashDockerStripAutomount {
local abs_path=$(ViashAbsolutePath "$1")
echo "${abs_path#$VIASH_DOCKER_AUTOMOUNT_PREFIX}"
}
# initialise variables
VIASH_DIRECTORY_MOUNTS=()
# configure default docker automount prefix if it is unset
if [ -z "${VIASH_DOCKER_AUTOMOUNT_PREFIX+x}" ]; then
VIASH_DOCKER_AUTOMOUNT_PREFIX="/viash_automount"
fi
# initialise docker variables
VIASH_DOCKER_RUN_ARGS=(-i --rm)
# initialise array
VIASH_POSITIONAL_ARGS=''
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help)
ViashHelp
exit
;;
---v|---verbose)
let "VIASH_VERBOSITY=VIASH_VERBOSITY+1"
shift 1
;;
---verbosity)
VIASH_VERBOSITY="$2"
shift 2
;;
---verbosity=*)
VIASH_VERBOSITY="$(ViashRemoveFlags "$1")"
shift 1
;;
--version)
echo "sortmerna main"
exit
;;
--paired)
[ -n "$VIASH_PAR_PAIRED" ] && ViashError Bad arguments for option \'--paired\': \'$VIASH_PAR_PAIRED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_PAIRED=true
shift 1
;;
--input)
if [ -z "$VIASH_PAR_INPUT" ]; then
VIASH_PAR_INPUT="$2"
else
VIASH_PAR_INPUT="$VIASH_PAR_INPUT;""$2"
fi
[ $# -lt 2 ] && ViashError Not enough arguments passed to --input. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--input=*)
if [ -z "$VIASH_PAR_INPUT" ]; then
VIASH_PAR_INPUT=$(ViashRemoveFlags "$1")
else
VIASH_PAR_INPUT="$VIASH_PAR_INPUT;"$(ViashRemoveFlags "$1")
fi
shift 1
;;
--ref)
if [ -z "$VIASH_PAR_REF" ]; then
VIASH_PAR_REF="$2"
else
VIASH_PAR_REF="$VIASH_PAR_REF;""$2"
fi
[ $# -lt 2 ] && ViashError Not enough arguments passed to --ref. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--ref=*)
if [ -z "$VIASH_PAR_REF" ]; then
VIASH_PAR_REF=$(ViashRemoveFlags "$1")
else
VIASH_PAR_REF="$VIASH_PAR_REF;"$(ViashRemoveFlags "$1")
fi
shift 1
;;
--ribo_database_manifest)
[ -n "$VIASH_PAR_RIBO_DATABASE_MANIFEST" ] && ViashError Bad arguments for option \'--ribo_database_manifest\': \'$VIASH_PAR_RIBO_DATABASE_MANIFEST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_RIBO_DATABASE_MANIFEST="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --ribo_database_manifest. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--ribo_database_manifest=*)
[ -n "$VIASH_PAR_RIBO_DATABASE_MANIFEST" ] && ViashError Bad arguments for option \'--ribo_database_manifest=*\': \'$VIASH_PAR_RIBO_DATABASE_MANIFEST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_RIBO_DATABASE_MANIFEST=$(ViashRemoveFlags "$1")
shift 1
;;
--log)
[ -n "$VIASH_PAR_LOG" ] && ViashError Bad arguments for option \'--log\': \'$VIASH_PAR_LOG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_LOG="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --log. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--log=*)
[ -n "$VIASH_PAR_LOG" ] && ViashError Bad arguments for option \'--log=*\': \'$VIASH_PAR_LOG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_LOG=$(ViashRemoveFlags "$1")
shift 1
;;
--output)
[ -n "$VIASH_PAR_OUTPUT" ] && ViashError Bad arguments for option \'--output\': \'$VIASH_PAR_OUTPUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_OUTPUT="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --output. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--output=*)
[ -n "$VIASH_PAR_OUTPUT" ] && ViashError Bad arguments for option \'--output=*\': \'$VIASH_PAR_OUTPUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_OUTPUT=$(ViashRemoveFlags "$1")
shift 1
;;
--aligned)
[ -n "$VIASH_PAR_OUTPUT" ] && ViashError Bad arguments for option \'--aligned\': \'$VIASH_PAR_OUTPUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_OUTPUT="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --aligned. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--other)
[ -n "$VIASH_PAR_OTHER" ] && ViashError Bad arguments for option \'--other\': \'$VIASH_PAR_OTHER\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_OTHER="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --other. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--other=*)
[ -n "$VIASH_PAR_OTHER" ] && ViashError Bad arguments for option \'--other=*\': \'$VIASH_PAR_OTHER\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_OTHER=$(ViashRemoveFlags "$1")
shift 1
;;
--kvdb)
[ -n "$VIASH_PAR_KVDB" ] && ViashError Bad arguments for option \'--kvdb\': \'$VIASH_PAR_KVDB\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_KVDB="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --kvdb. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--kvdb=*)
[ -n "$VIASH_PAR_KVDB" ] && ViashError Bad arguments for option \'--kvdb=*\': \'$VIASH_PAR_KVDB\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_KVDB=$(ViashRemoveFlags "$1")
shift 1
;;
--idx_dir)
[ -n "$VIASH_PAR_IDX_DIR" ] && ViashError Bad arguments for option \'--idx_dir\': \'$VIASH_PAR_IDX_DIR\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_IDX_DIR="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --idx_dir. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--idx_dir=*)
[ -n "$VIASH_PAR_IDX_DIR" ] && ViashError Bad arguments for option \'--idx_dir=*\': \'$VIASH_PAR_IDX_DIR\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_IDX_DIR=$(ViashRemoveFlags "$1")
shift 1
;;
--readb)
[ -n "$VIASH_PAR_READB" ] && ViashError Bad arguments for option \'--readb\': \'$VIASH_PAR_READB\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_READB="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --readb. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--readb=*)
[ -n "$VIASH_PAR_READB" ] && ViashError Bad arguments for option \'--readb=*\': \'$VIASH_PAR_READB\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_READB=$(ViashRemoveFlags "$1")
shift 1
;;
--fastx)
[ -n "$VIASH_PAR_FASTX" ] && ViashError Bad arguments for option \'--fastx\': \'$VIASH_PAR_FASTX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_FASTX=true
shift 1
;;
--sam)
[ -n "$VIASH_PAR_SAM" ] && ViashError Bad arguments for option \'--sam\': \'$VIASH_PAR_SAM\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_SAM=true
shift 1
;;
--sq)
[ -n "$VIASH_PAR_SQ" ] && ViashError Bad arguments for option \'--sq\': \'$VIASH_PAR_SQ\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_SQ=true
shift 1
;;
--blast)
[ -n "$VIASH_PAR_BLAST" ] && ViashError Bad arguments for option \'--blast\': \'$VIASH_PAR_BLAST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_BLAST="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --blast. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--blast=*)
[ -n "$VIASH_PAR_BLAST" ] && ViashError Bad arguments for option \'--blast=*\': \'$VIASH_PAR_BLAST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_BLAST=$(ViashRemoveFlags "$1")
shift 1
;;
--num_alignments)
[ -n "$VIASH_PAR_NUM_ALIGNMENTS" ] && ViashError Bad arguments for option \'--num_alignments\': \'$VIASH_PAR_NUM_ALIGNMENTS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_NUM_ALIGNMENTS="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --num_alignments. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--num_alignments=*)
[ -n "$VIASH_PAR_NUM_ALIGNMENTS" ] && ViashError Bad arguments for option \'--num_alignments=*\': \'$VIASH_PAR_NUM_ALIGNMENTS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_NUM_ALIGNMENTS=$(ViashRemoveFlags "$1")
shift 1
;;
--min_lis)
[ -n "$VIASH_PAR_MIN_LIS" ] && ViashError Bad arguments for option \'--min_lis\': \'$VIASH_PAR_MIN_LIS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_MIN_LIS="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --min_lis. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--min_lis=*)
[ -n "$VIASH_PAR_MIN_LIS" ] && ViashError Bad arguments for option \'--min_lis=*\': \'$VIASH_PAR_MIN_LIS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_MIN_LIS=$(ViashRemoveFlags "$1")
shift 1
;;
--print_all_reads)
[ -n "$VIASH_PAR_PRINT_ALL_READS" ] && ViashError Bad arguments for option \'--print_all_reads\': \'$VIASH_PAR_PRINT_ALL_READS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_PRINT_ALL_READS=true
shift 1
;;
--paired_in)
[ -n "$VIASH_PAR_PAIRED_IN" ] && ViashError Bad arguments for option \'--paired_in\': \'$VIASH_PAR_PAIRED_IN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_PAIRED_IN=true
shift 1
;;
--paired_out)
[ -n "$VIASH_PAR_PAIRED_OUT" ] && ViashError Bad arguments for option \'--paired_out\': \'$VIASH_PAR_PAIRED_OUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_PAIRED_OUT=true
shift 1
;;
--out2)
[ -n "$VIASH_PAR_OUT2" ] && ViashError Bad arguments for option \'--out2\': \'$VIASH_PAR_OUT2\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_OUT2=true
shift 1
;;
--sout)
[ -n "$VIASH_PAR_SOUT" ] && ViashError Bad arguments for option \'--sout\': \'$VIASH_PAR_SOUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_SOUT=true
shift 1
;;
--zip_out)
[ -n "$VIASH_PAR_ZIP_OUT" ] && ViashError Bad arguments for option \'--zip_out\': \'$VIASH_PAR_ZIP_OUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_ZIP_OUT="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --zip_out. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--zip_out=*)
[ -n "$VIASH_PAR_ZIP_OUT" ] && ViashError Bad arguments for option \'--zip_out=*\': \'$VIASH_PAR_ZIP_OUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_ZIP_OUT=$(ViashRemoveFlags "$1")
shift 1
;;
--match)
[ -n "$VIASH_PAR_MATCH" ] && ViashError Bad arguments for option \'--match\': \'$VIASH_PAR_MATCH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_MATCH="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --match. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--match=*)
[ -n "$VIASH_PAR_MATCH" ] && ViashError Bad arguments for option \'--match=*\': \'$VIASH_PAR_MATCH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_MATCH=$(ViashRemoveFlags "$1")
shift 1
;;
--mismatch)
[ -n "$VIASH_PAR_MISMATCH" ] && ViashError Bad arguments for option \'--mismatch\': \'$VIASH_PAR_MISMATCH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_MISMATCH="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --mismatch. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--mismatch=*)
[ -n "$VIASH_PAR_MISMATCH" ] && ViashError Bad arguments for option \'--mismatch=*\': \'$VIASH_PAR_MISMATCH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_MISMATCH=$(ViashRemoveFlags "$1")
shift 1
;;
--gap_open)
[ -n "$VIASH_PAR_GAP_OPEN" ] && ViashError Bad arguments for option \'--gap_open\': \'$VIASH_PAR_GAP_OPEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_GAP_OPEN="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --gap_open. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--gap_open=*)
[ -n "$VIASH_PAR_GAP_OPEN" ] && ViashError Bad arguments for option \'--gap_open=*\': \'$VIASH_PAR_GAP_OPEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_GAP_OPEN=$(ViashRemoveFlags "$1")
shift 1
;;
--gap_ext)
[ -n "$VIASH_PAR_GAP_EXT" ] && ViashError Bad arguments for option \'--gap_ext\': \'$VIASH_PAR_GAP_EXT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_GAP_EXT="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --gap_ext. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--gap_ext=*)
[ -n "$VIASH_PAR_GAP_EXT" ] && ViashError Bad arguments for option \'--gap_ext=*\': \'$VIASH_PAR_GAP_EXT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_GAP_EXT=$(ViashRemoveFlags "$1")
shift 1
;;
--N)
[ -n "$VIASH_PAR_N" ] && ViashError Bad arguments for option \'--N\': \'$VIASH_PAR_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_N="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --N. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--N=*)
[ -n "$VIASH_PAR_N" ] && ViashError Bad arguments for option \'--N=*\': \'$VIASH_PAR_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_N=$(ViashRemoveFlags "$1")
shift 1
;;
--a)
[ -n "$VIASH_PAR_A" ] && ViashError Bad arguments for option \'--a\': \'$VIASH_PAR_A\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_A="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --a. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--a=*)
[ -n "$VIASH_PAR_A" ] && ViashError Bad arguments for option \'--a=*\': \'$VIASH_PAR_A\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_A=$(ViashRemoveFlags "$1")
shift 1
;;
--e)
[ -n "$VIASH_PAR_E" ] && ViashError Bad arguments for option \'--e\': \'$VIASH_PAR_E\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_E="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --e. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--e=*)
[ -n "$VIASH_PAR_E" ] && ViashError Bad arguments for option \'--e=*\': \'$VIASH_PAR_E\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_E=$(ViashRemoveFlags "$1")
shift 1
;;
--F)
[ -n "$VIASH_PAR_F" ] && ViashError Bad arguments for option \'--F\': \'$VIASH_PAR_F\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_F=true
shift 1
;;
--R)
[ -n "$VIASH_PAR_R" ] && ViashError Bad arguments for option \'--R\': \'$VIASH_PAR_R\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_R=true
shift 1
;;
--num_alignment)
[ -n "$VIASH_PAR_NUM_ALIGNMENT" ] && ViashError Bad arguments for option \'--num_alignment\': \'$VIASH_PAR_NUM_ALIGNMENT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_NUM_ALIGNMENT="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --num_alignment. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--num_alignment=*)
[ -n "$VIASH_PAR_NUM_ALIGNMENT" ] && ViashError Bad arguments for option \'--num_alignment=*\': \'$VIASH_PAR_NUM_ALIGNMENT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_NUM_ALIGNMENT=$(ViashRemoveFlags "$1")
shift 1
;;
--best)
[ -n "$VIASH_PAR_BEST" ] && ViashError Bad arguments for option \'--best\': \'$VIASH_PAR_BEST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_BEST="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --best. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--best=*)
[ -n "$VIASH_PAR_BEST" ] && ViashError Bad arguments for option \'--best=*\': \'$VIASH_PAR_BEST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_BEST=$(ViashRemoveFlags "$1")
shift 1
;;
--verbose)
[ -n "$VIASH_PAR_VERBOSE" ] && ViashError Bad arguments for option \'--verbose\': \'$VIASH_PAR_VERBOSE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_VERBOSE=true
shift 1
;;
-v)
[ -n "$VIASH_PAR_VERBOSE" ] && ViashError Bad arguments for option \'-v\': \'$VIASH_PAR_VERBOSE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_VERBOSE=true
shift 1
;;
--id)
[ -n "$VIASH_PAR_ID" ] && ViashError Bad arguments for option \'--id\': \'$VIASH_PAR_ID\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_ID="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --id. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--id=*)
[ -n "$VIASH_PAR_ID" ] && ViashError Bad arguments for option \'--id=*\': \'$VIASH_PAR_ID\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_ID=$(ViashRemoveFlags "$1")
shift 1
;;
--coverage)
[ -n "$VIASH_PAR_COVERAGE" ] && ViashError Bad arguments for option \'--coverage\': \'$VIASH_PAR_COVERAGE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_COVERAGE="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --coverage. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--coverage=*)
[ -n "$VIASH_PAR_COVERAGE" ] && ViashError Bad arguments for option \'--coverage=*\': \'$VIASH_PAR_COVERAGE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_COVERAGE=$(ViashRemoveFlags "$1")
shift 1
;;
--de_novo)
[ -n "$VIASH_PAR_DE_NOVO" ] && ViashError Bad arguments for option \'--de_novo\': \'$VIASH_PAR_DE_NOVO\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_DE_NOVO=true
shift 1
;;
--otu_map)
[ -n "$VIASH_PAR_OTU_MAP" ] && ViashError Bad arguments for option \'--otu_map\': \'$VIASH_PAR_OTU_MAP\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_OTU_MAP=true
shift 1
;;
--num_seed)
[ -n "$VIASH_PAR_NUM_SEED" ] && ViashError Bad arguments for option \'--num_seed\': \'$VIASH_PAR_NUM_SEED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_NUM_SEED="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --num_seed. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--num_seed=*)
[ -n "$VIASH_PAR_NUM_SEED" ] && ViashError Bad arguments for option \'--num_seed=*\': \'$VIASH_PAR_NUM_SEED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_NUM_SEED=$(ViashRemoveFlags "$1")
shift 1
;;
--passes)
if [ -z "$VIASH_PAR_PASSES" ]; then
VIASH_PAR_PASSES="$2"
else
VIASH_PAR_PASSES="$VIASH_PAR_PASSES;""$2"
fi
[ $# -lt 2 ] && ViashError Not enough arguments passed to --passes. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--passes=*)
if [ -z "$VIASH_PAR_PASSES" ]; then
VIASH_PAR_PASSES=$(ViashRemoveFlags "$1")
else
VIASH_PAR_PASSES="$VIASH_PAR_PASSES;"$(ViashRemoveFlags "$1")
fi
shift 1
;;
--edge)
[ -n "$VIASH_PAR_EDGE" ] && ViashError Bad arguments for option \'--edge\': \'$VIASH_PAR_EDGE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_EDGE="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --edge. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--edge=*)
[ -n "$VIASH_PAR_EDGE" ] && ViashError Bad arguments for option \'--edge=*\': \'$VIASH_PAR_EDGE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_EDGE=$(ViashRemoveFlags "$1")
shift 1
;;
--full_search)
[ -n "$VIASH_PAR_FULL_SEARCH" ] && ViashError Bad arguments for option \'--full_search\': \'$VIASH_PAR_FULL_SEARCH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_FULL_SEARCH=true
shift 1
;;
--index)
[ -n "$VIASH_PAR_INDEX" ] && ViashError Bad arguments for option \'--index\': \'$VIASH_PAR_INDEX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_INDEX="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --index. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--index=*)
[ -n "$VIASH_PAR_INDEX" ] && ViashError Bad arguments for option \'--index=*\': \'$VIASH_PAR_INDEX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_INDEX=$(ViashRemoveFlags "$1")
shift 1
;;
-L)
[ -n "$VIASH_PAR_L" ] && ViashError Bad arguments for option \'-L\': \'$VIASH_PAR_L\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_L="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to -L. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--interval)
[ -n "$VIASH_PAR_INTERVAL" ] && ViashError Bad arguments for option \'--interval\': \'$VIASH_PAR_INTERVAL\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_INTERVAL="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --interval. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--interval=*)
[ -n "$VIASH_PAR_INTERVAL" ] && ViashError Bad arguments for option \'--interval=*\': \'$VIASH_PAR_INTERVAL\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_INTERVAL=$(ViashRemoveFlags "$1")
shift 1
;;
--max_pos)
[ -n "$VIASH_PAR_MAX_POS" ] && ViashError Bad arguments for option \'--max_pos\': \'$VIASH_PAR_MAX_POS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_MAX_POS="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to --max_pos. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
--max_pos=*)
[ -n "$VIASH_PAR_MAX_POS" ] && ViashError Bad arguments for option \'--max_pos=*\': \'$VIASH_PAR_MAX_POS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_MAX_POS=$(ViashRemoveFlags "$1")
shift 1
;;
---engine)
VIASH_ENGINE_ID="$2"
shift 2
;;
---engine=*)
VIASH_ENGINE_ID="$(ViashRemoveFlags "$1")"
shift 1
;;
---setup)
VIASH_MODE='setup'
VIASH_SETUP_STRATEGY="$2"
shift 2
;;
---setup=*)
VIASH_MODE='setup'
VIASH_SETUP_STRATEGY="$(ViashRemoveFlags "$1")"
shift 1
;;
---dockerfile)
VIASH_MODE='dockerfile'
shift 1
;;
---docker_run_args)
VIASH_DOCKER_RUN_ARGS+=("$2")
shift 2
;;
---docker_run_args=*)
VIASH_DOCKER_RUN_ARGS+=("$(ViashRemoveFlags "$1")")
shift 1
;;
---docker_image_id)
VIASH_MODE='docker_image_id'
shift 1
;;
---debug)
VIASH_MODE='debug'
shift 1
;;
---cpus)
[ -n "$VIASH_META_CPUS" ] && ViashError Bad arguments for option \'---cpus\': \'$VIASH_META_CPUS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_META_CPUS="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to ---cpus. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
---cpus=*)
[ -n "$VIASH_META_CPUS" ] && ViashError Bad arguments for option \'---cpus=*\': \'$VIASH_META_CPUS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_META_CPUS=$(ViashRemoveFlags "$1")
shift 1
;;
---memory)
[ -n "$VIASH_META_MEMORY" ] && ViashError Bad arguments for option \'---memory\': \'$VIASH_META_MEMORY\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_META_MEMORY="$2"
[ $# -lt 2 ] && ViashError Not enough arguments passed to ---memory. Use "--help" to get more information on the parameters. && exit 1
shift 2
;;
---memory=*)
[ -n "$VIASH_META_MEMORY" ] && ViashError Bad arguments for option \'---memory=*\': \'$VIASH_META_MEMORY\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_META_MEMORY=$(ViashRemoveFlags "$1")
shift 1
;;
*) # positional arg or unknown option
# since the positional args will be eval'd, can we always quote, instead of using ViashQuote
VIASH_POSITIONAL_ARGS="$VIASH_POSITIONAL_ARGS '$1'"
[[ $1 == -* ]] && ViashWarning $1 looks like a parameter but is not a defined parameter and will instead be treated as a positional argument. Use "--help" to get more information on the parameters.
shift # past argument
;;
esac
done
# parse positional parameters
eval set -- $VIASH_POSITIONAL_ARGS
if [ "$VIASH_ENGINE_ID" == "native" ] ; then
VIASH_ENGINE_TYPE='native'
elif [ "$VIASH_ENGINE_ID" == "docker" ] ; then
VIASH_ENGINE_TYPE='docker'
else
ViashError "Engine '$VIASH_ENGINE_ID' is not recognized. Options are: docker, native."
exit 1
fi
if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# check if docker is installed properly
ViashDockerInstallationCheck
# determine docker image id
if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then
VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/biobox/sortmerna:main'
fi
# print dockerfile
if [ "$VIASH_MODE" == "dockerfile" ]; then
ViashDockerfile "$VIASH_ENGINE_ID"
exit 0
elif [ "$VIASH_MODE" == "docker_image_id" ]; then
echo "$VIASH_DOCKER_IMAGE_ID"
exit 0
# enter docker container
elif [[ "$VIASH_MODE" == "debug" ]]; then
VIASH_CMD="docker run --entrypoint=bash ${VIASH_DOCKER_RUN_ARGS[@]} -v '$(pwd)':/pwd --workdir /pwd -t $VIASH_DOCKER_IMAGE_ID"
ViashNotice "+ $VIASH_CMD"
eval $VIASH_CMD
exit
# build docker image
elif [ "$VIASH_MODE" == "setup" ]; then
ViashDockerSetup "$VIASH_DOCKER_IMAGE_ID" "$VIASH_SETUP_STRATEGY"
ViashDockerCheckCommands "$VIASH_DOCKER_IMAGE_ID" 'ps' 'bash'
exit 0
fi
# check if docker image exists
ViashDockerSetup "$VIASH_DOCKER_IMAGE_ID" ifneedbepullelsecachedbuild
ViashDockerCheckCommands "$VIASH_DOCKER_IMAGE_ID" 'ps' 'bash'
fi
# setting computational defaults
# helper function for parsing memory strings
function ViashMemoryAsBytes {
local memory=`echo "$1" | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]'`
local memory_regex='^([0-9]+)([kmgtp]i?b?|b)$'
if [[ $memory =~ $memory_regex ]]; then
local number=${memory/[^0-9]*/}
local symbol=${memory/*[0-9]/}
case $symbol in
b) memory_b=$number ;;
kb|k) memory_b=$(( $number * 1000 )) ;;
mb|m) memory_b=$(( $number * 1000 * 1000 )) ;;
gb|g) memory_b=$(( $number * 1000 * 1000 * 1000 )) ;;
tb|t) memory_b=$(( $number * 1000 * 1000 * 1000 * 1000 )) ;;
pb|p) memory_b=$(( $number * 1000 * 1000 * 1000 * 1000 * 1000 )) ;;
kib|ki) memory_b=$(( $number * 1024 )) ;;
mib|mi) memory_b=$(( $number * 1024 * 1024 )) ;;
gib|gi) memory_b=$(( $number * 1024 * 1024 * 1024 )) ;;
tib|ti) memory_b=$(( $number * 1024 * 1024 * 1024 * 1024 )) ;;
pib|pi) memory_b=$(( $number * 1024 * 1024 * 1024 * 1024 * 1024 )) ;;
esac
echo "$memory_b"
fi
}
# compute memory in different units
if [ ! -z ${VIASH_META_MEMORY+x} ]; then
VIASH_META_MEMORY_B=`ViashMemoryAsBytes $VIASH_META_MEMORY`
# do not define other variables if memory_b is an empty string
if [ ! -z "$VIASH_META_MEMORY_B" ]; then
VIASH_META_MEMORY_KB=$(( ($VIASH_META_MEMORY_B+999) / 1000 ))
VIASH_META_MEMORY_MB=$(( ($VIASH_META_MEMORY_KB+999) / 1000 ))
VIASH_META_MEMORY_GB=$(( ($VIASH_META_MEMORY_MB+999) / 1000 ))
VIASH_META_MEMORY_TB=$(( ($VIASH_META_MEMORY_GB+999) / 1000 ))
VIASH_META_MEMORY_PB=$(( ($VIASH_META_MEMORY_TB+999) / 1000 ))
VIASH_META_MEMORY_KIB=$(( ($VIASH_META_MEMORY_B+1023) / 1024 ))
VIASH_META_MEMORY_MIB=$(( ($VIASH_META_MEMORY_KIB+1023) / 1024 ))
VIASH_META_MEMORY_GIB=$(( ($VIASH_META_MEMORY_MIB+1023) / 1024 ))
VIASH_META_MEMORY_TIB=$(( ($VIASH_META_MEMORY_GIB+1023) / 1024 ))
VIASH_META_MEMORY_PIB=$(( ($VIASH_META_MEMORY_TIB+1023) / 1024 ))
else
# unset memory if string is empty
unset $VIASH_META_MEMORY_B
fi
fi
# unset nproc if string is empty
if [ -z "$VIASH_META_CPUS" ]; then
unset $VIASH_META_CPUS
fi
# check whether required parameters exist
if [ -z ${VIASH_META_NAME+x} ]; then
ViashError 'name' is a required argument. Use "--help" to get more information on the parameters.
exit 1
fi
if [ -z ${VIASH_META_FUNCTIONALITY_NAME+x} ]; then
ViashError 'functionality_name' is a required argument. Use "--help" to get more information on the parameters.
exit 1
fi
if [ -z ${VIASH_META_RESOURCES_DIR+x} ]; then
ViashError 'resources_dir' is a required argument. Use "--help" to get more information on the parameters.
exit 1
fi
if [ -z ${VIASH_META_EXECUTABLE+x} ]; then
ViashError 'executable' is a required argument. Use "--help" to get more information on the parameters.
exit 1
fi
if [ -z ${VIASH_META_CONFIG+x} ]; then
ViashError 'config' is a required argument. Use "--help" to get more information on the parameters.
exit 1
fi
if [ -z ${VIASH_META_TEMP_DIR+x} ]; then
ViashError 'temp_dir' is a required argument. Use "--help" to get more information on the parameters.
exit 1
fi
# filling in defaults
if [ -z ${VIASH_PAR_PAIRED+x} ]; then
VIASH_PAR_PAIRED="false"
fi
if [ -z ${VIASH_PAR_FASTX+x} ]; then
VIASH_PAR_FASTX="false"
fi
if [ -z ${VIASH_PAR_SAM+x} ]; then
VIASH_PAR_SAM="false"
fi
if [ -z ${VIASH_PAR_SQ+x} ]; then
VIASH_PAR_SQ="false"
fi
if [ -z ${VIASH_PAR_PRINT_ALL_READS+x} ]; then
VIASH_PAR_PRINT_ALL_READS="false"
fi
if [ -z ${VIASH_PAR_PAIRED_IN+x} ]; then
VIASH_PAR_PAIRED_IN="false"
fi
if [ -z ${VIASH_PAR_PAIRED_OUT+x} ]; then
VIASH_PAR_PAIRED_OUT="false"
fi
if [ -z ${VIASH_PAR_OUT2+x} ]; then
VIASH_PAR_OUT2="false"
fi
if [ -z ${VIASH_PAR_SOUT+x} ]; then
VIASH_PAR_SOUT="false"
fi
if [ -z ${VIASH_PAR_F+x} ]; then
VIASH_PAR_F="false"
fi
if [ -z ${VIASH_PAR_R+x} ]; then
VIASH_PAR_R="false"
fi
if [ -z ${VIASH_PAR_VERBOSE+x} ]; then
VIASH_PAR_VERBOSE="false"
fi
if [ -z ${VIASH_PAR_DE_NOVO+x} ]; then
VIASH_PAR_DE_NOVO="false"
fi
if [ -z ${VIASH_PAR_OTU_MAP+x} ]; then
VIASH_PAR_OTU_MAP="false"
fi
if [ -z ${VIASH_PAR_FULL_SEARCH+x} ]; then
VIASH_PAR_FULL_SEARCH="false"
fi
# check whether required files exist
if [ ! -z "$VIASH_PAR_INPUT" ]; then
IFS=';'
set -f
for file in $VIASH_PAR_INPUT; do
unset IFS
if [ ! -e "$file" ]; then
ViashError "Input file '$file' does not exist."
exit 1
fi
done
set +f
fi
if [ ! -z "$VIASH_PAR_REF" ]; then
IFS=';'
set -f
for file in $VIASH_PAR_REF; do
unset IFS
if [ ! -e "$file" ]; then
ViashError "Input file '$file' does not exist."
exit 1
fi
done
set +f
fi
if [ ! -z "$VIASH_PAR_RIBO_DATABASE_MANIFEST" ] && [ ! -e "$VIASH_PAR_RIBO_DATABASE_MANIFEST" ]; then
ViashError "Input file '$VIASH_PAR_RIBO_DATABASE_MANIFEST' does not exist."
exit 1
fi
# check whether parameters values are of the right type
if [[ -n "$VIASH_PAR_PAIRED" ]]; then
if ! [[ "$VIASH_PAR_PAIRED" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--paired' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_FASTX" ]]; then
if ! [[ "$VIASH_PAR_FASTX" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--fastx' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_SAM" ]]; then
if ! [[ "$VIASH_PAR_SAM" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--sam' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_SQ" ]]; then
if ! [[ "$VIASH_PAR_SQ" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--sq' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_NUM_ALIGNMENTS" ]]; then
if ! [[ "$VIASH_PAR_NUM_ALIGNMENTS" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--num_alignments' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_MIN_LIS" ]]; then
if ! [[ "$VIASH_PAR_MIN_LIS" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--min_lis' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_PRINT_ALL_READS" ]]; then
if ! [[ "$VIASH_PAR_PRINT_ALL_READS" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--print_all_reads' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_PAIRED_IN" ]]; then
if ! [[ "$VIASH_PAR_PAIRED_IN" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--paired_in' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_PAIRED_OUT" ]]; then
if ! [[ "$VIASH_PAR_PAIRED_OUT" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--paired_out' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_OUT2" ]]; then
if ! [[ "$VIASH_PAR_OUT2" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--out2' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_SOUT" ]]; then
if ! [[ "$VIASH_PAR_SOUT" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--sout' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_MATCH" ]]; then
if ! [[ "$VIASH_PAR_MATCH" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--match' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_MISMATCH" ]]; then
if ! [[ "$VIASH_PAR_MISMATCH" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--mismatch' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_GAP_OPEN" ]]; then
if ! [[ "$VIASH_PAR_GAP_OPEN" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--gap_open' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_GAP_EXT" ]]; then
if ! [[ "$VIASH_PAR_GAP_EXT" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--gap_ext' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_N" ]]; then
if ! [[ "$VIASH_PAR_N" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--N' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_A" ]]; then
if ! [[ "$VIASH_PAR_A" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--a' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_E" ]]; then
if ! [[ "$VIASH_PAR_E" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
ViashError '--e' has to be a double. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_F" ]]; then
if ! [[ "$VIASH_PAR_F" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--F' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_R" ]]; then
if ! [[ "$VIASH_PAR_R" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--R' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_NUM_ALIGNMENT" ]]; then
if ! [[ "$VIASH_PAR_NUM_ALIGNMENT" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--num_alignment' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_BEST" ]]; then
if ! [[ "$VIASH_PAR_BEST" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--best' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_VERBOSE" ]]; then
if ! [[ "$VIASH_PAR_VERBOSE" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--verbose' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_ID" ]]; then
if ! [[ "$VIASH_PAR_ID" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
ViashError '--id' has to be a double. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_COVERAGE" ]]; then
if ! [[ "$VIASH_PAR_COVERAGE" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
ViashError '--coverage' has to be a double. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_DE_NOVO" ]]; then
if ! [[ "$VIASH_PAR_DE_NOVO" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--de_novo' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_OTU_MAP" ]]; then
if ! [[ "$VIASH_PAR_OTU_MAP" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--otu_map' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_NUM_SEED" ]]; then
if ! [[ "$VIASH_PAR_NUM_SEED" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--num_seed' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [ -n "$VIASH_PAR_PASSES" ]; then
IFS=';'
set -f
for val in $VIASH_PAR_PASSES; do
if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--passes' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
done
set +f
unset IFS
fi
if [[ -n "$VIASH_PAR_FULL_SEARCH" ]]; then
if ! [[ "$VIASH_PAR_FULL_SEARCH" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then
ViashError '--full_search' has to be a boolean_true. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_INDEX" ]]; then
if ! [[ "$VIASH_PAR_INDEX" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--index' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_L" ]]; then
if ! [[ "$VIASH_PAR_L" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
ViashError '-L' has to be a double. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_INTERVAL" ]]; then
if ! [[ "$VIASH_PAR_INTERVAL" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--interval' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_PAR_MAX_POS" ]]; then
if ! [[ "$VIASH_PAR_MAX_POS" =~ ^[-+]?[0-9]+$ ]]; then
ViashError '--max_pos' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_CPUS" ]]; then
if ! [[ "$VIASH_META_CPUS" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'cpus' has to be an integer. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_B" ]]; then
if ! [[ "$VIASH_META_MEMORY_B" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_b' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_KB" ]]; then
if ! [[ "$VIASH_META_MEMORY_KB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_kb' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_MB" ]]; then
if ! [[ "$VIASH_META_MEMORY_MB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_mb' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_GB" ]]; then
if ! [[ "$VIASH_META_MEMORY_GB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_gb' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_TB" ]]; then
if ! [[ "$VIASH_META_MEMORY_TB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_tb' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_PB" ]]; then
if ! [[ "$VIASH_META_MEMORY_PB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_pb' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_KIB" ]]; then
if ! [[ "$VIASH_META_MEMORY_KIB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_kib' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_MIB" ]]; then
if ! [[ "$VIASH_META_MEMORY_MIB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_mib' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_GIB" ]]; then
if ! [[ "$VIASH_META_MEMORY_GIB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_gib' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_TIB" ]]; then
if ! [[ "$VIASH_META_MEMORY_TIB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_tib' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
if [[ -n "$VIASH_META_MEMORY_PIB" ]]; then
if ! [[ "$VIASH_META_MEMORY_PIB" =~ ^[-+]?[0-9]+$ ]]; then
ViashError 'memory_pib' has to be a long. Use "--help" to get more information on the parameters.
exit 1
fi
fi
# check whether value is belongs to a set of choices
if [ ! -z "$VIASH_PAR_BLAST" ]; then
VIASH_PAR_BLAST_CHOICES=("0;1;1 cigar;1 cigar qcov;1 cigar qcov qstrand")
IFS=';'
set -f
if ! [[ ";${VIASH_PAR_BLAST_CHOICES[*]};" =~ ";$VIASH_PAR_BLAST;" ]]; then
ViashError '--blast' specified value of \'$VIASH_PAR_BLAST\' is not in the list of allowed values. Use "--help" to get more information on the parameters.
exit 1
fi
set +f
unset IFS
fi
if [ ! -z "$VIASH_PAR_ZIP_OUT" ]; then
VIASH_PAR_ZIP_OUT_CHOICES=("1;true;t;yes;y;0;false;f;no;n;-1")
IFS=';'
set -f
if ! [[ ";${VIASH_PAR_ZIP_OUT_CHOICES[*]};" =~ ";$VIASH_PAR_ZIP_OUT;" ]]; then
ViashError '--zip_out' specified value of \'$VIASH_PAR_ZIP_OUT\' is not in the list of allowed values. Use "--help" to get more information on the parameters.
exit 1
fi
set +f
unset IFS
fi
if [ ! -z "$VIASH_PAR_INDEX" ]; then
VIASH_PAR_INDEX_CHOICES=("0;1;2")
IFS=';'
set -f
if ! [[ ";${VIASH_PAR_INDEX_CHOICES[*]};" =~ ";$VIASH_PAR_INDEX;" ]]; then
ViashError '--index' specified value of \'$VIASH_PAR_INDEX\' is not in the list of allowed values. Use "--help" to get more information on the parameters.
exit 1
fi
set +f
unset IFS
fi
# create parent directories of output files, if so desired
if [ ! -z "$VIASH_PAR_LOG" ] && [ ! -d "$(dirname "$VIASH_PAR_LOG")" ]; then
mkdir -p "$(dirname "$VIASH_PAR_LOG")"
fi
if [ "$VIASH_ENGINE_ID" == "native" ] ; then
if [ "$VIASH_MODE" == "run" ]; then
VIASH_CMD="bash"
else
ViashError "Engine '$VIASH_ENGINE_ID' does not support mode '$VIASH_MODE'."
exit 1
fi
fi
if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# detect volumes from file arguments
VIASH_CHOWN_VARS=()
if [ ! -z "$VIASH_PAR_INPUT" ]; then
VIASH_TEST_INPUT=()
IFS=';'
for var in $VIASH_PAR_INPUT; do
unset IFS
VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$var")" )
var=$(ViashDockerAutodetectMount "$var")
VIASH_TEST_INPUT+=( "$var" )
done
VIASH_PAR_INPUT=$(IFS=';' ; echo "${VIASH_TEST_INPUT[*]}")
fi
if [ ! -z "$VIASH_PAR_REF" ]; then
VIASH_TEST_REF=()
IFS=';'
for var in $VIASH_PAR_REF; do
unset IFS
VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$var")" )
var=$(ViashDockerAutodetectMount "$var")
VIASH_TEST_REF+=( "$var" )
done
VIASH_PAR_REF=$(IFS=';' ; echo "${VIASH_TEST_REF[*]}")
fi
if [ ! -z "$VIASH_PAR_RIBO_DATABASE_MANIFEST" ]; then
VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_RIBO_DATABASE_MANIFEST")" )
VIASH_PAR_RIBO_DATABASE_MANIFEST=$(ViashDockerAutodetectMount "$VIASH_PAR_RIBO_DATABASE_MANIFEST")
fi
if [ ! -z "$VIASH_PAR_LOG" ]; then
VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_LOG")" )
VIASH_PAR_LOG=$(ViashDockerAutodetectMount "$VIASH_PAR_LOG")
VIASH_CHOWN_VARS+=( "$VIASH_PAR_LOG" )
fi
if [ ! -z "$VIASH_META_RESOURCES_DIR" ]; then
VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_META_RESOURCES_DIR")" )
VIASH_META_RESOURCES_DIR=$(ViashDockerAutodetectMount "$VIASH_META_RESOURCES_DIR")
fi
if [ ! -z "$VIASH_META_EXECUTABLE" ]; then
VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_META_EXECUTABLE")" )
VIASH_META_EXECUTABLE=$(ViashDockerAutodetectMount "$VIASH_META_EXECUTABLE")
fi
if [ ! -z "$VIASH_META_CONFIG" ]; then
VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_META_CONFIG")" )
VIASH_META_CONFIG=$(ViashDockerAutodetectMount "$VIASH_META_CONFIG")
fi
if [ ! -z "$VIASH_META_TEMP_DIR" ]; then
VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_META_TEMP_DIR")" )
VIASH_META_TEMP_DIR=$(ViashDockerAutodetectMount "$VIASH_META_TEMP_DIR")
fi
# get unique mounts
VIASH_UNIQUE_MOUNTS=($(for val in "${VIASH_DIRECTORY_MOUNTS[@]}"; do echo "$val"; done | sort -u))
fi
if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# change file ownership
function ViashPerformChown {
if (( ${#VIASH_CHOWN_VARS[@]} )); then
set +e
VIASH_CMD="docker run --entrypoint=bash --rm ${VIASH_UNIQUE_MOUNTS[@]} $VIASH_DOCKER_IMAGE_ID -c 'chown $(id -u):$(id -g) --silent --recursive ${VIASH_CHOWN_VARS[@]}'"
ViashDebug "+ $VIASH_CMD"
eval $VIASH_CMD
set -e
fi
}
trap ViashPerformChown EXIT
fi
if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# helper function for filling in extra docker args
if [ ! -z "$VIASH_META_MEMORY_B" ]; then
VIASH_DOCKER_RUN_ARGS+=("--memory=${VIASH_META_MEMORY_B}")
fi
if [ ! -z "$VIASH_META_CPUS" ]; then
VIASH_DOCKER_RUN_ARGS+=("--cpus=${VIASH_META_CPUS}")
fi
fi
if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
VIASH_CMD="docker run --entrypoint=bash ${VIASH_DOCKER_RUN_ARGS[@]} ${VIASH_UNIQUE_MOUNTS[@]} $VIASH_DOCKER_IMAGE_ID"
fi
# set dependency paths
ViashDebug "Running command: $(echo $VIASH_CMD)"
cat << VIASHEOF | eval $VIASH_CMD
set -e
tempscript=\$(mktemp "$VIASH_META_TEMP_DIR/viash-run-sortmerna-XXXXXX").sh
function clean_up {
rm "\$tempscript"
}
function interrupt {
echo -e "\nCTRL-C Pressed..."
exit 1
}
trap clean_up EXIT
trap interrupt INT SIGINT
cat > "\$tempscript" << 'VIASHMAIN'
#!/bin/bash
## VIASH START
# The following code has been auto-generated by Viash.
$( if [ ! -z ${VIASH_PAR_PAIRED+x} ]; then echo "${VIASH_PAR_PAIRED}" | sed "s#'#'\"'\"'#g;s#.*#par_paired='&'#" ; else echo "# par_paired="; fi )
$( if [ ! -z ${VIASH_PAR_INPUT+x} ]; then echo "${VIASH_PAR_INPUT}" | sed "s#'#'\"'\"'#g;s#.*#par_input='&'#" ; else echo "# par_input="; fi )
$( if [ ! -z ${VIASH_PAR_REF+x} ]; then echo "${VIASH_PAR_REF}" | sed "s#'#'\"'\"'#g;s#.*#par_ref='&'#" ; else echo "# par_ref="; fi )
$( if [ ! -z ${VIASH_PAR_RIBO_DATABASE_MANIFEST+x} ]; then echo "${VIASH_PAR_RIBO_DATABASE_MANIFEST}" | sed "s#'#'\"'\"'#g;s#.*#par_ribo_database_manifest='&'#" ; else echo "# par_ribo_database_manifest="; fi )
$( if [ ! -z ${VIASH_PAR_LOG+x} ]; then echo "${VIASH_PAR_LOG}" | sed "s#'#'\"'\"'#g;s#.*#par_log='&'#" ; else echo "# par_log="; fi )
$( if [ ! -z ${VIASH_PAR_OUTPUT+x} ]; then echo "${VIASH_PAR_OUTPUT}" | sed "s#'#'\"'\"'#g;s#.*#par_output='&'#" ; else echo "# par_output="; fi )
$( if [ ! -z ${VIASH_PAR_OTHER+x} ]; then echo "${VIASH_PAR_OTHER}" | sed "s#'#'\"'\"'#g;s#.*#par_other='&'#" ; else echo "# par_other="; fi )
$( if [ ! -z ${VIASH_PAR_KVDB+x} ]; then echo "${VIASH_PAR_KVDB}" | sed "s#'#'\"'\"'#g;s#.*#par_kvdb='&'#" ; else echo "# par_kvdb="; fi )
$( if [ ! -z ${VIASH_PAR_IDX_DIR+x} ]; then echo "${VIASH_PAR_IDX_DIR}" | sed "s#'#'\"'\"'#g;s#.*#par_idx_dir='&'#" ; else echo "# par_idx_dir="; fi )
$( if [ ! -z ${VIASH_PAR_READB+x} ]; then echo "${VIASH_PAR_READB}" | sed "s#'#'\"'\"'#g;s#.*#par_readb='&'#" ; else echo "# par_readb="; fi )
$( if [ ! -z ${VIASH_PAR_FASTX+x} ]; then echo "${VIASH_PAR_FASTX}" | sed "s#'#'\"'\"'#g;s#.*#par_fastx='&'#" ; else echo "# par_fastx="; fi )
$( if [ ! -z ${VIASH_PAR_SAM+x} ]; then echo "${VIASH_PAR_SAM}" | sed "s#'#'\"'\"'#g;s#.*#par_sam='&'#" ; else echo "# par_sam="; fi )
$( if [ ! -z ${VIASH_PAR_SQ+x} ]; then echo "${VIASH_PAR_SQ}" | sed "s#'#'\"'\"'#g;s#.*#par_sq='&'#" ; else echo "# par_sq="; fi )
$( if [ ! -z ${VIASH_PAR_BLAST+x} ]; then echo "${VIASH_PAR_BLAST}" | sed "s#'#'\"'\"'#g;s#.*#par_blast='&'#" ; else echo "# par_blast="; fi )
$( if [ ! -z ${VIASH_PAR_NUM_ALIGNMENTS+x} ]; then echo "${VIASH_PAR_NUM_ALIGNMENTS}" | sed "s#'#'\"'\"'#g;s#.*#par_num_alignments='&'#" ; else echo "# par_num_alignments="; fi )
$( if [ ! -z ${VIASH_PAR_MIN_LIS+x} ]; then echo "${VIASH_PAR_MIN_LIS}" | sed "s#'#'\"'\"'#g;s#.*#par_min_lis='&'#" ; else echo "# par_min_lis="; fi )
$( if [ ! -z ${VIASH_PAR_PRINT_ALL_READS+x} ]; then echo "${VIASH_PAR_PRINT_ALL_READS}" | sed "s#'#'\"'\"'#g;s#.*#par_print_all_reads='&'#" ; else echo "# par_print_all_reads="; fi )
$( if [ ! -z ${VIASH_PAR_PAIRED_IN+x} ]; then echo "${VIASH_PAR_PAIRED_IN}" | sed "s#'#'\"'\"'#g;s#.*#par_paired_in='&'#" ; else echo "# par_paired_in="; fi )
$( if [ ! -z ${VIASH_PAR_PAIRED_OUT+x} ]; then echo "${VIASH_PAR_PAIRED_OUT}" | sed "s#'#'\"'\"'#g;s#.*#par_paired_out='&'#" ; else echo "# par_paired_out="; fi )
$( if [ ! -z ${VIASH_PAR_OUT2+x} ]; then echo "${VIASH_PAR_OUT2}" | sed "s#'#'\"'\"'#g;s#.*#par_out2='&'#" ; else echo "# par_out2="; fi )
$( if [ ! -z ${VIASH_PAR_SOUT+x} ]; then echo "${VIASH_PAR_SOUT}" | sed "s#'#'\"'\"'#g;s#.*#par_sout='&'#" ; else echo "# par_sout="; fi )
$( if [ ! -z ${VIASH_PAR_ZIP_OUT+x} ]; then echo "${VIASH_PAR_ZIP_OUT}" | sed "s#'#'\"'\"'#g;s#.*#par_zip_out='&'#" ; else echo "# par_zip_out="; fi )
$( if [ ! -z ${VIASH_PAR_MATCH+x} ]; then echo "${VIASH_PAR_MATCH}" | sed "s#'#'\"'\"'#g;s#.*#par_match='&'#" ; else echo "# par_match="; fi )
$( if [ ! -z ${VIASH_PAR_MISMATCH+x} ]; then echo "${VIASH_PAR_MISMATCH}" | sed "s#'#'\"'\"'#g;s#.*#par_mismatch='&'#" ; else echo "# par_mismatch="; fi )
$( if [ ! -z ${VIASH_PAR_GAP_OPEN+x} ]; then echo "${VIASH_PAR_GAP_OPEN}" | sed "s#'#'\"'\"'#g;s#.*#par_gap_open='&'#" ; else echo "# par_gap_open="; fi )
$( if [ ! -z ${VIASH_PAR_GAP_EXT+x} ]; then echo "${VIASH_PAR_GAP_EXT}" | sed "s#'#'\"'\"'#g;s#.*#par_gap_ext='&'#" ; else echo "# par_gap_ext="; fi )
$( if [ ! -z ${VIASH_PAR_N+x} ]; then echo "${VIASH_PAR_N}" | sed "s#'#'\"'\"'#g;s#.*#par_N='&'#" ; else echo "# par_N="; fi )
$( if [ ! -z ${VIASH_PAR_A+x} ]; then echo "${VIASH_PAR_A}" | sed "s#'#'\"'\"'#g;s#.*#par_a='&'#" ; else echo "# par_a="; fi )
$( if [ ! -z ${VIASH_PAR_E+x} ]; then echo "${VIASH_PAR_E}" | sed "s#'#'\"'\"'#g;s#.*#par_e='&'#" ; else echo "# par_e="; fi )
$( if [ ! -z ${VIASH_PAR_F+x} ]; then echo "${VIASH_PAR_F}" | sed "s#'#'\"'\"'#g;s#.*#par_F='&'#" ; else echo "# par_F="; fi )
$( if [ ! -z ${VIASH_PAR_R+x} ]; then echo "${VIASH_PAR_R}" | sed "s#'#'\"'\"'#g;s#.*#par_R='&'#" ; else echo "# par_R="; fi )
$( if [ ! -z ${VIASH_PAR_NUM_ALIGNMENT+x} ]; then echo "${VIASH_PAR_NUM_ALIGNMENT}" | sed "s#'#'\"'\"'#g;s#.*#par_num_alignment='&'#" ; else echo "# par_num_alignment="; fi )
$( if [ ! -z ${VIASH_PAR_BEST+x} ]; then echo "${VIASH_PAR_BEST}" | sed "s#'#'\"'\"'#g;s#.*#par_best='&'#" ; else echo "# par_best="; fi )
$( if [ ! -z ${VIASH_PAR_VERBOSE+x} ]; then echo "${VIASH_PAR_VERBOSE}" | sed "s#'#'\"'\"'#g;s#.*#par_verbose='&'#" ; else echo "# par_verbose="; fi )
$( if [ ! -z ${VIASH_PAR_ID+x} ]; then echo "${VIASH_PAR_ID}" | sed "s#'#'\"'\"'#g;s#.*#par_id='&'#" ; else echo "# par_id="; fi )
$( if [ ! -z ${VIASH_PAR_COVERAGE+x} ]; then echo "${VIASH_PAR_COVERAGE}" | sed "s#'#'\"'\"'#g;s#.*#par_coverage='&'#" ; else echo "# par_coverage="; fi )
$( if [ ! -z ${VIASH_PAR_DE_NOVO+x} ]; then echo "${VIASH_PAR_DE_NOVO}" | sed "s#'#'\"'\"'#g;s#.*#par_de_novo='&'#" ; else echo "# par_de_novo="; fi )
$( if [ ! -z ${VIASH_PAR_OTU_MAP+x} ]; then echo "${VIASH_PAR_OTU_MAP}" | sed "s#'#'\"'\"'#g;s#.*#par_otu_map='&'#" ; else echo "# par_otu_map="; fi )
$( if [ ! -z ${VIASH_PAR_NUM_SEED+x} ]; then echo "${VIASH_PAR_NUM_SEED}" | sed "s#'#'\"'\"'#g;s#.*#par_num_seed='&'#" ; else echo "# par_num_seed="; fi )
$( if [ ! -z ${VIASH_PAR_PASSES+x} ]; then echo "${VIASH_PAR_PASSES}" | sed "s#'#'\"'\"'#g;s#.*#par_passes='&'#" ; else echo "# par_passes="; fi )
$( if [ ! -z ${VIASH_PAR_EDGE+x} ]; then echo "${VIASH_PAR_EDGE}" | sed "s#'#'\"'\"'#g;s#.*#par_edge='&'#" ; else echo "# par_edge="; fi )
$( if [ ! -z ${VIASH_PAR_FULL_SEARCH+x} ]; then echo "${VIASH_PAR_FULL_SEARCH}" | sed "s#'#'\"'\"'#g;s#.*#par_full_search='&'#" ; else echo "# par_full_search="; fi )
$( if [ ! -z ${VIASH_PAR_INDEX+x} ]; then echo "${VIASH_PAR_INDEX}" | sed "s#'#'\"'\"'#g;s#.*#par_index='&'#" ; else echo "# par_index="; fi )
$( if [ ! -z ${VIASH_PAR_L+x} ]; then echo "${VIASH_PAR_L}" | sed "s#'#'\"'\"'#g;s#.*#par_L='&'#" ; else echo "# par_L="; fi )
$( if [ ! -z ${VIASH_PAR_INTERVAL+x} ]; then echo "${VIASH_PAR_INTERVAL}" | sed "s#'#'\"'\"'#g;s#.*#par_interval='&'#" ; else echo "# par_interval="; fi )
$( if [ ! -z ${VIASH_PAR_MAX_POS+x} ]; then echo "${VIASH_PAR_MAX_POS}" | sed "s#'#'\"'\"'#g;s#.*#par_max_pos='&'#" ; else echo "# par_max_pos="; fi )
$( if [ ! -z ${VIASH_META_NAME+x} ]; then echo "${VIASH_META_NAME}" | sed "s#'#'\"'\"'#g;s#.*#meta_name='&'#" ; else echo "# meta_name="; fi )
$( if [ ! -z ${VIASH_META_FUNCTIONALITY_NAME+x} ]; then echo "${VIASH_META_FUNCTIONALITY_NAME}" | sed "s#'#'\"'\"'#g;s#.*#meta_functionality_name='&'#" ; else echo "# meta_functionality_name="; fi )
$( if [ ! -z ${VIASH_META_RESOURCES_DIR+x} ]; then echo "${VIASH_META_RESOURCES_DIR}" | sed "s#'#'\"'\"'#g;s#.*#meta_resources_dir='&'#" ; else echo "# meta_resources_dir="; fi )
$( if [ ! -z ${VIASH_META_EXECUTABLE+x} ]; then echo "${VIASH_META_EXECUTABLE}" | sed "s#'#'\"'\"'#g;s#.*#meta_executable='&'#" ; else echo "# meta_executable="; fi )
$( if [ ! -z ${VIASH_META_CONFIG+x} ]; then echo "${VIASH_META_CONFIG}" | sed "s#'#'\"'\"'#g;s#.*#meta_config='&'#" ; else echo "# meta_config="; fi )
$( if [ ! -z ${VIASH_META_TEMP_DIR+x} ]; then echo "${VIASH_META_TEMP_DIR}" | sed "s#'#'\"'\"'#g;s#.*#meta_temp_dir='&'#" ; else echo "# meta_temp_dir="; fi )
$( if [ ! -z ${VIASH_META_CPUS+x} ]; then echo "${VIASH_META_CPUS}" | sed "s#'#'\"'\"'#g;s#.*#meta_cpus='&'#" ; else echo "# meta_cpus="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_B+x} ]; then echo "${VIASH_META_MEMORY_B}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_b='&'#" ; else echo "# meta_memory_b="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_KB+x} ]; then echo "${VIASH_META_MEMORY_KB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_kb='&'#" ; else echo "# meta_memory_kb="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_MB+x} ]; then echo "${VIASH_META_MEMORY_MB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_mb='&'#" ; else echo "# meta_memory_mb="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_GB+x} ]; then echo "${VIASH_META_MEMORY_GB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_gb='&'#" ; else echo "# meta_memory_gb="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_TB+x} ]; then echo "${VIASH_META_MEMORY_TB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_tb='&'#" ; else echo "# meta_memory_tb="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_PB+x} ]; then echo "${VIASH_META_MEMORY_PB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_pb='&'#" ; else echo "# meta_memory_pb="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_KIB+x} ]; then echo "${VIASH_META_MEMORY_KIB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_kib='&'#" ; else echo "# meta_memory_kib="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_MIB+x} ]; then echo "${VIASH_META_MEMORY_MIB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_mib='&'#" ; else echo "# meta_memory_mib="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_GIB+x} ]; then echo "${VIASH_META_MEMORY_GIB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_gib='&'#" ; else echo "# meta_memory_gib="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_TIB+x} ]; then echo "${VIASH_META_MEMORY_TIB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_tib='&'#" ; else echo "# meta_memory_tib="; fi )
$( if [ ! -z ${VIASH_META_MEMORY_PIB+x} ]; then echo "${VIASH_META_MEMORY_PIB}" | sed "s#'#'\"'\"'#g;s#.*#meta_memory_pib='&'#" ; else echo "# meta_memory_pib="; fi )
## VIASH END
set -eo pipefail
unset_if_false=( par_fastx par_sq par_fastx par_print_all_reads par_paired_in par_paired_out
par_F par_R par_verbose par_de_novo par_otu_map par_full_search par_out2
par_sout par_sam par_paired )
for var in "\${unset_if_false[@]}"; do
if [ "\${!var}" == "false" ]; then
unset \$var
fi
done
reads=()
IFS=";" read -ra input <<< "\$par_input"
if [ "\${#input[@]}" -eq 2 ]; then
reads="--reads \${input[0]} --reads \${input[1]}"
# set paired to true in case it's not
par_paired=true
else
reads="--reads \${input[0]}"
par_paired=false
fi
refs=()
# check if references are input normally or through a manifest file
if [[ ! -z "\$par_ribo_database_manifest" ]]; then
while IFS= read -r path || [[ -n \$path ]]; do
refs=\$refs" --ref \$path"
done < \$par_ribo_database_manifest
elif [[ ! -z "\$par_ref" ]]; then
IFS=";" read -ra ref <<< "\$par_ref"
# check if length is 2 and par_paired is set to true
if [[ "\${#ref[@]}" -eq 2 && "\$par_paired" == "true" ]]; then
refs="--ref \${ref[0]} --ref \${ref[1]}"
# check if length is 1 and par_paired is set to false
elif [[ "\${#ref[@]}" -eq 1 && "\$par_paired" == "false" ]]; then
refs="--ref \$par_ref"
else # if one reference provided but paired is set to true:
echo "Two reference fasta files are required for paired-end reads"
exit 1
fi
else
echo "No reference fasta file(s) provided"
exit 1
fi
sortmerna \\
\$refs \\
\$reads \\
--workdir . \\
\${par_output:+--aligned "\${par_output}"} \\
\${par_fastx:+--fastx} \\
\${par_other:+--other "\${par_other}"} \\
\${par_kvdb:+--kvdb "\${par_kvdb}"} \\
\${par_idx_dir:+--idx-dir "\${par_idx_dir}"} \\
\${par_readb:+--readb "\${par_readb}"} \\
\${par_sam:+--sam} \\
\${par_sq:+--sq} \\
\${par_blast:+--blast "\${par_blast}"} \\
\${par_num_alignments:+--num_alignments "\${par_num_alignments}"} \\
\${par_min_lis:+--min_lis "\${par_min_lis}"} \\
\${par_print_all_reads:+--print_all_reads} \\
\${par_paired_in:+--paired_in} \\
\${par_paired_out:+--paired_out} \\
\${par_out2:+--out2} \\
\${par_sout:+--sout} \\
\${par_zip_out:+--zip-out "\${par_zip_out}"} \\
\${par_match:+--match "\${par_match}"} \\
\${par_mismatch:+--mismatch "\${par_mismatch}"} \\
\${par_gap_open:+--gap_open "\${par_gap_open}"} \\
\${par_gap_ext:+--gap_ext "\${par_gap_ext}"} \\
\${par_N:+-N "\${par_N}"} \\
\${par_a:+-a "\${par_a}"} \\
\${par_e:+-e "\${par_e}"} \\
\${par_F:+-F} \\
\${par_R:+-R} \\
\${par_num_alignment:+--num_alignment "\${par_num_alignment}"} \\
\${par_best:+--best "\${par_best}"} \\
\${par_verbose:+--verbose} \\
\${par_id:+--id "\${par_id}"} \\
\${par_coverage:+--coverage "\${par_coverage}"} \\
\${par_de_novo:+--de_novo} \\
\${par_otu_map:+--otu_map} \\
\${par_num_seed:+--num_seed "\${par_num_seed}"} \\
\${par_passes:+--passes "\${par_passes}"} \\
\${par_edge:+--edge "\${par_edge}"} \\
\${par_full_search:+--full_search} \\
\${par_index:+--index "\${par_index}"} \\
\${par_L:+-L \$par_L} \\
\${par_interval:+--interval "\${par_interval}"} \\
\${par_max_pos:+--max_pos "\${par_max_pos}"}
if [ ! -z \$par_log ]; then
mv "\${par_output}.log" \$par_log
fi
exit 0
VIASHMAIN
bash "\$tempscript" &
wait "\$!"
VIASHEOF
if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# strip viash automount from file paths
if [ ! -z "$VIASH_PAR_INPUT" ]; then
unset VIASH_TEST_INPUT
IFS=';'
for var in $VIASH_PAR_INPUT; do
unset IFS
if [ -z "$VIASH_TEST_INPUT" ]; then
VIASH_TEST_INPUT="$(ViashDockerStripAutomount "$var")"
else
VIASH_TEST_INPUT="$VIASH_TEST_INPUT;""$(ViashDockerStripAutomount "$var")"
fi
done
VIASH_PAR_INPUT="$VIASH_TEST_INPUT"
fi
if [ ! -z "$VIASH_PAR_REF" ]; then
unset VIASH_TEST_REF
IFS=';'
for var in $VIASH_PAR_REF; do
unset IFS
if [ -z "$VIASH_TEST_REF" ]; then
VIASH_TEST_REF="$(ViashDockerStripAutomount "$var")"
else
VIASH_TEST_REF="$VIASH_TEST_REF;""$(ViashDockerStripAutomount "$var")"
fi
done
VIASH_PAR_REF="$VIASH_TEST_REF"
fi
if [ ! -z "$VIASH_PAR_RIBO_DATABASE_MANIFEST" ]; then
VIASH_PAR_RIBO_DATABASE_MANIFEST=$(ViashDockerStripAutomount "$VIASH_PAR_RIBO_DATABASE_MANIFEST")
fi
if [ ! -z "$VIASH_PAR_LOG" ]; then
VIASH_PAR_LOG=$(ViashDockerStripAutomount "$VIASH_PAR_LOG")
fi
if [ ! -z "$VIASH_META_RESOURCES_DIR" ]; then
VIASH_META_RESOURCES_DIR=$(ViashDockerStripAutomount "$VIASH_META_RESOURCES_DIR")
fi
if [ ! -z "$VIASH_META_EXECUTABLE" ]; then
VIASH_META_EXECUTABLE=$(ViashDockerStripAutomount "$VIASH_META_EXECUTABLE")
fi
if [ ! -z "$VIASH_META_CONFIG" ]; then
VIASH_META_CONFIG=$(ViashDockerStripAutomount "$VIASH_META_CONFIG")
fi
if [ ! -z "$VIASH_META_TEMP_DIR" ]; then
VIASH_META_TEMP_DIR=$(ViashDockerStripAutomount "$VIASH_META_TEMP_DIR")
fi
fi
exit 0