File Info

Filename
.command.run
Full Path
s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd/.command.run
Size
32.7 KB
Attempt
#!/bin/bash
### ---
### name: 'GERMLINE_CNV:ProcessBatch (1)'
### container: '292967571998.dkr.ecr.us-west-2.amazonaws.com/sarek/altera_cnv:0.4.0'
### outputs:
### - 'counts_1.parquet'
### - 'sample_metrics_1.parquet'
### - 'ploidy_1.parquet'
### - 'A237CFYLT3_1__sex_calls.parquet'
### - 'A237CFYLT3_1__sex_calls.png'
### ...
set -e
set -u
NXF_DEBUG=${NXF_DEBUG:=0}; [[ $NXF_DEBUG > 1 ]] && set -x
NXF_ENTRY=${1:-nxf_main}

nxf_tree() {
    local pid=$1

    declare -a ALL_CHILDREN
    while read P PP;do
        ALL_CHILDREN[$PP]+=" $P"
    done < <(ps -e -o pid= -o ppid=)

    pstat() {
        local x_pid=$1
        local STATUS=$(2> /dev/null < /proc/$1/status grep -E 'Vm|ctxt')

        if [ $? = 0 ]; then
        local  x_vsz=$(echo "$STATUS" | grep VmSize | awk '{print $2}' || echo -n '0')
        local  x_rss=$(echo "$STATUS" | grep VmRSS | awk '{print $2}' || echo -n '0')
        local x_peak=$(echo "$STATUS" | grep -E 'VmPeak|VmHWM' | sed 's/^.*:\s*//' | sed 's/[\sa-zA-Z]*$//' | tr '\n' ' ' || echo -n '0 0')
        local x_pmem=$(awk -v rss=$x_rss -v mem_tot=$mem_tot 'BEGIN {printf "%.0f", rss/mem_tot*100*10}' || echo -n '0')
        local vol_ctxt=$(echo "$STATUS" | grep '\bvoluntary_ctxt_switches' | awk '{print $2}' || echo -n '0')
        local inv_ctxt=$(echo "$STATUS" | grep '\bnonvoluntary_ctxt_switches' | awk '{print $2}' || echo -n '0')
        cpu_stat[x_pid]="$x_pid $x_pmem $x_vsz $x_rss $x_peak $vol_ctxt $inv_ctxt"
        fi
    }

    pwalk() {
        pstat $1
        for i in ${ALL_CHILDREN[$1]:=}; do pwalk $i; done
    }

    pwalk $1
}

nxf_stat() {
    cpu_stat=()
    nxf_tree $1

    declare -a sum=(0 0 0 0 0 0 0 0)
    local pid
    local i
    for pid in "${!cpu_stat[@]}"; do
        local row=(${cpu_stat[pid]})
        [ $NXF_DEBUG = 1 ] && echo "++ stat mem=${row[*]}"
        for i in "${!row[@]}"; do
        if [ $i != 0 ]; then
            sum[i]=$((sum[i]+row[i]))
        fi
        done
    done

    [ $NXF_DEBUG = 1 ] && echo -e "++ stat SUM=${sum[*]}"

    for i in {1..7}; do
        if [ ${sum[i]} -lt ${cpu_peak[i]} ]; then
            sum[i]=${cpu_peak[i]}
        else
            cpu_peak[i]=${sum[i]}
        fi
    done

    [ $NXF_DEBUG = 1 ] && echo -e "++ stat PEAK=${sum[*]}\n"
    nxf_stat_ret=(${sum[*]})
}

nxf_mem_watch() {
    set -o pipefail
    local pid=$1
    local trace_file=.command.trace
    local count=0;
    declare -a cpu_stat=(0 0 0 0 0 0 0 0)
    declare -a cpu_peak=(0 0 0 0 0 0 0 0)
    local mem_tot=$(< /proc/meminfo grep MemTotal | awk '{print $2}')
    local timeout
    local DONE
    local STOP=''

    [ $NXF_DEBUG = 1 ] && nxf_sleep 0.2 && ps fx

    while true; do
        nxf_stat $pid
        if [ $count -lt 10 ]; then timeout=1;
        elif [ $count -lt 120 ]; then timeout=5;
        else timeout=30;
        fi
        read -t $timeout -r DONE || true
        [[ $DONE ]] && break
        if [ ! -e /proc/$pid ]; then
            [ ! $STOP ] && STOP=$(nxf_date)
            [ $(($(nxf_date)-STOP)) -gt 10000 ] && break
        fi
        count=$((count+1))
    done

    printf "%s\n" \
        "%mem=${nxf_stat_ret[1]}" \
        "vmem=${nxf_stat_ret[2]}" \
        "rss=${nxf_stat_ret[3]}" \
        "peak_vmem=${nxf_stat_ret[4]}" \
        "peak_rss=${nxf_stat_ret[5]}" \
        "vol_ctxt=${nxf_stat_ret[6]}" \
        "inv_ctxt=${nxf_stat_ret[7]}" >> "$trace_file" || >&2 echo "Error: Failed to append to file: $trace_file"
}

