#!/usr/bin/env bash

# star_align_reads v0.3.0
# 
# This wrapper script is auto-generated by viash 0.9.0 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:
#  * Angela Oliveira Pisco (author)
#  * Robrecht Cannoodt (author, maintainer)

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="star_align_reads"
VIASH_META_FUNCTIONALITY_NAME="star_align_reads"
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 "star_align_reads v0.3.0"
  echo ""
  echo "Aligns reads to a reference genome using STAR."
  echo ""
  echo "Run Parameters:"
  echo "    --run_rng_seed"
  echo "        type: integer"
  echo "        example: 777"
  echo "        random number generator seed."
  echo ""
  echo "Genome Parameters:"
  echo "    --genome_dir"
  echo "        type: file, required parameter, file must exist"
  echo "        example: ./GenomeDir"
  echo "        path to the directory where genome files are stored (for --runMode"
  echo "        alignReads) or will be generated (for --runMode generateGenome)"
  echo ""
  echo "    --genome_load"
  echo "        type: string"
  echo "        example: NoSharedMemory"
  echo "        mode of shared memory usage for the genome files. Only used with"
  echo "        --runMode alignReads."
  echo "        - LoadAndKeep     ... load genome into shared and keep it in memory"
  echo "        after run"
  echo "        - LoadAndRemove   ... load genome into shared but remove it after run"
  echo "        - LoadAndExit     ... load genome into shared memory and exit, keeping"
  echo "        the genome in memory for future runs"
  echo "        - Remove          ... do not map anything, just remove loaded genome"
  echo "        from memory"
  echo "        - NoSharedMemory  ... do not use shared memory, each job will have its"
  echo "        own private copy of the genome"
  echo ""
  echo "    --genome_fasta_files"
  echo "        type: file, multiple values allowed, file must exist"
  echo "        path(s) to the fasta files with the genome sequences, separated by"
  echo "        spaces. These files should be plain text FASTA files, they *cannot* be"
  echo "        zipped."
  echo "        Required for the genome generation (--runMode genomeGenerate). Can also"
  echo "        be used in the mapping (--runMode alignReads) to add extra (new)"
  echo "        sequences to the genome (e.g. spike-ins)."
  echo ""
  echo "    --genome_file_sizes"
  echo "        type: integer, multiple values allowed"
  echo "        example: 0"
  echo "        genome files exact sizes in bytes. Typically, this should not be defined"
  echo "        by the user."
  echo ""
  echo "    --genome_transform_output"
  echo "        type: string, multiple values allowed"
  echo "        which output to transform back to original genome"
  echo "        - SAM     ... SAM/BAM alignments"
  echo "        - SJ      ... splice junctions (SJ.out.tab)"
  echo "        - Quant   ... quantifications (from --quant_mode option)"
  echo "        - None    ... no transformation of the output"
  echo ""
  echo "    --genome_chr_set_mitochondrial"
  echo "        type: string, multiple values allowed"
  echo "        example: chrM;M;MT"
  echo "        names of the mitochondrial chromosomes. Presently only used for STARsolo"
  echo "        statistics output/"
  echo ""
  echo "Splice Junctions Database:"
  echo "    --sjdb_file_chr_start_end"
  echo "        type: string, multiple values allowed"
  echo "        path to the files with genomic coordinates (chr <tab> start <tab> end"
  echo "        <tab> strand) for the splice junction introns. Multiple files can be"
  echo "        supplied and will be concatenated."
  echo ""
  echo "    --sjdb_gtf_file"
  echo "        type: file, file must exist"
  echo "        path to the GTF file with annotations"
  echo ""
  echo "    --sjdb_gtf_chr_prefix"
  echo "        type: string"
  echo "        prefix for chromosome names in a GTF file (e.g. 'chr' for using ENSMEBL"
  echo "        annotations with UCSC genomes)"
  echo ""
  echo "    --sjdb_gtf_feature_exon"
  echo "        type: string"
  echo "        example: exon"
  echo "        feature type in GTF file to be used as exons for building transcripts"
  echo ""
  echo "    --sjdb_gtf_tag_exon_parent_transcript"
  echo "        type: string"
  echo "        example: transcript_id"
  echo "        GTF attribute name for parent transcript ID (default \"transcript_id\""
  echo "        works for GTF files)"
  echo ""
  echo "    --sjdb_gtf_tag_exon_parent_gene"
  echo "        type: string"
  echo "        example: gene_id"
  echo "        GTF attribute name for parent gene ID (default \"gene_id\" works for GTF"
  echo "        files)"
  echo ""
  echo "    --sjdb_gtf_tag_exon_parent_gene_name"
  echo "        type: string, multiple values allowed"
  echo "        example: gene_name"
  echo "        GTF attribute name for parent gene name"
  echo ""
  echo "    --sjdb_gtf_tag_exon_parent_gene_type"
  echo "        type: string, multiple values allowed"
  echo "        example: gene_type;gene_biotype"
  echo "        GTF attribute name for parent gene type"
  echo ""
  echo "    --sjdb_overhang"
  echo "        type: integer"
  echo "        example: 100"
  echo "        length of the donor/acceptor sequence on each side of the junctions,"
  echo "        ideally = (mate_length - 1)"
  echo ""
  echo "    --sjdb_score"
  echo "        type: integer"
  echo "        example: 2"
  echo "        extra alignment score for alignments that cross database junctions"
  echo ""
  echo "    --sjdb_insert_save"
  echo "        type: string"
  echo "        example: Basic"
  echo "        which files to save when sjdb junctions are inserted on the fly at the"
  echo "        mapping step"
  echo "        - Basic ... only small junction / transcript files"
  echo "        - All   ... all files including big Genome, SA and SAindex - this will"
  echo "        create a complete genome directory"
  echo ""
  echo "Variation parameters:"
  echo "    --var_vcf_file"
  echo "        type: string"
  echo "        path to the VCF file that contains variation data. The 10th column"
  echo "        should contain the genotype information, e.g. 0/1"
  echo ""
  echo "Read Parameters:"
  echo "    --read_files_type"
  echo "        type: string"
  echo "        example: Fastx"
  echo "        format of input read files"
  echo "        - Fastx       ... FASTA or FASTQ"
  echo "        - SAM SE      ... SAM or BAM single-end reads; for BAM use"
  echo "        --read_files_command samtools view"
  echo "        - SAM PE      ... SAM or BAM paired-end reads; for BAM use"
  echo "        --read_files_command samtools view"
  echo ""
  echo "    --read_files_sam_attr_keep"
  echo "        type: string, multiple values allowed"
  echo "        example: All"
  echo "        for --read_files_type SAM SE/PE, which SAM tags to keep in the output"
  echo "        BAM, e.g.: --readFilesSAMtagsKeep RG PL"
  echo "        - All     ... keep all tags"
  echo "        - None    ... do not keep any tags"
  echo ""
  echo "    --read_files_manifest"
  echo "        type: file, file must exist"
  echo "        path to the \"manifest\" file with the names of read files. The manifest"
  echo "        file should contain 3 tab-separated columns:"
  echo "        paired-end reads: read1_file_name \$tab\$ read2_file_name \$tab\$"
  echo "        read_group_line."
  echo "        single-end reads: read1_file_name \$tab\$ -               \$tab\$"
  echo "        read_group_line."
  echo "        Spaces, but not tabs are allowed in file names."
  echo "        If read_group_line does not start with ID:, it can only contain one ID"
  echo "        field, and ID: will be added to it."
  echo "        If read_group_line starts with ID:, it can contain several fields"
  echo "        separated by \$tab\$, and all fields will be be copied verbatim into SAM"
  echo "        @RG header line."
  echo ""
  echo "    --read_files_prefix"
  echo "        type: string"
  echo "        prefix for the read files names, i.e. it will be added in front of the"
  echo "        strings in --readFilesIn"
  echo ""
  echo "    --read_files_command"
  echo "        type: string, multiple values allowed"
  echo "        command line to execute for each of the input file. This command should"
  echo "        generate FASTA or FASTQ text and send it to stdout"
  echo "        For example: zcat - to uncompress .gz files, bzcat - to uncompress .bz2"
  echo "        files, etc."
  echo ""
  echo "    --read_map_number"
  echo "        type: integer"
  echo "        example: -1"
  echo "        number of reads to map from the beginning of the file"
  echo "        -1: map all reads"
  echo ""
  echo "    --read_mates_lengths_in"
  echo "        type: string"
  echo "        example: NotEqual"
  echo "        Equal/NotEqual - lengths of names,sequences,qualities for both mates are"
  echo "        the same  / not the same. NotEqual is safe in all situations."
  echo ""
  echo "    --read_name_separator"
  echo "        type: string, multiple values allowed"
  echo "        example: /"
  echo "        character(s) separating the part of the read names that will be trimmed"
  echo "        in output (read name after space is always trimmed)"
  echo ""
  echo "    --read_quality_score_base"
  echo "        type: integer"
  echo "        example: 33"
  echo "        number to be subtracted from the ASCII code to get Phred quality score"
  echo ""
  echo "Read Clipping:"
  echo "    --clip_adapter_type"
  echo "        type: string"
  echo "        example: Hamming"
  echo "        adapter clipping type"
  echo "        - Hamming ... adapter clipping based on Hamming distance, with the"
  echo "        number of mismatches controlled by --clip5pAdapterMMp"
  echo "        - CellRanger4 ... 5p and 3p adapter clipping similar to CellRanger4."
  echo "        Utilizes Opal package by Martin Sosic: https://github.com/Martinsos/opal"
  echo "        - None ... no adapter clipping, all other clip* parameters are"
  echo "        disregarded"
  echo ""
  echo "    --clip3p_nbases"
  echo "        type: integer, multiple values allowed"
  echo "        example: 0"
  echo "        number(s) of bases to clip from 3p of each mate. If one value is given,"
  echo "        it will be assumed the same for both mates."
  echo ""
  echo "    --clip3p_adapter_seq"
  echo "        type: string, multiple values allowed"
  echo "        adapter sequences to clip from 3p of each mate.  If one value is given,"
  echo "        it will be assumed the same for both mates."
  echo "        - polyA ... polyA sequence with the length equal to read length"
  echo ""
  echo "    --clip3p_adapter_mm_p"
  echo "        type: double, multiple values allowed"
  echo "        example: 0.1"
  echo "        max proportion of mismatches for 3p adapter clipping for each mate.  If"
  echo "        one value is given, it will be assumed the same for both mates."
  echo ""
  echo "    --clip3p_after_adapter_nbases"
  echo "        type: integer, multiple values allowed"
  echo "        example: 0"
  echo "        number of bases to clip from 3p of each mate after the adapter clipping."
  echo "        If one value is given, it will be assumed the same for both mates."
  echo ""
  echo "    --clip5p_nbases"
  echo "        type: integer, multiple values allowed"
  echo "        example: 0"
  echo "        number(s) of bases to clip from 5p of each mate. If one value is given,"
  echo "        it will be assumed the same for both mates."
  echo ""
  echo "Limits:"
  echo "    --limit_genome_generate_ram"
  echo "        type: long"
  echo "        example: 31000000000"
  echo "        maximum available RAM (bytes) for genome generation"
  echo ""
  echo "    --limit_io_buffer_size"
  echo "        type: long, multiple values allowed"
  echo "        example: 30000000;50000000"
  echo "        max available buffers size (bytes) for input/output, per thread"
  echo ""
  echo "    --limit_out_sam_one_read_bytes"
  echo "        type: long"
  echo "        example: 100000"
  echo "        max size of the SAM record (bytes) for one read. Recommended value:"
  echo "        >(2*(LengthMate1+LengthMate2+100)*outFilterMultimapNmax"
  echo ""
  echo "    --limit_out_sj_one_read"
  echo "        type: integer"
  echo "        example: 1000"
  echo "        max number of junctions for one read (including all multi-mappers)"
  echo ""
  echo "    --limit_out_sj_collapsed"
  echo "        type: integer"
  echo "        example: 1000000"
  echo "        max number of collapsed junctions"
  echo ""
  echo "    --limit_bam_sort_ram"
  echo "        type: long"
  echo "        example: 0"
  echo "        maximum available RAM (bytes) for sorting BAM. If =0, it will be set to"
  echo "        the genome index size. 0 value can only be used with --genome_load"
  echo "        NoSharedMemory option."
  echo ""
  echo "    --limit_sjdb_insert_nsj"
  echo "        type: integer"
  echo "        example: 1000000"
  echo "        maximum number of junctions to be inserted to the genome on the fly at"
  echo "        the mapping stage, including those from annotations and those detected"
  echo "        in the 1st step of the 2-pass run"
  echo ""
  echo "    --limit_nreads_soft"
  echo "        type: integer"
  echo "        example: -1"
  echo "        soft limit on the number of reads"
  echo ""
  echo "Output: general:"
  echo "    --out_tmp_keep"
  echo "        type: string"
  echo "        whether to keep the temporary files after STAR runs is finished"
  echo "        - None ... remove all temporary files"
  echo "        - All ... keep all files"
  echo ""
  echo "    --out_std"
  echo "        type: string"
  echo "        example: Log"
  echo "        which output will be directed to stdout (standard out)"
  echo "        - Log                    ... log messages"
  echo "        - SAM                    ... alignments in SAM format (which normally"
  echo "        are output to Aligned.out.sam file), normal standard output will go into"
  echo "        Log.std.out"
  echo "        - BAM_Unsorted           ... alignments in BAM format, unsorted."
  echo "        Requires --out_sam_type BAM Unsorted"
  echo "        - BAM_SortedByCoordinate ... alignments in BAM format, sorted by"
  echo "        coordinate. Requires --out_sam_type BAM SortedByCoordinate"
  echo "        - BAM_Quant              ... alignments to transcriptome in BAM format,"
  echo "        unsorted. Requires --quant_mode TranscriptomeSAM"
  echo ""
  echo "    --out_reads_unmapped"
  echo "        type: string"
  echo "        output of unmapped and partially mapped (i.e. mapped only one mate of a"
  echo "        paired end read) reads in separate file(s)."
  echo "        - None    ... no output"
  echo "        - Fastx   ... output in separate fasta/fastq files, Unmapped.out.mate1/2"
  echo ""
  echo "    --out_qs_conversion_add"
  echo "        type: integer"
  echo "        example: 0"
  echo "        add this number to the quality score (e.g. to convert from Illumina to"
  echo "        Sanger, use -31)"
  echo ""
  echo "    --out_multimapper_order"
  echo "        type: string"
  echo "        example: Old_2.4"
  echo "        order of multimapping alignments in the output files"
  echo "        - Old_2.4             ... quasi-random order used before 2.5.0"
  echo "        - Random              ... random order of alignments for each"
  echo "        multi-mapper. Read mates (pairs) are always adjacent, all alignment for"
  echo "        each read stay together. This option will become default in the future"
  echo "        releases."
  echo ""
  echo "Output: SAM and BAM:"
  echo "    --out_sam_type"
  echo "        type: string, multiple values allowed"
  echo "        example: SAM"
  echo "        type of SAM/BAM output"
  echo "        1st word:"
  echo "        - BAM  ... output BAM without sorting"
  echo "        - SAM  ... output SAM without sorting"
  echo "        - None ... no SAM/BAM output"
  echo "        2nd, 3rd:"
  echo "        - Unsorted           ... standard unsorted"
  echo "        - SortedByCoordinate ... sorted by coordinate. This option will allocate"
  echo "        extra memory for sorting which can be specified by --limit_bam_sort_ram."
  echo ""
  echo "    --out_sam_mode"
  echo "        type: string"
  echo "        example: Full"
  echo "        mode of SAM output"
  echo "        - None ... no SAM output"
  echo "        - Full ... full SAM output"
  echo "        - NoQS ... full SAM but without quality scores"
  echo ""
  echo "    --out_sam_strand_field"
  echo "        type: string"
  echo "        Cufflinks-like strand field flag"
  echo "        - None        ... not used"
  echo "        - intronMotif ... strand derived from the intron motif. This option"
  echo "        changes the output alignments: reads with inconsistent and/or"
  echo "        non-canonical introns are filtered out."
  echo ""
  echo "    --out_sam_attributes"
  echo "        type: string, multiple values allowed"
  echo "        example: Standard"
  echo "        a string of desired SAM attributes, in the order desired for the output"
  echo "        SAM. Tags can be listed in any combination/order."
  echo "        ***Presets:"
  echo "        - None        ... no attributes"
  echo "        - Standard    ... NH HI AS nM"
  echo "        - All         ... NH HI AS nM NM MD jM jI MC ch"
  echo "        ***Alignment:"
  echo "        - NH          ... number of loci the reads maps to: =1 for unique"
  echo "        mappers, >1 for multimappers. Standard SAM tag."
  echo "        - HI          ... multiple alignment index, starts with"
  echo "        --out_sam_attr_ih_start (=1 by default). Standard SAM tag."
  echo "        - AS          ... local alignment score, +1/-1 for matches/mismateches,"
  echo "        score* penalties for indels and gaps. For PE reads, total score for two"
  echo "        mates. Stadnard SAM tag."
  echo "        - nM          ... number of mismatches. For PE reads, sum over two"
  echo "        mates."
  echo "        - NM          ... edit distance to the reference (number of mismatched +"
  echo "        inserted + deleted bases) for each mate. Standard SAM tag."
  echo "        - MD          ... string encoding mismatched and deleted reference bases"
  echo "        (see standard SAM specifications). Standard SAM tag."
  echo "        - jM          ... intron motifs for all junctions (i.e. N in CIGAR): 0:"
  echo "        non-canonical; 1: GT/AG, 2: CT/AC, 3: GC/AG, 4: CT/GC, 5: AT/AC, 6:"
  echo "        GT/AT. If splice junctions database is used, and a junction is"
  echo "        annotated, 20 is added to its motif value."
  echo "        - jI          ... start and end of introns for all junctions (1-based)."
  echo "        - XS          ... alignment strand according to --out_sam_strand_field."
  echo "        - MC          ... mate's CIGAR string. Standard SAM tag."
  echo "        - ch          ... marks all segment of all chimeric alingments for"
  echo "        --chim_out_type WithinBAM output."
  echo "        - cN          ... number of bases clipped from the read ends: 5' and 3'"
  echo "        ***Variation:"
  echo "        - vA          ... variant allele"
  echo "        - vG          ... genomic coordinate of the variant overlapped by the"
  echo "        read."
  echo "        - vW          ... 1 - alignment passes WASP filtering; 2,3,4,5,6,7 -"
  echo "        alignment does not pass WASP filtering. Requires --wasp_output_mode"
  echo "        SAMtag."
  echo "        - ha          ... haplotype (1/2) when mapping to the diploid genome."
  echo "        Requires genome generated with --genomeTransformType Diploid ."
  echo "        ***STARsolo:"
  echo "        - CR CY UR UY ... sequences and quality scores of cell barcodes and UMIs"
  echo "        for the solo* demultiplexing."
  echo "        - GX GN       ... gene ID and gene name for unique-gene reads."
  echo "        - gx gn       ... gene IDs and gene names for unique- and multi-gene"
  echo "        reads."
  echo "        - CB UB       ... error-corrected cell barcodes and UMIs for solo*"
  echo "        demultiplexing. Requires --out_sam_type BAM SortedByCoordinate."
  echo "        - sM          ... assessment of CB and UMI."
  echo "        - sS          ... sequence of the entire barcode (CB,UMI,adapter)."
  echo "        - sQ          ... quality of the entire barcode."
  echo "        - sF          ... type of feature overlap and number of features for"
  echo "        each alignment"
  echo "        ***Unsupported/undocumented:"
  echo "        - rB          ... alignment block read/genomic coordinates."
  echo "        - vR          ... read coordinate of the variant."
  echo ""
  echo "    --out_sam_attr_ih_start"
  echo "        type: integer"
  echo "        example: 1"
  echo "        start value for the IH attribute. 0 may be required by some downstream"
  echo "        software, such as Cufflinks or StringTie."
  echo ""
  echo "    --out_sam_unmapped"
  echo "        type: string, multiple values allowed"
  echo "        output of unmapped reads in the SAM format"
  echo "        1st word:"
  echo "        - None   ... no output"
  echo "        - Within ... output unmapped reads within the main SAM file (i.e."
  echo "        Aligned.out.sam)"
  echo "        2nd word:"
  echo "        - KeepPairs ... record unmapped mate for each alignment, and, in case of"
  echo "        unsorted output, keep it adjacent to its mapped mate. Only affects"
  echo "        multi-mapping reads."
  echo ""
  echo "    --out_sam_order"
  echo "        type: string"
  echo "        example: Paired"
  echo "        type of sorting for the SAM output"
  echo "        Paired: one mate after the other for all paired alignments"
  echo "        PairedKeepInputOrder: one mate after the other for all paired"
  echo "        alignments, the order is kept the same as in the input FASTQ files"
  echo ""
  echo "    --out_sam_primary_flag"
  echo "        type: string"
  echo "        example: OneBestScore"
  echo "        which alignments are considered primary - all others will be marked with"
  echo "        0x100 bit in the FLAG"
  echo "        - OneBestScore ... only one alignment with the best score is primary"
  echo "        - AllBestScore ... all alignments with the best score are primary"
  echo ""
  echo "    --out_sam_read_id"
  echo "        type: string"
  echo "        example: Standard"
  echo "        read ID record type"
  echo "        - Standard ... first word (until space) from the FASTx read ID line,"
  echo "        removing /1,/2 from the end"
  echo "        - Number   ... read number (index) in the FASTx file"
  echo ""
  echo "    --out_sam_mapq_unique"
  echo "        type: integer"
  echo "        example: 255"
  echo "        0 to 255: the MAPQ value for unique mappers"
  echo ""
  echo "    --out_sam_flag_or"
  echo "        type: integer"
  echo "        example: 0"
  echo "        0 to 65535: sam FLAG will be bitwise OR'd with this value, i.e."
  echo "        FLAG=FLAG | outSAMflagOR. This is applied after all flags have been set"
  echo "        by STAR, and after outSAMflagAND. Can be used to set specific bits that"
  echo "        are not set otherwise."
  echo ""
  echo "    --out_sam_flag_and"
  echo "        type: integer"
  echo "        example: 65535"
  echo "        0 to 65535: sam FLAG will be bitwise AND'd with this value, i.e."
  echo "        FLAG=FLAG & outSAMflagOR. This is applied after all flags have been set"
  echo "        by STAR, but before outSAMflagOR. Can be used to unset specific bits"
  echo "        that are not set otherwise."
  echo ""
  echo "    --out_sam_attr_rg_line"
  echo "        type: string, multiple values allowed"
  echo "        SAM/BAM read group line. The first word contains the read group"
  echo "        identifier and must start with \"ID:\", e.g. --out_sam_attr_rg_line ID:xxx"
  echo "        CN:yy \"DS:z z z\"."
  echo "        xxx will be added as RG tag to each output alignment. Any spaces in the"
  echo "        tag values have to be double quoted."
  echo "        Comma separated RG lines correspons to different (comma separated) input"
  echo "        files in --readFilesIn. Commas have to be surrounded by spaces, e.g."
  echo "        --out_sam_attr_rg_line ID:xxx , ID:zzz \"DS:z z\" , ID:yyy DS:yyyy"
  echo ""
  echo "    --out_sam_header_hd"
  echo "        type: string, multiple values allowed"
  echo "        @HD (header) line of the SAM header"
  echo ""
  echo "    --out_sam_header_pg"
  echo "        type: string, multiple values allowed"
  echo "        extra @PG (software) line of the SAM header (in addition to STAR)"
  echo ""
  echo "    --out_sam_header_comment_file"
  echo "        type: string"
  echo "        path to the file with @CO (comment) lines of the SAM header"
  echo ""
  echo "    --out_sam_filter"
  echo "        type: string, multiple values allowed"
  echo "        filter the output into main SAM/BAM files"
  echo "        - KeepOnlyAddedReferences ... only keep the reads for which all"
  echo "        alignments are to the extra reference sequences added with"
  echo "        --genome_fasta_files at the mapping stage."
  echo "        - KeepAllAddedReferences ...  keep all alignments to the extra reference"
  echo "        sequences added with --genome_fasta_files at the mapping stage."
  echo ""
  echo "    --out_sam_mult_nmax"
  echo "        type: integer"
  echo "        example: -1"
  echo "        max number of multiple alignments for a read that will be output to the"
  echo "        SAM/BAM files. Note that if this value is not equal to -1, the top"
  echo "        scoring alignment will be output first"
  echo "        - -1 ... all alignments (up to --out_filter_multimap_nmax) will be"
  echo "        output"
  echo ""
  echo "    --out_sam_tlen"
  echo "        type: integer"
  echo "        example: 1"
  echo "        calculation method for the TLEN field in the SAM/BAM files"
  echo "        - 1 ... leftmost base of the (+)strand mate to rightmost base of the"
  echo "        (-)mate. (+)sign for the (+)strand mate"
  echo "        - 2 ... leftmost base of any mate to rightmost base of any mate. (+)sign"
  echo "        for the mate with the leftmost base. This is different from 1 for"
  echo "        overlapping mates with protruding ends"
  echo ""
  echo "    --out_bam_compression"
  echo "        type: integer"
  echo "        example: 1"
  echo "        -1 to 10  BAM compression level, -1=default compression (6?), 0=no"
  echo "        compression, 10=maximum compression"
  echo ""
  echo "    --out_bam_sorting_thread_n"
  echo "        type: integer"
  echo "        example: 0"
  echo "        >=0: number of threads for BAM sorting. 0 will default to"
  echo "        min(6,--runThreadN)."
  echo ""
  echo "    --out_bam_sorting_bins_n"
  echo "        type: integer"
  echo "        example: 50"
  echo "        >0:  number of genome bins for coordinate-sorting"
  echo ""
  echo "BAM processing:"
  echo "    --bam_remove_duplicates_type"
  echo "        type: string"
  echo "        mark duplicates in the BAM file, for now only works with (i) sorted BAM"
  echo "        fed with inputBAMfile, and (ii) for paired-end alignments only"
  echo "        - -                       ... no duplicate removal/marking"
  echo "        - UniqueIdentical         ... mark all multimappers, and duplicate"
  echo "        unique mappers. The coordinates, FLAG, CIGAR must be identical"
  echo "        - UniqueIdenticalNotMulti  ... mark duplicate unique mappers but not"
  echo "        multimappers."
  echo ""
  echo "    --bam_remove_duplicates_mate2bases_n"
  echo "        type: integer"
  echo "        example: 0"
  echo "        number of bases from the 5' of mate 2 to use in collapsing (e.g. for"
  echo "        RAMPAGE)"
  echo ""
  echo "Output Wiggle:"
  echo "    --out_wig_type"
  echo "        type: string, multiple values allowed"
  echo "        type of signal output, e.g. \"bedGraph\" OR \"bedGraph read1_5p\". Requires"
  echo "        sorted BAM: --out_sam_type BAM SortedByCoordinate ."
  echo "        1st word:"
  echo "        - None       ... no signal output"
  echo "        - bedGraph   ... bedGraph format"
  echo "        - wiggle     ... wiggle format"
  echo "        2nd word:"
  echo "        - read1_5p   ... signal from only 5' of the 1st read, useful for"
  echo "        CAGE/RAMPAGE etc"
  echo "        - read2      ... signal from only 2nd read"
  echo ""
  echo "    --out_wig_strand"
  echo "        type: string"
  echo "        example: Stranded"
  echo "        strandedness of wiggle/bedGraph output"
  echo "        - Stranded   ...  separate strands, str1 and str2"
  echo "        - Unstranded ...  collapsed strands"
  echo ""
  echo "    --out_wig_references_prefix"
  echo "        type: string"
  echo "        prefix matching reference names to include in the output wiggle file,"
  echo "        e.g. \"chr\", default \"-\" - include all references"
  echo ""
  echo "    --out_wig_norm"
  echo "        type: string"
  echo "        example: RPM"
  echo "        type of normalization for the signal"
  echo "        - RPM    ... reads per million of mapped reads"
  echo "        - None   ... no normalization, \"raw\" counts"
  echo ""
  echo "Output Filtering:"
  echo "    --out_filter_type"
  echo "        type: string"
  echo "        example: Normal"
  echo "        type of filtering"
  echo "        - Normal  ... standard filtering using only current alignment"
  echo "        - BySJout ... keep only those reads that contain junctions that passed"
  echo "        filtering into SJ.out.tab"
  echo ""
  echo "    --out_filter_multimap_score_range"
  echo "        type: integer"
  echo "        example: 1"
  echo "        the score range below the maximum score for multimapping alignments"
  echo ""
  echo "    --out_filter_multimap_nmax"
  echo "        type: integer"
  echo "        example: 10"
  echo "        maximum number of loci the read is allowed to map to. Alignments (all of"
  echo "        them) will be output only if the read maps to no more loci than this"
  echo "        value."
  echo "        Otherwise no alignments will be output, and the read will be counted as"
  echo "        \"mapped to too many loci\" in the Log.final.out ."
  echo ""
  echo "    --out_filter_mismatch_nmax"
  echo "        type: integer"
  echo "        example: 10"
  echo "        alignment will be output only if it has no more mismatches than this"
  echo "        value."
  echo ""
  echo "    --out_filter_mismatch_nover_lmax"
  echo "        type: double"
  echo "        example: 0.3"
  echo "        alignment will be output only if its ratio of mismatches to *mapped*"
  echo "        length is less than or equal to this value."
  echo ""
  echo "    --out_filter_mismatch_nover_read_lmax"
  echo "        type: double"
  echo "        example: 1.0"
  echo "        alignment will be output only if its ratio of mismatches to *read*"
  echo "        length is less than or equal to this value."
  echo ""
  echo "    --out_filter_score_min"
  echo "        type: integer"
  echo "        example: 0"
  echo "        alignment will be output only if its score is higher than or equal to"
  echo "        this value."
  echo ""
  echo "    --out_filter_score_min_over_lread"
  echo "        type: double"
  echo "        example: 0.66"
  echo "        same as outFilterScoreMin, but normalized to read length (sum of mates'"
  echo "        lengths for paired-end reads)"
  echo ""
  echo "    --out_filter_match_nmin"
  echo "        type: integer"
  echo "        example: 0"
  echo "        alignment will be output only if the number of matched bases is higher"
  echo "        than or equal to this value."
  echo ""
  echo "    --out_filter_match_nmin_over_lread"
  echo "        type: double"
  echo "        example: 0.66"
  echo "        sam as outFilterMatchNmin, but normalized to the read length (sum of"
  echo "        mates' lengths for paired-end reads)."
  echo ""
  echo "    --out_filter_intron_motifs"
  echo "        type: string"
  echo "        filter alignment using their motifs"
  echo "        - None                           ... no filtering"
  echo "        - RemoveNoncanonical             ... filter out alignments that contain"
  echo "        non-canonical junctions"
  echo "        - RemoveNoncanonicalUnannotated  ... filter out alignments that contain"
  echo "        non-canonical unannotated junctions when using annotated splice"
  echo "        junctions database. The annotated non-canonical junctions will be kept."
  echo ""
  echo "    --out_filter_intron_strands"
  echo "        type: string"
  echo "        example: RemoveInconsistentStrands"
  echo "        filter alignments"
  echo "        - RemoveInconsistentStrands      ... remove alignments that have"
  echo "        junctions with inconsistent strands"
  echo "        - None                           ... no filtering"
  echo ""
  echo "Output splice junctions (SJ.out.tab):"
  echo "    --out_sj_type"
  echo "        type: string"
  echo "        example: Standard"
  echo "        type of splice junction output"
  echo "        - Standard    ... standard SJ.out.tab output"
  echo "        - None        ... no splice junction output"
  echo ""
  echo "Output Filtering: Splice Junctions:"
  echo "    --out_sj_filter_reads"
  echo "        type: string"
  echo "        example: All"
  echo "        which reads to consider for collapsed splice junctions output"
  echo "        - All     ... all reads, unique- and multi-mappers"
  echo "        - Unique  ... uniquely mapping reads only"
  echo ""
  echo "    --out_sj_filter_overhang_min"
  echo "        type: integer, multiple values allowed"
  echo "        example: 30;12;12;12"
  echo "        minimum overhang length for splice junctions on both sides for: (1)"
  echo "        non-canonical motifs, (2) GT/AG and CT/AC motif, (3) GC/AG and CT/GC"
  echo "        motif, (4) AT/AC and GT/AT motif. -1 means no output for that motif"
  echo "        does not apply to annotated junctions"
  echo ""
  echo "    --out_sj_filter_count_unique_min"
  echo "        type: integer, multiple values allowed"
  echo "        example: 3;1;1;1"
  echo "        minimum uniquely mapping read count per junction for: (1) non-canonical"
  echo "        motifs, (2) GT/AG and CT/AC motif, (3) GC/AG and CT/GC motif, (4) AT/AC"
  echo "        and GT/AT motif. -1 means no output for that motif"
  echo "        Junctions are output if one of outSJfilterCountUniqueMin OR"
  echo "        outSJfilterCountTotalMin conditions are satisfied"
  echo "        does not apply to annotated junctions"
  echo ""
  echo "    --out_sj_filter_count_total_min"
  echo "        type: integer, multiple values allowed"
  echo "        example: 3;1;1;1"
  echo "        minimum total (multi-mapping+unique) read count per junction for: (1)"
  echo "        non-canonical motifs, (2) GT/AG and CT/AC motif, (3) GC/AG and CT/GC"
  echo "        motif, (4) AT/AC and GT/AT motif. -1 means no output for that motif"
  echo "        Junctions are output if one of outSJfilterCountUniqueMin OR"
  echo "        outSJfilterCountTotalMin conditions are satisfied"
  echo "        does not apply to annotated junctions"
  echo ""
  echo "    --out_sj_filter_dist_to_other_sj_min"
  echo "        type: integer, multiple values allowed"
  echo "        example: 10;0;5;10"
  echo "        minimum allowed distance to other junctions' donor/acceptor"
  echo "        does not apply to annotated junctions"
  echo ""
  echo "    --out_sj_filter_intron_max_vs_read_n"
  echo "        type: integer, multiple values allowed"
  echo "        example: 50000;100000;200000"
  echo "        maximum gap allowed for junctions supported by 1,2,3,,,N reads"
  echo "        i.e. by default junctions supported by 1 read can have gaps <=50000b, by"
  echo "        2 reads: <=100000b, by 3 reads: <=200000. by >=4 reads any gap"
  echo "        <=alignIntronMax"
  echo "        does not apply to annotated junctions"
  echo ""
  echo "Scoring:"
  echo "    --score_gap"
  echo "        type: integer"
  echo "        example: 0"
  echo "        splice junction penalty (independent on intron motif)"
  echo ""
  echo "    --score_gap_noncan"
  echo "        type: integer"
  echo "        example: -8"
  echo "        non-canonical junction penalty (in addition to scoreGap)"
  echo ""
  echo "    --score_gap_gcag"
  echo "        type: integer"
  echo "        example: -4"
  echo "        GC/AG and CT/GC junction penalty (in addition to scoreGap)"
  echo ""
  echo "    --score_gap_atac"
  echo "        type: integer"
  echo "        example: -8"
  echo "        AT/AC  and GT/AT junction penalty  (in addition to scoreGap)"
  echo ""
  echo "    --score_genomic_length_log2scale"
  echo "        type: integer"
  echo "        example: 0"
  echo "        extra score logarithmically scaled with genomic length of the alignment:"
  echo "        scoreGenomicLengthLog2scale*log2(genomicLength)"
  echo ""
  echo "    --score_del_open"
  echo "        type: integer"
  echo "        example: -2"
  echo "        deletion open penalty"
  echo ""
  echo "    --score_del_base"
  echo "        type: integer"
  echo "        example: -2"
  echo "        deletion extension penalty per base (in addition to scoreDelOpen)"
  echo ""
  echo "    --score_ins_open"
  echo "        type: integer"
  echo "        example: -2"
  echo "        insertion open penalty"
  echo ""
  echo "    --score_ins_base"
  echo "        type: integer"
  echo "        example: -2"
  echo "        insertion extension penalty per base (in addition to scoreInsOpen)"
  echo ""
  echo "    --score_stitch_sj_shift"
  echo "        type: integer"
  echo "        example: 1"
  echo "        maximum score reduction while searching for SJ boundaries in the"
  echo "        stitching step"
  echo ""
  echo "Alignments and Seeding:"
  echo "    --seed_search_start_lmax"
  echo "        type: integer"
  echo "        example: 50"
  echo "        defines the search start point through the read - the read is split into"
  echo "        pieces no longer than this value"
  echo ""
  echo "    --seed_search_start_lmax_over_lread"
  echo "        type: double"
  echo "        example: 1.0"
  echo "        seedSearchStartLmax normalized to read length (sum of mates' lengths for"
  echo "        paired-end reads)"
  echo ""
  echo "    --seed_search_lmax"
  echo "        type: integer"
  echo "        example: 0"
  echo "        defines the maximum length of the seeds, if =0 seed length is not"
  echo "        limited"
  echo ""
  echo "    --seed_multimap_nmax"
  echo "        type: integer"
  echo "        example: 10000"
  echo "        only pieces that map fewer than this value are utilized in the stitching"
  echo "        procedure"
  echo ""
  echo "    --seed_per_read_nmax"
  echo "        type: integer"
  echo "        example: 1000"
  echo "        max number of seeds per read"
  echo ""
  echo "    --seed_per_window_nmax"
  echo "        type: integer"
  echo "        example: 50"
  echo "        max number of seeds per window"
  echo ""
  echo "    --seed_none_loci_per_window"
  echo "        type: integer"
  echo "        example: 10"
  echo "        max number of one seed loci per window"
  echo ""
  echo "    --seed_split_min"
  echo "        type: integer"
  echo "        example: 12"
  echo "        min length of the seed sequences split by Ns or mate gap"
  echo ""
  echo "    --seed_map_min"
  echo "        type: integer"
  echo "        example: 5"
  echo "        min length of seeds to be mapped"
  echo ""
  echo "    --align_intron_min"
  echo "        type: integer"
  echo "        example: 21"
  echo "        minimum intron size, genomic gap is considered intron if its"
  echo "        length>=alignIntronMin, otherwise it is considered Deletion"
  echo ""
  echo "    --align_intron_max"
  echo "        type: integer"
  echo "        example: 0"
  echo "        maximum intron size, if 0, max intron size will be determined by"
  echo "        (2^winBinNbits)*winAnchorDistNbins"
  echo ""
  echo "    --align_mates_gap_max"
  echo "        type: integer"
  echo "        example: 0"
  echo "        maximum gap between two mates, if 0, max intron gap will be determined"
  echo "        by (2^winBinNbits)*winAnchorDistNbins"
  echo ""
  echo "    --align_sj_overhang_min"
  echo "        type: integer"
  echo "        example: 5"
  echo "        minimum overhang (i.e. block size) for spliced alignments"
  echo ""
  echo "    --align_sj_stitch_mismatch_nmax"
  echo "        type: integer, multiple values allowed"
  echo "        example: 0;-1;0;0"
  echo "        maximum number of mismatches for stitching of the splice junctions (-1:"
  echo "        no limit)."
  echo "        (1) non-canonical motifs, (2) GT/AG and CT/AC motif, (3) GC/AG and CT/GC"
  echo "        motif, (4) AT/AC and GT/AT motif."
  echo ""
  echo "    --align_sjdb_overhang_min"
  echo "        type: integer"
  echo "        example: 3"
  echo "        minimum overhang (i.e. block size) for annotated (sjdb) spliced"
  echo "        alignments"
  echo ""
  echo "    --align_spliced_mate_map_lmin"
  echo "        type: integer"
  echo "        example: 0"
  echo "        minimum mapped length for a read mate that is spliced"
  echo ""
  echo "    --align_spliced_mate_map_lmin_over_lmate"
  echo "        type: double"
  echo "        example: 0.66"
  echo "        alignSplicedMateMapLmin normalized to mate length"
  echo ""
  echo "    --align_windows_per_read_nmax"
  echo "        type: integer"
  echo "        example: 10000"
  echo "        max number of windows per read"
  echo ""
  echo "    --align_transcripts_per_window_nmax"
  echo "        type: integer"
  echo "        example: 100"
  echo "        max number of transcripts per window"
  echo ""
  echo "    --align_transcripts_per_read_nmax"
  echo "        type: integer"
  echo "        example: 10000"
  echo "        max number of different alignments per read to consider"
  echo ""
  echo "    --align_ends_type"
  echo "        type: string"
  echo "        example: Local"
  echo "        type of read ends alignment"
  echo "        - Local             ... standard local alignment with soft-clipping"
  echo "        allowed"
  echo "        - EndToEnd          ... force end-to-end read alignment, do not"
  echo "        soft-clip"
  echo "        - Extend5pOfRead1   ... fully extend only the 5p of the read1, all other"
  echo "        ends: local alignment"
  echo "        - Extend5pOfReads12 ... fully extend only the 5p of the both read1 and"
  echo "        read2, all other ends: local alignment"
  echo ""
  echo "    --align_ends_protrude"
  echo "        type: string"
  echo "        example: 0    ConcordantPair"
  echo "        allow protrusion of alignment ends, i.e. start (end) of the +strand mate"
  echo "        downstream of the start (end) of the -strand mate"
  echo "        1st word: int: maximum number of protrusion bases allowed"
  echo "        2nd word: string:"
  echo "        -                     ConcordantPair ... report alignments with non-zero"
  echo "        protrusion as concordant pairs"
  echo "        -                     DiscordantPair ... report alignments with non-zero"
  echo "        protrusion as discordant pairs"
  echo ""
  echo "    --align_soft_clip_at_reference_ends"
  echo "        type: string"
  echo "        example: Yes"
  echo "        allow the soft-clipping of the alignments past the end of the"
  echo "        chromosomes"
  echo "        - Yes ... allow"
  echo "        - No  ... prohibit, useful for compatibility with Cufflinks"
  echo ""
  echo "    --align_insertion_flush"
  echo "        type: string"
  echo "        how to flush ambiguous insertion positions"
  echo "        - None    ... insertions are not flushed"
  echo "        - Right   ... insertions are flushed to the right"
  echo ""
  echo "Paired-End reads:"
  echo "    --pe_overlap_nbases_min"
  echo "        type: integer"
  echo "        example: 0"
  echo "        minimum number of overlapping bases to trigger mates merging and"
  echo "        realignment. Specify >0 value to switch on the \"merginf of overlapping"
  echo "        mates\" algorithm."
  echo ""
  echo "    --pe_overlap_mm_p"
  echo "        type: double"
  echo "        example: 0.01"
  echo "        maximum proportion of mismatched bases in the overlap area"
  echo ""
  echo "Windows, Anchors, Binning:"
  echo "    --win_anchor_multimap_nmax"
  echo "        type: integer"
  echo "        example: 50"
  echo "        max number of loci anchors are allowed to map to"
  echo ""
  echo "    --win_bin_nbits"
  echo "        type: integer"
  echo "        example: 16"
  echo "        =log2(winBin), where winBin is the size of the bin for the"
  echo "        windows/clustering, each window will occupy an integer number of bins."
  echo ""
  echo "    --win_anchor_dist_nbins"
  echo "        type: integer"
  echo "        example: 9"
  echo "        max number of bins between two anchors that allows aggregation of"
  echo "        anchors into one window"
  echo ""
  echo "    --win_flank_nbins"
  echo "        type: integer"
  echo "        example: 4"
  echo "        log2(winFlank), where win Flank is the size of the left and right"
  echo "        flanking regions for each window"
  echo ""
  echo "    --win_read_coverage_relative_min"
  echo "        type: double"
  echo "        example: 0.5"
  echo "        minimum relative coverage of the read sequence by the seeds in a window,"
  echo "        for STARlong algorithm only."
  echo ""
  echo "    --win_read_coverage_bases_min"
  echo "        type: integer"
  echo "        example: 0"
  echo "        minimum number of bases covered by the seeds in a window , for STARlong"
  echo "        algorithm only."
  echo ""
  echo "Chimeric Alignments:"
  echo "    --chim_out_type"
  echo "        type: string, multiple values allowed"
  echo "        example: Junctions"
  echo "        type of chimeric output"
  echo "        - Junctions       ... Chimeric.out.junction"
  echo "        - SeparateSAMold  ... output old SAM into separate Chimeric.out.sam file"
  echo "        - WithinBAM       ... output into main aligned BAM files (Aligned.*.bam)"
  echo "        - WithinBAM HardClip  ... (default) hard-clipping in the CIGAR for"
  echo "        supplemental chimeric alignments (default if no 2nd word is present)"
  echo "        - WithinBAM SoftClip  ... soft-clipping in the CIGAR for supplemental"
  echo "        chimeric alignments"
  echo ""
  echo "    --chim_segment_min"
  echo "        type: integer"
  echo "        example: 0"
  echo "        minimum length of chimeric segment length, if ==0, no chimeric output"
  echo ""
  echo "    --chim_score_min"
  echo "        type: integer"
  echo "        example: 0"
  echo "        minimum total (summed) score of the chimeric segments"
  echo ""
  echo "    --chim_score_drop_max"
  echo "        type: integer"
  echo "        example: 20"
  echo "        max drop (difference) of chimeric score (the sum of scores of all"
  echo "        chimeric segments) from the read length"
  echo ""
  echo "    --chim_score_separation"
  echo "        type: integer"
  echo "        example: 10"
  echo "        minimum difference (separation) between the best chimeric score and the"
  echo "        next one"
  echo ""
  echo "    --chim_score_junction_non_gtag"
  echo "        type: integer"
  echo "        example: -1"
  echo "        penalty for a non-GT/AG chimeric junction"
  echo ""
  echo "    --chim_junction_overhang_min"
  echo "        type: integer"
  echo "        example: 20"
  echo "        minimum overhang for a chimeric junction"
  echo ""
  echo "    --chim_segment_read_gap_max"
  echo "        type: integer"
  echo "        example: 0"
  echo "        maximum gap in the read sequence between chimeric segments"
  echo ""
  echo "    --chim_filter"
  echo "        type: string, multiple values allowed"
  echo "        example: banGenomicN"
  echo "        different filters for chimeric alignments"
  echo "        - None ... no filtering"
  echo "        - banGenomicN ... Ns are not allowed in the genome sequence around the"
  echo "        chimeric junction"
  echo ""
  echo "    --chim_main_segment_mult_nmax"
  echo "        type: integer"
  echo "        example: 10"
  echo "        maximum number of multi-alignments for the main chimeric segment. =1"
  echo "        will prohibit multimapping main segments."
  echo ""
  echo "    --chim_multimap_nmax"
  echo "        type: integer"
  echo "        example: 0"
  echo "        maximum number of chimeric multi-alignments"
  echo "        - 0 ... use the old scheme for chimeric detection which only considered"
  echo "        unique alignments"
  echo ""
  echo "    --chim_multimap_score_range"
  echo "        type: integer"
  echo "        example: 1"
  echo "        the score range for multi-mapping chimeras below the best chimeric"
  echo "        score. Only works with --chim_multimap_nmax > 1"
  echo ""
  echo "    --chim_nonchim_score_drop_min"
  echo "        type: integer"
  echo "        example: 20"
  echo "        to trigger chimeric detection, the drop in the best non-chimeric"
  echo "        alignment score with respect to the read length has to be greater than"
  echo "        this value"
  echo ""
  echo "    --chim_out_junction_format"
  echo "        type: integer"
  echo "        example: 0"
  echo "        formatting type for the Chimeric.out.junction file"
  echo "        - 0 ... no comment lines/headers"
  echo "        - 1 ... comment lines at the end of the file: command line and Nreads:"
  echo "        total, unique/multi-mapping"
  echo ""
  echo "Quantification of Annotations:"
  echo "    --quant_mode"
  echo "        type: string, multiple values allowed"
  echo "        types of quantification requested"
  echo "        - -                ... none"
  echo "        - TranscriptomeSAM ... output SAM/BAM alignments to transcriptome into a"
  echo "        separate file"
  echo "        - GeneCounts       ... count reads per gene"
  echo ""
  echo "    --quant_transcriptome_bam_compression"
  echo "        type: integer"
  echo "        example: 1"
  echo "        -2 to 10  transcriptome BAM compression level"
  echo "        - -2  ... no BAM output"
  echo "        - -1  ... default compression (6?)"
  echo "        -  0  ... no compression"
  echo "        -  10 ... maximum compression"
  echo ""
  echo "    --quant_transcriptome_sam_output"
  echo "        type: string"
  echo "        example: BanSingleEnd_BanIndels_ExtendSoftclip"
  echo "        alignment filtering for TranscriptomeSAM output"
  echo "        - BanSingleEnd_BanIndels_ExtendSoftclip ... prohibit indels and"
  echo "        single-end alignments, extend softclips - compatible with RSEM"
  echo "        - BanSingleEnd               ... prohibit single-end alignments, allow"
  echo "        indels and softclips"
  echo "        - BanSingleEnd_ExtendSoftclip ... prohibit single-end alignments, extend"
  echo "        softclips, allow indels"
  echo ""
  echo "2-pass Mapping:"
  echo "    --twopass_mode"
  echo "        type: string"
  echo "        2-pass mapping mode."
  echo "        - None        ... 1-pass mapping"
  echo "        - Basic       ... basic 2-pass mapping, with all 1st pass junctions"
  echo "        inserted into the genome indices on the fly"
  echo ""
  echo "    --twopass1reads_n"
  echo "        type: integer"
  echo "        example: -1"
  echo "        number of reads to process for the 1st step. Use very large number (or"
  echo "        default -1) to map all reads in the first step."
  echo ""
  echo "WASP parameters:"
  echo "    --wasp_output_mode"
  echo "        type: string"
  echo "        WASP allele-specific output type. This is re-implementation of the"
  echo "        original WASP mappability filtering by Bryce van de Geijn, Graham"
  echo "        McVicker, Yoav Gilad & Jonathan K Pritchard. Please cite the original"
  echo "        WASP paper: Nature Methods 12, 1061-1063 (2015),"
  echo "        https://www.nature.com/articles/nmeth.3582 ."
  echo "        - SAMtag      ... add WASP tags to the alignments that pass WASP"
  echo "        filtering"
  echo ""
  echo "STARsolo (single cell RNA-seq) parameters:"
  echo "    --solo_type"
  echo "        type: string, multiple values allowed"
  echo "        type of single-cell RNA-seq"
  echo "        - CB_UMI_Simple   ... (a.k.a. Droplet) one UMI and one Cell Barcode of"
  echo "        fixed length in read2, e.g. Drop-seq and 10X Chromium."
  echo "        - CB_UMI_Complex  ... multiple Cell Barcodes of varying length, one UMI"
  echo "        of fixed length and one adapter sequence of fixed length are allowed in"
  echo "        read2 only (e.g. inDrop, ddSeq)."
  echo "        - CB_samTagOut    ... output Cell Barcode as CR and/or CB SAm tag. No"
  echo "        UMI counting. --readFilesIn cDNA_read1 [cDNA_read2 if paired-end]"
  echo "        CellBarcode_read . Requires --out_sam_type BAM Unsorted [and/or"
  echo "        SortedByCoordinate]"
  echo "        - SmartSeq        ... Smart-seq: each cell in a separate FASTQ (paired-"
  echo "        or single-end), barcodes are corresponding read-groups, no UMI"
  echo "        sequences, alignments deduplicated according to alignment start and end"
  echo "        (after extending soft-clipped bases)"
  echo ""
  echo "    --solo_cb_type"
  echo "        type: string"
  echo "        example: Sequence"
  echo "        cell barcode type"
  echo "        Sequence: cell barcode is a sequence (standard option)"
  echo "        String: cell barcode is an arbitrary string"
  echo ""
  echo "    --solo_cb_whitelist"
  echo "        type: string, multiple values allowed"
  echo "        file(s) with whitelist(s) of cell barcodes. Only --solo_type"
  echo "        CB_UMI_Complex allows more than one whitelist file."
  echo "        - None            ... no whitelist: all cell barcodes are allowed"
  echo ""
  echo "    --solo_cb_start"
  echo "        type: integer"
  echo "        example: 1"
  echo "        cell barcode start base"
  echo ""
  echo "    --solo_cb_len"
  echo "        type: integer"
  echo "        example: 16"
  echo "        cell barcode length"
  echo ""
  echo "    --solo_umi_start"
  echo "        type: integer"
  echo "        example: 17"
  echo "        UMI start base"
  echo ""
  echo "    --solo_umi_len"
  echo "        type: integer"
  echo "        example: 10"
  echo "        UMI length"
  echo ""
  echo "    --solo_barcode_read_length"
  echo "        type: integer"
  echo "        example: 1"
  echo "        length of the barcode read"
  echo "        - 1   ... equal to sum of soloCBlen+soloUMIlen"
  echo "        - 0   ... not defined, do not check"
  echo ""
  echo "    --solo_barcode_mate"
  echo "        type: integer"
  echo "        example: 0"
  echo "        identifies which read mate contains the barcode (CB+UMI) sequence"
  echo "        - 0   ... barcode sequence is on separate read, which should always be"
  echo "        the last file in the --readFilesIn listed"
  echo "        - 1   ... barcode sequence is a part of mate 1"
  echo "        - 2   ... barcode sequence is a part of mate 2"
  echo ""
  echo "    --solo_cb_position"
  echo "        type: string, multiple values allowed"
  echo "        position of Cell Barcode(s) on the barcode read."
  echo "        Presently only works with --solo_type CB_UMI_Complex, and barcodes are"
  echo "        assumed to be on Read2."
  echo "        Format for each barcode: startAnchor_startPosition_endAnchor_endPosition"
  echo "        start(end)Anchor defines the Anchor Base for the CB: 0: read start; 1:"
  echo "        read end; 2: adapter start; 3: adapter end"
  echo "        start(end)Position is the 0-based position with of the CB start(end)"
  echo "        with respect to the Anchor Base"
  echo "        String for different barcodes are separated by space."
  echo "        Example: inDrop (Zilionis et al, Nat. Protocols, 2017):"
  echo "        --solo_cb_position  0_0_2_-1  3_1_3_8"
  echo ""
  echo "    --solo_umi_position"
  echo "        type: string"
  echo "        position of the UMI on the barcode read, same as soloCBposition"
  echo "        Example: inDrop (Zilionis et al, Nat. Protocols, 2017):"
  echo "        --solo_cb_position  3_9_3_14"
  echo ""
  echo "    --solo_adapter_sequence"
  echo "        type: string"
  echo "        adapter sequence to anchor barcodes. Only one adapter sequence is"
  echo "        allowed."
  echo ""
  echo "    --solo_adapter_mismatches_nmax"
  echo "        type: integer"
  echo "        example: 1"
  echo "        maximum number of mismatches allowed in adapter sequence."
  echo ""
  echo "    --solo_cb_match_wl_type"
  echo "        type: string"
  echo "        example: 1MM_multi"
  echo "        matching the Cell Barcodes to the WhiteList"
  echo "        - Exact                           ... only exact matches allowed"
  echo "        - 1MM                             ... only one match in whitelist with 1"
  echo "        mismatched base allowed. Allowed CBs have to have at least one read with"
  echo "        exact match."
  echo "        - 1MM_multi                       ... multiple matches in whitelist with"
  echo "        1 mismatched base allowed, posterior probability calculation is used"
  echo "        choose one of the matches."
  echo "        Allowed CBs have to have at least one read with exact match. This option"
  echo "        matches best with CellRanger 2.2.0"
  echo "        - 1MM_multi_pseudocounts          ... same as 1MM_Multi, but"
  echo "        pseudocounts of 1 are added to all whitelist barcodes."
  echo "        - 1MM_multi_Nbase_pseudocounts    ... same as 1MM_multi_pseudocounts,"
  echo "        multimatching to WL is allowed for CBs with N-bases. This option matches"
  echo "        best with CellRanger >= 3.0.0"
  echo "        - EditDist_2                    ... allow up to edit distance of 3 fpr"
  echo "        each of the barcodes. May include one deletion + one insertion. Only"
  echo "        works with --solo_type CB_UMI_Complex. Matches to multiple passlist"
  echo "        barcdoes are not allowed. Similar to ParseBio Split-seq pipeline."
  echo ""
  echo "    --solo_input_sam_attr_barcode_seq"
  echo "        type: string, multiple values allowed"
  echo "        when inputting reads from a SAM file (--readsFileType SAM SE/PE), these"
  echo "        SAM attributes mark the barcode sequence (in proper order)."
  echo "        For instance, for 10X CellRanger or STARsolo BAMs, use"
  echo "        --solo_input_sam_attr_barcode_seq CR UR ."
  echo "        This parameter is required when running STARsolo with input from SAM."
  echo ""
  echo "    --solo_input_sam_attr_barcode_qual"
  echo "        type: string, multiple values allowed"
  echo "        when inputting reads from a SAM file (--readsFileType SAM SE/PE), these"
  echo "        SAM attributes mark the barcode qualities (in proper order)."
  echo "        For instance, for 10X CellRanger or STARsolo BAMs, use"
  echo "        --solo_input_sam_attr_barcode_qual CY UY ."
  echo "        If this parameter is '-' (default), the quality 'H' will be assigned to"
  echo "        all bases."
  echo ""
  echo "    --solo_strand"
  echo "        type: string"
  echo "        example: Forward"
  echo "        strandedness of the solo libraries:"
  echo "        - Unstranded  ... no strand information"
  echo "        - Forward     ... read strand same as the original RNA molecule"
  echo "        - Reverse     ... read strand opposite to the original RNA molecule"
  echo ""
  echo "    --solo_features"
  echo "        type: string, multiple values allowed"
  echo "        example: Gene"
  echo "        genomic features for which the UMI counts per Cell Barcode are collected"
  echo "        - Gene            ... genes: reads match the gene transcript"
  echo "        - SJ              ... splice junctions: reported in SJ.out.tab"
  echo "        - GeneFull        ... full gene (pre-mRNA): count all reads overlapping"
  echo "        genes' exons and introns"
  echo "        - GeneFull_ExonOverIntron ... full gene (pre-mRNA): count all reads"
  echo "        overlapping genes' exons and introns: prioritize 100% overlap with exons"
  echo "        - GeneFull_Ex50pAS        ... full gene (pre-RNA): count all reads"
  echo "        overlapping genes' exons and introns: prioritize >50% overlap with"
  echo "        exons. Do not count reads with 100% exonic overlap in the antisense"
  echo "        direction."
  echo ""
  echo "    --solo_multi_mappers"
  echo "        type: string, multiple values allowed"
  echo "        example: Unique"
  echo "        counting method for reads mapping to multiple genes"
  echo "        - Unique     ... count only reads that map to unique genes"
  echo "        - Uniform    ... uniformly distribute multi-genic UMIs to all genes"
  echo "        - Rescue     ... distribute UMIs proportionally to unique+uniform counts"
  echo "        (~ first iteration of EM)"
  echo "        - PropUnique ... distribute UMIs proportionally to unique mappers, if"
  echo "        present, and uniformly if not."
  echo "        - EM         ... multi-gene UMIs are distributed using Expectation"
  echo "        Maximization algorithm"
  echo ""
  echo "    --solo_umi_dedup"
  echo "        type: string, multiple values allowed"
  echo "        example: 1MM_All"
  echo "        type of UMI deduplication (collapsing) algorithm"
  echo "        - 1MM_All                     ... all UMIs with 1 mismatch distance to"
  echo "        each other are collapsed (i.e. counted once)."
  echo "        - 1MM_Directional_UMItools    ... follows the \"directional\" method from"
  echo "        the UMI-tools by Smith, Heger and Sudbery (Genome Research 2017)."
  echo "        - 1MM_Directional             ... same as 1MM_Directional_UMItools, but"
  echo "        with more stringent criteria for duplicate UMIs"
  echo "        - Exact                       ... only exactly matching UMIs are"
  echo "        collapsed."
  echo "        - NoDedup                     ... no deduplication of UMIs, count all"
  echo "        reads."
  echo "        - 1MM_CR                      ... CellRanger2-4 algorithm for 1MM UMI"
  echo "        collapsing."
  echo ""
  echo "    --solo_umi_filtering"
  echo "        type: string, multiple values allowed"
  echo "        type of UMI filtering (for reads uniquely mapping to genes)"
  echo "        - -                  ... basic filtering: remove UMIs with N and"
  echo "        homopolymers (similar to CellRanger 2.2.0)."
  echo "        - MultiGeneUMI       ... basic + remove lower-count UMIs that map to"
  echo "        more than one gene."
  echo "        - MultiGeneUMI_All   ... basic + remove all UMIs that map to more than"
  echo "        one gene."
  echo "        - MultiGeneUMI_CR    ... basic + remove lower-count UMIs that map to"
  echo "        more than one gene, matching CellRanger > 3.0.0 ."
  echo "        Only works with --solo_umi_dedup 1MM_CR"
  echo ""
  echo "    --solo_out_file_names"
  echo "        type: string, multiple values allowed"
  echo "        example: Solo.out/;features.tsv;barcodes.tsv;matrix.mtx"
  echo "        file names for STARsolo output:"
  echo "        file_name_prefix   gene_names   barcode_sequences"
  echo "        cell_feature_count_matrix"
  echo ""
  echo "    --solo_cell_filter"
  echo "        type: string, multiple values allowed"
  echo "        example: CellRanger2.2;3000;0.99;10"
  echo "        cell filtering type and parameters"
  echo "        - None            ... do not output filtered cells"
  echo "        - TopCells        ... only report top cells by UMI count, followed by"
  echo "        the exact number of cells"
  echo "        - CellRanger2.2   ... simple filtering of CellRanger 2.2."
  echo "        Can be followed by numbers: number of expected cells, robust maximum"
  echo "        percentile for UMI count, maximum to minimum ratio for UMI count"
  echo "        The harcoded values are from CellRanger: nExpectedCells=3000;"
  echo "        maxPercentile=0.99;  maxMinRatio=10"
  echo "        - EmptyDrops_CR   ... EmptyDrops filtering in CellRanger flavor. Please"
  echo "        cite the original EmptyDrops paper: A.T.L Lun et al, Genome Biology, 20,"
  echo "        63 (2019):"
  echo "       "
  echo "https://genomebiology.biomedcentral.com/articles/10.1186/s13059-019-1662-y"
  echo "        Can be followed by 10 numeric parameters:  nExpectedCells"
  echo "        maxPercentile   maxMinRatio   indMin   indMax   umiMin"
  echo "        umiMinFracMedian   candMaxN   FDR   simN"
  echo "        The harcoded values are from CellRanger:             3000"
  echo "        0.99            10    45000    90000      500               0.01"
  echo "        20000  0.01  10000"
  echo ""
  echo "    --solo_out_format_features_gene_field3"
  echo "        type: string, multiple values allowed"
  echo "        example: Gene Expression"
  echo "        field 3 in the Gene features.tsv file. If \"-\", then no 3rd field is"
  echo "        output."
  echo ""
  echo "    --solo_cell_read_stats"
  echo "        type: string"
  echo "        Output reads statistics for each CB"
  echo "        - Standard    ... standard output"
  echo ""
  echo "Inputs:"
  echo "    --readFilesIn, --input"
  echo "        type: file, required parameter, multiple values allowed, file must exist"
  echo "        example: mysample_S1_L001_R1_001.fastq.gz"
  echo "        The single-end or paired-end R1 FastQ files to be processed."
  echo ""
  echo "    --input_r2"
  echo "        type: file, multiple values allowed, file must exist"
  echo "        example: mysample_S1_L001_R2_001.fastq.gz"
  echo "        The paired-end R2 FastQ files to be processed. Only required if --input"
  echo "        is a paired-end R1 file."
  echo ""
  echo "Outputs:"
  echo "    --aligned_reads"
  echo "        type: file, required parameter, output, file must exist"
  echo "        example: aligned_reads.bam"
  echo "        The output file containing the aligned reads."
  echo ""
  echo "    --reads_per_gene"
  echo "        type: file, output, file must exist"
  echo "        example: reads_per_gene.tsv"
  echo "        The output file containing the number of reads per gene."
  echo ""
  echo "    --unmapped"
  echo "        type: file, output, file must exist"
  echo "        example: unmapped.fastq"
  echo "        The output file containing the unmapped reads."
  echo ""
  echo "    --unmapped_r2"
  echo "        type: file, output, file must exist"
  echo "        example: unmapped_r2.fastq"
  echo "        The output file containing the unmapped R2 reads."
  echo ""
  echo "    --chimeric_junctions"
  echo "        type: file, output, file must exist"
  echo "        example: chimeric_junctions.tsv"
  echo "        The output file containing the chimeric junctions."
  echo ""
  echo "    --log"
  echo "        type: file, output, file must exist"
  echo "        example: log.txt"
  echo "        The output file containing the log of the alignment process."
  echo ""
  echo "    --splice_junctions"
  echo "        type: file, output, file must exist"
  echo "        example: splice_junctions.tsv"
  echo "        The output file containing the splice junctions."
  echo ""
  echo "    --reads_aligned_to_transcriptome"
  echo "        type: file, output, file must exist"
  echo "        example: transcriptome_aligned.bam"
  echo "        The output file containing the alignments to transcriptome in BAM"
  echo "        formats. This file is generated when --quantMode is set to"
  echo "        TranscriptomeSAM."
}

