#!/usr/bin/env bash # bcftools_concat v0.4.0 # # This wrapper script is auto-generated by viash 0.9.4 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. # # Component authors: # * Theodoro Gasperin Terra Camargo (author) 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="bcftools_concat" VIASH_META_FUNCTIONALITY_NAME="bcftools_concat" 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" # 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 quay.io/biocontainers/bcftools:1.22--h3a4d415_1 ENTRYPOINT [] RUN bcftools --version 2>&1 | head -1 | sed 's/bcftools /bcftools: /' > /var/software_versions.txt LABEL org.opencontainers.image.authors="Theodoro Gasperin Terra Camargo" LABEL org.opencontainers.image.description="Companion container for running component bcftools bcftools_concat" LABEL org.opencontainers.image.created="2025-09-17T08:35:56Z" LABEL org.opencontainers.image.source="https://github.com/samtools/bcftools" LABEL org.opencontainers.image.revision="666507c86de9150bfbdffdb2dbabc1dbde3c3262" LABEL org.opencontainers.image.version="v0.4.0" 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) # ViashHelp: Display helpful explanation about this executable function ViashHelp { echo "bcftools_concat v0.4.0" echo "" echo "Concatenate or combine VCF/BCF files. All source files must have the same sample" echo "columns appearing in the same order. The program can be used, for example, to" echo "concatenate chromosome VCFs into one VCF, or combine a SNP VCF and an indel" echo "VCF into one. The input files must be sorted by chr and position. The files" echo "must be given in the correct order to produce sorted VCF on output unless" echo "the -a, --allow-overlaps option is specified. With the --naive option, the files" echo "are concatenated without being recompressed, which is very fast." echo "" echo "Inputs:" echo " -i, --input" echo " type: file, multiple values allowed, file must exist" echo " example: input1.vcf.gz input2.vcf.gz" echo " Input VCF/BCF files to concatenate." echo " All source files must have the same sample columns appearing in" echo " the same order. Files must be sorted by chr and position." echo "" echo " -f, --file_list" echo " type: file, file must exist" echo " example: files_list.txt" echo " Read the list of VCF/BCF files from a file, one file name per line." echo " Alternative to providing multiple --input files." echo "" echo "Outputs:" echo " -o, --output" echo " type: file, required parameter, output, file must exist" echo " example: concatenated.vcf.gz" echo " Write output to a file." echo " If not specified, output goes to standard output." echo "" echo "Options:" echo " -a, --allow_overlaps" echo " type: boolean_true" echo " First coordinate of the next file can precede last record of the current" echo " file." echo " Allows overlapping records between files during concatenation." echo "" echo " -c, --compact_ps" echo " type: boolean_true" echo " Do not output PS tag at each site, only at the start of a new phase set" echo " block." echo " Reduces output size for phased data." echo "" echo " -d, --rm_dups" echo " type: string" echo " example: exact" echo " choices: [ snps, indels, both, all, exact ]" echo " Output duplicate records present in multiple files only once." echo " **Options:**" echo " - \`snps\`: Remove duplicate SNPs" echo " - \`indels\`: Remove duplicate indels" echo " - \`both\`: Remove duplicate SNPs and indels" echo " - \`all\`: Remove all duplicates" echo " - \`exact\`: Remove exact duplicates only" echo "" echo " -D, --remove_duplicates" echo " type: boolean_true" echo " Alias for --rm_dups exact." echo " Remove exact duplicate records present in multiple files." echo "" echo " -G, --drop_genotypes" echo " type: boolean_true" echo " Drop individual genotype information." echo " Removes all sample-specific data from output." echo "" echo " -l, --ligate" echo " type: boolean_true" echo " Ligate phased VCFs by matching phase at overlapping haplotypes." echo " Connects phase information across files." echo "" echo " --ligate_force" echo " type: boolean_true" echo " Ligate even non-overlapping chunks, keep all sites." echo " Forces ligation without requiring overlap validation." echo "" echo " --ligate_warn" echo " type: boolean_true" echo " Drop sites in imperfect overlaps." echo " Conservative ligation that removes problematic sites." echo "" echo " --no_version" echo " type: boolean_true" echo " Do not append version and command line to the header." echo " Produces cleaner output headers." echo "" echo " -n, --naive" echo " type: boolean_true" echo " Concatenate files without recompression." echo " Very fast operation with header compatibility check." echo "" echo " --naive_force" echo " type: boolean_true" echo " Same as --naive, but header compatibility is not checked." echo " **Warning:** Dangerous option, use with caution." echo "" echo " -O, --output_type" echo " type: string" echo " example: z" echo " choices: [ u, z, b, v ]" echo " Output type and compression level." echo " **Options:**" echo " - \`u\`: uncompressed BCF" echo " - \`b\`: compressed BCF" echo " - \`v\`: uncompressed VCF" echo " - \`z\`: compressed VCF (with optional compression level 0-9)" echo "" echo " -q, --min_pq" echo " type: integer" echo " example: 30" echo " Break phase set if phasing quality is lower than specified value." echo " Only relevant when working with phased data." echo "" echo " -r, --regions" echo " type: string" echo " example: chr20:1000000-2000000" echo " Restrict to comma-separated list of regions." echo " **Formats supported:** chr|chr:pos|chr:beg-end|chr:beg-[,…​]" echo "" echo " -R, --regions_file" echo " type: file, file must exist" echo " example: regions.bed" echo " Restrict to regions listed in a file." echo " Regions can be specified in VCF, BED, or tab-delimited format." echo "" echo " --regions_overlap" echo " type: string" echo " example: 1" echo " choices: [ 0, 1, 2 ]" echo " Include if POS in the region (0), record overlaps (1), variant overlaps" echo " (2)." echo " **Options:**" echo " - \`0\`: POS inside region (default for -t/-T)" echo " - \`1\`: overlapping records included (default for -r/-R)" echo " - \`2\`: true overlapping variation only" echo "" echo " -v, --verbosity" echo " type: integer" echo " example: 1" echo " Set verbosity level." echo " Controls amount of diagnostic output." echo "" echo " -W, --write_index" echo " type: string" echo " example: tbi" echo " Automatically index the output files." echo " **Format:** Specify index format or use default." echo "" echo "Viash built in Computational Requirements:" echo " ---cpus=INT" echo " Number of CPUs to use" echo " ---memory=STRING" echo " Amount of memory to use. Examples: 4GB, 3MiB." echo "" echo "Viash built in Docker:" echo " ---setup=STRATEGY" echo " Setup the docker container. Options are: alwaysbuild, alwayscachedbuild, ifneedbebuild, ifneedbecachedbuild, alwayspull, alwayspullelsebuild, alwayspullelsecachedbuild, ifneedbepull, ifneedbepullelsebuild, ifneedbepullelsecachedbuild, push, pushifnotpresent, donothing." echo " Default: ifneedbepullelsecachedbuild" echo " ---dockerfile" echo " Print the dockerfile to stdout." echo " ---docker_run_args=ARG" echo " Provide runtime arguments to Docker. See the documentation on \`docker run\` for more information." echo " ---docker_image_id" echo " Print the docker image id to stdout." echo " ---debug" echo " Enter the docker container for debugging purposes." echo "" echo "Viash built in Engines:" echo " ---engine=ENGINE_ID" echo " Specify the engine to use. Options are: docker, native." echo " Default: docker" } # 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 "bcftools_concat v0.4.0" exit ;; --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 ;; -i) 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 -i. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --file_list) [ -n "$VIASH_PAR_FILE_LIST" ] && ViashError Bad arguments for option \'--file_list\': \'$VIASH_PAR_FILE_LIST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_FILE_LIST="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --file_list. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --file_list=*) [ -n "$VIASH_PAR_FILE_LIST" ] && ViashError Bad arguments for option \'--file_list=*\': \'$VIASH_PAR_FILE_LIST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_FILE_LIST=$(ViashRemoveFlags "$1") shift 1 ;; -f) [ -n "$VIASH_PAR_FILE_LIST" ] && ViashError Bad arguments for option \'-f\': \'$VIASH_PAR_FILE_LIST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_FILE_LIST="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to -f. 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="$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 ;; -o) [ -n "$VIASH_PAR_OUTPUT" ] && ViashError Bad arguments for option \'-o\': \'$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 -o. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --allow_overlaps) [ -n "$VIASH_PAR_ALLOW_OVERLAPS" ] && ViashError Bad arguments for option \'--allow_overlaps\': \'$VIASH_PAR_ALLOW_OVERLAPS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_ALLOW_OVERLAPS=true shift 1 ;; -a) [ -n "$VIASH_PAR_ALLOW_OVERLAPS" ] && ViashError Bad arguments for option \'-a\': \'$VIASH_PAR_ALLOW_OVERLAPS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_ALLOW_OVERLAPS=true shift 1 ;; --compact_ps) [ -n "$VIASH_PAR_COMPACT_PS" ] && ViashError Bad arguments for option \'--compact_ps\': \'$VIASH_PAR_COMPACT_PS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_COMPACT_PS=true shift 1 ;; -c) [ -n "$VIASH_PAR_COMPACT_PS" ] && ViashError Bad arguments for option \'-c\': \'$VIASH_PAR_COMPACT_PS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_COMPACT_PS=true shift 1 ;; --rm_dups) [ -n "$VIASH_PAR_RM_DUPS" ] && ViashError Bad arguments for option \'--rm_dups\': \'$VIASH_PAR_RM_DUPS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_RM_DUPS="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --rm_dups. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --rm_dups=*) [ -n "$VIASH_PAR_RM_DUPS" ] && ViashError Bad arguments for option \'--rm_dups=*\': \'$VIASH_PAR_RM_DUPS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_RM_DUPS=$(ViashRemoveFlags "$1") shift 1 ;; -d) [ -n "$VIASH_PAR_RM_DUPS" ] && ViashError Bad arguments for option \'-d\': \'$VIASH_PAR_RM_DUPS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_RM_DUPS="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to -d. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --remove_duplicates) [ -n "$VIASH_PAR_REMOVE_DUPLICATES" ] && ViashError Bad arguments for option \'--remove_duplicates\': \'$VIASH_PAR_REMOVE_DUPLICATES\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REMOVE_DUPLICATES=true shift 1 ;; -D) [ -n "$VIASH_PAR_REMOVE_DUPLICATES" ] && ViashError Bad arguments for option \'-D\': \'$VIASH_PAR_REMOVE_DUPLICATES\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REMOVE_DUPLICATES=true shift 1 ;; --drop_genotypes) [ -n "$VIASH_PAR_DROP_GENOTYPES" ] && ViashError Bad arguments for option \'--drop_genotypes\': \'$VIASH_PAR_DROP_GENOTYPES\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_DROP_GENOTYPES=true shift 1 ;; -G) [ -n "$VIASH_PAR_DROP_GENOTYPES" ] && ViashError Bad arguments for option \'-G\': \'$VIASH_PAR_DROP_GENOTYPES\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_DROP_GENOTYPES=true shift 1 ;; --ligate) [ -n "$VIASH_PAR_LIGATE" ] && ViashError Bad arguments for option \'--ligate\': \'$VIASH_PAR_LIGATE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_LIGATE=true shift 1 ;; -l) [ -n "$VIASH_PAR_LIGATE" ] && ViashError Bad arguments for option \'-l\': \'$VIASH_PAR_LIGATE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_LIGATE=true shift 1 ;; --ligate_force) [ -n "$VIASH_PAR_LIGATE_FORCE" ] && ViashError Bad arguments for option \'--ligate_force\': \'$VIASH_PAR_LIGATE_FORCE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_LIGATE_FORCE=true shift 1 ;; --ligate_warn) [ -n "$VIASH_PAR_LIGATE_WARN" ] && ViashError Bad arguments for option \'--ligate_warn\': \'$VIASH_PAR_LIGATE_WARN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_LIGATE_WARN=true shift 1 ;; --no_version) [ -n "$VIASH_PAR_NO_VERSION" ] && ViashError Bad arguments for option \'--no_version\': \'$VIASH_PAR_NO_VERSION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_NO_VERSION=true shift 1 ;; --naive) [ -n "$VIASH_PAR_NAIVE" ] && ViashError Bad arguments for option \'--naive\': \'$VIASH_PAR_NAIVE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_NAIVE=true shift 1 ;; -n) [ -n "$VIASH_PAR_NAIVE" ] && ViashError Bad arguments for option \'-n\': \'$VIASH_PAR_NAIVE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_NAIVE=true shift 1 ;; --naive_force) [ -n "$VIASH_PAR_NAIVE_FORCE" ] && ViashError Bad arguments for option \'--naive_force\': \'$VIASH_PAR_NAIVE_FORCE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_NAIVE_FORCE=true shift 1 ;; --output_type) [ -n "$VIASH_PAR_OUTPUT_TYPE" ] && ViashError Bad arguments for option \'--output_type\': \'$VIASH_PAR_OUTPUT_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_OUTPUT_TYPE="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --output_type. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --output_type=*) [ -n "$VIASH_PAR_OUTPUT_TYPE" ] && ViashError Bad arguments for option \'--output_type=*\': \'$VIASH_PAR_OUTPUT_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_OUTPUT_TYPE=$(ViashRemoveFlags "$1") shift 1 ;; -O) [ -n "$VIASH_PAR_OUTPUT_TYPE" ] && ViashError Bad arguments for option \'-O\': \'$VIASH_PAR_OUTPUT_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_OUTPUT_TYPE="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to -O. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --min_pq) [ -n "$VIASH_PAR_MIN_PQ" ] && ViashError Bad arguments for option \'--min_pq\': \'$VIASH_PAR_MIN_PQ\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_MIN_PQ="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --min_pq. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --min_pq=*) [ -n "$VIASH_PAR_MIN_PQ" ] && ViashError Bad arguments for option \'--min_pq=*\': \'$VIASH_PAR_MIN_PQ\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_MIN_PQ=$(ViashRemoveFlags "$1") shift 1 ;; -q) [ -n "$VIASH_PAR_MIN_PQ" ] && ViashError Bad arguments for option \'-q\': \'$VIASH_PAR_MIN_PQ\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_MIN_PQ="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to -q. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --regions) [ -n "$VIASH_PAR_REGIONS" ] && ViashError Bad arguments for option \'--regions\': \'$VIASH_PAR_REGIONS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REGIONS="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --regions. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --regions=*) [ -n "$VIASH_PAR_REGIONS" ] && ViashError Bad arguments for option \'--regions=*\': \'$VIASH_PAR_REGIONS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REGIONS=$(ViashRemoveFlags "$1") shift 1 ;; -r) [ -n "$VIASH_PAR_REGIONS" ] && ViashError Bad arguments for option \'-r\': \'$VIASH_PAR_REGIONS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REGIONS="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to -r. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --regions_file) [ -n "$VIASH_PAR_REGIONS_FILE" ] && ViashError Bad arguments for option \'--regions_file\': \'$VIASH_PAR_REGIONS_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REGIONS_FILE="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --regions_file. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --regions_file=*) [ -n "$VIASH_PAR_REGIONS_FILE" ] && ViashError Bad arguments for option \'--regions_file=*\': \'$VIASH_PAR_REGIONS_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REGIONS_FILE=$(ViashRemoveFlags "$1") shift 1 ;; -R) [ -n "$VIASH_PAR_REGIONS_FILE" ] && ViashError Bad arguments for option \'-R\': \'$VIASH_PAR_REGIONS_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REGIONS_FILE="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to -R. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --regions_overlap) [ -n "$VIASH_PAR_REGIONS_OVERLAP" ] && ViashError Bad arguments for option \'--regions_overlap\': \'$VIASH_PAR_REGIONS_OVERLAP\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REGIONS_OVERLAP="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --regions_overlap. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --regions_overlap=*) [ -n "$VIASH_PAR_REGIONS_OVERLAP" ] && ViashError Bad arguments for option \'--regions_overlap=*\': \'$VIASH_PAR_REGIONS_OVERLAP\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_REGIONS_OVERLAP=$(ViashRemoveFlags "$1") shift 1 ;; --verbosity) [ -n "$VIASH_PAR_VERBOSITY" ] && ViashError Bad arguments for option \'--verbosity\': \'$VIASH_PAR_VERBOSITY\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_VERBOSITY="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --verbosity. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --verbosity=*) [ -n "$VIASH_PAR_VERBOSITY" ] && ViashError Bad arguments for option \'--verbosity=*\': \'$VIASH_PAR_VERBOSITY\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_VERBOSITY=$(ViashRemoveFlags "$1") shift 1 ;; -v) [ -n "$VIASH_PAR_VERBOSITY" ] && ViashError Bad arguments for option \'-v\': \'$VIASH_PAR_VERBOSITY\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_VERBOSITY="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to -v. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --write_index) [ -n "$VIASH_PAR_WRITE_INDEX" ] && ViashError Bad arguments for option \'--write_index\': \'$VIASH_PAR_WRITE_INDEX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_WRITE_INDEX="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to --write_index. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; --write_index=*) [ -n "$VIASH_PAR_WRITE_INDEX" ] && ViashError Bad arguments for option \'--write_index=*\': \'$VIASH_PAR_WRITE_INDEX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_WRITE_INDEX=$(ViashRemoveFlags "$1") shift 1 ;; -W) [ -n "$VIASH_PAR_WRITE_INDEX" ] && ViashError Bad arguments for option \'-W\': \'$VIASH_PAR_WRITE_INDEX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1 VIASH_PAR_WRITE_INDEX="$2" [ $# -lt 2 ] && ViashError Not enough arguments passed to -W. Use "--help" to get more information on the parameters. && exit 1 shift 2 ;; ---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/bcftools/bcftools_concat:v0.4.0' 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" 'bcftools' 'ps' 'bash' exit 0 fi # check if docker image exists ViashDockerSetup "$VIASH_DOCKER_IMAGE_ID" ifneedbepullelsecachedbuild ViashDockerCheckCommands "$VIASH_DOCKER_IMAGE_ID" 'bcftools' '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_PAR_OUTPUT+x} ]; then ViashError '--output' is a required argument. Use "--help" to get more information on the parameters. exit 1 fi 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_ALLOW_OVERLAPS+x} ]; then VIASH_PAR_ALLOW_OVERLAPS="false" fi if [ -z ${VIASH_PAR_COMPACT_PS+x} ]; then VIASH_PAR_COMPACT_PS="false" fi if [ -z ${VIASH_PAR_REMOVE_DUPLICATES+x} ]; then VIASH_PAR_REMOVE_DUPLICATES="false" fi if [ -z ${VIASH_PAR_DROP_GENOTYPES+x} ]; then VIASH_PAR_DROP_GENOTYPES="false" fi if [ -z ${VIASH_PAR_LIGATE+x} ]; then VIASH_PAR_LIGATE="false" fi if [ -z ${VIASH_PAR_LIGATE_FORCE+x} ]; then VIASH_PAR_LIGATE_FORCE="false" fi if [ -z ${VIASH_PAR_LIGATE_WARN+x} ]; then VIASH_PAR_LIGATE_WARN="false" fi if [ -z ${VIASH_PAR_NO_VERSION+x} ]; then VIASH_PAR_NO_VERSION="false" fi if [ -z ${VIASH_PAR_NAIVE+x} ]; then VIASH_PAR_NAIVE="false" fi if [ -z ${VIASH_PAR_NAIVE_FORCE+x} ]; then VIASH_PAR_NAIVE_FORCE="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_FILE_LIST" ] && [ ! -e "$VIASH_PAR_FILE_LIST" ]; then ViashError "Input file '$VIASH_PAR_FILE_LIST' does not exist." exit 1 fi if [ ! -z "$VIASH_PAR_REGIONS_FILE" ] && [ ! -e "$VIASH_PAR_REGIONS_FILE" ]; then ViashError "Input file '$VIASH_PAR_REGIONS_FILE' does not exist." exit 1 fi # check whether parameters values are of the right type if [[ -n "$VIASH_PAR_ALLOW_OVERLAPS" ]]; then if ! [[ "$VIASH_PAR_ALLOW_OVERLAPS" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--allow_overlaps' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_COMPACT_PS" ]]; then if ! [[ "$VIASH_PAR_COMPACT_PS" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--compact_ps' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_REMOVE_DUPLICATES" ]]; then if ! [[ "$VIASH_PAR_REMOVE_DUPLICATES" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--remove_duplicates' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_DROP_GENOTYPES" ]]; then if ! [[ "$VIASH_PAR_DROP_GENOTYPES" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--drop_genotypes' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_LIGATE" ]]; then if ! [[ "$VIASH_PAR_LIGATE" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--ligate' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_LIGATE_FORCE" ]]; then if ! [[ "$VIASH_PAR_LIGATE_FORCE" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--ligate_force' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_LIGATE_WARN" ]]; then if ! [[ "$VIASH_PAR_LIGATE_WARN" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--ligate_warn' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_NO_VERSION" ]]; then if ! [[ "$VIASH_PAR_NO_VERSION" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--no_version' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_NAIVE" ]]; then if ! [[ "$VIASH_PAR_NAIVE" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--naive' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_NAIVE_FORCE" ]]; then if ! [[ "$VIASH_PAR_NAIVE_FORCE" =~ ^(true|True|TRUE|false|False|FALSE|yes|Yes|YES|no|No|NO)$ ]]; then ViashError '--naive_force' has to be a boolean_true. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_MIN_PQ" ]]; then if ! [[ "$VIASH_PAR_MIN_PQ" =~ ^[-+]?[0-9]+$ ]]; then ViashError '--min_pq' has to be an integer. Use "--help" to get more information on the parameters. exit 1 fi fi if [[ -n "$VIASH_PAR_VERBOSITY" ]]; then if ! [[ "$VIASH_PAR_VERBOSITY" =~ ^[-+]?[0-9]+$ ]]; then ViashError '--verbosity' 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_RM_DUPS" ]; then VIASH_PAR_RM_DUPS_CHOICES=("snps;indels;both;all;exact") IFS=';' set -f if ! [[ ";${VIASH_PAR_RM_DUPS_CHOICES[*]};" =~ ";$VIASH_PAR_RM_DUPS;" ]]; then ViashError '--rm_dups' specified value of \'$VIASH_PAR_RM_DUPS\' 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_OUTPUT_TYPE" ]; then VIASH_PAR_OUTPUT_TYPE_CHOICES=("u;z;b;v") IFS=';' set -f if ! [[ ";${VIASH_PAR_OUTPUT_TYPE_CHOICES[*]};" =~ ";$VIASH_PAR_OUTPUT_TYPE;" ]]; then ViashError '--output_type' specified value of \'$VIASH_PAR_OUTPUT_TYPE\' 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_REGIONS_OVERLAP" ]; then VIASH_PAR_REGIONS_OVERLAP_CHOICES=("0;1;2") IFS=';' set -f if ! [[ ";${VIASH_PAR_REGIONS_OVERLAP_CHOICES[*]};" =~ ";$VIASH_PAR_REGIONS_OVERLAP;" ]]; then ViashError '--regions_overlap' specified value of \'$VIASH_PAR_REGIONS_OVERLAP\' 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_OUTPUT" ] && [ ! -d "$(dirname "$VIASH_PAR_OUTPUT")" ]; then mkdir -p "$(dirname "$VIASH_PAR_OUTPUT")" 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_FILE_LIST" ]; then VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_FILE_LIST")" ) VIASH_PAR_FILE_LIST=$(ViashDockerAutodetectMount "$VIASH_PAR_FILE_LIST") fi if [ ! -z "$VIASH_PAR_OUTPUT" ]; then VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_OUTPUT")" ) VIASH_PAR_OUTPUT=$(ViashDockerAutodetectMount "$VIASH_PAR_OUTPUT") VIASH_CHOWN_VARS+=( "$VIASH_PAR_OUTPUT" ) fi if [ ! -z "$VIASH_PAR_REGIONS_FILE" ]; then VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_REGIONS_FILE")" ) VIASH_PAR_REGIONS_FILE=$(ViashDockerAutodetectMount "$VIASH_PAR_REGIONS_FILE") 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-bcftools_concat-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_INPUT+x} ]; then echo "${VIASH_PAR_INPUT}" | sed "s#'#'\"'\"'#g;s#.*#par_input='&'#" ; else echo "# par_input="; fi ) $( if [ ! -z ${VIASH_PAR_FILE_LIST+x} ]; then echo "${VIASH_PAR_FILE_LIST}" | sed "s#'#'\"'\"'#g;s#.*#par_file_list='&'#" ; else echo "# par_file_list="; 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_ALLOW_OVERLAPS+x} ]; then echo "${VIASH_PAR_ALLOW_OVERLAPS}" | sed "s#'#'\"'\"'#g;s#.*#par_allow_overlaps='&'#" ; else echo "# par_allow_overlaps="; fi ) $( if [ ! -z ${VIASH_PAR_COMPACT_PS+x} ]; then echo "${VIASH_PAR_COMPACT_PS}" | sed "s#'#'\"'\"'#g;s#.*#par_compact_ps='&'#" ; else echo "# par_compact_ps="; fi ) $( if [ ! -z ${VIASH_PAR_RM_DUPS+x} ]; then echo "${VIASH_PAR_RM_DUPS}" | sed "s#'#'\"'\"'#g;s#.*#par_rm_dups='&'#" ; else echo "# par_rm_dups="; fi ) $( if [ ! -z ${VIASH_PAR_REMOVE_DUPLICATES+x} ]; then echo "${VIASH_PAR_REMOVE_DUPLICATES}" | sed "s#'#'\"'\"'#g;s#.*#par_remove_duplicates='&'#" ; else echo "# par_remove_duplicates="; fi ) $( if [ ! -z ${VIASH_PAR_DROP_GENOTYPES+x} ]; then echo "${VIASH_PAR_DROP_GENOTYPES}" | sed "s#'#'\"'\"'#g;s#.*#par_drop_genotypes='&'#" ; else echo "# par_drop_genotypes="; fi ) $( if [ ! -z ${VIASH_PAR_LIGATE+x} ]; then echo "${VIASH_PAR_LIGATE}" | sed "s#'#'\"'\"'#g;s#.*#par_ligate='&'#" ; else echo "# par_ligate="; fi ) $( if [ ! -z ${VIASH_PAR_LIGATE_FORCE+x} ]; then echo "${VIASH_PAR_LIGATE_FORCE}" | sed "s#'#'\"'\"'#g;s#.*#par_ligate_force='&'#" ; else echo "# par_ligate_force="; fi ) $( if [ ! -z ${VIASH_PAR_LIGATE_WARN+x} ]; then echo "${VIASH_PAR_LIGATE_WARN}" | sed "s#'#'\"'\"'#g;s#.*#par_ligate_warn='&'#" ; else echo "# par_ligate_warn="; fi ) $( if [ ! -z ${VIASH_PAR_NO_VERSION+x} ]; then echo "${VIASH_PAR_NO_VERSION}" | sed "s#'#'\"'\"'#g;s#.*#par_no_version='&'#" ; else echo "# par_no_version="; fi ) $( if [ ! -z ${VIASH_PAR_NAIVE+x} ]; then echo "${VIASH_PAR_NAIVE}" | sed "s#'#'\"'\"'#g;s#.*#par_naive='&'#" ; else echo "# par_naive="; fi ) $( if [ ! -z ${VIASH_PAR_NAIVE_FORCE+x} ]; then echo "${VIASH_PAR_NAIVE_FORCE}" | sed "s#'#'\"'\"'#g;s#.*#par_naive_force='&'#" ; else echo "# par_naive_force="; fi ) $( if [ ! -z ${VIASH_PAR_OUTPUT_TYPE+x} ]; then echo "${VIASH_PAR_OUTPUT_TYPE}" | sed "s#'#'\"'\"'#g;s#.*#par_output_type='&'#" ; else echo "# par_output_type="; fi ) $( if [ ! -z ${VIASH_PAR_MIN_PQ+x} ]; then echo "${VIASH_PAR_MIN_PQ}" | sed "s#'#'\"'\"'#g;s#.*#par_min_pq='&'#" ; else echo "# par_min_pq="; fi ) $( if [ ! -z ${VIASH_PAR_REGIONS+x} ]; then echo "${VIASH_PAR_REGIONS}" | sed "s#'#'\"'\"'#g;s#.*#par_regions='&'#" ; else echo "# par_regions="; fi ) $( if [ ! -z ${VIASH_PAR_REGIONS_FILE+x} ]; then echo "${VIASH_PAR_REGIONS_FILE}" | sed "s#'#'\"'\"'#g;s#.*#par_regions_file='&'#" ; else echo "# par_regions_file="; fi ) $( if [ ! -z ${VIASH_PAR_REGIONS_OVERLAP+x} ]; then echo "${VIASH_PAR_REGIONS_OVERLAP}" | sed "s#'#'\"'\"'#g;s#.*#par_regions_overlap='&'#" ; else echo "# par_regions_overlap="; fi ) $( if [ ! -z ${VIASH_PAR_VERBOSITY+x} ]; then echo "${VIASH_PAR_VERBOSITY}" | sed "s#'#'\"'\"'#g;s#.*#par_verbosity='&'#" ; else echo "# par_verbosity="; fi ) $( if [ ! -z ${VIASH_PAR_WRITE_INDEX+x} ]; then echo "${VIASH_PAR_WRITE_INDEX}" | sed "s#'#'\"'\"'#g;s#.*#par_write_index='&'#" ; else echo "# par_write_index="; 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 false boolean parameters unset_if_false=( par_allow_overlaps par_compact_ps par_remove_duplicates par_drop_genotypes par_ligate par_ligate_force par_ligate_warn par_no_version par_naive par_naive_force ) for par in \${unset_if_false[@]}; do test_val="\${!par}" [[ "\$test_val" == "false" ]] && unset \$par done # Check that either input files or file_list is provided if [[ -z "\${par_input}" && -z "\${par_file_list}" ]]; then echo "Error: One of the parameters '--input' or '--file_list' must be used." exit 1 fi # Handle multiple input files (semicolon-separated from Viash) if [[ -n "\$par_input" ]]; then IFS=';' read -ra input_files <<< "\$par_input" fi # Build command array cmd_args=( bcftools concat \${par_allow_overlaps:+--allow-overlaps} \${par_compact_ps:+--compact-PS} \${par_rm_dups:+--rm-dups "\$par_rm_dups"} \${par_remove_duplicates:+--remove-duplicates} \${par_drop_genotypes:+--drop-genotypes} \${par_ligate:+--ligate} \${par_ligate_force:+--ligate-force} \${par_ligate_warn:+--ligate-warn} \${par_no_version:+--no-version} \${par_naive:+--naive} \${par_naive_force:+--naive-force} \${par_output_type:+--output-type "\$par_output_type"} \${par_min_pq:+--min-PQ "\$par_min_pq"} \${par_regions:+--regions "\$par_regions"} \${par_regions_file:+--regions-file "\$par_regions_file"} \${par_regions_overlap:+--regions-overlap "\$par_regions_overlap"} \${meta_cpus:+--threads "\$meta_cpus"} \${par_verbosity:+--verbosity "\$par_verbosity"} \${par_write_index:+--write-index="\$par_write_index"} \${par_output:+--output "\$par_output"} \${par_file_list:+--file-list "\$par_file_list"} ) # Add input files to command array if [[ -n "\$par_input" ]]; then cmd_args+=("\${input_files[@]}") fi # Execute command "\${cmd_args[@]}" 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_FILE_LIST" ]; then VIASH_PAR_FILE_LIST=$(ViashDockerStripAutomount "$VIASH_PAR_FILE_LIST") fi if [ ! -z "$VIASH_PAR_OUTPUT" ]; then VIASH_PAR_OUTPUT=$(ViashDockerStripAutomount "$VIASH_PAR_OUTPUT") fi if [ ! -z "$VIASH_PAR_REGIONS_FILE" ]; then VIASH_PAR_REGIONS_FILE=$(ViashDockerStripAutomount "$VIASH_PAR_REGIONS_FILE") 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 # check whether required files exist if [ ! -z "$VIASH_PAR_OUTPUT" ] && [ ! -e "$VIASH_PAR_OUTPUT" ]; then ViashError "Output file '$VIASH_PAR_OUTPUT' does not exist." exit 1 fi exit 0