nxf_write_trace() {
    printf "%s\n" \
        "nextflow.trace/v2" \
        "realtime=$wall_time" \
        "%cpu=$ucpu" \
        "cpu_model=$cpu_model" \
        "rchar=${io_stat1[0]}" \
        "wchar=${io_stat1[1]}" \
        "syscr=${io_stat1[2]}" \
        "syscw=${io_stat1[3]}" \
        "read_bytes=${io_stat1[4]}" \
        "write_bytes=${io_stat1[5]}" >| "$trace_file" || >&2 echo "Error: Failed to write to file: $trace_file"
}

nxf_trace_mac() {
    local start_millis=$(nxf_date)

    /bin/bash -Ceuo pipefail .command.sh

    local end_millis=$(nxf_date)
    local wall_time=$((end_millis-start_millis))
    local ucpu=''
    local cpu_model=''
    local io_stat1=('' '' '' '' '' '')
    nxf_write_trace
}

nxf_fd() {
    local FD=11
    while [ -e /proc/$$/fd/$FD ]; do FD=$((FD+1)); done
    echo $FD
}

nxf_trace_linux() {
    local pid=$$
    command -v ps &>/dev/null || { >&2 echo "Command 'ps' required by nextflow to collect task metrics cannot be found"; exit 1; }
    local num_cpus=$(< /proc/cpuinfo grep '^processor' -c)
    local cpu_model=$(< /proc/cpuinfo grep '^model name' | head -n 1 | awk 'BEGIN{FS="\t: "} { print $2 }')
    local tot_time0=$(grep '^cpu ' /proc/stat | awk '{sum=$2+$3+$4+$5+$6+$7+$8+$9; printf "%.0f",sum}')
    local cpu_time0=$(2> /dev/null < /proc/$pid/stat awk '{printf "%.0f", ($16+$17)*10 }' || echo -n 'X')
    local io_stat0=($(2> /dev/null < /proc/$pid/io sed 's/^.*:\s*//' | head -n 6 | tr '\n' ' ' || echo -n '0 0 0 0 0 0'))
    local start_millis=$(nxf_date)
    trap 'kill $mem_proc' ERR
    
    /bin/bash -Ceuo pipefail .command.sh &
    local task=$!

    mem_fd=$(nxf_fd)
    eval "exec $mem_fd> >(nxf_mem_watch $task)"
    local mem_proc=$!

    wait $task

    local end_millis=$(nxf_date)
    local tot_time1=$(grep '^cpu ' /proc/stat | awk '{sum=$2+$3+$4+$5+$6+$7+$8+$9; printf "%.0f",sum}')
    local cpu_time1=$(2> /dev/null < /proc/$pid/stat awk '{printf "%.0f", ($16+$17)*10 }' || echo -n 'X')
    local ucpu=$(awk -v p1=$cpu_time1 -v p0=$cpu_time0 -v t1=$tot_time1 -v t0=$tot_time0 -v n=$num_cpus 'BEGIN { pct=(p1-p0)/(t1-t0)*100*n; printf("%.0f", pct>0 ? pct : 0) }' )

    local io_stat1=($(2> /dev/null < /proc/$pid/io sed 's/^.*:\s*//' | head -n 6 | tr '\n' ' ' || echo -n '0 0 0 0 0 0'))
    local i
    for i in {0..5}; do
        io_stat1[i]=$((io_stat1[i]-io_stat0[i]))
    done

    local wall_time=$((end_millis-start_millis))
    [ $NXF_DEBUG = 1 ] && echo "+++ STATS %CPU=$ucpu TIME=$wall_time I/O=${io_stat1[*]}"

    printf "%s\n" \
        "nextflow.trace/v2" \
        "realtime=$wall_time" \
        "%cpu=$ucpu" \
        "cpu_model=$cpu_model" \
        "rchar=${io_stat1[0]}" \
        "wchar=${io_stat1[1]}" \
        "syscr=${io_stat1[2]}" \
        "syscw=${io_stat1[3]}" \
        "read_bytes=${io_stat1[4]}" \
        "write_bytes=${io_stat1[5]}" >| "$trace_file" || >&2 echo "Error: Failed to write to file: $trace_file"

    [ -e /proc/$mem_proc ] && eval "echo 'DONE' >&$mem_fd" || true
    wait $mem_proc 2>/dev/null || true
    while [ -e /proc/$mem_proc ]; do nxf_sleep 0.1; done
}