# 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 python:3.12-slim
ENTRYPOINT []
RUN apt-get update && \
  DEBIAN_FRONTEND=noninteractive apt-get install -y procps gzip bzip2 && \
  rm -rf /var/lib/apt/lists/*

ENV STAR_VERSION 2.7.11b
ENV PACKAGES gcc g++ make wget zlib1g-dev unzip xxd
RUN apt-get update && \
  apt-get install -y --no-install-recommends ${PACKAGES} && \
  cd /tmp && \
  wget --no-check-certificate https://github.com/alexdobin/STAR/archive/refs/tags/${STAR_VERSION}.zip && \
  unzip ${STAR_VERSION}.zip && \
  cd STAR-${STAR_VERSION}/source && \
  make STARstatic CXXFLAGS_SIMD=-std=c++11 && \
  cp STAR /usr/local/bin && \
  cd / && \
  rm -rf /tmp/STAR-${STAR_VERSION} /tmp/${STAR_VERSION}.zip && \
  apt-get --purge autoremove -y ${PACKAGES} && \
  apt-get clean

RUN pip install --upgrade pip && \
  pip install --upgrade --no-cache-dir "pyyaml"

RUN STAR --version | sed 's#\(.*\)#star: "\1"#' > /var/software_versions.txt

LABEL org.opencontainers.image.authors="Angela Oliveira Pisco, Robrecht Cannoodt"
LABEL org.opencontainers.image.description="Companion container for running component star star_align_reads"
LABEL org.opencontainers.image.created="2024-12-03T10:39:43Z"
LABEL org.opencontainers.image.source="https://github.com/alexdobin/STAR"
LABEL org.opencontainers.image.revision="d86bd5cf62104af02caa852aacd352b1aa97ed60"
LABEL org.opencontainers.image.version="v0.3.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)

# 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 "star_align_reads v0.3.0"
            exit
            ;;
        --run_rng_seed)
            [ -n "$VIASH_PAR_RUN_RNG_SEED" ] && ViashError Bad arguments for option \'--run_rng_seed\': \'$VIASH_PAR_RUN_RNG_SEED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_RUN_RNG_SEED="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --run_rng_seed. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --run_rng_seed=*)
            [ -n "$VIASH_PAR_RUN_RNG_SEED" ] && ViashError Bad arguments for option \'--run_rng_seed=*\': \'$VIASH_PAR_RUN_RNG_SEED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_RUN_RNG_SEED=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --genome_dir)
            [ -n "$VIASH_PAR_GENOME_DIR" ] && ViashError Bad arguments for option \'--genome_dir\': \'$VIASH_PAR_GENOME_DIR\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_GENOME_DIR="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --genome_dir. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --genome_dir=*)
            [ -n "$VIASH_PAR_GENOME_DIR" ] && ViashError Bad arguments for option \'--genome_dir=*\': \'$VIASH_PAR_GENOME_DIR\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_GENOME_DIR=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --genome_load)
            [ -n "$VIASH_PAR_GENOME_LOAD" ] && ViashError Bad arguments for option \'--genome_load\': \'$VIASH_PAR_GENOME_LOAD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_GENOME_LOAD="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --genome_load. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --genome_load=*)
            [ -n "$VIASH_PAR_GENOME_LOAD" ] && ViashError Bad arguments for option \'--genome_load=*\': \'$VIASH_PAR_GENOME_LOAD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_GENOME_LOAD=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --genome_fasta_files)
            if [ -z "$VIASH_PAR_GENOME_FASTA_FILES" ]; then
              VIASH_PAR_GENOME_FASTA_FILES="$2"
            else
              VIASH_PAR_GENOME_FASTA_FILES="$VIASH_PAR_GENOME_FASTA_FILES;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --genome_fasta_files. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --genome_fasta_files=*)
            if [ -z "$VIASH_PAR_GENOME_FASTA_FILES" ]; then
              VIASH_PAR_GENOME_FASTA_FILES=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_GENOME_FASTA_FILES="$VIASH_PAR_GENOME_FASTA_FILES;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --genome_file_sizes)
            if [ -z "$VIASH_PAR_GENOME_FILE_SIZES" ]; then
              VIASH_PAR_GENOME_FILE_SIZES="$2"
            else
              VIASH_PAR_GENOME_FILE_SIZES="$VIASH_PAR_GENOME_FILE_SIZES;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --genome_file_sizes. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --genome_file_sizes=*)
            if [ -z "$VIASH_PAR_GENOME_FILE_SIZES" ]; then
              VIASH_PAR_GENOME_FILE_SIZES=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_GENOME_FILE_SIZES="$VIASH_PAR_GENOME_FILE_SIZES;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --genome_transform_output)
            if [ -z "$VIASH_PAR_GENOME_TRANSFORM_OUTPUT" ]; then
              VIASH_PAR_GENOME_TRANSFORM_OUTPUT="$2"
            else
              VIASH_PAR_GENOME_TRANSFORM_OUTPUT="$VIASH_PAR_GENOME_TRANSFORM_OUTPUT;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --genome_transform_output. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --genome_transform_output=*)
            if [ -z "$VIASH_PAR_GENOME_TRANSFORM_OUTPUT" ]; then
              VIASH_PAR_GENOME_TRANSFORM_OUTPUT=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_GENOME_TRANSFORM_OUTPUT="$VIASH_PAR_GENOME_TRANSFORM_OUTPUT;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --genome_chr_set_mitochondrial)
            if [ -z "$VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL" ]; then
              VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL="$2"
            else
              VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL="$VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --genome_chr_set_mitochondrial. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --genome_chr_set_mitochondrial=*)
            if [ -z "$VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL" ]; then
              VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL="$VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --sjdb_file_chr_start_end)
            if [ -z "$VIASH_PAR_SJDB_FILE_CHR_START_END" ]; then
              VIASH_PAR_SJDB_FILE_CHR_START_END="$2"
            else
              VIASH_PAR_SJDB_FILE_CHR_START_END="$VIASH_PAR_SJDB_FILE_CHR_START_END;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_file_chr_start_end. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_file_chr_start_end=*)
            if [ -z "$VIASH_PAR_SJDB_FILE_CHR_START_END" ]; then
              VIASH_PAR_SJDB_FILE_CHR_START_END=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SJDB_FILE_CHR_START_END="$VIASH_PAR_SJDB_FILE_CHR_START_END;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --sjdb_gtf_file)
            [ -n "$VIASH_PAR_SJDB_GTF_FILE" ] && ViashError Bad arguments for option \'--sjdb_gtf_file\': \'$VIASH_PAR_SJDB_GTF_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_FILE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_gtf_file. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_gtf_file=*)
            [ -n "$VIASH_PAR_SJDB_GTF_FILE" ] && ViashError Bad arguments for option \'--sjdb_gtf_file=*\': \'$VIASH_PAR_SJDB_GTF_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_FILE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --sjdb_gtf_chr_prefix)
            [ -n "$VIASH_PAR_SJDB_GTF_CHR_PREFIX" ] && ViashError Bad arguments for option \'--sjdb_gtf_chr_prefix\': \'$VIASH_PAR_SJDB_GTF_CHR_PREFIX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_CHR_PREFIX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_gtf_chr_prefix. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_gtf_chr_prefix=*)
            [ -n "$VIASH_PAR_SJDB_GTF_CHR_PREFIX" ] && ViashError Bad arguments for option \'--sjdb_gtf_chr_prefix=*\': \'$VIASH_PAR_SJDB_GTF_CHR_PREFIX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_CHR_PREFIX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --sjdb_gtf_feature_exon)
            [ -n "$VIASH_PAR_SJDB_GTF_FEATURE_EXON" ] && ViashError Bad arguments for option \'--sjdb_gtf_feature_exon\': \'$VIASH_PAR_SJDB_GTF_FEATURE_EXON\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_FEATURE_EXON="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_gtf_feature_exon. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_gtf_feature_exon=*)
            [ -n "$VIASH_PAR_SJDB_GTF_FEATURE_EXON" ] && ViashError Bad arguments for option \'--sjdb_gtf_feature_exon=*\': \'$VIASH_PAR_SJDB_GTF_FEATURE_EXON\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_FEATURE_EXON=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --sjdb_gtf_tag_exon_parent_transcript)
            [ -n "$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_TRANSCRIPT" ] && ViashError Bad arguments for option \'--sjdb_gtf_tag_exon_parent_transcript\': \'$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_TRANSCRIPT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_TRANSCRIPT="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_gtf_tag_exon_parent_transcript. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_gtf_tag_exon_parent_transcript=*)
            [ -n "$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_TRANSCRIPT" ] && ViashError Bad arguments for option \'--sjdb_gtf_tag_exon_parent_transcript=*\': \'$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_TRANSCRIPT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_TRANSCRIPT=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --sjdb_gtf_tag_exon_parent_gene)
            [ -n "$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE" ] && ViashError Bad arguments for option \'--sjdb_gtf_tag_exon_parent_gene\': \'$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_gtf_tag_exon_parent_gene. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_gtf_tag_exon_parent_gene=*)
            [ -n "$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE" ] && ViashError Bad arguments for option \'--sjdb_gtf_tag_exon_parent_gene=*\': \'$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --sjdb_gtf_tag_exon_parent_gene_name)
            if [ -z "$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME" ]; then
              VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME="$2"
            else
              VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME="$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_gtf_tag_exon_parent_gene_name. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_gtf_tag_exon_parent_gene_name=*)
            if [ -z "$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME" ]; then
              VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME="$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --sjdb_gtf_tag_exon_parent_gene_type)
            if [ -z "$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE" ]; then
              VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE="$2"
            else
              VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE="$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_gtf_tag_exon_parent_gene_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_gtf_tag_exon_parent_gene_type=*)
            if [ -z "$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE" ]; then
              VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE="$VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --sjdb_overhang)
            [ -n "$VIASH_PAR_SJDB_OVERHANG" ] && ViashError Bad arguments for option \'--sjdb_overhang\': \'$VIASH_PAR_SJDB_OVERHANG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_OVERHANG="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_overhang. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_overhang=*)
            [ -n "$VIASH_PAR_SJDB_OVERHANG" ] && ViashError Bad arguments for option \'--sjdb_overhang=*\': \'$VIASH_PAR_SJDB_OVERHANG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_OVERHANG=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --sjdb_score)
            [ -n "$VIASH_PAR_SJDB_SCORE" ] && ViashError Bad arguments for option \'--sjdb_score\': \'$VIASH_PAR_SJDB_SCORE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_SCORE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_score. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_score=*)
            [ -n "$VIASH_PAR_SJDB_SCORE" ] && ViashError Bad arguments for option \'--sjdb_score=*\': \'$VIASH_PAR_SJDB_SCORE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_SCORE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --sjdb_insert_save)
            [ -n "$VIASH_PAR_SJDB_INSERT_SAVE" ] && ViashError Bad arguments for option \'--sjdb_insert_save\': \'$VIASH_PAR_SJDB_INSERT_SAVE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_INSERT_SAVE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --sjdb_insert_save. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --sjdb_insert_save=*)
            [ -n "$VIASH_PAR_SJDB_INSERT_SAVE" ] && ViashError Bad arguments for option \'--sjdb_insert_save=*\': \'$VIASH_PAR_SJDB_INSERT_SAVE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SJDB_INSERT_SAVE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --var_vcf_file)
            [ -n "$VIASH_PAR_VAR_VCF_FILE" ] && ViashError Bad arguments for option \'--var_vcf_file\': \'$VIASH_PAR_VAR_VCF_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_VAR_VCF_FILE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --var_vcf_file. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --var_vcf_file=*)
            [ -n "$VIASH_PAR_VAR_VCF_FILE" ] && ViashError Bad arguments for option \'--var_vcf_file=*\': \'$VIASH_PAR_VAR_VCF_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_VAR_VCF_FILE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --read_files_type)
            [ -n "$VIASH_PAR_READ_FILES_TYPE" ] && ViashError Bad arguments for option \'--read_files_type\': \'$VIASH_PAR_READ_FILES_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_FILES_TYPE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_files_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_files_type=*)
            [ -n "$VIASH_PAR_READ_FILES_TYPE" ] && ViashError Bad arguments for option \'--read_files_type=*\': \'$VIASH_PAR_READ_FILES_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_FILES_TYPE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --read_files_sam_attr_keep)
            if [ -z "$VIASH_PAR_READ_FILES_SAM_ATTR_KEEP" ]; then
              VIASH_PAR_READ_FILES_SAM_ATTR_KEEP="$2"
            else
              VIASH_PAR_READ_FILES_SAM_ATTR_KEEP="$VIASH_PAR_READ_FILES_SAM_ATTR_KEEP;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_files_sam_attr_keep. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_files_sam_attr_keep=*)
            if [ -z "$VIASH_PAR_READ_FILES_SAM_ATTR_KEEP" ]; then
              VIASH_PAR_READ_FILES_SAM_ATTR_KEEP=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_READ_FILES_SAM_ATTR_KEEP="$VIASH_PAR_READ_FILES_SAM_ATTR_KEEP;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --read_files_manifest)
            [ -n "$VIASH_PAR_READ_FILES_MANIFEST" ] && ViashError Bad arguments for option \'--read_files_manifest\': \'$VIASH_PAR_READ_FILES_MANIFEST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_FILES_MANIFEST="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_files_manifest. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_files_manifest=*)
            [ -n "$VIASH_PAR_READ_FILES_MANIFEST" ] && ViashError Bad arguments for option \'--read_files_manifest=*\': \'$VIASH_PAR_READ_FILES_MANIFEST\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_FILES_MANIFEST=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --read_files_prefix)
            [ -n "$VIASH_PAR_READ_FILES_PREFIX" ] && ViashError Bad arguments for option \'--read_files_prefix\': \'$VIASH_PAR_READ_FILES_PREFIX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_FILES_PREFIX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_files_prefix. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_files_prefix=*)
            [ -n "$VIASH_PAR_READ_FILES_PREFIX" ] && ViashError Bad arguments for option \'--read_files_prefix=*\': \'$VIASH_PAR_READ_FILES_PREFIX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_FILES_PREFIX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --read_files_command)
            if [ -z "$VIASH_PAR_READ_FILES_COMMAND" ]; then
              VIASH_PAR_READ_FILES_COMMAND="$2"
            else
              VIASH_PAR_READ_FILES_COMMAND="$VIASH_PAR_READ_FILES_COMMAND;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_files_command. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_files_command=*)
            if [ -z "$VIASH_PAR_READ_FILES_COMMAND" ]; then
              VIASH_PAR_READ_FILES_COMMAND=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_READ_FILES_COMMAND="$VIASH_PAR_READ_FILES_COMMAND;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --read_map_number)
            [ -n "$VIASH_PAR_READ_MAP_NUMBER" ] && ViashError Bad arguments for option \'--read_map_number\': \'$VIASH_PAR_READ_MAP_NUMBER\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_MAP_NUMBER="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_map_number. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_map_number=*)
            [ -n "$VIASH_PAR_READ_MAP_NUMBER" ] && ViashError Bad arguments for option \'--read_map_number=*\': \'$VIASH_PAR_READ_MAP_NUMBER\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_MAP_NUMBER=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --read_mates_lengths_in)
            [ -n "$VIASH_PAR_READ_MATES_LENGTHS_IN" ] && ViashError Bad arguments for option \'--read_mates_lengths_in\': \'$VIASH_PAR_READ_MATES_LENGTHS_IN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_MATES_LENGTHS_IN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_mates_lengths_in. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_mates_lengths_in=*)
            [ -n "$VIASH_PAR_READ_MATES_LENGTHS_IN" ] && ViashError Bad arguments for option \'--read_mates_lengths_in=*\': \'$VIASH_PAR_READ_MATES_LENGTHS_IN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_MATES_LENGTHS_IN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --read_name_separator)
            if [ -z "$VIASH_PAR_READ_NAME_SEPARATOR" ]; then
              VIASH_PAR_READ_NAME_SEPARATOR="$2"
            else
              VIASH_PAR_READ_NAME_SEPARATOR="$VIASH_PAR_READ_NAME_SEPARATOR;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_name_separator. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_name_separator=*)
            if [ -z "$VIASH_PAR_READ_NAME_SEPARATOR" ]; then
              VIASH_PAR_READ_NAME_SEPARATOR=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_READ_NAME_SEPARATOR="$VIASH_PAR_READ_NAME_SEPARATOR;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --read_quality_score_base)
            [ -n "$VIASH_PAR_READ_QUALITY_SCORE_BASE" ] && ViashError Bad arguments for option \'--read_quality_score_base\': \'$VIASH_PAR_READ_QUALITY_SCORE_BASE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_QUALITY_SCORE_BASE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --read_quality_score_base. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --read_quality_score_base=*)
            [ -n "$VIASH_PAR_READ_QUALITY_SCORE_BASE" ] && ViashError Bad arguments for option \'--read_quality_score_base=*\': \'$VIASH_PAR_READ_QUALITY_SCORE_BASE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READ_QUALITY_SCORE_BASE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --clip_adapter_type)
            [ -n "$VIASH_PAR_CLIP_ADAPTER_TYPE" ] && ViashError Bad arguments for option \'--clip_adapter_type\': \'$VIASH_PAR_CLIP_ADAPTER_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CLIP_ADAPTER_TYPE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --clip_adapter_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --clip_adapter_type=*)
            [ -n "$VIASH_PAR_CLIP_ADAPTER_TYPE" ] && ViashError Bad arguments for option \'--clip_adapter_type=*\': \'$VIASH_PAR_CLIP_ADAPTER_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CLIP_ADAPTER_TYPE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --clip3p_nbases)
            if [ -z "$VIASH_PAR_CLIP3P_NBASES" ]; then
              VIASH_PAR_CLIP3P_NBASES="$2"
            else
              VIASH_PAR_CLIP3P_NBASES="$VIASH_PAR_CLIP3P_NBASES;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --clip3p_nbases. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --clip3p_nbases=*)
            if [ -z "$VIASH_PAR_CLIP3P_NBASES" ]; then
              VIASH_PAR_CLIP3P_NBASES=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_CLIP3P_NBASES="$VIASH_PAR_CLIP3P_NBASES;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --clip3p_adapter_seq)
            if [ -z "$VIASH_PAR_CLIP3P_ADAPTER_SEQ" ]; then
              VIASH_PAR_CLIP3P_ADAPTER_SEQ="$2"
            else
              VIASH_PAR_CLIP3P_ADAPTER_SEQ="$VIASH_PAR_CLIP3P_ADAPTER_SEQ;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --clip3p_adapter_seq. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --clip3p_adapter_seq=*)
            if [ -z "$VIASH_PAR_CLIP3P_ADAPTER_SEQ" ]; then
              VIASH_PAR_CLIP3P_ADAPTER_SEQ=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_CLIP3P_ADAPTER_SEQ="$VIASH_PAR_CLIP3P_ADAPTER_SEQ;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --clip3p_adapter_mm_p)
            if [ -z "$VIASH_PAR_CLIP3P_ADAPTER_MM_P" ]; then
              VIASH_PAR_CLIP3P_ADAPTER_MM_P="$2"
            else
              VIASH_PAR_CLIP3P_ADAPTER_MM_P="$VIASH_PAR_CLIP3P_ADAPTER_MM_P;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --clip3p_adapter_mm_p. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --clip3p_adapter_mm_p=*)
            if [ -z "$VIASH_PAR_CLIP3P_ADAPTER_MM_P" ]; then
              VIASH_PAR_CLIP3P_ADAPTER_MM_P=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_CLIP3P_ADAPTER_MM_P="$VIASH_PAR_CLIP3P_ADAPTER_MM_P;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --clip3p_after_adapter_nbases)
            if [ -z "$VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES" ]; then
              VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES="$2"
            else
              VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES="$VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --clip3p_after_adapter_nbases. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --clip3p_after_adapter_nbases=*)
            if [ -z "$VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES" ]; then
              VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES="$VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --clip5p_nbases)
            if [ -z "$VIASH_PAR_CLIP5P_NBASES" ]; then
              VIASH_PAR_CLIP5P_NBASES="$2"
            else
              VIASH_PAR_CLIP5P_NBASES="$VIASH_PAR_CLIP5P_NBASES;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --clip5p_nbases. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --clip5p_nbases=*)
            if [ -z "$VIASH_PAR_CLIP5P_NBASES" ]; then
              VIASH_PAR_CLIP5P_NBASES=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_CLIP5P_NBASES="$VIASH_PAR_CLIP5P_NBASES;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --limit_genome_generate_ram)
            [ -n "$VIASH_PAR_LIMIT_GENOME_GENERATE_RAM" ] && ViashError Bad arguments for option \'--limit_genome_generate_ram\': \'$VIASH_PAR_LIMIT_GENOME_GENERATE_RAM\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_GENOME_GENERATE_RAM="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --limit_genome_generate_ram. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --limit_genome_generate_ram=*)
            [ -n "$VIASH_PAR_LIMIT_GENOME_GENERATE_RAM" ] && ViashError Bad arguments for option \'--limit_genome_generate_ram=*\': \'$VIASH_PAR_LIMIT_GENOME_GENERATE_RAM\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_GENOME_GENERATE_RAM=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --limit_io_buffer_size)
            if [ -z "$VIASH_PAR_LIMIT_IO_BUFFER_SIZE" ]; then
              VIASH_PAR_LIMIT_IO_BUFFER_SIZE="$2"
            else
              VIASH_PAR_LIMIT_IO_BUFFER_SIZE="$VIASH_PAR_LIMIT_IO_BUFFER_SIZE;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --limit_io_buffer_size. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --limit_io_buffer_size=*)
            if [ -z "$VIASH_PAR_LIMIT_IO_BUFFER_SIZE" ]; then
              VIASH_PAR_LIMIT_IO_BUFFER_SIZE=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_LIMIT_IO_BUFFER_SIZE="$VIASH_PAR_LIMIT_IO_BUFFER_SIZE;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --limit_out_sam_one_read_bytes)
            [ -n "$VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES" ] && ViashError Bad arguments for option \'--limit_out_sam_one_read_bytes\': \'$VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --limit_out_sam_one_read_bytes. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --limit_out_sam_one_read_bytes=*)
            [ -n "$VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES" ] && ViashError Bad arguments for option \'--limit_out_sam_one_read_bytes=*\': \'$VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --limit_out_sj_one_read)
            [ -n "$VIASH_PAR_LIMIT_OUT_SJ_ONE_READ" ] && ViashError Bad arguments for option \'--limit_out_sj_one_read\': \'$VIASH_PAR_LIMIT_OUT_SJ_ONE_READ\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_OUT_SJ_ONE_READ="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --limit_out_sj_one_read. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --limit_out_sj_one_read=*)
            [ -n "$VIASH_PAR_LIMIT_OUT_SJ_ONE_READ" ] && ViashError Bad arguments for option \'--limit_out_sj_one_read=*\': \'$VIASH_PAR_LIMIT_OUT_SJ_ONE_READ\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_OUT_SJ_ONE_READ=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --limit_out_sj_collapsed)
            [ -n "$VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED" ] && ViashError Bad arguments for option \'--limit_out_sj_collapsed\': \'$VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --limit_out_sj_collapsed. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --limit_out_sj_collapsed=*)
            [ -n "$VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED" ] && ViashError Bad arguments for option \'--limit_out_sj_collapsed=*\': \'$VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --limit_bam_sort_ram)
            [ -n "$VIASH_PAR_LIMIT_BAM_SORT_RAM" ] && ViashError Bad arguments for option \'--limit_bam_sort_ram\': \'$VIASH_PAR_LIMIT_BAM_SORT_RAM\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_BAM_SORT_RAM="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --limit_bam_sort_ram. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --limit_bam_sort_ram=*)
            [ -n "$VIASH_PAR_LIMIT_BAM_SORT_RAM" ] && ViashError Bad arguments for option \'--limit_bam_sort_ram=*\': \'$VIASH_PAR_LIMIT_BAM_SORT_RAM\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_BAM_SORT_RAM=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --limit_sjdb_insert_nsj)
            [ -n "$VIASH_PAR_LIMIT_SJDB_INSERT_NSJ" ] && ViashError Bad arguments for option \'--limit_sjdb_insert_nsj\': \'$VIASH_PAR_LIMIT_SJDB_INSERT_NSJ\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_SJDB_INSERT_NSJ="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --limit_sjdb_insert_nsj. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --limit_sjdb_insert_nsj=*)
            [ -n "$VIASH_PAR_LIMIT_SJDB_INSERT_NSJ" ] && ViashError Bad arguments for option \'--limit_sjdb_insert_nsj=*\': \'$VIASH_PAR_LIMIT_SJDB_INSERT_NSJ\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_SJDB_INSERT_NSJ=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --limit_nreads_soft)
            [ -n "$VIASH_PAR_LIMIT_NREADS_SOFT" ] && ViashError Bad arguments for option \'--limit_nreads_soft\': \'$VIASH_PAR_LIMIT_NREADS_SOFT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_NREADS_SOFT="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --limit_nreads_soft. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --limit_nreads_soft=*)
            [ -n "$VIASH_PAR_LIMIT_NREADS_SOFT" ] && ViashError Bad arguments for option \'--limit_nreads_soft=*\': \'$VIASH_PAR_LIMIT_NREADS_SOFT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_LIMIT_NREADS_SOFT=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_tmp_keep)
            [ -n "$VIASH_PAR_OUT_TMP_KEEP" ] && ViashError Bad arguments for option \'--out_tmp_keep\': \'$VIASH_PAR_OUT_TMP_KEEP\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_TMP_KEEP="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_tmp_keep. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_tmp_keep=*)
            [ -n "$VIASH_PAR_OUT_TMP_KEEP" ] && ViashError Bad arguments for option \'--out_tmp_keep=*\': \'$VIASH_PAR_OUT_TMP_KEEP\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_TMP_KEEP=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_std)
            [ -n "$VIASH_PAR_OUT_STD" ] && ViashError Bad arguments for option \'--out_std\': \'$VIASH_PAR_OUT_STD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_STD="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_std. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_std=*)
            [ -n "$VIASH_PAR_OUT_STD" ] && ViashError Bad arguments for option \'--out_std=*\': \'$VIASH_PAR_OUT_STD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_STD=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_reads_unmapped)
            [ -n "$VIASH_PAR_OUT_READS_UNMAPPED" ] && ViashError Bad arguments for option \'--out_reads_unmapped\': \'$VIASH_PAR_OUT_READS_UNMAPPED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_READS_UNMAPPED="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_reads_unmapped. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_reads_unmapped=*)
            [ -n "$VIASH_PAR_OUT_READS_UNMAPPED" ] && ViashError Bad arguments for option \'--out_reads_unmapped=*\': \'$VIASH_PAR_OUT_READS_UNMAPPED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_READS_UNMAPPED=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_qs_conversion_add)
            [ -n "$VIASH_PAR_OUT_QS_CONVERSION_ADD" ] && ViashError Bad arguments for option \'--out_qs_conversion_add\': \'$VIASH_PAR_OUT_QS_CONVERSION_ADD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_QS_CONVERSION_ADD="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_qs_conversion_add. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_qs_conversion_add=*)
            [ -n "$VIASH_PAR_OUT_QS_CONVERSION_ADD" ] && ViashError Bad arguments for option \'--out_qs_conversion_add=*\': \'$VIASH_PAR_OUT_QS_CONVERSION_ADD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_QS_CONVERSION_ADD=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_multimapper_order)
            [ -n "$VIASH_PAR_OUT_MULTIMAPPER_ORDER" ] && ViashError Bad arguments for option \'--out_multimapper_order\': \'$VIASH_PAR_OUT_MULTIMAPPER_ORDER\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_MULTIMAPPER_ORDER="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_multimapper_order. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_multimapper_order=*)
            [ -n "$VIASH_PAR_OUT_MULTIMAPPER_ORDER" ] && ViashError Bad arguments for option \'--out_multimapper_order=*\': \'$VIASH_PAR_OUT_MULTIMAPPER_ORDER\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_MULTIMAPPER_ORDER=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_type)
            if [ -z "$VIASH_PAR_OUT_SAM_TYPE" ]; then
              VIASH_PAR_OUT_SAM_TYPE="$2"
            else
              VIASH_PAR_OUT_SAM_TYPE="$VIASH_PAR_OUT_SAM_TYPE;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_type=*)
            if [ -z "$VIASH_PAR_OUT_SAM_TYPE" ]; then
              VIASH_PAR_OUT_SAM_TYPE=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SAM_TYPE="$VIASH_PAR_OUT_SAM_TYPE;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sam_mode)
            [ -n "$VIASH_PAR_OUT_SAM_MODE" ] && ViashError Bad arguments for option \'--out_sam_mode\': \'$VIASH_PAR_OUT_SAM_MODE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_MODE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_mode. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_mode=*)
            [ -n "$VIASH_PAR_OUT_SAM_MODE" ] && ViashError Bad arguments for option \'--out_sam_mode=*\': \'$VIASH_PAR_OUT_SAM_MODE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_MODE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_strand_field)
            [ -n "$VIASH_PAR_OUT_SAM_STRAND_FIELD" ] && ViashError Bad arguments for option \'--out_sam_strand_field\': \'$VIASH_PAR_OUT_SAM_STRAND_FIELD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_STRAND_FIELD="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_strand_field. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_strand_field=*)
            [ -n "$VIASH_PAR_OUT_SAM_STRAND_FIELD" ] && ViashError Bad arguments for option \'--out_sam_strand_field=*\': \'$VIASH_PAR_OUT_SAM_STRAND_FIELD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_STRAND_FIELD=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_attributes)
            if [ -z "$VIASH_PAR_OUT_SAM_ATTRIBUTES" ]; then
              VIASH_PAR_OUT_SAM_ATTRIBUTES="$2"
            else
              VIASH_PAR_OUT_SAM_ATTRIBUTES="$VIASH_PAR_OUT_SAM_ATTRIBUTES;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_attributes. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_attributes=*)
            if [ -z "$VIASH_PAR_OUT_SAM_ATTRIBUTES" ]; then
              VIASH_PAR_OUT_SAM_ATTRIBUTES=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SAM_ATTRIBUTES="$VIASH_PAR_OUT_SAM_ATTRIBUTES;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sam_attr_ih_start)
            [ -n "$VIASH_PAR_OUT_SAM_ATTR_IH_START" ] && ViashError Bad arguments for option \'--out_sam_attr_ih_start\': \'$VIASH_PAR_OUT_SAM_ATTR_IH_START\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_ATTR_IH_START="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_attr_ih_start. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_attr_ih_start=*)
            [ -n "$VIASH_PAR_OUT_SAM_ATTR_IH_START" ] && ViashError Bad arguments for option \'--out_sam_attr_ih_start=*\': \'$VIASH_PAR_OUT_SAM_ATTR_IH_START\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_ATTR_IH_START=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_unmapped)
            if [ -z "$VIASH_PAR_OUT_SAM_UNMAPPED" ]; then
              VIASH_PAR_OUT_SAM_UNMAPPED="$2"
            else
              VIASH_PAR_OUT_SAM_UNMAPPED="$VIASH_PAR_OUT_SAM_UNMAPPED;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_unmapped. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_unmapped=*)
            if [ -z "$VIASH_PAR_OUT_SAM_UNMAPPED" ]; then
              VIASH_PAR_OUT_SAM_UNMAPPED=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SAM_UNMAPPED="$VIASH_PAR_OUT_SAM_UNMAPPED;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sam_order)
            [ -n "$VIASH_PAR_OUT_SAM_ORDER" ] && ViashError Bad arguments for option \'--out_sam_order\': \'$VIASH_PAR_OUT_SAM_ORDER\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_ORDER="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_order. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_order=*)
            [ -n "$VIASH_PAR_OUT_SAM_ORDER" ] && ViashError Bad arguments for option \'--out_sam_order=*\': \'$VIASH_PAR_OUT_SAM_ORDER\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_ORDER=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_primary_flag)
            [ -n "$VIASH_PAR_OUT_SAM_PRIMARY_FLAG" ] && ViashError Bad arguments for option \'--out_sam_primary_flag\': \'$VIASH_PAR_OUT_SAM_PRIMARY_FLAG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_PRIMARY_FLAG="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_primary_flag. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_primary_flag=*)
            [ -n "$VIASH_PAR_OUT_SAM_PRIMARY_FLAG" ] && ViashError Bad arguments for option \'--out_sam_primary_flag=*\': \'$VIASH_PAR_OUT_SAM_PRIMARY_FLAG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_PRIMARY_FLAG=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_read_id)
            [ -n "$VIASH_PAR_OUT_SAM_READ_ID" ] && ViashError Bad arguments for option \'--out_sam_read_id\': \'$VIASH_PAR_OUT_SAM_READ_ID\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_READ_ID="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_read_id. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_read_id=*)
            [ -n "$VIASH_PAR_OUT_SAM_READ_ID" ] && ViashError Bad arguments for option \'--out_sam_read_id=*\': \'$VIASH_PAR_OUT_SAM_READ_ID\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_READ_ID=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_mapq_unique)
            [ -n "$VIASH_PAR_OUT_SAM_MAPQ_UNIQUE" ] && ViashError Bad arguments for option \'--out_sam_mapq_unique\': \'$VIASH_PAR_OUT_SAM_MAPQ_UNIQUE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_MAPQ_UNIQUE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_mapq_unique. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_mapq_unique=*)
            [ -n "$VIASH_PAR_OUT_SAM_MAPQ_UNIQUE" ] && ViashError Bad arguments for option \'--out_sam_mapq_unique=*\': \'$VIASH_PAR_OUT_SAM_MAPQ_UNIQUE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_MAPQ_UNIQUE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_flag_or)
            [ -n "$VIASH_PAR_OUT_SAM_FLAG_OR" ] && ViashError Bad arguments for option \'--out_sam_flag_or\': \'$VIASH_PAR_OUT_SAM_FLAG_OR\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_FLAG_OR="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_flag_or. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_flag_or=*)
            [ -n "$VIASH_PAR_OUT_SAM_FLAG_OR" ] && ViashError Bad arguments for option \'--out_sam_flag_or=*\': \'$VIASH_PAR_OUT_SAM_FLAG_OR\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_FLAG_OR=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_flag_and)
            [ -n "$VIASH_PAR_OUT_SAM_FLAG_AND" ] && ViashError Bad arguments for option \'--out_sam_flag_and\': \'$VIASH_PAR_OUT_SAM_FLAG_AND\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_FLAG_AND="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_flag_and. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_flag_and=*)
            [ -n "$VIASH_PAR_OUT_SAM_FLAG_AND" ] && ViashError Bad arguments for option \'--out_sam_flag_and=*\': \'$VIASH_PAR_OUT_SAM_FLAG_AND\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_FLAG_AND=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_attr_rg_line)
            if [ -z "$VIASH_PAR_OUT_SAM_ATTR_RG_LINE" ]; then
              VIASH_PAR_OUT_SAM_ATTR_RG_LINE="$2"
            else
              VIASH_PAR_OUT_SAM_ATTR_RG_LINE="$VIASH_PAR_OUT_SAM_ATTR_RG_LINE;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_attr_rg_line. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_attr_rg_line=*)
            if [ -z "$VIASH_PAR_OUT_SAM_ATTR_RG_LINE" ]; then
              VIASH_PAR_OUT_SAM_ATTR_RG_LINE=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SAM_ATTR_RG_LINE="$VIASH_PAR_OUT_SAM_ATTR_RG_LINE;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sam_header_hd)
            if [ -z "$VIASH_PAR_OUT_SAM_HEADER_HD" ]; then
              VIASH_PAR_OUT_SAM_HEADER_HD="$2"
            else
              VIASH_PAR_OUT_SAM_HEADER_HD="$VIASH_PAR_OUT_SAM_HEADER_HD;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_header_hd. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_header_hd=*)
            if [ -z "$VIASH_PAR_OUT_SAM_HEADER_HD" ]; then
              VIASH_PAR_OUT_SAM_HEADER_HD=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SAM_HEADER_HD="$VIASH_PAR_OUT_SAM_HEADER_HD;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sam_header_pg)
            if [ -z "$VIASH_PAR_OUT_SAM_HEADER_PG" ]; then
              VIASH_PAR_OUT_SAM_HEADER_PG="$2"
            else
              VIASH_PAR_OUT_SAM_HEADER_PG="$VIASH_PAR_OUT_SAM_HEADER_PG;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_header_pg. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_header_pg=*)
            if [ -z "$VIASH_PAR_OUT_SAM_HEADER_PG" ]; then
              VIASH_PAR_OUT_SAM_HEADER_PG=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SAM_HEADER_PG="$VIASH_PAR_OUT_SAM_HEADER_PG;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sam_header_comment_file)
            [ -n "$VIASH_PAR_OUT_SAM_HEADER_COMMENT_FILE" ] && ViashError Bad arguments for option \'--out_sam_header_comment_file\': \'$VIASH_PAR_OUT_SAM_HEADER_COMMENT_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_HEADER_COMMENT_FILE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_header_comment_file. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_header_comment_file=*)
            [ -n "$VIASH_PAR_OUT_SAM_HEADER_COMMENT_FILE" ] && ViashError Bad arguments for option \'--out_sam_header_comment_file=*\': \'$VIASH_PAR_OUT_SAM_HEADER_COMMENT_FILE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_HEADER_COMMENT_FILE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_filter)
            if [ -z "$VIASH_PAR_OUT_SAM_FILTER" ]; then
              VIASH_PAR_OUT_SAM_FILTER="$2"
            else
              VIASH_PAR_OUT_SAM_FILTER="$VIASH_PAR_OUT_SAM_FILTER;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_filter. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_filter=*)
            if [ -z "$VIASH_PAR_OUT_SAM_FILTER" ]; then
              VIASH_PAR_OUT_SAM_FILTER=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SAM_FILTER="$VIASH_PAR_OUT_SAM_FILTER;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sam_mult_nmax)
            [ -n "$VIASH_PAR_OUT_SAM_MULT_NMAX" ] && ViashError Bad arguments for option \'--out_sam_mult_nmax\': \'$VIASH_PAR_OUT_SAM_MULT_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_MULT_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_mult_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_mult_nmax=*)
            [ -n "$VIASH_PAR_OUT_SAM_MULT_NMAX" ] && ViashError Bad arguments for option \'--out_sam_mult_nmax=*\': \'$VIASH_PAR_OUT_SAM_MULT_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_MULT_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sam_tlen)
            [ -n "$VIASH_PAR_OUT_SAM_TLEN" ] && ViashError Bad arguments for option \'--out_sam_tlen\': \'$VIASH_PAR_OUT_SAM_TLEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_TLEN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sam_tlen. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sam_tlen=*)
            [ -n "$VIASH_PAR_OUT_SAM_TLEN" ] && ViashError Bad arguments for option \'--out_sam_tlen=*\': \'$VIASH_PAR_OUT_SAM_TLEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SAM_TLEN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_bam_compression)
            [ -n "$VIASH_PAR_OUT_BAM_COMPRESSION" ] && ViashError Bad arguments for option \'--out_bam_compression\': \'$VIASH_PAR_OUT_BAM_COMPRESSION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_BAM_COMPRESSION="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_bam_compression. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_bam_compression=*)
            [ -n "$VIASH_PAR_OUT_BAM_COMPRESSION" ] && ViashError Bad arguments for option \'--out_bam_compression=*\': \'$VIASH_PAR_OUT_BAM_COMPRESSION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_BAM_COMPRESSION=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_bam_sorting_thread_n)
            [ -n "$VIASH_PAR_OUT_BAM_SORTING_THREAD_N" ] && ViashError Bad arguments for option \'--out_bam_sorting_thread_n\': \'$VIASH_PAR_OUT_BAM_SORTING_THREAD_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_BAM_SORTING_THREAD_N="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_bam_sorting_thread_n. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_bam_sorting_thread_n=*)
            [ -n "$VIASH_PAR_OUT_BAM_SORTING_THREAD_N" ] && ViashError Bad arguments for option \'--out_bam_sorting_thread_n=*\': \'$VIASH_PAR_OUT_BAM_SORTING_THREAD_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_BAM_SORTING_THREAD_N=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_bam_sorting_bins_n)
            [ -n "$VIASH_PAR_OUT_BAM_SORTING_BINS_N" ] && ViashError Bad arguments for option \'--out_bam_sorting_bins_n\': \'$VIASH_PAR_OUT_BAM_SORTING_BINS_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_BAM_SORTING_BINS_N="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_bam_sorting_bins_n. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_bam_sorting_bins_n=*)
            [ -n "$VIASH_PAR_OUT_BAM_SORTING_BINS_N" ] && ViashError Bad arguments for option \'--out_bam_sorting_bins_n=*\': \'$VIASH_PAR_OUT_BAM_SORTING_BINS_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_BAM_SORTING_BINS_N=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --bam_remove_duplicates_type)
            [ -n "$VIASH_PAR_BAM_REMOVE_DUPLICATES_TYPE" ] && ViashError Bad arguments for option \'--bam_remove_duplicates_type\': \'$VIASH_PAR_BAM_REMOVE_DUPLICATES_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_BAM_REMOVE_DUPLICATES_TYPE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --bam_remove_duplicates_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --bam_remove_duplicates_type=*)
            [ -n "$VIASH_PAR_BAM_REMOVE_DUPLICATES_TYPE" ] && ViashError Bad arguments for option \'--bam_remove_duplicates_type=*\': \'$VIASH_PAR_BAM_REMOVE_DUPLICATES_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_BAM_REMOVE_DUPLICATES_TYPE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --bam_remove_duplicates_mate2bases_n)
            [ -n "$VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N" ] && ViashError Bad arguments for option \'--bam_remove_duplicates_mate2bases_n\': \'$VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --bam_remove_duplicates_mate2bases_n. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --bam_remove_duplicates_mate2bases_n=*)
            [ -n "$VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N" ] && ViashError Bad arguments for option \'--bam_remove_duplicates_mate2bases_n=*\': \'$VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_wig_type)
            if [ -z "$VIASH_PAR_OUT_WIG_TYPE" ]; then
              VIASH_PAR_OUT_WIG_TYPE="$2"
            else
              VIASH_PAR_OUT_WIG_TYPE="$VIASH_PAR_OUT_WIG_TYPE;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_wig_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_wig_type=*)
            if [ -z "$VIASH_PAR_OUT_WIG_TYPE" ]; then
              VIASH_PAR_OUT_WIG_TYPE=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_WIG_TYPE="$VIASH_PAR_OUT_WIG_TYPE;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_wig_strand)
            [ -n "$VIASH_PAR_OUT_WIG_STRAND" ] && ViashError Bad arguments for option \'--out_wig_strand\': \'$VIASH_PAR_OUT_WIG_STRAND\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_WIG_STRAND="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_wig_strand. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_wig_strand=*)
            [ -n "$VIASH_PAR_OUT_WIG_STRAND" ] && ViashError Bad arguments for option \'--out_wig_strand=*\': \'$VIASH_PAR_OUT_WIG_STRAND\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_WIG_STRAND=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_wig_references_prefix)
            [ -n "$VIASH_PAR_OUT_WIG_REFERENCES_PREFIX" ] && ViashError Bad arguments for option \'--out_wig_references_prefix\': \'$VIASH_PAR_OUT_WIG_REFERENCES_PREFIX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_WIG_REFERENCES_PREFIX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_wig_references_prefix. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_wig_references_prefix=*)
            [ -n "$VIASH_PAR_OUT_WIG_REFERENCES_PREFIX" ] && ViashError Bad arguments for option \'--out_wig_references_prefix=*\': \'$VIASH_PAR_OUT_WIG_REFERENCES_PREFIX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_WIG_REFERENCES_PREFIX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_wig_norm)
            [ -n "$VIASH_PAR_OUT_WIG_NORM" ] && ViashError Bad arguments for option \'--out_wig_norm\': \'$VIASH_PAR_OUT_WIG_NORM\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_WIG_NORM="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_wig_norm. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_wig_norm=*)
            [ -n "$VIASH_PAR_OUT_WIG_NORM" ] && ViashError Bad arguments for option \'--out_wig_norm=*\': \'$VIASH_PAR_OUT_WIG_NORM\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_WIG_NORM=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_type)
            [ -n "$VIASH_PAR_OUT_FILTER_TYPE" ] && ViashError Bad arguments for option \'--out_filter_type\': \'$VIASH_PAR_OUT_FILTER_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_TYPE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_type=*)
            [ -n "$VIASH_PAR_OUT_FILTER_TYPE" ] && ViashError Bad arguments for option \'--out_filter_type=*\': \'$VIASH_PAR_OUT_FILTER_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_TYPE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_multimap_score_range)
            [ -n "$VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE" ] && ViashError Bad arguments for option \'--out_filter_multimap_score_range\': \'$VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_multimap_score_range. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_multimap_score_range=*)
            [ -n "$VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE" ] && ViashError Bad arguments for option \'--out_filter_multimap_score_range=*\': \'$VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_multimap_nmax)
            [ -n "$VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX" ] && ViashError Bad arguments for option \'--out_filter_multimap_nmax\': \'$VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_multimap_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_multimap_nmax=*)
            [ -n "$VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX" ] && ViashError Bad arguments for option \'--out_filter_multimap_nmax=*\': \'$VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_mismatch_nmax)
            [ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NMAX" ] && ViashError Bad arguments for option \'--out_filter_mismatch_nmax\': \'$VIASH_PAR_OUT_FILTER_MISMATCH_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MISMATCH_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_mismatch_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_mismatch_nmax=*)
            [ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NMAX" ] && ViashError Bad arguments for option \'--out_filter_mismatch_nmax=*\': \'$VIASH_PAR_OUT_FILTER_MISMATCH_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MISMATCH_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_mismatch_nover_lmax)
            [ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX" ] && ViashError Bad arguments for option \'--out_filter_mismatch_nover_lmax\': \'$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_mismatch_nover_lmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_mismatch_nover_lmax=*)
            [ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX" ] && ViashError Bad arguments for option \'--out_filter_mismatch_nover_lmax=*\': \'$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_mismatch_nover_read_lmax)
            [ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX" ] && ViashError Bad arguments for option \'--out_filter_mismatch_nover_read_lmax\': \'$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_mismatch_nover_read_lmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_mismatch_nover_read_lmax=*)
            [ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX" ] && ViashError Bad arguments for option \'--out_filter_mismatch_nover_read_lmax=*\': \'$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_score_min)
            [ -n "$VIASH_PAR_OUT_FILTER_SCORE_MIN" ] && ViashError Bad arguments for option \'--out_filter_score_min\': \'$VIASH_PAR_OUT_FILTER_SCORE_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_SCORE_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_score_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_score_min=*)
            [ -n "$VIASH_PAR_OUT_FILTER_SCORE_MIN" ] && ViashError Bad arguments for option \'--out_filter_score_min=*\': \'$VIASH_PAR_OUT_FILTER_SCORE_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_SCORE_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_score_min_over_lread)
            [ -n "$VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD" ] && ViashError Bad arguments for option \'--out_filter_score_min_over_lread\': \'$VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_score_min_over_lread. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_score_min_over_lread=*)
            [ -n "$VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD" ] && ViashError Bad arguments for option \'--out_filter_score_min_over_lread=*\': \'$VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_match_nmin)
            [ -n "$VIASH_PAR_OUT_FILTER_MATCH_NMIN" ] && ViashError Bad arguments for option \'--out_filter_match_nmin\': \'$VIASH_PAR_OUT_FILTER_MATCH_NMIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MATCH_NMIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_match_nmin. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_match_nmin=*)
            [ -n "$VIASH_PAR_OUT_FILTER_MATCH_NMIN" ] && ViashError Bad arguments for option \'--out_filter_match_nmin=*\': \'$VIASH_PAR_OUT_FILTER_MATCH_NMIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MATCH_NMIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_match_nmin_over_lread)
            [ -n "$VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD" ] && ViashError Bad arguments for option \'--out_filter_match_nmin_over_lread\': \'$VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_match_nmin_over_lread. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_match_nmin_over_lread=*)
            [ -n "$VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD" ] && ViashError Bad arguments for option \'--out_filter_match_nmin_over_lread=*\': \'$VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_intron_motifs)
            [ -n "$VIASH_PAR_OUT_FILTER_INTRON_MOTIFS" ] && ViashError Bad arguments for option \'--out_filter_intron_motifs\': \'$VIASH_PAR_OUT_FILTER_INTRON_MOTIFS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_INTRON_MOTIFS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_intron_motifs. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_intron_motifs=*)
            [ -n "$VIASH_PAR_OUT_FILTER_INTRON_MOTIFS" ] && ViashError Bad arguments for option \'--out_filter_intron_motifs=*\': \'$VIASH_PAR_OUT_FILTER_INTRON_MOTIFS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_INTRON_MOTIFS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_filter_intron_strands)
            [ -n "$VIASH_PAR_OUT_FILTER_INTRON_STRANDS" ] && ViashError Bad arguments for option \'--out_filter_intron_strands\': \'$VIASH_PAR_OUT_FILTER_INTRON_STRANDS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_INTRON_STRANDS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_filter_intron_strands. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_filter_intron_strands=*)
            [ -n "$VIASH_PAR_OUT_FILTER_INTRON_STRANDS" ] && ViashError Bad arguments for option \'--out_filter_intron_strands=*\': \'$VIASH_PAR_OUT_FILTER_INTRON_STRANDS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_FILTER_INTRON_STRANDS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sj_type)
            [ -n "$VIASH_PAR_OUT_SJ_TYPE" ] && ViashError Bad arguments for option \'--out_sj_type\': \'$VIASH_PAR_OUT_SJ_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SJ_TYPE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sj_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sj_type=*)
            [ -n "$VIASH_PAR_OUT_SJ_TYPE" ] && ViashError Bad arguments for option \'--out_sj_type=*\': \'$VIASH_PAR_OUT_SJ_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SJ_TYPE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sj_filter_reads)
            [ -n "$VIASH_PAR_OUT_SJ_FILTER_READS" ] && ViashError Bad arguments for option \'--out_sj_filter_reads\': \'$VIASH_PAR_OUT_SJ_FILTER_READS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SJ_FILTER_READS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sj_filter_reads. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sj_filter_reads=*)
            [ -n "$VIASH_PAR_OUT_SJ_FILTER_READS" ] && ViashError Bad arguments for option \'--out_sj_filter_reads=*\': \'$VIASH_PAR_OUT_SJ_FILTER_READS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_OUT_SJ_FILTER_READS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --out_sj_filter_overhang_min)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN" ]; then
              VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN="$2"
            else
              VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN="$VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sj_filter_overhang_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sj_filter_overhang_min=*)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN" ]; then
              VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN="$VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sj_filter_count_unique_min)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN" ]; then
              VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN="$2"
            else
              VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN="$VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sj_filter_count_unique_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sj_filter_count_unique_min=*)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN" ]; then
              VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN="$VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sj_filter_count_total_min)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN" ]; then
              VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN="$2"
            else
              VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN="$VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sj_filter_count_total_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sj_filter_count_total_min=*)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN" ]; then
              VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN="$VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sj_filter_dist_to_other_sj_min)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN" ]; then
              VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN="$2"
            else
              VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN="$VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sj_filter_dist_to_other_sj_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sj_filter_dist_to_other_sj_min=*)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN" ]; then
              VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN="$VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --out_sj_filter_intron_max_vs_read_n)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N" ]; then
              VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N="$2"
            else
              VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N="$VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --out_sj_filter_intron_max_vs_read_n. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --out_sj_filter_intron_max_vs_read_n=*)
            if [ -z "$VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N" ]; then
              VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N="$VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --score_gap)
            [ -n "$VIASH_PAR_SCORE_GAP" ] && ViashError Bad arguments for option \'--score_gap\': \'$VIASH_PAR_SCORE_GAP\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GAP="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_gap. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_gap=*)
            [ -n "$VIASH_PAR_SCORE_GAP" ] && ViashError Bad arguments for option \'--score_gap=*\': \'$VIASH_PAR_SCORE_GAP\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GAP=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_gap_noncan)
            [ -n "$VIASH_PAR_SCORE_GAP_NONCAN" ] && ViashError Bad arguments for option \'--score_gap_noncan\': \'$VIASH_PAR_SCORE_GAP_NONCAN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GAP_NONCAN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_gap_noncan. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_gap_noncan=*)
            [ -n "$VIASH_PAR_SCORE_GAP_NONCAN" ] && ViashError Bad arguments for option \'--score_gap_noncan=*\': \'$VIASH_PAR_SCORE_GAP_NONCAN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GAP_NONCAN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_gap_gcag)
            [ -n "$VIASH_PAR_SCORE_GAP_GCAG" ] && ViashError Bad arguments for option \'--score_gap_gcag\': \'$VIASH_PAR_SCORE_GAP_GCAG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GAP_GCAG="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_gap_gcag. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_gap_gcag=*)
            [ -n "$VIASH_PAR_SCORE_GAP_GCAG" ] && ViashError Bad arguments for option \'--score_gap_gcag=*\': \'$VIASH_PAR_SCORE_GAP_GCAG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GAP_GCAG=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_gap_atac)
            [ -n "$VIASH_PAR_SCORE_GAP_ATAC" ] && ViashError Bad arguments for option \'--score_gap_atac\': \'$VIASH_PAR_SCORE_GAP_ATAC\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GAP_ATAC="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_gap_atac. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_gap_atac=*)
            [ -n "$VIASH_PAR_SCORE_GAP_ATAC" ] && ViashError Bad arguments for option \'--score_gap_atac=*\': \'$VIASH_PAR_SCORE_GAP_ATAC\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GAP_ATAC=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_genomic_length_log2scale)
            [ -n "$VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE" ] && ViashError Bad arguments for option \'--score_genomic_length_log2scale\': \'$VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_genomic_length_log2scale. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_genomic_length_log2scale=*)
            [ -n "$VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE" ] && ViashError Bad arguments for option \'--score_genomic_length_log2scale=*\': \'$VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_del_open)
            [ -n "$VIASH_PAR_SCORE_DEL_OPEN" ] && ViashError Bad arguments for option \'--score_del_open\': \'$VIASH_PAR_SCORE_DEL_OPEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_DEL_OPEN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_del_open. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_del_open=*)
            [ -n "$VIASH_PAR_SCORE_DEL_OPEN" ] && ViashError Bad arguments for option \'--score_del_open=*\': \'$VIASH_PAR_SCORE_DEL_OPEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_DEL_OPEN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_del_base)
            [ -n "$VIASH_PAR_SCORE_DEL_BASE" ] && ViashError Bad arguments for option \'--score_del_base\': \'$VIASH_PAR_SCORE_DEL_BASE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_DEL_BASE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_del_base. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_del_base=*)
            [ -n "$VIASH_PAR_SCORE_DEL_BASE" ] && ViashError Bad arguments for option \'--score_del_base=*\': \'$VIASH_PAR_SCORE_DEL_BASE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_DEL_BASE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_ins_open)
            [ -n "$VIASH_PAR_SCORE_INS_OPEN" ] && ViashError Bad arguments for option \'--score_ins_open\': \'$VIASH_PAR_SCORE_INS_OPEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_INS_OPEN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_ins_open. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_ins_open=*)
            [ -n "$VIASH_PAR_SCORE_INS_OPEN" ] && ViashError Bad arguments for option \'--score_ins_open=*\': \'$VIASH_PAR_SCORE_INS_OPEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_INS_OPEN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_ins_base)
            [ -n "$VIASH_PAR_SCORE_INS_BASE" ] && ViashError Bad arguments for option \'--score_ins_base\': \'$VIASH_PAR_SCORE_INS_BASE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_INS_BASE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_ins_base. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_ins_base=*)
            [ -n "$VIASH_PAR_SCORE_INS_BASE" ] && ViashError Bad arguments for option \'--score_ins_base=*\': \'$VIASH_PAR_SCORE_INS_BASE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_INS_BASE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --score_stitch_sj_shift)
            [ -n "$VIASH_PAR_SCORE_STITCH_SJ_SHIFT" ] && ViashError Bad arguments for option \'--score_stitch_sj_shift\': \'$VIASH_PAR_SCORE_STITCH_SJ_SHIFT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_STITCH_SJ_SHIFT="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --score_stitch_sj_shift. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --score_stitch_sj_shift=*)
            [ -n "$VIASH_PAR_SCORE_STITCH_SJ_SHIFT" ] && ViashError Bad arguments for option \'--score_stitch_sj_shift=*\': \'$VIASH_PAR_SCORE_STITCH_SJ_SHIFT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SCORE_STITCH_SJ_SHIFT=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_search_start_lmax)
            [ -n "$VIASH_PAR_SEED_SEARCH_START_LMAX" ] && ViashError Bad arguments for option \'--seed_search_start_lmax\': \'$VIASH_PAR_SEED_SEARCH_START_LMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_SEARCH_START_LMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_search_start_lmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_search_start_lmax=*)
            [ -n "$VIASH_PAR_SEED_SEARCH_START_LMAX" ] && ViashError Bad arguments for option \'--seed_search_start_lmax=*\': \'$VIASH_PAR_SEED_SEARCH_START_LMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_SEARCH_START_LMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_search_start_lmax_over_lread)
            [ -n "$VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD" ] && ViashError Bad arguments for option \'--seed_search_start_lmax_over_lread\': \'$VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_search_start_lmax_over_lread. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_search_start_lmax_over_lread=*)
            [ -n "$VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD" ] && ViashError Bad arguments for option \'--seed_search_start_lmax_over_lread=*\': \'$VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_search_lmax)
            [ -n "$VIASH_PAR_SEED_SEARCH_LMAX" ] && ViashError Bad arguments for option \'--seed_search_lmax\': \'$VIASH_PAR_SEED_SEARCH_LMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_SEARCH_LMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_search_lmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_search_lmax=*)
            [ -n "$VIASH_PAR_SEED_SEARCH_LMAX" ] && ViashError Bad arguments for option \'--seed_search_lmax=*\': \'$VIASH_PAR_SEED_SEARCH_LMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_SEARCH_LMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_multimap_nmax)
            [ -n "$VIASH_PAR_SEED_MULTIMAP_NMAX" ] && ViashError Bad arguments for option \'--seed_multimap_nmax\': \'$VIASH_PAR_SEED_MULTIMAP_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_MULTIMAP_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_multimap_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_multimap_nmax=*)
            [ -n "$VIASH_PAR_SEED_MULTIMAP_NMAX" ] && ViashError Bad arguments for option \'--seed_multimap_nmax=*\': \'$VIASH_PAR_SEED_MULTIMAP_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_MULTIMAP_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_per_read_nmax)
            [ -n "$VIASH_PAR_SEED_PER_READ_NMAX" ] && ViashError Bad arguments for option \'--seed_per_read_nmax\': \'$VIASH_PAR_SEED_PER_READ_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_PER_READ_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_per_read_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_per_read_nmax=*)
            [ -n "$VIASH_PAR_SEED_PER_READ_NMAX" ] && ViashError Bad arguments for option \'--seed_per_read_nmax=*\': \'$VIASH_PAR_SEED_PER_READ_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_PER_READ_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_per_window_nmax)
            [ -n "$VIASH_PAR_SEED_PER_WINDOW_NMAX" ] && ViashError Bad arguments for option \'--seed_per_window_nmax\': \'$VIASH_PAR_SEED_PER_WINDOW_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_PER_WINDOW_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_per_window_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_per_window_nmax=*)
            [ -n "$VIASH_PAR_SEED_PER_WINDOW_NMAX" ] && ViashError Bad arguments for option \'--seed_per_window_nmax=*\': \'$VIASH_PAR_SEED_PER_WINDOW_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_PER_WINDOW_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_none_loci_per_window)
            [ -n "$VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW" ] && ViashError Bad arguments for option \'--seed_none_loci_per_window\': \'$VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_none_loci_per_window. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_none_loci_per_window=*)
            [ -n "$VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW" ] && ViashError Bad arguments for option \'--seed_none_loci_per_window=*\': \'$VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_split_min)
            [ -n "$VIASH_PAR_SEED_SPLIT_MIN" ] && ViashError Bad arguments for option \'--seed_split_min\': \'$VIASH_PAR_SEED_SPLIT_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_SPLIT_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_split_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_split_min=*)
            [ -n "$VIASH_PAR_SEED_SPLIT_MIN" ] && ViashError Bad arguments for option \'--seed_split_min=*\': \'$VIASH_PAR_SEED_SPLIT_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_SPLIT_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --seed_map_min)
            [ -n "$VIASH_PAR_SEED_MAP_MIN" ] && ViashError Bad arguments for option \'--seed_map_min\': \'$VIASH_PAR_SEED_MAP_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_MAP_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --seed_map_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --seed_map_min=*)
            [ -n "$VIASH_PAR_SEED_MAP_MIN" ] && ViashError Bad arguments for option \'--seed_map_min=*\': \'$VIASH_PAR_SEED_MAP_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SEED_MAP_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_intron_min)
            [ -n "$VIASH_PAR_ALIGN_INTRON_MIN" ] && ViashError Bad arguments for option \'--align_intron_min\': \'$VIASH_PAR_ALIGN_INTRON_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_INTRON_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_intron_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_intron_min=*)
            [ -n "$VIASH_PAR_ALIGN_INTRON_MIN" ] && ViashError Bad arguments for option \'--align_intron_min=*\': \'$VIASH_PAR_ALIGN_INTRON_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_INTRON_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_intron_max)
            [ -n "$VIASH_PAR_ALIGN_INTRON_MAX" ] && ViashError Bad arguments for option \'--align_intron_max\': \'$VIASH_PAR_ALIGN_INTRON_MAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_INTRON_MAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_intron_max. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_intron_max=*)
            [ -n "$VIASH_PAR_ALIGN_INTRON_MAX" ] && ViashError Bad arguments for option \'--align_intron_max=*\': \'$VIASH_PAR_ALIGN_INTRON_MAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_INTRON_MAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_mates_gap_max)
            [ -n "$VIASH_PAR_ALIGN_MATES_GAP_MAX" ] && ViashError Bad arguments for option \'--align_mates_gap_max\': \'$VIASH_PAR_ALIGN_MATES_GAP_MAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_MATES_GAP_MAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_mates_gap_max. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_mates_gap_max=*)
            [ -n "$VIASH_PAR_ALIGN_MATES_GAP_MAX" ] && ViashError Bad arguments for option \'--align_mates_gap_max=*\': \'$VIASH_PAR_ALIGN_MATES_GAP_MAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_MATES_GAP_MAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_sj_overhang_min)
            [ -n "$VIASH_PAR_ALIGN_SJ_OVERHANG_MIN" ] && ViashError Bad arguments for option \'--align_sj_overhang_min\': \'$VIASH_PAR_ALIGN_SJ_OVERHANG_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SJ_OVERHANG_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_sj_overhang_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_sj_overhang_min=*)
            [ -n "$VIASH_PAR_ALIGN_SJ_OVERHANG_MIN" ] && ViashError Bad arguments for option \'--align_sj_overhang_min=*\': \'$VIASH_PAR_ALIGN_SJ_OVERHANG_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SJ_OVERHANG_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_sj_stitch_mismatch_nmax)
            if [ -z "$VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX" ]; then
              VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX="$2"
            else
              VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX="$VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_sj_stitch_mismatch_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_sj_stitch_mismatch_nmax=*)
            if [ -z "$VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX" ]; then
              VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX="$VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --align_sjdb_overhang_min)
            [ -n "$VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN" ] && ViashError Bad arguments for option \'--align_sjdb_overhang_min\': \'$VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_sjdb_overhang_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_sjdb_overhang_min=*)
            [ -n "$VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN" ] && ViashError Bad arguments for option \'--align_sjdb_overhang_min=*\': \'$VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_spliced_mate_map_lmin)
            [ -n "$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN" ] && ViashError Bad arguments for option \'--align_spliced_mate_map_lmin\': \'$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_spliced_mate_map_lmin. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_spliced_mate_map_lmin=*)
            [ -n "$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN" ] && ViashError Bad arguments for option \'--align_spliced_mate_map_lmin=*\': \'$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_spliced_mate_map_lmin_over_lmate)
            [ -n "$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE" ] && ViashError Bad arguments for option \'--align_spliced_mate_map_lmin_over_lmate\': \'$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_spliced_mate_map_lmin_over_lmate. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_spliced_mate_map_lmin_over_lmate=*)
            [ -n "$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE" ] && ViashError Bad arguments for option \'--align_spliced_mate_map_lmin_over_lmate=*\': \'$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_windows_per_read_nmax)
            [ -n "$VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX" ] && ViashError Bad arguments for option \'--align_windows_per_read_nmax\': \'$VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_windows_per_read_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_windows_per_read_nmax=*)
            [ -n "$VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX" ] && ViashError Bad arguments for option \'--align_windows_per_read_nmax=*\': \'$VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_transcripts_per_window_nmax)
            [ -n "$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX" ] && ViashError Bad arguments for option \'--align_transcripts_per_window_nmax\': \'$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_transcripts_per_window_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_transcripts_per_window_nmax=*)
            [ -n "$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX" ] && ViashError Bad arguments for option \'--align_transcripts_per_window_nmax=*\': \'$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_transcripts_per_read_nmax)
            [ -n "$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX" ] && ViashError Bad arguments for option \'--align_transcripts_per_read_nmax\': \'$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_transcripts_per_read_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_transcripts_per_read_nmax=*)
            [ -n "$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX" ] && ViashError Bad arguments for option \'--align_transcripts_per_read_nmax=*\': \'$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_ends_type)
            [ -n "$VIASH_PAR_ALIGN_ENDS_TYPE" ] && ViashError Bad arguments for option \'--align_ends_type\': \'$VIASH_PAR_ALIGN_ENDS_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_ENDS_TYPE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_ends_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_ends_type=*)
            [ -n "$VIASH_PAR_ALIGN_ENDS_TYPE" ] && ViashError Bad arguments for option \'--align_ends_type=*\': \'$VIASH_PAR_ALIGN_ENDS_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_ENDS_TYPE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_ends_protrude)
            [ -n "$VIASH_PAR_ALIGN_ENDS_PROTRUDE" ] && ViashError Bad arguments for option \'--align_ends_protrude\': \'$VIASH_PAR_ALIGN_ENDS_PROTRUDE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_ENDS_PROTRUDE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_ends_protrude. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_ends_protrude=*)
            [ -n "$VIASH_PAR_ALIGN_ENDS_PROTRUDE" ] && ViashError Bad arguments for option \'--align_ends_protrude=*\': \'$VIASH_PAR_ALIGN_ENDS_PROTRUDE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_ENDS_PROTRUDE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_soft_clip_at_reference_ends)
            [ -n "$VIASH_PAR_ALIGN_SOFT_CLIP_AT_REFERENCE_ENDS" ] && ViashError Bad arguments for option \'--align_soft_clip_at_reference_ends\': \'$VIASH_PAR_ALIGN_SOFT_CLIP_AT_REFERENCE_ENDS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SOFT_CLIP_AT_REFERENCE_ENDS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_soft_clip_at_reference_ends. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_soft_clip_at_reference_ends=*)
            [ -n "$VIASH_PAR_ALIGN_SOFT_CLIP_AT_REFERENCE_ENDS" ] && ViashError Bad arguments for option \'--align_soft_clip_at_reference_ends=*\': \'$VIASH_PAR_ALIGN_SOFT_CLIP_AT_REFERENCE_ENDS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_SOFT_CLIP_AT_REFERENCE_ENDS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --align_insertion_flush)
            [ -n "$VIASH_PAR_ALIGN_INSERTION_FLUSH" ] && ViashError Bad arguments for option \'--align_insertion_flush\': \'$VIASH_PAR_ALIGN_INSERTION_FLUSH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_INSERTION_FLUSH="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --align_insertion_flush. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --align_insertion_flush=*)
            [ -n "$VIASH_PAR_ALIGN_INSERTION_FLUSH" ] && ViashError Bad arguments for option \'--align_insertion_flush=*\': \'$VIASH_PAR_ALIGN_INSERTION_FLUSH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGN_INSERTION_FLUSH=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --pe_overlap_nbases_min)
            [ -n "$VIASH_PAR_PE_OVERLAP_NBASES_MIN" ] && ViashError Bad arguments for option \'--pe_overlap_nbases_min\': \'$VIASH_PAR_PE_OVERLAP_NBASES_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_PE_OVERLAP_NBASES_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --pe_overlap_nbases_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --pe_overlap_nbases_min=*)
            [ -n "$VIASH_PAR_PE_OVERLAP_NBASES_MIN" ] && ViashError Bad arguments for option \'--pe_overlap_nbases_min=*\': \'$VIASH_PAR_PE_OVERLAP_NBASES_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_PE_OVERLAP_NBASES_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --pe_overlap_mm_p)
            [ -n "$VIASH_PAR_PE_OVERLAP_MM_P" ] && ViashError Bad arguments for option \'--pe_overlap_mm_p\': \'$VIASH_PAR_PE_OVERLAP_MM_P\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_PE_OVERLAP_MM_P="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --pe_overlap_mm_p. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --pe_overlap_mm_p=*)
            [ -n "$VIASH_PAR_PE_OVERLAP_MM_P" ] && ViashError Bad arguments for option \'--pe_overlap_mm_p=*\': \'$VIASH_PAR_PE_OVERLAP_MM_P\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_PE_OVERLAP_MM_P=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --win_anchor_multimap_nmax)
            [ -n "$VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX" ] && ViashError Bad arguments for option \'--win_anchor_multimap_nmax\': \'$VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --win_anchor_multimap_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --win_anchor_multimap_nmax=*)
            [ -n "$VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX" ] && ViashError Bad arguments for option \'--win_anchor_multimap_nmax=*\': \'$VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --win_bin_nbits)
            [ -n "$VIASH_PAR_WIN_BIN_NBITS" ] && ViashError Bad arguments for option \'--win_bin_nbits\': \'$VIASH_PAR_WIN_BIN_NBITS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_BIN_NBITS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --win_bin_nbits. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --win_bin_nbits=*)
            [ -n "$VIASH_PAR_WIN_BIN_NBITS" ] && ViashError Bad arguments for option \'--win_bin_nbits=*\': \'$VIASH_PAR_WIN_BIN_NBITS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_BIN_NBITS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --win_anchor_dist_nbins)
            [ -n "$VIASH_PAR_WIN_ANCHOR_DIST_NBINS" ] && ViashError Bad arguments for option \'--win_anchor_dist_nbins\': \'$VIASH_PAR_WIN_ANCHOR_DIST_NBINS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_ANCHOR_DIST_NBINS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --win_anchor_dist_nbins. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --win_anchor_dist_nbins=*)
            [ -n "$VIASH_PAR_WIN_ANCHOR_DIST_NBINS" ] && ViashError Bad arguments for option \'--win_anchor_dist_nbins=*\': \'$VIASH_PAR_WIN_ANCHOR_DIST_NBINS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_ANCHOR_DIST_NBINS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --win_flank_nbins)
            [ -n "$VIASH_PAR_WIN_FLANK_NBINS" ] && ViashError Bad arguments for option \'--win_flank_nbins\': \'$VIASH_PAR_WIN_FLANK_NBINS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_FLANK_NBINS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --win_flank_nbins. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --win_flank_nbins=*)
            [ -n "$VIASH_PAR_WIN_FLANK_NBINS" ] && ViashError Bad arguments for option \'--win_flank_nbins=*\': \'$VIASH_PAR_WIN_FLANK_NBINS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_FLANK_NBINS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --win_read_coverage_relative_min)
            [ -n "$VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN" ] && ViashError Bad arguments for option \'--win_read_coverage_relative_min\': \'$VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --win_read_coverage_relative_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --win_read_coverage_relative_min=*)
            [ -n "$VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN" ] && ViashError Bad arguments for option \'--win_read_coverage_relative_min=*\': \'$VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --win_read_coverage_bases_min)
            [ -n "$VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN" ] && ViashError Bad arguments for option \'--win_read_coverage_bases_min\': \'$VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --win_read_coverage_bases_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --win_read_coverage_bases_min=*)
            [ -n "$VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN" ] && ViashError Bad arguments for option \'--win_read_coverage_bases_min=*\': \'$VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_out_type)
            if [ -z "$VIASH_PAR_CHIM_OUT_TYPE" ]; then
              VIASH_PAR_CHIM_OUT_TYPE="$2"
            else
              VIASH_PAR_CHIM_OUT_TYPE="$VIASH_PAR_CHIM_OUT_TYPE;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_out_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_out_type=*)
            if [ -z "$VIASH_PAR_CHIM_OUT_TYPE" ]; then
              VIASH_PAR_CHIM_OUT_TYPE=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_CHIM_OUT_TYPE="$VIASH_PAR_CHIM_OUT_TYPE;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --chim_segment_min)
            [ -n "$VIASH_PAR_CHIM_SEGMENT_MIN" ] && ViashError Bad arguments for option \'--chim_segment_min\': \'$VIASH_PAR_CHIM_SEGMENT_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SEGMENT_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_segment_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_segment_min=*)
            [ -n "$VIASH_PAR_CHIM_SEGMENT_MIN" ] && ViashError Bad arguments for option \'--chim_segment_min=*\': \'$VIASH_PAR_CHIM_SEGMENT_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SEGMENT_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_score_min)
            [ -n "$VIASH_PAR_CHIM_SCORE_MIN" ] && ViashError Bad arguments for option \'--chim_score_min\': \'$VIASH_PAR_CHIM_SCORE_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SCORE_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_score_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_score_min=*)
            [ -n "$VIASH_PAR_CHIM_SCORE_MIN" ] && ViashError Bad arguments for option \'--chim_score_min=*\': \'$VIASH_PAR_CHIM_SCORE_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SCORE_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_score_drop_max)
            [ -n "$VIASH_PAR_CHIM_SCORE_DROP_MAX" ] && ViashError Bad arguments for option \'--chim_score_drop_max\': \'$VIASH_PAR_CHIM_SCORE_DROP_MAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SCORE_DROP_MAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_score_drop_max. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_score_drop_max=*)
            [ -n "$VIASH_PAR_CHIM_SCORE_DROP_MAX" ] && ViashError Bad arguments for option \'--chim_score_drop_max=*\': \'$VIASH_PAR_CHIM_SCORE_DROP_MAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SCORE_DROP_MAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_score_separation)
            [ -n "$VIASH_PAR_CHIM_SCORE_SEPARATION" ] && ViashError Bad arguments for option \'--chim_score_separation\': \'$VIASH_PAR_CHIM_SCORE_SEPARATION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SCORE_SEPARATION="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_score_separation. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_score_separation=*)
            [ -n "$VIASH_PAR_CHIM_SCORE_SEPARATION" ] && ViashError Bad arguments for option \'--chim_score_separation=*\': \'$VIASH_PAR_CHIM_SCORE_SEPARATION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SCORE_SEPARATION=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_score_junction_non_gtag)
            [ -n "$VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG" ] && ViashError Bad arguments for option \'--chim_score_junction_non_gtag\': \'$VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_score_junction_non_gtag. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_score_junction_non_gtag=*)
            [ -n "$VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG" ] && ViashError Bad arguments for option \'--chim_score_junction_non_gtag=*\': \'$VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_junction_overhang_min)
            [ -n "$VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN" ] && ViashError Bad arguments for option \'--chim_junction_overhang_min\': \'$VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_junction_overhang_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_junction_overhang_min=*)
            [ -n "$VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN" ] && ViashError Bad arguments for option \'--chim_junction_overhang_min=*\': \'$VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_segment_read_gap_max)
            [ -n "$VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX" ] && ViashError Bad arguments for option \'--chim_segment_read_gap_max\': \'$VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_segment_read_gap_max. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_segment_read_gap_max=*)
            [ -n "$VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX" ] && ViashError Bad arguments for option \'--chim_segment_read_gap_max=*\': \'$VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_filter)
            if [ -z "$VIASH_PAR_CHIM_FILTER" ]; then
              VIASH_PAR_CHIM_FILTER="$2"
            else
              VIASH_PAR_CHIM_FILTER="$VIASH_PAR_CHIM_FILTER;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_filter. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_filter=*)
            if [ -z "$VIASH_PAR_CHIM_FILTER" ]; then
              VIASH_PAR_CHIM_FILTER=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_CHIM_FILTER="$VIASH_PAR_CHIM_FILTER;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --chim_main_segment_mult_nmax)
            [ -n "$VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX" ] && ViashError Bad arguments for option \'--chim_main_segment_mult_nmax\': \'$VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_main_segment_mult_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_main_segment_mult_nmax=*)
            [ -n "$VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX" ] && ViashError Bad arguments for option \'--chim_main_segment_mult_nmax=*\': \'$VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_multimap_nmax)
            [ -n "$VIASH_PAR_CHIM_MULTIMAP_NMAX" ] && ViashError Bad arguments for option \'--chim_multimap_nmax\': \'$VIASH_PAR_CHIM_MULTIMAP_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_MULTIMAP_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_multimap_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_multimap_nmax=*)
            [ -n "$VIASH_PAR_CHIM_MULTIMAP_NMAX" ] && ViashError Bad arguments for option \'--chim_multimap_nmax=*\': \'$VIASH_PAR_CHIM_MULTIMAP_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_MULTIMAP_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_multimap_score_range)
            [ -n "$VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE" ] && ViashError Bad arguments for option \'--chim_multimap_score_range\': \'$VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_multimap_score_range. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_multimap_score_range=*)
            [ -n "$VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE" ] && ViashError Bad arguments for option \'--chim_multimap_score_range=*\': \'$VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_nonchim_score_drop_min)
            [ -n "$VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN" ] && ViashError Bad arguments for option \'--chim_nonchim_score_drop_min\': \'$VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_nonchim_score_drop_min. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_nonchim_score_drop_min=*)
            [ -n "$VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN" ] && ViashError Bad arguments for option \'--chim_nonchim_score_drop_min=*\': \'$VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chim_out_junction_format)
            [ -n "$VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT" ] && ViashError Bad arguments for option \'--chim_out_junction_format\': \'$VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chim_out_junction_format. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chim_out_junction_format=*)
            [ -n "$VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT" ] && ViashError Bad arguments for option \'--chim_out_junction_format=*\': \'$VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --quant_mode)
            if [ -z "$VIASH_PAR_QUANT_MODE" ]; then
              VIASH_PAR_QUANT_MODE="$2"
            else
              VIASH_PAR_QUANT_MODE="$VIASH_PAR_QUANT_MODE;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --quant_mode. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --quant_mode=*)
            if [ -z "$VIASH_PAR_QUANT_MODE" ]; then
              VIASH_PAR_QUANT_MODE=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_QUANT_MODE="$VIASH_PAR_QUANT_MODE;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --quant_transcriptome_bam_compression)
            [ -n "$VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION" ] && ViashError Bad arguments for option \'--quant_transcriptome_bam_compression\': \'$VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --quant_transcriptome_bam_compression. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --quant_transcriptome_bam_compression=*)
            [ -n "$VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION" ] && ViashError Bad arguments for option \'--quant_transcriptome_bam_compression=*\': \'$VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --quant_transcriptome_sam_output)
            [ -n "$VIASH_PAR_QUANT_TRANSCRIPTOME_SAM_OUTPUT" ] && ViashError Bad arguments for option \'--quant_transcriptome_sam_output\': \'$VIASH_PAR_QUANT_TRANSCRIPTOME_SAM_OUTPUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_QUANT_TRANSCRIPTOME_SAM_OUTPUT="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --quant_transcriptome_sam_output. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --quant_transcriptome_sam_output=*)
            [ -n "$VIASH_PAR_QUANT_TRANSCRIPTOME_SAM_OUTPUT" ] && ViashError Bad arguments for option \'--quant_transcriptome_sam_output=*\': \'$VIASH_PAR_QUANT_TRANSCRIPTOME_SAM_OUTPUT\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_QUANT_TRANSCRIPTOME_SAM_OUTPUT=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --twopass_mode)
            [ -n "$VIASH_PAR_TWOPASS_MODE" ] && ViashError Bad arguments for option \'--twopass_mode\': \'$VIASH_PAR_TWOPASS_MODE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_TWOPASS_MODE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --twopass_mode. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --twopass_mode=*)
            [ -n "$VIASH_PAR_TWOPASS_MODE" ] && ViashError Bad arguments for option \'--twopass_mode=*\': \'$VIASH_PAR_TWOPASS_MODE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_TWOPASS_MODE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --twopass1reads_n)
            [ -n "$VIASH_PAR_TWOPASS1READS_N" ] && ViashError Bad arguments for option \'--twopass1reads_n\': \'$VIASH_PAR_TWOPASS1READS_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_TWOPASS1READS_N="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --twopass1reads_n. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --twopass1reads_n=*)
            [ -n "$VIASH_PAR_TWOPASS1READS_N" ] && ViashError Bad arguments for option \'--twopass1reads_n=*\': \'$VIASH_PAR_TWOPASS1READS_N\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_TWOPASS1READS_N=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --wasp_output_mode)
            [ -n "$VIASH_PAR_WASP_OUTPUT_MODE" ] && ViashError Bad arguments for option \'--wasp_output_mode\': \'$VIASH_PAR_WASP_OUTPUT_MODE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WASP_OUTPUT_MODE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --wasp_output_mode. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --wasp_output_mode=*)
            [ -n "$VIASH_PAR_WASP_OUTPUT_MODE" ] && ViashError Bad arguments for option \'--wasp_output_mode=*\': \'$VIASH_PAR_WASP_OUTPUT_MODE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_WASP_OUTPUT_MODE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_type)
            if [ -z "$VIASH_PAR_SOLO_TYPE" ]; then
              VIASH_PAR_SOLO_TYPE="$2"
            else
              VIASH_PAR_SOLO_TYPE="$VIASH_PAR_SOLO_TYPE;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_type=*)
            if [ -z "$VIASH_PAR_SOLO_TYPE" ]; then
              VIASH_PAR_SOLO_TYPE=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_TYPE="$VIASH_PAR_SOLO_TYPE;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_cb_type)
            [ -n "$VIASH_PAR_SOLO_CB_TYPE" ] && ViashError Bad arguments for option \'--solo_cb_type\': \'$VIASH_PAR_SOLO_CB_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CB_TYPE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_cb_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_cb_type=*)
            [ -n "$VIASH_PAR_SOLO_CB_TYPE" ] && ViashError Bad arguments for option \'--solo_cb_type=*\': \'$VIASH_PAR_SOLO_CB_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CB_TYPE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_cb_whitelist)
            if [ -z "$VIASH_PAR_SOLO_CB_WHITELIST" ]; then
              VIASH_PAR_SOLO_CB_WHITELIST="$2"
            else
              VIASH_PAR_SOLO_CB_WHITELIST="$VIASH_PAR_SOLO_CB_WHITELIST;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_cb_whitelist. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_cb_whitelist=*)
            if [ -z "$VIASH_PAR_SOLO_CB_WHITELIST" ]; then
              VIASH_PAR_SOLO_CB_WHITELIST=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_CB_WHITELIST="$VIASH_PAR_SOLO_CB_WHITELIST;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_cb_start)
            [ -n "$VIASH_PAR_SOLO_CB_START" ] && ViashError Bad arguments for option \'--solo_cb_start\': \'$VIASH_PAR_SOLO_CB_START\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CB_START="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_cb_start. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_cb_start=*)
            [ -n "$VIASH_PAR_SOLO_CB_START" ] && ViashError Bad arguments for option \'--solo_cb_start=*\': \'$VIASH_PAR_SOLO_CB_START\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CB_START=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_cb_len)
            [ -n "$VIASH_PAR_SOLO_CB_LEN" ] && ViashError Bad arguments for option \'--solo_cb_len\': \'$VIASH_PAR_SOLO_CB_LEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CB_LEN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_cb_len. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_cb_len=*)
            [ -n "$VIASH_PAR_SOLO_CB_LEN" ] && ViashError Bad arguments for option \'--solo_cb_len=*\': \'$VIASH_PAR_SOLO_CB_LEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CB_LEN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_umi_start)
            [ -n "$VIASH_PAR_SOLO_UMI_START" ] && ViashError Bad arguments for option \'--solo_umi_start\': \'$VIASH_PAR_SOLO_UMI_START\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_UMI_START="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_umi_start. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_umi_start=*)
            [ -n "$VIASH_PAR_SOLO_UMI_START" ] && ViashError Bad arguments for option \'--solo_umi_start=*\': \'$VIASH_PAR_SOLO_UMI_START\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_UMI_START=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_umi_len)
            [ -n "$VIASH_PAR_SOLO_UMI_LEN" ] && ViashError Bad arguments for option \'--solo_umi_len\': \'$VIASH_PAR_SOLO_UMI_LEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_UMI_LEN="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_umi_len. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_umi_len=*)
            [ -n "$VIASH_PAR_SOLO_UMI_LEN" ] && ViashError Bad arguments for option \'--solo_umi_len=*\': \'$VIASH_PAR_SOLO_UMI_LEN\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_UMI_LEN=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_barcode_read_length)
            [ -n "$VIASH_PAR_SOLO_BARCODE_READ_LENGTH" ] && ViashError Bad arguments for option \'--solo_barcode_read_length\': \'$VIASH_PAR_SOLO_BARCODE_READ_LENGTH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_BARCODE_READ_LENGTH="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_barcode_read_length. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_barcode_read_length=*)
            [ -n "$VIASH_PAR_SOLO_BARCODE_READ_LENGTH" ] && ViashError Bad arguments for option \'--solo_barcode_read_length=*\': \'$VIASH_PAR_SOLO_BARCODE_READ_LENGTH\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_BARCODE_READ_LENGTH=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_barcode_mate)
            [ -n "$VIASH_PAR_SOLO_BARCODE_MATE" ] && ViashError Bad arguments for option \'--solo_barcode_mate\': \'$VIASH_PAR_SOLO_BARCODE_MATE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_BARCODE_MATE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_barcode_mate. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_barcode_mate=*)
            [ -n "$VIASH_PAR_SOLO_BARCODE_MATE" ] && ViashError Bad arguments for option \'--solo_barcode_mate=*\': \'$VIASH_PAR_SOLO_BARCODE_MATE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_BARCODE_MATE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_cb_position)
            if [ -z "$VIASH_PAR_SOLO_CB_POSITION" ]; then
              VIASH_PAR_SOLO_CB_POSITION="$2"
            else
              VIASH_PAR_SOLO_CB_POSITION="$VIASH_PAR_SOLO_CB_POSITION;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_cb_position. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_cb_position=*)
            if [ -z "$VIASH_PAR_SOLO_CB_POSITION" ]; then
              VIASH_PAR_SOLO_CB_POSITION=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_CB_POSITION="$VIASH_PAR_SOLO_CB_POSITION;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_umi_position)
            [ -n "$VIASH_PAR_SOLO_UMI_POSITION" ] && ViashError Bad arguments for option \'--solo_umi_position\': \'$VIASH_PAR_SOLO_UMI_POSITION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_UMI_POSITION="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_umi_position. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_umi_position=*)
            [ -n "$VIASH_PAR_SOLO_UMI_POSITION" ] && ViashError Bad arguments for option \'--solo_umi_position=*\': \'$VIASH_PAR_SOLO_UMI_POSITION\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_UMI_POSITION=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_adapter_sequence)
            [ -n "$VIASH_PAR_SOLO_ADAPTER_SEQUENCE" ] && ViashError Bad arguments for option \'--solo_adapter_sequence\': \'$VIASH_PAR_SOLO_ADAPTER_SEQUENCE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_ADAPTER_SEQUENCE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_adapter_sequence. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_adapter_sequence=*)
            [ -n "$VIASH_PAR_SOLO_ADAPTER_SEQUENCE" ] && ViashError Bad arguments for option \'--solo_adapter_sequence=*\': \'$VIASH_PAR_SOLO_ADAPTER_SEQUENCE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_ADAPTER_SEQUENCE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_adapter_mismatches_nmax)
            [ -n "$VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX" ] && ViashError Bad arguments for option \'--solo_adapter_mismatches_nmax\': \'$VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_adapter_mismatches_nmax. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_adapter_mismatches_nmax=*)
            [ -n "$VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX" ] && ViashError Bad arguments for option \'--solo_adapter_mismatches_nmax=*\': \'$VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_cb_match_wl_type)
            [ -n "$VIASH_PAR_SOLO_CB_MATCH_WL_TYPE" ] && ViashError Bad arguments for option \'--solo_cb_match_wl_type\': \'$VIASH_PAR_SOLO_CB_MATCH_WL_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CB_MATCH_WL_TYPE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_cb_match_wl_type. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_cb_match_wl_type=*)
            [ -n "$VIASH_PAR_SOLO_CB_MATCH_WL_TYPE" ] && ViashError Bad arguments for option \'--solo_cb_match_wl_type=*\': \'$VIASH_PAR_SOLO_CB_MATCH_WL_TYPE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CB_MATCH_WL_TYPE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_input_sam_attr_barcode_seq)
            if [ -z "$VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ" ]; then
              VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ="$2"
            else
              VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ="$VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_input_sam_attr_barcode_seq. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_input_sam_attr_barcode_seq=*)
            if [ -z "$VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ" ]; then
              VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ="$VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_input_sam_attr_barcode_qual)
            if [ -z "$VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL" ]; then
              VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL="$2"
            else
              VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL="$VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_input_sam_attr_barcode_qual. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_input_sam_attr_barcode_qual=*)
            if [ -z "$VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL" ]; then
              VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL="$VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_strand)
            [ -n "$VIASH_PAR_SOLO_STRAND" ] && ViashError Bad arguments for option \'--solo_strand\': \'$VIASH_PAR_SOLO_STRAND\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_STRAND="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_strand. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_strand=*)
            [ -n "$VIASH_PAR_SOLO_STRAND" ] && ViashError Bad arguments for option \'--solo_strand=*\': \'$VIASH_PAR_SOLO_STRAND\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_STRAND=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --solo_features)
            if [ -z "$VIASH_PAR_SOLO_FEATURES" ]; then
              VIASH_PAR_SOLO_FEATURES="$2"
            else
              VIASH_PAR_SOLO_FEATURES="$VIASH_PAR_SOLO_FEATURES;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_features. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_features=*)
            if [ -z "$VIASH_PAR_SOLO_FEATURES" ]; then
              VIASH_PAR_SOLO_FEATURES=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_FEATURES="$VIASH_PAR_SOLO_FEATURES;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_multi_mappers)
            if [ -z "$VIASH_PAR_SOLO_MULTI_MAPPERS" ]; then
              VIASH_PAR_SOLO_MULTI_MAPPERS="$2"
            else
              VIASH_PAR_SOLO_MULTI_MAPPERS="$VIASH_PAR_SOLO_MULTI_MAPPERS;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_multi_mappers. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_multi_mappers=*)
            if [ -z "$VIASH_PAR_SOLO_MULTI_MAPPERS" ]; then
              VIASH_PAR_SOLO_MULTI_MAPPERS=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_MULTI_MAPPERS="$VIASH_PAR_SOLO_MULTI_MAPPERS;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_umi_dedup)
            if [ -z "$VIASH_PAR_SOLO_UMI_DEDUP" ]; then
              VIASH_PAR_SOLO_UMI_DEDUP="$2"
            else
              VIASH_PAR_SOLO_UMI_DEDUP="$VIASH_PAR_SOLO_UMI_DEDUP;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_umi_dedup. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_umi_dedup=*)
            if [ -z "$VIASH_PAR_SOLO_UMI_DEDUP" ]; then
              VIASH_PAR_SOLO_UMI_DEDUP=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_UMI_DEDUP="$VIASH_PAR_SOLO_UMI_DEDUP;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_umi_filtering)
            if [ -z "$VIASH_PAR_SOLO_UMI_FILTERING" ]; then
              VIASH_PAR_SOLO_UMI_FILTERING="$2"
            else
              VIASH_PAR_SOLO_UMI_FILTERING="$VIASH_PAR_SOLO_UMI_FILTERING;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_umi_filtering. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_umi_filtering=*)
            if [ -z "$VIASH_PAR_SOLO_UMI_FILTERING" ]; then
              VIASH_PAR_SOLO_UMI_FILTERING=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_UMI_FILTERING="$VIASH_PAR_SOLO_UMI_FILTERING;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_out_file_names)
            if [ -z "$VIASH_PAR_SOLO_OUT_FILE_NAMES" ]; then
              VIASH_PAR_SOLO_OUT_FILE_NAMES="$2"
            else
              VIASH_PAR_SOLO_OUT_FILE_NAMES="$VIASH_PAR_SOLO_OUT_FILE_NAMES;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_out_file_names. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_out_file_names=*)
            if [ -z "$VIASH_PAR_SOLO_OUT_FILE_NAMES" ]; then
              VIASH_PAR_SOLO_OUT_FILE_NAMES=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_OUT_FILE_NAMES="$VIASH_PAR_SOLO_OUT_FILE_NAMES;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_cell_filter)
            if [ -z "$VIASH_PAR_SOLO_CELL_FILTER" ]; then
              VIASH_PAR_SOLO_CELL_FILTER="$2"
            else
              VIASH_PAR_SOLO_CELL_FILTER="$VIASH_PAR_SOLO_CELL_FILTER;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_cell_filter. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_cell_filter=*)
            if [ -z "$VIASH_PAR_SOLO_CELL_FILTER" ]; then
              VIASH_PAR_SOLO_CELL_FILTER=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_CELL_FILTER="$VIASH_PAR_SOLO_CELL_FILTER;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_out_format_features_gene_field3)
            if [ -z "$VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3" ]; then
              VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3="$2"
            else
              VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3="$VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_out_format_features_gene_field3. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_out_format_features_gene_field3=*)
            if [ -z "$VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3" ]; then
              VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3="$VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --solo_cell_read_stats)
            [ -n "$VIASH_PAR_SOLO_CELL_READ_STATS" ] && ViashError Bad arguments for option \'--solo_cell_read_stats\': \'$VIASH_PAR_SOLO_CELL_READ_STATS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CELL_READ_STATS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --solo_cell_read_stats. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --solo_cell_read_stats=*)
            [ -n "$VIASH_PAR_SOLO_CELL_READ_STATS" ] && ViashError Bad arguments for option \'--solo_cell_read_stats=*\': \'$VIASH_PAR_SOLO_CELL_READ_STATS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SOLO_CELL_READ_STATS=$(ViashRemoveFlags "$1")
            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
            ;;
        --readFilesIn)
            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 --readFilesIn. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --input_r2)
            if [ -z "$VIASH_PAR_INPUT_R2" ]; then
              VIASH_PAR_INPUT_R2="$2"
            else
              VIASH_PAR_INPUT_R2="$VIASH_PAR_INPUT_R2;""$2"
            fi
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --input_r2. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --input_r2=*)
            if [ -z "$VIASH_PAR_INPUT_R2" ]; then
              VIASH_PAR_INPUT_R2=$(ViashRemoveFlags "$1")
            else
              VIASH_PAR_INPUT_R2="$VIASH_PAR_INPUT_R2;"$(ViashRemoveFlags "$1")
            fi
            shift 1
            ;;
        --aligned_reads)
            [ -n "$VIASH_PAR_ALIGNED_READS" ] && ViashError Bad arguments for option \'--aligned_reads\': \'$VIASH_PAR_ALIGNED_READS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGNED_READS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --aligned_reads. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --aligned_reads=*)
            [ -n "$VIASH_PAR_ALIGNED_READS" ] && ViashError Bad arguments for option \'--aligned_reads=*\': \'$VIASH_PAR_ALIGNED_READS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_ALIGNED_READS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --reads_per_gene)
            [ -n "$VIASH_PAR_READS_PER_GENE" ] && ViashError Bad arguments for option \'--reads_per_gene\': \'$VIASH_PAR_READS_PER_GENE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READS_PER_GENE="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --reads_per_gene. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --reads_per_gene=*)
            [ -n "$VIASH_PAR_READS_PER_GENE" ] && ViashError Bad arguments for option \'--reads_per_gene=*\': \'$VIASH_PAR_READS_PER_GENE\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READS_PER_GENE=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --unmapped)
            [ -n "$VIASH_PAR_UNMAPPED" ] && ViashError Bad arguments for option \'--unmapped\': \'$VIASH_PAR_UNMAPPED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_UNMAPPED="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --unmapped. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --unmapped=*)
            [ -n "$VIASH_PAR_UNMAPPED" ] && ViashError Bad arguments for option \'--unmapped=*\': \'$VIASH_PAR_UNMAPPED\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_UNMAPPED=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --unmapped_r2)
            [ -n "$VIASH_PAR_UNMAPPED_R2" ] && ViashError Bad arguments for option \'--unmapped_r2\': \'$VIASH_PAR_UNMAPPED_R2\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_UNMAPPED_R2="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --unmapped_r2. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --unmapped_r2=*)
            [ -n "$VIASH_PAR_UNMAPPED_R2" ] && ViashError Bad arguments for option \'--unmapped_r2=*\': \'$VIASH_PAR_UNMAPPED_R2\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_UNMAPPED_R2=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --chimeric_junctions)
            [ -n "$VIASH_PAR_CHIMERIC_JUNCTIONS" ] && ViashError Bad arguments for option \'--chimeric_junctions\': \'$VIASH_PAR_CHIMERIC_JUNCTIONS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIMERIC_JUNCTIONS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --chimeric_junctions. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --chimeric_junctions=*)
            [ -n "$VIASH_PAR_CHIMERIC_JUNCTIONS" ] && ViashError Bad arguments for option \'--chimeric_junctions=*\': \'$VIASH_PAR_CHIMERIC_JUNCTIONS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_CHIMERIC_JUNCTIONS=$(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
            ;;
        --splice_junctions)
            [ -n "$VIASH_PAR_SPLICE_JUNCTIONS" ] && ViashError Bad arguments for option \'--splice_junctions\': \'$VIASH_PAR_SPLICE_JUNCTIONS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SPLICE_JUNCTIONS="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --splice_junctions. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --splice_junctions=*)
            [ -n "$VIASH_PAR_SPLICE_JUNCTIONS" ] && ViashError Bad arguments for option \'--splice_junctions=*\': \'$VIASH_PAR_SPLICE_JUNCTIONS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_SPLICE_JUNCTIONS=$(ViashRemoveFlags "$1")
            shift 1
            ;;
        --reads_aligned_to_transcriptome)
            [ -n "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME" ] && ViashError Bad arguments for option \'--reads_aligned_to_transcriptome\': \'$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME="$2"
            [ $# -lt 2 ] && ViashError Not enough arguments passed to --reads_aligned_to_transcriptome. Use "--help" to get more information on the parameters. && exit 1
            shift 2
            ;;
        --reads_aligned_to_transcriptome=*)
            [ -n "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME" ] && ViashError Bad arguments for option \'--reads_aligned_to_transcriptome=*\': \'$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
            VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME=$(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/star/star_align_reads:v0.3.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" '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_PAR_GENOME_DIR+x} ]; then
  ViashError '--genome_dir' is a required argument. Use "--help" to get more information on the parameters.
  exit 1
fi
if [ -z ${VIASH_PAR_INPUT+x} ]; then
  ViashError '--input' is a required argument. Use "--help" to get more information on the parameters.
  exit 1
fi
if [ -z ${VIASH_PAR_ALIGNED_READS+x} ]; then
  ViashError '--aligned_reads' 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

# check whether required files exist
if [ ! -z "$VIASH_PAR_GENOME_DIR" ] && [ ! -e "$VIASH_PAR_GENOME_DIR" ]; then
  ViashError "Input file '$VIASH_PAR_GENOME_DIR' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_GENOME_FASTA_FILES" ]; then
  IFS=';'
  set -f
  for file in $VIASH_PAR_GENOME_FASTA_FILES; 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_SJDB_GTF_FILE" ] && [ ! -e "$VIASH_PAR_SJDB_GTF_FILE" ]; then
  ViashError "Input file '$VIASH_PAR_SJDB_GTF_FILE' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_READ_FILES_MANIFEST" ] && [ ! -e "$VIASH_PAR_READ_FILES_MANIFEST" ]; then
  ViashError "Input file '$VIASH_PAR_READ_FILES_MANIFEST' does not exist."
  exit 1
fi
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_INPUT_R2" ]; then
  IFS=';'
  set -f
  for file in $VIASH_PAR_INPUT_R2; do
    unset IFS
    if [ ! -e "$file" ]; then
      ViashError "Input file '$file' does not exist."
      exit 1
    fi
  done
  set +f
fi

# check whether parameters values are of the right type
if [[ -n "$VIASH_PAR_RUN_RNG_SEED" ]]; then
  if ! [[ "$VIASH_PAR_RUN_RNG_SEED" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--run_rng_seed' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [ -n "$VIASH_PAR_GENOME_FILE_SIZES" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_GENOME_FILE_SIZES; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--genome_file_sizes' 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_SJDB_OVERHANG" ]]; then
  if ! [[ "$VIASH_PAR_SJDB_OVERHANG" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--sjdb_overhang' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SJDB_SCORE" ]]; then
  if ! [[ "$VIASH_PAR_SJDB_SCORE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--sjdb_score' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_READ_MAP_NUMBER" ]]; then
  if ! [[ "$VIASH_PAR_READ_MAP_NUMBER" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--read_map_number' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_READ_QUALITY_SCORE_BASE" ]]; then
  if ! [[ "$VIASH_PAR_READ_QUALITY_SCORE_BASE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--read_quality_score_base' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [ -n "$VIASH_PAR_CLIP3P_NBASES" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_CLIP3P_NBASES; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--clip3p_nbases' 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_CLIP3P_ADAPTER_MM_P" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_CLIP3P_ADAPTER_MM_P; do
    if ! [[ "${val}" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
      ViashError '--clip3p_adapter_mm_p' has to be a double. Use "--help" to get more information on the parameters.
      exit 1
    fi
  done
  set +f
  unset IFS
fi

if [ -n "$VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--clip3p_after_adapter_nbases' 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_CLIP5P_NBASES" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_CLIP5P_NBASES; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--clip5p_nbases' 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_LIMIT_GENOME_GENERATE_RAM" ]]; then
  if ! [[ "$VIASH_PAR_LIMIT_GENOME_GENERATE_RAM" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--limit_genome_generate_ram' has to be a long. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [ -n "$VIASH_PAR_LIMIT_IO_BUFFER_SIZE" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_LIMIT_IO_BUFFER_SIZE; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--limit_io_buffer_size' has to be a long. Use "--help" to get more information on the parameters.
      exit 1
    fi
  done
  set +f
  unset IFS
fi

if [[ -n "$VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES" ]]; then
  if ! [[ "$VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--limit_out_sam_one_read_bytes' has to be a long. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_LIMIT_OUT_SJ_ONE_READ" ]]; then
  if ! [[ "$VIASH_PAR_LIMIT_OUT_SJ_ONE_READ" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--limit_out_sj_one_read' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED" ]]; then
  if ! [[ "$VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--limit_out_sj_collapsed' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_LIMIT_BAM_SORT_RAM" ]]; then
  if ! [[ "$VIASH_PAR_LIMIT_BAM_SORT_RAM" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--limit_bam_sort_ram' has to be a long. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_LIMIT_SJDB_INSERT_NSJ" ]]; then
  if ! [[ "$VIASH_PAR_LIMIT_SJDB_INSERT_NSJ" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--limit_sjdb_insert_nsj' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_LIMIT_NREADS_SOFT" ]]; then
  if ! [[ "$VIASH_PAR_LIMIT_NREADS_SOFT" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--limit_nreads_soft' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_QS_CONVERSION_ADD" ]]; then
  if ! [[ "$VIASH_PAR_OUT_QS_CONVERSION_ADD" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_qs_conversion_add' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_SAM_ATTR_IH_START" ]]; then
  if ! [[ "$VIASH_PAR_OUT_SAM_ATTR_IH_START" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_sam_attr_ih_start' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_SAM_MAPQ_UNIQUE" ]]; then
  if ! [[ "$VIASH_PAR_OUT_SAM_MAPQ_UNIQUE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_sam_mapq_unique' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_SAM_FLAG_OR" ]]; then
  if ! [[ "$VIASH_PAR_OUT_SAM_FLAG_OR" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_sam_flag_or' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_SAM_FLAG_AND" ]]; then
  if ! [[ "$VIASH_PAR_OUT_SAM_FLAG_AND" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_sam_flag_and' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_SAM_MULT_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_OUT_SAM_MULT_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_sam_mult_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_SAM_TLEN" ]]; then
  if ! [[ "$VIASH_PAR_OUT_SAM_TLEN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_sam_tlen' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_BAM_COMPRESSION" ]]; then
  if ! [[ "$VIASH_PAR_OUT_BAM_COMPRESSION" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_bam_compression' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_BAM_SORTING_THREAD_N" ]]; then
  if ! [[ "$VIASH_PAR_OUT_BAM_SORTING_THREAD_N" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_bam_sorting_thread_n' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_BAM_SORTING_BINS_N" ]]; then
  if ! [[ "$VIASH_PAR_OUT_BAM_SORTING_BINS_N" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_bam_sorting_bins_n' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N" ]]; then
  if ! [[ "$VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--bam_remove_duplicates_mate2bases_n' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_filter_multimap_score_range' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_filter_multimap_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_MISMATCH_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_filter_mismatch_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
    ViashError '--out_filter_mismatch_nover_lmax' has to be a double. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
    ViashError '--out_filter_mismatch_nover_read_lmax' has to be a double. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_SCORE_MIN" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_SCORE_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_filter_score_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
    ViashError '--out_filter_score_min_over_lread' has to be a double. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_MATCH_NMIN" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_MATCH_NMIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--out_filter_match_nmin' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD" ]]; then
  if ! [[ "$VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
    ViashError '--out_filter_match_nmin_over_lread' has to be a double. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [ -n "$VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--out_sj_filter_overhang_min' 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_OUT_SJ_FILTER_COUNT_UNIQUE_MIN" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--out_sj_filter_count_unique_min' 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_OUT_SJ_FILTER_COUNT_TOTAL_MIN" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--out_sj_filter_count_total_min' 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_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--out_sj_filter_dist_to_other_sj_min' 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_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--out_sj_filter_intron_max_vs_read_n' 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_SCORE_GAP" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_GAP" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_gap' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_GAP_NONCAN" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_GAP_NONCAN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_gap_noncan' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_GAP_GCAG" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_GAP_GCAG" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_gap_gcag' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_GAP_ATAC" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_GAP_ATAC" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_gap_atac' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_genomic_length_log2scale' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_DEL_OPEN" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_DEL_OPEN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_del_open' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_DEL_BASE" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_DEL_BASE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_del_base' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_INS_OPEN" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_INS_OPEN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_ins_open' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_INS_BASE" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_INS_BASE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_ins_base' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SCORE_STITCH_SJ_SHIFT" ]]; then
  if ! [[ "$VIASH_PAR_SCORE_STITCH_SJ_SHIFT" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--score_stitch_sj_shift' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_SEARCH_START_LMAX" ]]; then
  if ! [[ "$VIASH_PAR_SEED_SEARCH_START_LMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--seed_search_start_lmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD" ]]; then
  if ! [[ "$VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
    ViashError '--seed_search_start_lmax_over_lread' has to be a double. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_SEARCH_LMAX" ]]; then
  if ! [[ "$VIASH_PAR_SEED_SEARCH_LMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--seed_search_lmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_MULTIMAP_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_SEED_MULTIMAP_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--seed_multimap_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_PER_READ_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_SEED_PER_READ_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--seed_per_read_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_PER_WINDOW_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_SEED_PER_WINDOW_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--seed_per_window_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW" ]]; then
  if ! [[ "$VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--seed_none_loci_per_window' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_SPLIT_MIN" ]]; then
  if ! [[ "$VIASH_PAR_SEED_SPLIT_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--seed_split_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SEED_MAP_MIN" ]]; then
  if ! [[ "$VIASH_PAR_SEED_MAP_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--seed_map_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_INTRON_MIN" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_INTRON_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_intron_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_INTRON_MAX" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_INTRON_MAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_intron_max' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_MATES_GAP_MAX" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_MATES_GAP_MAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_mates_gap_max' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_SJ_OVERHANG_MIN" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_SJ_OVERHANG_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_sj_overhang_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [ -n "$VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX" ]; then
  IFS=';'
  set -f
  for val in $VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX; do
    if ! [[ "${val}" =~ ^[-+]?[0-9]+$ ]]; then
      ViashError '--align_sj_stitch_mismatch_nmax' 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_ALIGN_SJDB_OVERHANG_MIN" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_sjdb_overhang_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_spliced_mate_map_lmin' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
    ViashError '--align_spliced_mate_map_lmin_over_lmate' has to be a double. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_windows_per_read_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_transcripts_per_window_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--align_transcripts_per_read_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_PE_OVERLAP_NBASES_MIN" ]]; then
  if ! [[ "$VIASH_PAR_PE_OVERLAP_NBASES_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--pe_overlap_nbases_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_PE_OVERLAP_MM_P" ]]; then
  if ! [[ "$VIASH_PAR_PE_OVERLAP_MM_P" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
    ViashError '--pe_overlap_mm_p' has to be a double. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--win_anchor_multimap_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_WIN_BIN_NBITS" ]]; then
  if ! [[ "$VIASH_PAR_WIN_BIN_NBITS" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--win_bin_nbits' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_WIN_ANCHOR_DIST_NBINS" ]]; then
  if ! [[ "$VIASH_PAR_WIN_ANCHOR_DIST_NBINS" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--win_anchor_dist_nbins' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_WIN_FLANK_NBINS" ]]; then
  if ! [[ "$VIASH_PAR_WIN_FLANK_NBINS" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--win_flank_nbins' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN" ]]; then
  if ! [[ "$VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN" =~ ^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$ ]]; then
    ViashError '--win_read_coverage_relative_min' has to be a double. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN" ]]; then
  if ! [[ "$VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--win_read_coverage_bases_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_SEGMENT_MIN" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_SEGMENT_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_segment_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_SCORE_MIN" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_SCORE_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_score_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_SCORE_DROP_MAX" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_SCORE_DROP_MAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_score_drop_max' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_SCORE_SEPARATION" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_SCORE_SEPARATION" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_score_separation' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_score_junction_non_gtag' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_junction_overhang_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_segment_read_gap_max' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_main_segment_mult_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_MULTIMAP_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_MULTIMAP_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_multimap_nmax' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_multimap_score_range' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_nonchim_score_drop_min' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT" ]]; then
  if ! [[ "$VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--chim_out_junction_format' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION" ]]; then
  if ! [[ "$VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--quant_transcriptome_bam_compression' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_TWOPASS1READS_N" ]]; then
  if ! [[ "$VIASH_PAR_TWOPASS1READS_N" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--twopass1reads_n' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SOLO_CB_START" ]]; then
  if ! [[ "$VIASH_PAR_SOLO_CB_START" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--solo_cb_start' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SOLO_CB_LEN" ]]; then
  if ! [[ "$VIASH_PAR_SOLO_CB_LEN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--solo_cb_len' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SOLO_UMI_START" ]]; then
  if ! [[ "$VIASH_PAR_SOLO_UMI_START" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--solo_umi_start' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SOLO_UMI_LEN" ]]; then
  if ! [[ "$VIASH_PAR_SOLO_UMI_LEN" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--solo_umi_len' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SOLO_BARCODE_READ_LENGTH" ]]; then
  if ! [[ "$VIASH_PAR_SOLO_BARCODE_READ_LENGTH" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--solo_barcode_read_length' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SOLO_BARCODE_MATE" ]]; then
  if ! [[ "$VIASH_PAR_SOLO_BARCODE_MATE" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--solo_barcode_mate' has to be an integer. Use "--help" to get more information on the parameters.
    exit 1
  fi
fi
if [[ -n "$VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX" ]]; then
  if ! [[ "$VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX" =~ ^[-+]?[0-9]+$ ]]; then
    ViashError '--solo_adapter_mismatches_nmax' 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

# create parent directories of output files, if so desired
if [ ! -z "$VIASH_PAR_ALIGNED_READS" ] && [ ! -d "$(dirname "$VIASH_PAR_ALIGNED_READS")" ]; then
  mkdir -p "$(dirname "$VIASH_PAR_ALIGNED_READS")"
fi
if [ ! -z "$VIASH_PAR_READS_PER_GENE" ] && [ ! -d "$(dirname "$VIASH_PAR_READS_PER_GENE")" ]; then
  mkdir -p "$(dirname "$VIASH_PAR_READS_PER_GENE")"
fi
if [ ! -z "$VIASH_PAR_UNMAPPED" ] && [ ! -d "$(dirname "$VIASH_PAR_UNMAPPED")" ]; then
  mkdir -p "$(dirname "$VIASH_PAR_UNMAPPED")"
fi
if [ ! -z "$VIASH_PAR_UNMAPPED_R2" ] && [ ! -d "$(dirname "$VIASH_PAR_UNMAPPED_R2")" ]; then
  mkdir -p "$(dirname "$VIASH_PAR_UNMAPPED_R2")"
fi
if [ ! -z "$VIASH_PAR_CHIMERIC_JUNCTIONS" ] && [ ! -d "$(dirname "$VIASH_PAR_CHIMERIC_JUNCTIONS")" ]; then
  mkdir -p "$(dirname "$VIASH_PAR_CHIMERIC_JUNCTIONS")"
fi
if [ ! -z "$VIASH_PAR_LOG" ] && [ ! -d "$(dirname "$VIASH_PAR_LOG")" ]; then
  mkdir -p "$(dirname "$VIASH_PAR_LOG")"
fi
if [ ! -z "$VIASH_PAR_SPLICE_JUNCTIONS" ] && [ ! -d "$(dirname "$VIASH_PAR_SPLICE_JUNCTIONS")" ]; then
  mkdir -p "$(dirname "$VIASH_PAR_SPLICE_JUNCTIONS")"
fi
if [ ! -z "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME" ] && [ ! -d "$(dirname "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME")" ]; then
  mkdir -p "$(dirname "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME")"
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_GENOME_DIR" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_GENOME_DIR")" )
  VIASH_PAR_GENOME_DIR=$(ViashDockerAutodetectMount "$VIASH_PAR_GENOME_DIR")
fi
if [ ! -z "$VIASH_PAR_GENOME_FASTA_FILES" ]; then
  VIASH_TEST_GENOME_FASTA_FILES=()
  IFS=';'
  for var in $VIASH_PAR_GENOME_FASTA_FILES; do
    unset IFS
    VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$var")" )
    var=$(ViashDockerAutodetectMount "$var")
    VIASH_TEST_GENOME_FASTA_FILES+=( "$var" )
  done
  VIASH_PAR_GENOME_FASTA_FILES=$(IFS=';' ; echo "${VIASH_TEST_GENOME_FASTA_FILES[*]}")
fi
if [ ! -z "$VIASH_PAR_SJDB_GTF_FILE" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_SJDB_GTF_FILE")" )
  VIASH_PAR_SJDB_GTF_FILE=$(ViashDockerAutodetectMount "$VIASH_PAR_SJDB_GTF_FILE")
fi
if [ ! -z "$VIASH_PAR_READ_FILES_MANIFEST" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_READ_FILES_MANIFEST")" )
  VIASH_PAR_READ_FILES_MANIFEST=$(ViashDockerAutodetectMount "$VIASH_PAR_READ_FILES_MANIFEST")
fi
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_INPUT_R2" ]; then
  VIASH_TEST_INPUT_R2=()
  IFS=';'
  for var in $VIASH_PAR_INPUT_R2; do
    unset IFS
    VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$var")" )
    var=$(ViashDockerAutodetectMount "$var")
    VIASH_TEST_INPUT_R2+=( "$var" )
  done
  VIASH_PAR_INPUT_R2=$(IFS=';' ; echo "${VIASH_TEST_INPUT_R2[*]}")
fi
if [ ! -z "$VIASH_PAR_ALIGNED_READS" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_ALIGNED_READS")" )
  VIASH_PAR_ALIGNED_READS=$(ViashDockerAutodetectMount "$VIASH_PAR_ALIGNED_READS")
  VIASH_CHOWN_VARS+=( "$VIASH_PAR_ALIGNED_READS" )
fi
if [ ! -z "$VIASH_PAR_READS_PER_GENE" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_READS_PER_GENE")" )
  VIASH_PAR_READS_PER_GENE=$(ViashDockerAutodetectMount "$VIASH_PAR_READS_PER_GENE")
  VIASH_CHOWN_VARS+=( "$VIASH_PAR_READS_PER_GENE" )
fi
if [ ! -z "$VIASH_PAR_UNMAPPED" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_UNMAPPED")" )
  VIASH_PAR_UNMAPPED=$(ViashDockerAutodetectMount "$VIASH_PAR_UNMAPPED")
  VIASH_CHOWN_VARS+=( "$VIASH_PAR_UNMAPPED" )
fi
if [ ! -z "$VIASH_PAR_UNMAPPED_R2" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_UNMAPPED_R2")" )
  VIASH_PAR_UNMAPPED_R2=$(ViashDockerAutodetectMount "$VIASH_PAR_UNMAPPED_R2")
  VIASH_CHOWN_VARS+=( "$VIASH_PAR_UNMAPPED_R2" )
fi
if [ ! -z "$VIASH_PAR_CHIMERIC_JUNCTIONS" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_CHIMERIC_JUNCTIONS")" )
  VIASH_PAR_CHIMERIC_JUNCTIONS=$(ViashDockerAutodetectMount "$VIASH_PAR_CHIMERIC_JUNCTIONS")
  VIASH_CHOWN_VARS+=( "$VIASH_PAR_CHIMERIC_JUNCTIONS" )
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_PAR_SPLICE_JUNCTIONS" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_SPLICE_JUNCTIONS")" )
  VIASH_PAR_SPLICE_JUNCTIONS=$(ViashDockerAutodetectMount "$VIASH_PAR_SPLICE_JUNCTIONS")
  VIASH_CHOWN_VARS+=( "$VIASH_PAR_SPLICE_JUNCTIONS" )
fi
if [ ! -z "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME" ]; then
  VIASH_DIRECTORY_MOUNTS+=( "$(ViashDockerAutodetectMountArg "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME")" )
  VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME=$(ViashDockerAutodetectMount "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME")
  VIASH_CHOWN_VARS+=( "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME" )
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-star_align_reads-XXXXXX").py
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'
import tempfile
import subprocess
import shutil
from pathlib import Path
import yaml

## VIASH START
# The following code has been auto-generated by Viash.
par = {
  'run_rng_seed': $( if [ ! -z ${VIASH_PAR_RUN_RNG_SEED+x} ]; then echo "int(r'${VIASH_PAR_RUN_RNG_SEED//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'genome_dir': $( if [ ! -z ${VIASH_PAR_GENOME_DIR+x} ]; then echo "r'${VIASH_PAR_GENOME_DIR//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'genome_load': $( if [ ! -z ${VIASH_PAR_GENOME_LOAD+x} ]; then echo "r'${VIASH_PAR_GENOME_LOAD//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'genome_fasta_files': $( if [ ! -z ${VIASH_PAR_GENOME_FASTA_FILES+x} ]; then echo "r'${VIASH_PAR_GENOME_FASTA_FILES//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'genome_file_sizes': $( if [ ! -z ${VIASH_PAR_GENOME_FILE_SIZES+x} ]; then echo "list(map(int, r'${VIASH_PAR_GENOME_FILE_SIZES//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'genome_transform_output': $( if [ ! -z ${VIASH_PAR_GENOME_TRANSFORM_OUTPUT+x} ]; then echo "r'${VIASH_PAR_GENOME_TRANSFORM_OUTPUT//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'genome_chr_set_mitochondrial': $( if [ ! -z ${VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL+x} ]; then echo "r'${VIASH_PAR_GENOME_CHR_SET_MITOCHONDRIAL//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'sjdb_file_chr_start_end': $( if [ ! -z ${VIASH_PAR_SJDB_FILE_CHR_START_END+x} ]; then echo "r'${VIASH_PAR_SJDB_FILE_CHR_START_END//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'sjdb_gtf_file': $( if [ ! -z ${VIASH_PAR_SJDB_GTF_FILE+x} ]; then echo "r'${VIASH_PAR_SJDB_GTF_FILE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'sjdb_gtf_chr_prefix': $( if [ ! -z ${VIASH_PAR_SJDB_GTF_CHR_PREFIX+x} ]; then echo "r'${VIASH_PAR_SJDB_GTF_CHR_PREFIX//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'sjdb_gtf_feature_exon': $( if [ ! -z ${VIASH_PAR_SJDB_GTF_FEATURE_EXON+x} ]; then echo "r'${VIASH_PAR_SJDB_GTF_FEATURE_EXON//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'sjdb_gtf_tag_exon_parent_transcript': $( if [ ! -z ${VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_TRANSCRIPT+x} ]; then echo "r'${VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_TRANSCRIPT//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'sjdb_gtf_tag_exon_parent_gene': $( if [ ! -z ${VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE+x} ]; then echo "r'${VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'sjdb_gtf_tag_exon_parent_gene_name': $( if [ ! -z ${VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME+x} ]; then echo "r'${VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_NAME//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'sjdb_gtf_tag_exon_parent_gene_type': $( if [ ! -z ${VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE+x} ]; then echo "r'${VIASH_PAR_SJDB_GTF_TAG_EXON_PARENT_GENE_TYPE//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'sjdb_overhang': $( if [ ! -z ${VIASH_PAR_SJDB_OVERHANG+x} ]; then echo "int(r'${VIASH_PAR_SJDB_OVERHANG//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'sjdb_score': $( if [ ! -z ${VIASH_PAR_SJDB_SCORE+x} ]; then echo "int(r'${VIASH_PAR_SJDB_SCORE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'sjdb_insert_save': $( if [ ! -z ${VIASH_PAR_SJDB_INSERT_SAVE+x} ]; then echo "r'${VIASH_PAR_SJDB_INSERT_SAVE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'var_vcf_file': $( if [ ! -z ${VIASH_PAR_VAR_VCF_FILE+x} ]; then echo "r'${VIASH_PAR_VAR_VCF_FILE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'read_files_type': $( if [ ! -z ${VIASH_PAR_READ_FILES_TYPE+x} ]; then echo "r'${VIASH_PAR_READ_FILES_TYPE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'read_files_sam_attr_keep': $( if [ ! -z ${VIASH_PAR_READ_FILES_SAM_ATTR_KEEP+x} ]; then echo "r'${VIASH_PAR_READ_FILES_SAM_ATTR_KEEP//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'read_files_manifest': $( if [ ! -z ${VIASH_PAR_READ_FILES_MANIFEST+x} ]; then echo "r'${VIASH_PAR_READ_FILES_MANIFEST//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'read_files_prefix': $( if [ ! -z ${VIASH_PAR_READ_FILES_PREFIX+x} ]; then echo "r'${VIASH_PAR_READ_FILES_PREFIX//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'read_files_command': $( if [ ! -z ${VIASH_PAR_READ_FILES_COMMAND+x} ]; then echo "r'${VIASH_PAR_READ_FILES_COMMAND//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'read_map_number': $( if [ ! -z ${VIASH_PAR_READ_MAP_NUMBER+x} ]; then echo "int(r'${VIASH_PAR_READ_MAP_NUMBER//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'read_mates_lengths_in': $( if [ ! -z ${VIASH_PAR_READ_MATES_LENGTHS_IN+x} ]; then echo "r'${VIASH_PAR_READ_MATES_LENGTHS_IN//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'read_name_separator': $( if [ ! -z ${VIASH_PAR_READ_NAME_SEPARATOR+x} ]; then echo "r'${VIASH_PAR_READ_NAME_SEPARATOR//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'read_quality_score_base': $( if [ ! -z ${VIASH_PAR_READ_QUALITY_SCORE_BASE+x} ]; then echo "int(r'${VIASH_PAR_READ_QUALITY_SCORE_BASE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'clip_adapter_type': $( if [ ! -z ${VIASH_PAR_CLIP_ADAPTER_TYPE+x} ]; then echo "r'${VIASH_PAR_CLIP_ADAPTER_TYPE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'clip3p_nbases': $( if [ ! -z ${VIASH_PAR_CLIP3P_NBASES+x} ]; then echo "list(map(int, r'${VIASH_PAR_CLIP3P_NBASES//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'clip3p_adapter_seq': $( if [ ! -z ${VIASH_PAR_CLIP3P_ADAPTER_SEQ+x} ]; then echo "r'${VIASH_PAR_CLIP3P_ADAPTER_SEQ//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'clip3p_adapter_mm_p': $( if [ ! -z ${VIASH_PAR_CLIP3P_ADAPTER_MM_P+x} ]; then echo "list(map(float, r'${VIASH_PAR_CLIP3P_ADAPTER_MM_P//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'clip3p_after_adapter_nbases': $( if [ ! -z ${VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES+x} ]; then echo "list(map(int, r'${VIASH_PAR_CLIP3P_AFTER_ADAPTER_NBASES//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'clip5p_nbases': $( if [ ! -z ${VIASH_PAR_CLIP5P_NBASES+x} ]; then echo "list(map(int, r'${VIASH_PAR_CLIP5P_NBASES//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'limit_genome_generate_ram': $( if [ ! -z ${VIASH_PAR_LIMIT_GENOME_GENERATE_RAM+x} ]; then echo "int(r'${VIASH_PAR_LIMIT_GENOME_GENERATE_RAM//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'limit_io_buffer_size': $( if [ ! -z ${VIASH_PAR_LIMIT_IO_BUFFER_SIZE+x} ]; then echo "list(map(int, r'${VIASH_PAR_LIMIT_IO_BUFFER_SIZE//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'limit_out_sam_one_read_bytes': $( if [ ! -z ${VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES+x} ]; then echo "int(r'${VIASH_PAR_LIMIT_OUT_SAM_ONE_READ_BYTES//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'limit_out_sj_one_read': $( if [ ! -z ${VIASH_PAR_LIMIT_OUT_SJ_ONE_READ+x} ]; then echo "int(r'${VIASH_PAR_LIMIT_OUT_SJ_ONE_READ//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'limit_out_sj_collapsed': $( if [ ! -z ${VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED+x} ]; then echo "int(r'${VIASH_PAR_LIMIT_OUT_SJ_COLLAPSED//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'limit_bam_sort_ram': $( if [ ! -z ${VIASH_PAR_LIMIT_BAM_SORT_RAM+x} ]; then echo "int(r'${VIASH_PAR_LIMIT_BAM_SORT_RAM//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'limit_sjdb_insert_nsj': $( if [ ! -z ${VIASH_PAR_LIMIT_SJDB_INSERT_NSJ+x} ]; then echo "int(r'${VIASH_PAR_LIMIT_SJDB_INSERT_NSJ//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'limit_nreads_soft': $( if [ ! -z ${VIASH_PAR_LIMIT_NREADS_SOFT+x} ]; then echo "int(r'${VIASH_PAR_LIMIT_NREADS_SOFT//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_tmp_keep': $( if [ ! -z ${VIASH_PAR_OUT_TMP_KEEP+x} ]; then echo "r'${VIASH_PAR_OUT_TMP_KEEP//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_std': $( if [ ! -z ${VIASH_PAR_OUT_STD+x} ]; then echo "r'${VIASH_PAR_OUT_STD//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_reads_unmapped': $( if [ ! -z ${VIASH_PAR_OUT_READS_UNMAPPED+x} ]; then echo "r'${VIASH_PAR_OUT_READS_UNMAPPED//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_qs_conversion_add': $( if [ ! -z ${VIASH_PAR_OUT_QS_CONVERSION_ADD+x} ]; then echo "int(r'${VIASH_PAR_OUT_QS_CONVERSION_ADD//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_multimapper_order': $( if [ ! -z ${VIASH_PAR_OUT_MULTIMAPPER_ORDER+x} ]; then echo "r'${VIASH_PAR_OUT_MULTIMAPPER_ORDER//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sam_type': $( if [ ! -z ${VIASH_PAR_OUT_SAM_TYPE+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_TYPE//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'out_sam_mode': $( if [ ! -z ${VIASH_PAR_OUT_SAM_MODE+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_MODE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sam_strand_field': $( if [ ! -z ${VIASH_PAR_OUT_SAM_STRAND_FIELD+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_STRAND_FIELD//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sam_attributes': $( if [ ! -z ${VIASH_PAR_OUT_SAM_ATTRIBUTES+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_ATTRIBUTES//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'out_sam_attr_ih_start': $( if [ ! -z ${VIASH_PAR_OUT_SAM_ATTR_IH_START+x} ]; then echo "int(r'${VIASH_PAR_OUT_SAM_ATTR_IH_START//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_sam_unmapped': $( if [ ! -z ${VIASH_PAR_OUT_SAM_UNMAPPED+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_UNMAPPED//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'out_sam_order': $( if [ ! -z ${VIASH_PAR_OUT_SAM_ORDER+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_ORDER//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sam_primary_flag': $( if [ ! -z ${VIASH_PAR_OUT_SAM_PRIMARY_FLAG+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_PRIMARY_FLAG//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sam_read_id': $( if [ ! -z ${VIASH_PAR_OUT_SAM_READ_ID+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_READ_ID//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sam_mapq_unique': $( if [ ! -z ${VIASH_PAR_OUT_SAM_MAPQ_UNIQUE+x} ]; then echo "int(r'${VIASH_PAR_OUT_SAM_MAPQ_UNIQUE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_sam_flag_or': $( if [ ! -z ${VIASH_PAR_OUT_SAM_FLAG_OR+x} ]; then echo "int(r'${VIASH_PAR_OUT_SAM_FLAG_OR//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_sam_flag_and': $( if [ ! -z ${VIASH_PAR_OUT_SAM_FLAG_AND+x} ]; then echo "int(r'${VIASH_PAR_OUT_SAM_FLAG_AND//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_sam_attr_rg_line': $( if [ ! -z ${VIASH_PAR_OUT_SAM_ATTR_RG_LINE+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_ATTR_RG_LINE//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'out_sam_header_hd': $( if [ ! -z ${VIASH_PAR_OUT_SAM_HEADER_HD+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_HEADER_HD//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'out_sam_header_pg': $( if [ ! -z ${VIASH_PAR_OUT_SAM_HEADER_PG+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_HEADER_PG//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'out_sam_header_comment_file': $( if [ ! -z ${VIASH_PAR_OUT_SAM_HEADER_COMMENT_FILE+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_HEADER_COMMENT_FILE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sam_filter': $( if [ ! -z ${VIASH_PAR_OUT_SAM_FILTER+x} ]; then echo "r'${VIASH_PAR_OUT_SAM_FILTER//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'out_sam_mult_nmax': $( if [ ! -z ${VIASH_PAR_OUT_SAM_MULT_NMAX+x} ]; then echo "int(r'${VIASH_PAR_OUT_SAM_MULT_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_sam_tlen': $( if [ ! -z ${VIASH_PAR_OUT_SAM_TLEN+x} ]; then echo "int(r'${VIASH_PAR_OUT_SAM_TLEN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_bam_compression': $( if [ ! -z ${VIASH_PAR_OUT_BAM_COMPRESSION+x} ]; then echo "int(r'${VIASH_PAR_OUT_BAM_COMPRESSION//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_bam_sorting_thread_n': $( if [ ! -z ${VIASH_PAR_OUT_BAM_SORTING_THREAD_N+x} ]; then echo "int(r'${VIASH_PAR_OUT_BAM_SORTING_THREAD_N//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_bam_sorting_bins_n': $( if [ ! -z ${VIASH_PAR_OUT_BAM_SORTING_BINS_N+x} ]; then echo "int(r'${VIASH_PAR_OUT_BAM_SORTING_BINS_N//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'bam_remove_duplicates_type': $( if [ ! -z ${VIASH_PAR_BAM_REMOVE_DUPLICATES_TYPE+x} ]; then echo "r'${VIASH_PAR_BAM_REMOVE_DUPLICATES_TYPE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'bam_remove_duplicates_mate2bases_n': $( if [ ! -z ${VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N+x} ]; then echo "int(r'${VIASH_PAR_BAM_REMOVE_DUPLICATES_MATE2BASES_N//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_wig_type': $( if [ ! -z ${VIASH_PAR_OUT_WIG_TYPE+x} ]; then echo "r'${VIASH_PAR_OUT_WIG_TYPE//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'out_wig_strand': $( if [ ! -z ${VIASH_PAR_OUT_WIG_STRAND+x} ]; then echo "r'${VIASH_PAR_OUT_WIG_STRAND//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_wig_references_prefix': $( if [ ! -z ${VIASH_PAR_OUT_WIG_REFERENCES_PREFIX+x} ]; then echo "r'${VIASH_PAR_OUT_WIG_REFERENCES_PREFIX//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_wig_norm': $( if [ ! -z ${VIASH_PAR_OUT_WIG_NORM+x} ]; then echo "r'${VIASH_PAR_OUT_WIG_NORM//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_filter_type': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_TYPE+x} ]; then echo "r'${VIASH_PAR_OUT_FILTER_TYPE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_filter_multimap_score_range': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE+x} ]; then echo "int(r'${VIASH_PAR_OUT_FILTER_MULTIMAP_SCORE_RANGE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_multimap_nmax': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX+x} ]; then echo "int(r'${VIASH_PAR_OUT_FILTER_MULTIMAP_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_mismatch_nmax': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_MISMATCH_NMAX+x} ]; then echo "int(r'${VIASH_PAR_OUT_FILTER_MISMATCH_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_mismatch_nover_lmax': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX+x} ]; then echo "float(r'${VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_LMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_mismatch_nover_read_lmax': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX+x} ]; then echo "float(r'${VIASH_PAR_OUT_FILTER_MISMATCH_NOVER_READ_LMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_score_min': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_SCORE_MIN+x} ]; then echo "int(r'${VIASH_PAR_OUT_FILTER_SCORE_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_score_min_over_lread': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD+x} ]; then echo "float(r'${VIASH_PAR_OUT_FILTER_SCORE_MIN_OVER_LREAD//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_match_nmin': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_MATCH_NMIN+x} ]; then echo "int(r'${VIASH_PAR_OUT_FILTER_MATCH_NMIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_match_nmin_over_lread': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD+x} ]; then echo "float(r'${VIASH_PAR_OUT_FILTER_MATCH_NMIN_OVER_LREAD//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'out_filter_intron_motifs': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_INTRON_MOTIFS+x} ]; then echo "r'${VIASH_PAR_OUT_FILTER_INTRON_MOTIFS//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_filter_intron_strands': $( if [ ! -z ${VIASH_PAR_OUT_FILTER_INTRON_STRANDS+x} ]; then echo "r'${VIASH_PAR_OUT_FILTER_INTRON_STRANDS//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sj_type': $( if [ ! -z ${VIASH_PAR_OUT_SJ_TYPE+x} ]; then echo "r'${VIASH_PAR_OUT_SJ_TYPE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sj_filter_reads': $( if [ ! -z ${VIASH_PAR_OUT_SJ_FILTER_READS+x} ]; then echo "r'${VIASH_PAR_OUT_SJ_FILTER_READS//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'out_sj_filter_overhang_min': $( if [ ! -z ${VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN+x} ]; then echo "list(map(int, r'${VIASH_PAR_OUT_SJ_FILTER_OVERHANG_MIN//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'out_sj_filter_count_unique_min': $( if [ ! -z ${VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN+x} ]; then echo "list(map(int, r'${VIASH_PAR_OUT_SJ_FILTER_COUNT_UNIQUE_MIN//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'out_sj_filter_count_total_min': $( if [ ! -z ${VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN+x} ]; then echo "list(map(int, r'${VIASH_PAR_OUT_SJ_FILTER_COUNT_TOTAL_MIN//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'out_sj_filter_dist_to_other_sj_min': $( if [ ! -z ${VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN+x} ]; then echo "list(map(int, r'${VIASH_PAR_OUT_SJ_FILTER_DIST_TO_OTHER_SJ_MIN//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'out_sj_filter_intron_max_vs_read_n': $( if [ ! -z ${VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N+x} ]; then echo "list(map(int, r'${VIASH_PAR_OUT_SJ_FILTER_INTRON_MAX_VS_READ_N//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'score_gap': $( if [ ! -z ${VIASH_PAR_SCORE_GAP+x} ]; then echo "int(r'${VIASH_PAR_SCORE_GAP//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_gap_noncan': $( if [ ! -z ${VIASH_PAR_SCORE_GAP_NONCAN+x} ]; then echo "int(r'${VIASH_PAR_SCORE_GAP_NONCAN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_gap_gcag': $( if [ ! -z ${VIASH_PAR_SCORE_GAP_GCAG+x} ]; then echo "int(r'${VIASH_PAR_SCORE_GAP_GCAG//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_gap_atac': $( if [ ! -z ${VIASH_PAR_SCORE_GAP_ATAC+x} ]; then echo "int(r'${VIASH_PAR_SCORE_GAP_ATAC//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_genomic_length_log2scale': $( if [ ! -z ${VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE+x} ]; then echo "int(r'${VIASH_PAR_SCORE_GENOMIC_LENGTH_LOG2SCALE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_del_open': $( if [ ! -z ${VIASH_PAR_SCORE_DEL_OPEN+x} ]; then echo "int(r'${VIASH_PAR_SCORE_DEL_OPEN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_del_base': $( if [ ! -z ${VIASH_PAR_SCORE_DEL_BASE+x} ]; then echo "int(r'${VIASH_PAR_SCORE_DEL_BASE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_ins_open': $( if [ ! -z ${VIASH_PAR_SCORE_INS_OPEN+x} ]; then echo "int(r'${VIASH_PAR_SCORE_INS_OPEN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_ins_base': $( if [ ! -z ${VIASH_PAR_SCORE_INS_BASE+x} ]; then echo "int(r'${VIASH_PAR_SCORE_INS_BASE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'score_stitch_sj_shift': $( if [ ! -z ${VIASH_PAR_SCORE_STITCH_SJ_SHIFT+x} ]; then echo "int(r'${VIASH_PAR_SCORE_STITCH_SJ_SHIFT//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_search_start_lmax': $( if [ ! -z ${VIASH_PAR_SEED_SEARCH_START_LMAX+x} ]; then echo "int(r'${VIASH_PAR_SEED_SEARCH_START_LMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_search_start_lmax_over_lread': $( if [ ! -z ${VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD+x} ]; then echo "float(r'${VIASH_PAR_SEED_SEARCH_START_LMAX_OVER_LREAD//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_search_lmax': $( if [ ! -z ${VIASH_PAR_SEED_SEARCH_LMAX+x} ]; then echo "int(r'${VIASH_PAR_SEED_SEARCH_LMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_multimap_nmax': $( if [ ! -z ${VIASH_PAR_SEED_MULTIMAP_NMAX+x} ]; then echo "int(r'${VIASH_PAR_SEED_MULTIMAP_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_per_read_nmax': $( if [ ! -z ${VIASH_PAR_SEED_PER_READ_NMAX+x} ]; then echo "int(r'${VIASH_PAR_SEED_PER_READ_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_per_window_nmax': $( if [ ! -z ${VIASH_PAR_SEED_PER_WINDOW_NMAX+x} ]; then echo "int(r'${VIASH_PAR_SEED_PER_WINDOW_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_none_loci_per_window': $( if [ ! -z ${VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW+x} ]; then echo "int(r'${VIASH_PAR_SEED_NONE_LOCI_PER_WINDOW//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_split_min': $( if [ ! -z ${VIASH_PAR_SEED_SPLIT_MIN+x} ]; then echo "int(r'${VIASH_PAR_SEED_SPLIT_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'seed_map_min': $( if [ ! -z ${VIASH_PAR_SEED_MAP_MIN+x} ]; then echo "int(r'${VIASH_PAR_SEED_MAP_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_intron_min': $( if [ ! -z ${VIASH_PAR_ALIGN_INTRON_MIN+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_INTRON_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_intron_max': $( if [ ! -z ${VIASH_PAR_ALIGN_INTRON_MAX+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_INTRON_MAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_mates_gap_max': $( if [ ! -z ${VIASH_PAR_ALIGN_MATES_GAP_MAX+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_MATES_GAP_MAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_sj_overhang_min': $( if [ ! -z ${VIASH_PAR_ALIGN_SJ_OVERHANG_MIN+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_SJ_OVERHANG_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_sj_stitch_mismatch_nmax': $( if [ ! -z ${VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX+x} ]; then echo "list(map(int, r'${VIASH_PAR_ALIGN_SJ_STITCH_MISMATCH_NMAX//\'/\'\"\'\"r\'}'.split(';')))"; else echo None; fi ),
  'align_sjdb_overhang_min': $( if [ ! -z ${VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_SJDB_OVERHANG_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_spliced_mate_map_lmin': $( if [ ! -z ${VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_spliced_mate_map_lmin_over_lmate': $( if [ ! -z ${VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE+x} ]; then echo "float(r'${VIASH_PAR_ALIGN_SPLICED_MATE_MAP_LMIN_OVER_LMATE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_windows_per_read_nmax': $( if [ ! -z ${VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_WINDOWS_PER_READ_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_transcripts_per_window_nmax': $( if [ ! -z ${VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_TRANSCRIPTS_PER_WINDOW_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_transcripts_per_read_nmax': $( if [ ! -z ${VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX+x} ]; then echo "int(r'${VIASH_PAR_ALIGN_TRANSCRIPTS_PER_READ_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'align_ends_type': $( if [ ! -z ${VIASH_PAR_ALIGN_ENDS_TYPE+x} ]; then echo "r'${VIASH_PAR_ALIGN_ENDS_TYPE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'align_ends_protrude': $( if [ ! -z ${VIASH_PAR_ALIGN_ENDS_PROTRUDE+x} ]; then echo "r'${VIASH_PAR_ALIGN_ENDS_PROTRUDE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'align_soft_clip_at_reference_ends': $( if [ ! -z ${VIASH_PAR_ALIGN_SOFT_CLIP_AT_REFERENCE_ENDS+x} ]; then echo "r'${VIASH_PAR_ALIGN_SOFT_CLIP_AT_REFERENCE_ENDS//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'align_insertion_flush': $( if [ ! -z ${VIASH_PAR_ALIGN_INSERTION_FLUSH+x} ]; then echo "r'${VIASH_PAR_ALIGN_INSERTION_FLUSH//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'pe_overlap_nbases_min': $( if [ ! -z ${VIASH_PAR_PE_OVERLAP_NBASES_MIN+x} ]; then echo "int(r'${VIASH_PAR_PE_OVERLAP_NBASES_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'pe_overlap_mm_p': $( if [ ! -z ${VIASH_PAR_PE_OVERLAP_MM_P+x} ]; then echo "float(r'${VIASH_PAR_PE_OVERLAP_MM_P//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'win_anchor_multimap_nmax': $( if [ ! -z ${VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX+x} ]; then echo "int(r'${VIASH_PAR_WIN_ANCHOR_MULTIMAP_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'win_bin_nbits': $( if [ ! -z ${VIASH_PAR_WIN_BIN_NBITS+x} ]; then echo "int(r'${VIASH_PAR_WIN_BIN_NBITS//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'win_anchor_dist_nbins': $( if [ ! -z ${VIASH_PAR_WIN_ANCHOR_DIST_NBINS+x} ]; then echo "int(r'${VIASH_PAR_WIN_ANCHOR_DIST_NBINS//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'win_flank_nbins': $( if [ ! -z ${VIASH_PAR_WIN_FLANK_NBINS+x} ]; then echo "int(r'${VIASH_PAR_WIN_FLANK_NBINS//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'win_read_coverage_relative_min': $( if [ ! -z ${VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN+x} ]; then echo "float(r'${VIASH_PAR_WIN_READ_COVERAGE_RELATIVE_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'win_read_coverage_bases_min': $( if [ ! -z ${VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN+x} ]; then echo "int(r'${VIASH_PAR_WIN_READ_COVERAGE_BASES_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_out_type': $( if [ ! -z ${VIASH_PAR_CHIM_OUT_TYPE+x} ]; then echo "r'${VIASH_PAR_CHIM_OUT_TYPE//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'chim_segment_min': $( if [ ! -z ${VIASH_PAR_CHIM_SEGMENT_MIN+x} ]; then echo "int(r'${VIASH_PAR_CHIM_SEGMENT_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_score_min': $( if [ ! -z ${VIASH_PAR_CHIM_SCORE_MIN+x} ]; then echo "int(r'${VIASH_PAR_CHIM_SCORE_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_score_drop_max': $( if [ ! -z ${VIASH_PAR_CHIM_SCORE_DROP_MAX+x} ]; then echo "int(r'${VIASH_PAR_CHIM_SCORE_DROP_MAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_score_separation': $( if [ ! -z ${VIASH_PAR_CHIM_SCORE_SEPARATION+x} ]; then echo "int(r'${VIASH_PAR_CHIM_SCORE_SEPARATION//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_score_junction_non_gtag': $( if [ ! -z ${VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG+x} ]; then echo "int(r'${VIASH_PAR_CHIM_SCORE_JUNCTION_NON_GTAG//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_junction_overhang_min': $( if [ ! -z ${VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN+x} ]; then echo "int(r'${VIASH_PAR_CHIM_JUNCTION_OVERHANG_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_segment_read_gap_max': $( if [ ! -z ${VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX+x} ]; then echo "int(r'${VIASH_PAR_CHIM_SEGMENT_READ_GAP_MAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_filter': $( if [ ! -z ${VIASH_PAR_CHIM_FILTER+x} ]; then echo "r'${VIASH_PAR_CHIM_FILTER//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'chim_main_segment_mult_nmax': $( if [ ! -z ${VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX+x} ]; then echo "int(r'${VIASH_PAR_CHIM_MAIN_SEGMENT_MULT_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_multimap_nmax': $( if [ ! -z ${VIASH_PAR_CHIM_MULTIMAP_NMAX+x} ]; then echo "int(r'${VIASH_PAR_CHIM_MULTIMAP_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_multimap_score_range': $( if [ ! -z ${VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE+x} ]; then echo "int(r'${VIASH_PAR_CHIM_MULTIMAP_SCORE_RANGE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_nonchim_score_drop_min': $( if [ ! -z ${VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN+x} ]; then echo "int(r'${VIASH_PAR_CHIM_NONCHIM_SCORE_DROP_MIN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'chim_out_junction_format': $( if [ ! -z ${VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT+x} ]; then echo "int(r'${VIASH_PAR_CHIM_OUT_JUNCTION_FORMAT//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'quant_mode': $( if [ ! -z ${VIASH_PAR_QUANT_MODE+x} ]; then echo "r'${VIASH_PAR_QUANT_MODE//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'quant_transcriptome_bam_compression': $( if [ ! -z ${VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION+x} ]; then echo "int(r'${VIASH_PAR_QUANT_TRANSCRIPTOME_BAM_COMPRESSION//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'quant_transcriptome_sam_output': $( if [ ! -z ${VIASH_PAR_QUANT_TRANSCRIPTOME_SAM_OUTPUT+x} ]; then echo "r'${VIASH_PAR_QUANT_TRANSCRIPTOME_SAM_OUTPUT//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'twopass_mode': $( if [ ! -z ${VIASH_PAR_TWOPASS_MODE+x} ]; then echo "r'${VIASH_PAR_TWOPASS_MODE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'twopass1reads_n': $( if [ ! -z ${VIASH_PAR_TWOPASS1READS_N+x} ]; then echo "int(r'${VIASH_PAR_TWOPASS1READS_N//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'wasp_output_mode': $( if [ ! -z ${VIASH_PAR_WASP_OUTPUT_MODE+x} ]; then echo "r'${VIASH_PAR_WASP_OUTPUT_MODE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'solo_type': $( if [ ! -z ${VIASH_PAR_SOLO_TYPE+x} ]; then echo "r'${VIASH_PAR_SOLO_TYPE//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_cb_type': $( if [ ! -z ${VIASH_PAR_SOLO_CB_TYPE+x} ]; then echo "r'${VIASH_PAR_SOLO_CB_TYPE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'solo_cb_whitelist': $( if [ ! -z ${VIASH_PAR_SOLO_CB_WHITELIST+x} ]; then echo "r'${VIASH_PAR_SOLO_CB_WHITELIST//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_cb_start': $( if [ ! -z ${VIASH_PAR_SOLO_CB_START+x} ]; then echo "int(r'${VIASH_PAR_SOLO_CB_START//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'solo_cb_len': $( if [ ! -z ${VIASH_PAR_SOLO_CB_LEN+x} ]; then echo "int(r'${VIASH_PAR_SOLO_CB_LEN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'solo_umi_start': $( if [ ! -z ${VIASH_PAR_SOLO_UMI_START+x} ]; then echo "int(r'${VIASH_PAR_SOLO_UMI_START//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'solo_umi_len': $( if [ ! -z ${VIASH_PAR_SOLO_UMI_LEN+x} ]; then echo "int(r'${VIASH_PAR_SOLO_UMI_LEN//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'solo_barcode_read_length': $( if [ ! -z ${VIASH_PAR_SOLO_BARCODE_READ_LENGTH+x} ]; then echo "int(r'${VIASH_PAR_SOLO_BARCODE_READ_LENGTH//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'solo_barcode_mate': $( if [ ! -z ${VIASH_PAR_SOLO_BARCODE_MATE+x} ]; then echo "int(r'${VIASH_PAR_SOLO_BARCODE_MATE//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'solo_cb_position': $( if [ ! -z ${VIASH_PAR_SOLO_CB_POSITION+x} ]; then echo "r'${VIASH_PAR_SOLO_CB_POSITION//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_umi_position': $( if [ ! -z ${VIASH_PAR_SOLO_UMI_POSITION+x} ]; then echo "r'${VIASH_PAR_SOLO_UMI_POSITION//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'solo_adapter_sequence': $( if [ ! -z ${VIASH_PAR_SOLO_ADAPTER_SEQUENCE+x} ]; then echo "r'${VIASH_PAR_SOLO_ADAPTER_SEQUENCE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'solo_adapter_mismatches_nmax': $( if [ ! -z ${VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX+x} ]; then echo "int(r'${VIASH_PAR_SOLO_ADAPTER_MISMATCHES_NMAX//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'solo_cb_match_wl_type': $( if [ ! -z ${VIASH_PAR_SOLO_CB_MATCH_WL_TYPE+x} ]; then echo "r'${VIASH_PAR_SOLO_CB_MATCH_WL_TYPE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'solo_input_sam_attr_barcode_seq': $( if [ ! -z ${VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ+x} ]; then echo "r'${VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_SEQ//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_input_sam_attr_barcode_qual': $( if [ ! -z ${VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL+x} ]; then echo "r'${VIASH_PAR_SOLO_INPUT_SAM_ATTR_BARCODE_QUAL//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_strand': $( if [ ! -z ${VIASH_PAR_SOLO_STRAND+x} ]; then echo "r'${VIASH_PAR_SOLO_STRAND//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'solo_features': $( if [ ! -z ${VIASH_PAR_SOLO_FEATURES+x} ]; then echo "r'${VIASH_PAR_SOLO_FEATURES//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_multi_mappers': $( if [ ! -z ${VIASH_PAR_SOLO_MULTI_MAPPERS+x} ]; then echo "r'${VIASH_PAR_SOLO_MULTI_MAPPERS//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_umi_dedup': $( if [ ! -z ${VIASH_PAR_SOLO_UMI_DEDUP+x} ]; then echo "r'${VIASH_PAR_SOLO_UMI_DEDUP//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_umi_filtering': $( if [ ! -z ${VIASH_PAR_SOLO_UMI_FILTERING+x} ]; then echo "r'${VIASH_PAR_SOLO_UMI_FILTERING//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_out_file_names': $( if [ ! -z ${VIASH_PAR_SOLO_OUT_FILE_NAMES+x} ]; then echo "r'${VIASH_PAR_SOLO_OUT_FILE_NAMES//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_cell_filter': $( if [ ! -z ${VIASH_PAR_SOLO_CELL_FILTER+x} ]; then echo "r'${VIASH_PAR_SOLO_CELL_FILTER//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_out_format_features_gene_field3': $( if [ ! -z ${VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3+x} ]; then echo "r'${VIASH_PAR_SOLO_OUT_FORMAT_FEATURES_GENE_FIELD3//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'solo_cell_read_stats': $( if [ ! -z ${VIASH_PAR_SOLO_CELL_READ_STATS+x} ]; then echo "r'${VIASH_PAR_SOLO_CELL_READ_STATS//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'input': $( if [ ! -z ${VIASH_PAR_INPUT+x} ]; then echo "r'${VIASH_PAR_INPUT//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'input_r2': $( if [ ! -z ${VIASH_PAR_INPUT_R2+x} ]; then echo "r'${VIASH_PAR_INPUT_R2//\'/\'\"\'\"r\'}'.split(';')"; else echo None; fi ),
  'aligned_reads': $( if [ ! -z ${VIASH_PAR_ALIGNED_READS+x} ]; then echo "r'${VIASH_PAR_ALIGNED_READS//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'reads_per_gene': $( if [ ! -z ${VIASH_PAR_READS_PER_GENE+x} ]; then echo "r'${VIASH_PAR_READS_PER_GENE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'unmapped': $( if [ ! -z ${VIASH_PAR_UNMAPPED+x} ]; then echo "r'${VIASH_PAR_UNMAPPED//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'unmapped_r2': $( if [ ! -z ${VIASH_PAR_UNMAPPED_R2+x} ]; then echo "r'${VIASH_PAR_UNMAPPED_R2//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'chimeric_junctions': $( if [ ! -z ${VIASH_PAR_CHIMERIC_JUNCTIONS+x} ]; then echo "r'${VIASH_PAR_CHIMERIC_JUNCTIONS//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'log': $( if [ ! -z ${VIASH_PAR_LOG+x} ]; then echo "r'${VIASH_PAR_LOG//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'splice_junctions': $( if [ ! -z ${VIASH_PAR_SPLICE_JUNCTIONS+x} ]; then echo "r'${VIASH_PAR_SPLICE_JUNCTIONS//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'reads_aligned_to_transcriptome': $( if [ ! -z ${VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME+x} ]; then echo "r'${VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME//\'/\'\"\'\"r\'}'"; else echo None; fi )
}
meta = {
  'name': $( if [ ! -z ${VIASH_META_NAME+x} ]; then echo "r'${VIASH_META_NAME//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'functionality_name': $( if [ ! -z ${VIASH_META_FUNCTIONALITY_NAME+x} ]; then echo "r'${VIASH_META_FUNCTIONALITY_NAME//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'resources_dir': $( if [ ! -z ${VIASH_META_RESOURCES_DIR+x} ]; then echo "r'${VIASH_META_RESOURCES_DIR//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'executable': $( if [ ! -z ${VIASH_META_EXECUTABLE+x} ]; then echo "r'${VIASH_META_EXECUTABLE//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'config': $( if [ ! -z ${VIASH_META_CONFIG+x} ]; then echo "r'${VIASH_META_CONFIG//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'temp_dir': $( if [ ! -z ${VIASH_META_TEMP_DIR+x} ]; then echo "r'${VIASH_META_TEMP_DIR//\'/\'\"\'\"r\'}'"; else echo None; fi ),
  'cpus': $( if [ ! -z ${VIASH_META_CPUS+x} ]; then echo "int(r'${VIASH_META_CPUS//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_b': $( if [ ! -z ${VIASH_META_MEMORY_B+x} ]; then echo "int(r'${VIASH_META_MEMORY_B//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_kb': $( if [ ! -z ${VIASH_META_MEMORY_KB+x} ]; then echo "int(r'${VIASH_META_MEMORY_KB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_mb': $( if [ ! -z ${VIASH_META_MEMORY_MB+x} ]; then echo "int(r'${VIASH_META_MEMORY_MB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_gb': $( if [ ! -z ${VIASH_META_MEMORY_GB+x} ]; then echo "int(r'${VIASH_META_MEMORY_GB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_tb': $( if [ ! -z ${VIASH_META_MEMORY_TB+x} ]; then echo "int(r'${VIASH_META_MEMORY_TB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_pb': $( if [ ! -z ${VIASH_META_MEMORY_PB+x} ]; then echo "int(r'${VIASH_META_MEMORY_PB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_kib': $( if [ ! -z ${VIASH_META_MEMORY_KIB+x} ]; then echo "int(r'${VIASH_META_MEMORY_KIB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_mib': $( if [ ! -z ${VIASH_META_MEMORY_MIB+x} ]; then echo "int(r'${VIASH_META_MEMORY_MIB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_gib': $( if [ ! -z ${VIASH_META_MEMORY_GIB+x} ]; then echo "int(r'${VIASH_META_MEMORY_GIB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_tib': $( if [ ! -z ${VIASH_META_MEMORY_TIB+x} ]; then echo "int(r'${VIASH_META_MEMORY_TIB//\'/\'\"\'\"r\'}')"; else echo None; fi ),
  'memory_pib': $( if [ ! -z ${VIASH_META_MEMORY_PIB+x} ]; then echo "int(r'${VIASH_META_MEMORY_PIB//\'/\'\"\'\"r\'}')"; else echo None; fi )
}
dep = {
  
}

## VIASH END

# read config
with open(meta["config"], 'r') as stream:
    config = yaml.safe_load(stream)
all_arguments = {
    arg["name"].lstrip('-'): arg
    for argument_group in config["argument_groups"]
    for arg in argument_group["arguments"]
}

##################################################
# check and process SE / PE R1 input files
input_r1 = par["input"]
readFilesIn = ",".join(par["input"])
par["input"] = None

# check and process PE R2 input files
input_r2 = par["input_r2"]
if input_r2 is not None:
    if len(input_r1) != len(input_r2):
        raise ValueError("The number of R1 and R2 files do not match.")
    readFilesIn = [readFilesIn, ",".join(par["input_r2"])]
    par["input_r2"] = None

# store readFilesIn
par["readFilesIn"] = readFilesIn

##################################################

# determine readFilesCommand
if input_r1[0].endswith(".gz"):
    print(">> Input files are gzipped, setting readFilesCommand to zcat", flush=True)
    par["readFilesCommand"] = "zcat"
elif input_r1[0].endswith(".bz2"):
    print(">> Input files are bzipped, setting readFilesCommand to bzcat", flush=True)
    par["readFilesCommand"] = "bzcat"

##################################################
# store output paths
expected_outputs = {
    "aligned_reads": ["Aligned.out.sam", "Aligned.out.bam"],
    "reads_per_gene": "ReadsPerGene.out.tab",
    "chimeric_junctions": "Chimeric.out.junction",
    "log": "Log.final.out",
    "splice_junctions": "SJ.out.tab",
    "unmapped": "Unmapped.out.mate1",
    "unmapped_r2": "Unmapped.out.mate2", 
    "reads_aligned_to_transcriptome": "Aligned.toTranscriptome.out.bam"
}
output_paths = {name: par[name] for name in expected_outputs.keys()}
for name in expected_outputs.keys():
    par[name] = None

##################################################
# process other args
par["runMode"] = "alignReads"

if "cpus" in meta and meta["cpus"]:
    par["runThreadN"] = meta["cpus"]

##################################################
# run STAR and move output to final destination
with tempfile.TemporaryDirectory(prefix="star-", dir=meta["temp_dir"], ignore_cleanup_errors=True) as temp_dir:
    print(">> Constructing command", flush=True)

    # set output paths
    temp_dir = Path(temp_dir)
    par["outTmpDir"] = temp_dir / "tempdir"
    out_dir = temp_dir / "out"
    par["outFileNamePrefix"] = f"{out_dir}/" # star needs this slash

    # construct command
    cmd_args = [ "STAR" ]
    for name, value in par.items():
        if value is not None:
            if name in all_arguments:
                arg_info = all_arguments[name].get("info", {})
                cli_name = arg_info.get("orig_name", f"--{name}")
            else:
                cli_name = f"--{name}"
            val_to_add = value if isinstance(value, list) else [value]
            cmd_args.extend([cli_name] + [str(x) for x in val_to_add])
    print("", flush=True)

    # run command
    print(">> Running STAR with command:", flush=True)
    print(f"+ {' '.join(cmd_args)}", end="\\n\\n", flush=True)
    subprocess.run(
        cmd_args,
        check=True
    )
    print(">> STAR finished successfully", end="\\n\\n", flush=True)

    # move output to final destination
    print(">> Moving output to final destination", flush=True)
    for name, paths in expected_outputs.items():
        for expected_path in [paths] if isinstance(paths, str) else paths:
            expected_full_path = out_dir / expected_path
            if output_paths[name] and expected_full_path.is_file():
                print(f">> Moving {expected_path} to {output_paths[name]}", flush=True)
                shutil.move(expected_full_path, output_paths[name])
VIASHMAIN
python -B "\$tempscript" &
wait "\$!"

VIASHEOF


if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
  # strip viash automount from file paths
  
  if [ ! -z "$VIASH_PAR_GENOME_DIR" ]; then
    VIASH_PAR_GENOME_DIR=$(ViashDockerStripAutomount "$VIASH_PAR_GENOME_DIR")
  fi
  if [ ! -z "$VIASH_PAR_GENOME_FASTA_FILES" ]; then
    unset VIASH_TEST_GENOME_FASTA_FILES
    IFS=';'
    for var in $VIASH_PAR_GENOME_FASTA_FILES; do
      unset IFS
      if [ -z "$VIASH_TEST_GENOME_FASTA_FILES" ]; then
      VIASH_TEST_GENOME_FASTA_FILES="$(ViashDockerStripAutomount "$var")"
    else
      VIASH_TEST_GENOME_FASTA_FILES="$VIASH_TEST_GENOME_FASTA_FILES;""$(ViashDockerStripAutomount "$var")"
    fi
    done
    VIASH_PAR_GENOME_FASTA_FILES="$VIASH_TEST_GENOME_FASTA_FILES"
  fi
  if [ ! -z "$VIASH_PAR_SJDB_GTF_FILE" ]; then
    VIASH_PAR_SJDB_GTF_FILE=$(ViashDockerStripAutomount "$VIASH_PAR_SJDB_GTF_FILE")
  fi
  if [ ! -z "$VIASH_PAR_READ_FILES_MANIFEST" ]; then
    VIASH_PAR_READ_FILES_MANIFEST=$(ViashDockerStripAutomount "$VIASH_PAR_READ_FILES_MANIFEST")
  fi
  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_INPUT_R2" ]; then
    unset VIASH_TEST_INPUT_R2
    IFS=';'
    for var in $VIASH_PAR_INPUT_R2; do
      unset IFS
      if [ -z "$VIASH_TEST_INPUT_R2" ]; then
      VIASH_TEST_INPUT_R2="$(ViashDockerStripAutomount "$var")"
    else
      VIASH_TEST_INPUT_R2="$VIASH_TEST_INPUT_R2;""$(ViashDockerStripAutomount "$var")"
    fi
    done
    VIASH_PAR_INPUT_R2="$VIASH_TEST_INPUT_R2"
  fi
  if [ ! -z "$VIASH_PAR_ALIGNED_READS" ]; then
    VIASH_PAR_ALIGNED_READS=$(ViashDockerStripAutomount "$VIASH_PAR_ALIGNED_READS")
  fi
  if [ ! -z "$VIASH_PAR_READS_PER_GENE" ]; then
    VIASH_PAR_READS_PER_GENE=$(ViashDockerStripAutomount "$VIASH_PAR_READS_PER_GENE")
  fi
  if [ ! -z "$VIASH_PAR_UNMAPPED" ]; then
    VIASH_PAR_UNMAPPED=$(ViashDockerStripAutomount "$VIASH_PAR_UNMAPPED")
  fi
  if [ ! -z "$VIASH_PAR_UNMAPPED_R2" ]; then
    VIASH_PAR_UNMAPPED_R2=$(ViashDockerStripAutomount "$VIASH_PAR_UNMAPPED_R2")
  fi
  if [ ! -z "$VIASH_PAR_CHIMERIC_JUNCTIONS" ]; then
    VIASH_PAR_CHIMERIC_JUNCTIONS=$(ViashDockerStripAutomount "$VIASH_PAR_CHIMERIC_JUNCTIONS")
  fi
  if [ ! -z "$VIASH_PAR_LOG" ]; then
    VIASH_PAR_LOG=$(ViashDockerStripAutomount "$VIASH_PAR_LOG")
  fi
  if [ ! -z "$VIASH_PAR_SPLICE_JUNCTIONS" ]; then
    VIASH_PAR_SPLICE_JUNCTIONS=$(ViashDockerStripAutomount "$VIASH_PAR_SPLICE_JUNCTIONS")
  fi
  if [ ! -z "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME" ]; then
    VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME=$(ViashDockerStripAutomount "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME")
  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_ALIGNED_READS" ] && [ ! -e "$VIASH_PAR_ALIGNED_READS" ]; then
  ViashError "Output file '$VIASH_PAR_ALIGNED_READS' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_READS_PER_GENE" ] && [ ! -e "$VIASH_PAR_READS_PER_GENE" ]; then
  ViashError "Output file '$VIASH_PAR_READS_PER_GENE' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_UNMAPPED" ] && [ ! -e "$VIASH_PAR_UNMAPPED" ]; then
  ViashError "Output file '$VIASH_PAR_UNMAPPED' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_UNMAPPED_R2" ] && [ ! -e "$VIASH_PAR_UNMAPPED_R2" ]; then
  ViashError "Output file '$VIASH_PAR_UNMAPPED_R2' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_CHIMERIC_JUNCTIONS" ] && [ ! -e "$VIASH_PAR_CHIMERIC_JUNCTIONS" ]; then
  ViashError "Output file '$VIASH_PAR_CHIMERIC_JUNCTIONS' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_LOG" ] && [ ! -e "$VIASH_PAR_LOG" ]; then
  ViashError "Output file '$VIASH_PAR_LOG' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_SPLICE_JUNCTIONS" ] && [ ! -e "$VIASH_PAR_SPLICE_JUNCTIONS" ]; then
  ViashError "Output file '$VIASH_PAR_SPLICE_JUNCTIONS' does not exist."
  exit 1
fi
if [ ! -z "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME" ] && [ ! -e "$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME" ]; then
  ViashError "Output file '$VIASH_PAR_READS_ALIGNED_TO_TRANSCRIPTOME' does not exist."
  exit 1
fi


exit 0