nxf_trace() {
    local trace_file=.command.trace
    touch $trace_file
    if [[ $(uname) = Darwin ]]; then
        nxf_trace_mac
    else
        nxf_trace_linux
    fi
}
# bash helper functions
nxf_cp_retry() {
    local max_attempts=1
    local timeout=10
    local attempt=0
    local exitCode=0
    while (( $attempt < $max_attempts ))
    do
      if "$@"
        then
          return 0
      else
        exitCode=$?
      fi
      if [[ $exitCode == 0 ]]
      then
        break
      fi
      nxf_sleep $timeout
      attempt=$(( attempt + 1 ))
      timeout=$(( timeout * 2 ))
    done
}

nxf_parallel() {
    IFS=$'\n'
    local cmd=("$@")
    local cpus=$(nproc 2>/dev/null || < /proc/cpuinfo grep '^process' -c)
    local max=$(if (( cpus>4 )); then echo 4; else echo $cpus; fi)
    local i=0
    local pid=()
    (
    set +u
    while ((i<${#cmd[@]})); do
        local copy=()
        for x in "${pid[@]}"; do
          # if the process exist, keep in the 'copy' array, otherwise wait on it to capture the exit code
          # see https://github.com/nextflow-io/nextflow/pull/4050
          [[ -e /proc/$x ]] && copy+=($x) || wait $x
        done
        pid=("${copy[@]}")

        if ((${#pid[@]}>=$max)); then
          nxf_sleep 0.2
        else
          eval "${cmd[$i]}" &
          pid+=($!)
          ((i+=1))
        fi
    done
    for p in "${pid[@]}"; do
        wait $p
    done
    )
    unset IFS
}

# aws helper for s5cmd
nxf_s3_upload() {
    local name=$1
    local s3path=$2
    if [[ "$name" == - ]]; then
      local tmp=$(nxf_mktemp)
      cp /dev/stdin $tmp/$name
      /opt/s5cmd/bin/s5cmd --log error cp --storage-class STANDARD $tmp/$name "$s3path"
    elif [[ -d "$name" ]]; then
      /opt/s5cmd/bin/s5cmd --log error cp --storage-class STANDARD "$name/" "$s3path/$name/"
    else
      /opt/s5cmd/bin/s5cmd --log error cp --storage-class STANDARD "$name" "$s3path/$name"
    fi
}

nxf_s3_download() {
    local source=$1
    local target=$2
    echo "  Downloading: $source"
    local file_name=$(basename $1)
    local is_dir=$(/opt/s5cmd/bin/s5cmd ls $source | grep -F "DIR  ${file_name}/" -c)
    if [[ $is_dir == 1 ]]; then
        /opt/s5cmd/bin/s5cmd --log error cp "$source/*" "$target"
    else
        /opt/s5cmd/bin/s5cmd --log error cp "$source" "$target"
    fi
}

nxf_sleep() {
  sleep $1 2>/dev/null || sleep 1;
}

nxf_date() {
    local ts=$(date +%s%3N);
    if [[ ${#ts} == 10 ]]; then echo ${ts}000
    elif [[ $ts == *%3N ]]; then echo ${ts/\%3N/000}
    elif [[ $ts == *3N ]]; then echo ${ts/3N/000}
    elif [[ ${#ts} == 13 ]]; then echo $ts
    else echo "Unexpected timestamp value: $ts"; exit 1
    fi
}

nxf_env() {
    echo '============= task environment ============='
    env | sort | sed "s/\(.*\)AWS\(.*\)=\(.\{6\}\).*/\1AWS\2=\3xxxxxxxxxxxxx/"
    echo '============= task output =================='
}

nxf_kill() {
    declare -a children
    while read P PP;do
        children[$PP]+=" $P"
    done < <(ps -e -o pid= -o ppid=)

    kill_all() {
        [[ $1 != $$ ]] && kill $1 2>/dev/null || true
        for i in ${children[$1]:=}; do kill_all $i; done
    }

    kill_all $1
}

nxf_mktemp() {
    local base=${1:-/tmp}
    mkdir -p "$base"
    if [[ $(uname) = Darwin ]]; then mktemp -d $base/nxf.XXXXXXXXXX
    else TMPDIR="$base" mktemp -d -t nxf.XXXXXXXXXX
    fi
}

nxf_fs_copy() {
  local source=$1
  local target=$2
  local basedir=$(dirname $1)
  mkdir -p $target/$basedir
  cp -fRL $source $target/$basedir
}

nxf_fs_move() {
  local source=$1
  local target=$2
  local basedir=$(dirname $1)
  mkdir -p $target/$basedir
  mv -f $source $target/$basedir
}

nxf_fs_rsync() {
  rsync -rRl $1 $2
}

nxf_fs_rclone() {
  rclone copyto $1 $2/$1
}

nxf_fs_fcp() {
  fcp $1 $2/$1
}

on_exit() {
    local last_err=$?
    local exit_status=${nxf_main_ret:=0}
    [[ ${exit_status} -eq 0 && ${nxf_unstage_ret:=0} -ne 0 ]] && exit_status=${nxf_unstage_ret:=0}
    [[ ${exit_status} -eq 0 && ${last_err} -ne 0 ]] && exit_status=${last_err}
    printf -- $exit_status | nxf_s3_upload - s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd/.exitcode || true
    set +u
    rm -rf $NXF_SCRATCH || true
    exit $exit_status
}

on_term() {
    set +e
    [[ "$pid" ]] && nxf_kill $pid
}

nxf_launch() {
    /bin/bash -Ceuo pipefail .command.run nxf_trace
}

nxf_stage() {
    true
    # stage input files
    downloads=(true)
    rm -f HG03267_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv
    rm -f HG03446_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03449_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18861_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f IHW09507_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA12878_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv
    rm -f NA12878_c_0001_gDNA_0001_B23H2H2LT4_6_counts.tsv
    rm -f NA18499_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03401_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv
    rm -f NA18877_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv
    rm -f HG03259_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03394_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03354_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f IHW09191_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18523_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f NA12878_c_0001_gDNA_0001_B23H2H2LT4_5_counts.tsv
    rm -f HG03485_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18877_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03446_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv
    rm -f HG03461_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f NA18878_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03469_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03267_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f NA18520_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f NA18523_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18877_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03259_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv
    rm -f HG03449_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f NA18878_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f altera_v3_variable_regions.bed
    rm -f .command.run
    rm -f germline_cnv_input.csv
    rm -f HG03428_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03469_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA19114_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03485_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03391_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03259_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f IHW09177_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f IHW09203_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f altera_v3_panel.bed
    rm -f NA18520_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03401_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03428_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA19095_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03461_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03446_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f IHW09133_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f .command.sh
    rm -f NA18488_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f NA12878_c_0001_gDNA_0001_B23H2H2LT4_4_counts.tsv
    rm -f IHW09352_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18499_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18861_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03267_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03401_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f IHW09434_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03202_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv
    rm -f HG03578_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03385_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18488_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18917_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03354_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03391_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03394_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f NA12878_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03567_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03582_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f IHW09267_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA18917_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f NA12878_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03578_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f HG03385_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03582_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv
    rm -f HG03567_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f IHW09161_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv
    rm -f NA19095_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/a7/be65f25a16149b20c6a2744ca82c22/HG03267_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv HG03267_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/79/56c5648cf7720a88f16853277388bd/HG03446_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03446_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fb/4558b4f63bae221fb8c8f77c26545b/HG03449_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03449_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/95/a107601f2fee48b5074ebacedddee2/NA18861_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA18861_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/06/e04a732d5c2e08bbff9fd8bd8241f9/IHW09507_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09507_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/43/e18ac2db83e173f37f55d3f8242cdb/NA12878_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv NA12878_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/cf/b27a1519f53370df5ea7b3b50bae50/NA12878_c_0001_gDNA_0001_B23H2H2LT4_6_counts.tsv NA12878_c_0001_gDNA_0001_B23H2H2LT4_6_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/9c/86618698408703a8f2565e82e06959/NA18499_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA18499_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/2e/d8ffb909c444b4205f2b46c64ee583/HG03401_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv HG03401_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/68/39612f32cfd1f3be84082a65c17b7f/NA18877_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv NA18877_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0a/8dfaf51c081860decbf4d49fc166c3/HG03259_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03259_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b1/77cf7a4b946328581a48f4bc1561bd/HG03394_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03394_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/bf/7c82b331fad4e6aecccf99cfde2231/HG03354_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03354_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/60/c66593b9d95f1accb26efa4c3c94d8/IHW09191_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09191_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/70/fd81ea74ae380c5266123b261380ca/NA18523_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA18523_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/87/6dc89fb9c2c0387b3ccbb82b96b38f/NA12878_c_0001_gDNA_0001_B23H2H2LT4_5_counts.tsv NA12878_c_0001_gDNA_0001_B23H2H2LT4_5_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/30/6d54cd18d196288ebecc9d07c05a36/HG03485_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03485_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/67/882277c1f88697f5cae3b930d7f053/NA18877_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA18877_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/00/471443e0bfee242fbf1be78d7f8ced/HG03446_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv HG03446_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fb/6eca0d345da9f1dedb1bbf74fbe622/HG03461_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03461_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/80/27e0151d61b9b06acb23ae03b6dcea/NA18878_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA18878_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/49/de60e8e087de96244d9f8a1d5b0307/HG03469_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03469_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/9b/4ed53922d1f57e867b05fc0525ba92/HG03267_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03267_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/2d/21b36cfa9b81939f167256e3ea0da3/NA18520_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA18520_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ca/f4ecfd2fff791a51b1fa226751273b/NA18523_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA18523_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/51/69844efc6498cd54f5fca728b95ced/NA18877_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA18877_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/30/7ff29bed440545a60904aedd12d099/HG03259_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv HG03259_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/92/97c1b242fdb788cce8d30c44b0f4c5/HG03449_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03449_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ba/0720e2d229adc4e39c831d89aa8016/NA18878_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA18878_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-platform-sandbox/platform_projects/altera_cnv/altera_v3_variable_regions.bed altera_v3_variable_regions.bed")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd/.command.run .command.run")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/tmp/c3/65f25a92210871d3c351454247b943/germline_cnv_input.csv germline_cnv_input.csv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/9a/8819fc58232e20c0de97215b0b3251/HG03428_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03428_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/1b/f3ebb54b094047e278627f08fb11b2/HG03469_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03469_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/bb/159734eaf5a3f2d3ddc372b1dc3690/NA19114_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA19114_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c5/8bd8861e6a5cfb02c17a1318f56b2c/HG03485_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03485_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/9c/94578f75e101a0ceb1b29ea3d2c86e/HG03391_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03391_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ae/1806c276473b9d0da0ea6c56c9b340/HG03259_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03259_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/14/3855f49bcb9aa3ab16fb9348fb0b6c/IHW09177_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09177_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ef/5d703c521ac79ed06981f31c3fd610/IHW09203_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09203_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-platform-sandbox/platform_projects/altera_cnv/altera_v3_panel.bed altera_v3_panel.bed")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/45/55fdc08ddab8e5bdfce8e82851b93d/NA18520_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA18520_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/cf/51c650d9df8396e26e47a792e6f784/HG03401_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03401_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/93/cb350edac492b0181dbc68faefcfc6/HG03428_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03428_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c0/647ebf5f3a605f8725569b3660c32a/NA19095_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA19095_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/14/3360445ccef1853c98b86c6c95228b/HG03461_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03461_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/a4/6c9c69a877f1f157aec2bcbe37d988/HG03446_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03446_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/79/076d0a1233fe8aa7b81291f995fe03/IHW09133_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09133_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd/.command.sh .command.sh")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/e2/b72b191a0b7e69608a9b51930c3b4e/NA18488_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA18488_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/15/b26b68e0edcbf0651b466d3f3b76b5/NA12878_c_0001_gDNA_0001_B23H2H2LT4_4_counts.tsv NA12878_c_0001_gDNA_0001_B23H2H2LT4_4_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/81/b84a6a46851a88d981f6a3e37b2dac/IHW09352_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09352_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/32/2fe6cdb7f7692b47ef30192ef35992/NA18499_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA18499_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/96/5a66fd376ae3532185f0d497135c0e/NA18861_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA18861_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/3a/93cfa32b602b6ba3e3847e56ab49c4/HG03267_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03267_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/8f/847f85e6728ad5b2aea2dea52a275d/HG03401_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03401_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/24/a17a0c3f76a7c8aedba3decd7dd475/IHW09434_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09434_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/68/00453ab1a20e4059035b875198cc72/HG03202_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv HG03202_c_0001_gDNA_0001_B23H2H2LT4_3_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/53/ddc3985a8eb584fe79397d8944f8da/HG03578_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03578_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/1e/d104e4e1c0d5617107ab638c1c1b12/HG03385_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03385_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ff/8178a55a1c02d5c0e9506f9ac91260/NA18488_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA18488_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/15/654479b9c77917f26c6e8199fc1e65/NA18917_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA18917_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/83/25e219b20729fda402e61b88667431/HG03354_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03354_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/43/dccc3289c4e32228598067cc2fc5a9/HG03391_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03391_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/82/e77165e425eb9b01e6fb6f511e8e2f/HG03394_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03394_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/f7/8c14e5d92dc1392fc47d0d59109be6/NA12878_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA12878_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/43/9495cc5fb1f80e40d6a28a1d96ba9f/HG03567_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03567_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/95/88dab78584deeefd17be0127d0fab5/HG03582_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03582_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b7/0b73e64a83bf85500118f900115363/IHW09267_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09267_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/82/a46ae08db312e130d28eb498146ecb/NA18917_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA18917_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/4d/06a8ef902a6c31d718ec1c862cd041/NA12878_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv NA12878_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b6/74be9dd8463ee964417f14dbc2f027/HG03578_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03578_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/70/517bf4b73d51a48e444aadf8307f8f/HG03385_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03385_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/21/7066df5953efa931ffe6f31b504da3/HG03582_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv HG03582_c_0001_gDNA_0001_B23H2H2LT4_2_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/08/96104ae406209884753206323b6157/HG03567_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv HG03567_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fc/7bfca5d5bddc5f1dd16b49a3869894/IHW09161_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv IHW09161_c_01_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/5a/22d13ec88cfbe0a39ae261fd87dc8e/NA19095_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv NA19095_c_0001_gDNA_0001_B23H2H2LT4_1_counts.tsv")
    nxf_parallel "${downloads[@]}"
    echo "==> STAGING COMPLETE (77 inputs)"
    echo ""
}

nxf_unstage_outputs() {
    true
    uploads=()
    IFS=$'\n'
    for name in $(eval "ls -1d counts_1.parquet sample_metrics_1.parquet ploidy_1.parquet A237CFYLT3_1__sex_calls.parquet A237CFYLT3_1__sex_calls.png" | sort | uniq); do
        uploads+=("nxf_s3_upload '$name' s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd")
    done
    unset IFS
    nxf_parallel "${uploads[@]}"
}

nxf_unstage_controls() {
    true
    nxf_s3_upload .command.out s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd || true
    nxf_s3_upload .command.err s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd || true
    nxf_s3_upload .command.trace s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd || true
}

nxf_unstage() {
    if [[ ${nxf_main_ret:=0} == 0 ]]; then
        (set -e -o pipefail; (nxf_unstage_outputs | tee -a .command.out) 3>&1 1>&2 2>&3 | tee -a .command.err)
        nxf_unstage_ret=$?
    fi
    nxf_unstage_controls
}

nxf_main() {
    trap on_exit EXIT
    trap on_term TERM INT USR2
    trap '' USR1

    [[ "${NXF_CHDIR:-}" ]] && cd "$NXF_CHDIR"
    NXF_SCRATCH="$(set +u; nxf_mktemp /tmp)"
    [[ $NXF_DEBUG > 0 ]] && nxf_env
    echo start | nxf_s3_upload - s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fa/c3ea7d1398eb3e19fc73c876e222bd/.command.begin
    set +u
    set -u
    [[ $NXF_SCRATCH ]] && cd $NXF_SCRATCH
    export NXF_TASK_WORKDIR="$PWD"
    nxf_stage

    set +e
    (set -o pipefail; (nxf_launch | tee .command.out) 3>&1 1>&2 2>&3 | tee .command.err) &
    pid=$!
    wait $pid || nxf_main_ret=$?
    nxf_unstage
}

$NXF_ENTRY