#!/bin/bash ### --- ### name: 'DAQ:AGGREGATE_POSTDEDUP_QC (postdedup_qc_aggregation)' ### container: '292967571998.dkr.ecr.us-west-2.amazonaws.com/daq/aggregate_postdedup_qc:1.8.0' ### outputs: ### - 'postdedup_qc.json' ### - 'versions.yml' ### ... 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/0f/5976472a8869ccf52ac045208d0a15/.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 1_25PercentHG514.stats rm -f 14862332-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 1_25PercentNA24385.mosdepth.summary.txt rm -f 5PercentNA24385.mosdepth.summary.txt rm -f 40PercentHG514.mosdepth.summary.txt rm -f 3140_NA24143_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 40PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 14138939-cfDNA.mosdepth.summary.txt rm -f 5PercentNA24385.stats rm -f SH032_HG514.mosdepth.summary.txt rm -f D0000476_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 10PercentHG514.stats rm -f 13432478-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 13432478-cfDNA.stats rm -f D0000476_22q.mosdepth.summary.txt rm -f 40PercentHG514.stats rm -f SH032_HG514.stats rm -f 3140_NA24385.stats rm -f SH032_HG513.mosdepth.summary.txt rm -f 13511611-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 1_25PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f D0000476_22q.stats rm -f D0001483_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 15921737-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 40PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 20PercentNA24385.mosdepth.summary.txt rm -f 15451964-cfDNA.stats rm -f 13432478-cfDNA.mosdepth.summary.txt rm -f 14558439-cfDNA.mosdepth.summary.txt rm -f 40PercentNA24385.stats rm -f 20PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f .command.sh rm -f 10PercentHG514.mosdepth.summary.txt rm -f 3140_NA24385.mosdepth.summary.txt rm -f 16098090-cfDNA.stats rm -f 15921737-cfDNA.stats rm -f 14389853-cfDNA.stats rm -f 14389853-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 13511611-cfDNA.mosdepth.summary.txt rm -f 13929215-cfDNA.stats rm -f 5PercentHG514.stats rm -f D0001109_22q.stats rm -f 2_5PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 10PercentNA24385.mosdepth.summary.txt rm -f 14138939-cfDNA.stats rm -f 10PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 10PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 13739430-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 14668865-cfDNA.mosdepth.summary.txt rm -f 3140_NA24143.mosdepth.summary.txt rm -f 15921737-cfDNA.mosdepth.summary.txt rm -f 13739430-cfDNA.mosdepth.summary.txt rm -f 3140_NA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 20PercentNA24385.stats rm -f D0000162_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f SH032_HG513.stats rm -f 16098090-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 13929215-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 16098090-cfDNA.mosdepth.summary.txt rm -f 14862332-cfDNA.mosdepth.summary.txt rm -f 40PercentNA24385.mosdepth.summary.txt rm -f 2_5PercentNA24385.stats rm -f 13929215-cfDNA.mosdepth.summary.txt rm -f 20PercentHG514.stats rm -f 14668865-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f SH032_HG513_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 1_25PercentHG514.mosdepth.summary.txt rm -f D0001109_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f D0000162_22q.mosdepth.summary.txt rm -f D0001483_22q.mosdepth.summary.txt rm -f D0001483_22q.stats rm -f .command.run rm -f 5PercentHG514.mosdepth.summary.txt rm -f 5PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 14668865-cfDNA.stats rm -f 13511611-cfDNA.stats rm -f 13739430-cfDNA.stats rm -f SH032_HG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 14862332-cfDNA.stats rm -f 14558439-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 1_25PercentNA24385.stats rm -f 2_5PercentHG514.mosdepth.summary.txt rm -f 2_5PercentHG514.stats rm -f D0000162_22q.stats rm -f 1_25PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 10PercentNA24385.stats rm -f 20PercentHG514.mosdepth.summary.txt rm -f 3140_NA24143.stats rm -f 15451964-cfDNA.mosdepth.summary.txt rm -f 2_5PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f D0001109_22q.mosdepth.summary.txt rm -f 14138939-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 2_5PercentNA24385.mosdepth.summary.txt rm -f 14389853-cfDNA.mosdepth.summary.txt rm -f 5PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 15451964-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 20PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics rm -f 14558439-cfDNA.stats downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b8/bcbc1ad97bcff787cc7bdc0241bc04/1_25PercentHG514.stats 1_25PercentHG514.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/70/cdfa989e76f1f901dbf611cb2f714a/14862332-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 14862332-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/69/fb5c542fa25a4696affdbd34209b6e/1_25PercentNA24385.mosdepth.summary.txt 1_25PercentNA24385.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c1/603dc323696c089857ab4ab05009a6/5PercentNA24385.mosdepth.summary.txt 5PercentNA24385.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/3d/7129ffcb80d10abc49b9b52f956818/40PercentHG514.mosdepth.summary.txt 40PercentHG514.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/66/44c47edb2e366e373f25ad655e8a7a/3140_NA24143_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 3140_NA24143_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/01/27b7df68c058deb4b35a76db9722df/40PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 40PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/6d/bcd68b130a459113052a66417f50a3/14138939-cfDNA.mosdepth.summary.txt 14138939-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/f0/75b49ee13540624b9a61a1584d6300/5PercentNA24385.stats 5PercentNA24385.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/e1/04c8dd32d583dea0aae5fbef349d0d/SH032_HG514.mosdepth.summary.txt SH032_HG514.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/58/6e67ed68ecd2735e5e0d1c500ece38/D0000476_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics D0000476_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b7/23f8cafa8ba7743c07a62c1edd7243/10PercentHG514.stats 10PercentHG514.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/54/e65aff825a38a1ff6355a00aae2a18/13432478-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 13432478-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c3/aee653e2cd42c83c73fac220cdefd2/13432478-cfDNA.stats 13432478-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/67/64ab2c98c68e13f0ae62b486a1b234/D0000476_22q.mosdepth.summary.txt D0000476_22q.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/9e/adcedeb8641ad8e0075f9a32cd48df/40PercentHG514.stats 40PercentHG514.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/11/9c9eaf5833611adf4553a6f6a3527f/SH032_HG514.stats SH032_HG514.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/93/e1919adcccc1c944f0ebc3be6fee73/3140_NA24385.stats 3140_NA24385.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fe/2dad68758ef6c7dd046e4b4f857939/SH032_HG513.mosdepth.summary.txt SH032_HG513.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/fc/9e6b63a989c90921c8d167cc38f0bf/13511611-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 13511611-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/cc/191a7361af4d495306f3b6b0742328/1_25PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 1_25PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/4a/84bddef1940346e4c6854ddaf313f6/D0000476_22q.stats D0000476_22q.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/13/70c5b1a2f4bf19207b5f6afd01f4e6/D0001483_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics D0001483_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ec/f2b774647f4025680151b6663db183/15921737-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 15921737-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/04/efafe03795ddd27b599bdcd335abdd/40PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 40PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/da/d749f2417088b052d4a6b693da3e5c/20PercentNA24385.mosdepth.summary.txt 20PercentNA24385.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/64/7d92391b3cc3be13c4247ce80dd458/15451964-cfDNA.stats 15451964-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b6/28b060141660824a9bd5dc0d71e049/13432478-cfDNA.mosdepth.summary.txt 13432478-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/7e/203d58f891026c351100c084f11827/14558439-cfDNA.mosdepth.summary.txt 14558439-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c9/95fd68c28a42a5fc474d916b7967ac/40PercentNA24385.stats 40PercentNA24385.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/4a/14fe35f23ebe3c94dee7a425f584dc/20PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 20PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0f/5976472a8869ccf52ac045208d0a15/.command.sh .command.sh") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ed/12442811dde9107521d46cd972962a/10PercentHG514.mosdepth.summary.txt 10PercentHG514.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c5/757d75ccb9cc9062d831b5f61c751d/3140_NA24385.mosdepth.summary.txt 3140_NA24385.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/e1/b981e80f02d729cf349deb042a4b1c/16098090-cfDNA.stats 16098090-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/30/2143fe861aac55ebf208535292c5a4/15921737-cfDNA.stats 15921737-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/64/f9be36c01ea0bc07bddf15df4670f5/14389853-cfDNA.stats 14389853-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/99/6dc66314a58d5ea4784e3d1da01f9d/14389853-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 14389853-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/5c/c455d08ab5d7fb7c15157ea2946236/13511611-cfDNA.mosdepth.summary.txt 13511611-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/db/51670adc406aea840463b3ef91dd95/13929215-cfDNA.stats 13929215-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/37/36adeb35e137e7f71d8353bc2cade2/5PercentHG514.stats 5PercentHG514.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/a2/f3b5ec896b4a5e0cb2ba2fe2446370/D0001109_22q.stats D0001109_22q.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/16/a01787cb73b8743fcf33c9cfed60d2/2_5PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 2_5PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c3/232bb92791ee16f9fdee331f18fe58/10PercentNA24385.mosdepth.summary.txt 10PercentNA24385.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/89/b55ee7aee940ad303798d696ec19b6/14138939-cfDNA.stats 14138939-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/7e/3521d07971afb3cc4b2203e6c9e714/10PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 10PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/63/43be18522eb85a61fc50d0e1d6c0e2/10PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 10PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/a0/6ca68893cbaaf90e3f899cc9e12517/13739430-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 13739430-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/39/faf1ef637456569299df946b16f49a/14668865-cfDNA.mosdepth.summary.txt 14668865-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/be/ffabf9acaf6549754f90b016ee6188/3140_NA24143.mosdepth.summary.txt 3140_NA24143.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/2d/73d75f06afe0252be47f049e31b446/15921737-cfDNA.mosdepth.summary.txt 15921737-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0e/c2554dc818636e54ca241d2e8240f7/13739430-cfDNA.mosdepth.summary.txt 13739430-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ec/8d1e59cd710fd53dff2a0ec188a21c/3140_NA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 3140_NA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c8/326083f83c3396dc2d18e092c72ac4/20PercentNA24385.stats 20PercentNA24385.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b6/80ec9e749aa2a9689fe1d8fb2632bc/D0000162_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics D0000162_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c9/2debe3cc1400d7bc9faa760c82b7ae/SH032_HG513.stats SH032_HG513.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/2e/00f6092aafe2ac76f238e428b1f581/16098090-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 16098090-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/63/5849ab64665d137738782fcf75b4f5/13929215-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 13929215-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0b/c1e331e788e2f074290699baa22c7d/16098090-cfDNA.mosdepth.summary.txt 16098090-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/04/822d38a13243be3385570d5d8ae70f/14862332-cfDNA.mosdepth.summary.txt 14862332-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/f9/53af6ff640ebd536c9c808437e960b/40PercentNA24385.mosdepth.summary.txt 40PercentNA24385.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/e3/252148dce4c4c772f2bba357b000c1/2_5PercentNA24385.stats 2_5PercentNA24385.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/e1/0f9a352d35362cc7e79f0b0f0372a9/13929215-cfDNA.mosdepth.summary.txt 13929215-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ca/6f7680e89fb4c9ba03ff02f88e306a/20PercentHG514.stats 20PercentHG514.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/09/2d7f188fba87f1dd84c0a89c018d83/14668865-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 14668865-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/34/4219ec6074ec16b2c864869b3f0e76/SH032_HG513_IDT.Exomev2.targets.hg38.sentieon.hs_metrics SH032_HG513_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/5d/1b02a7c478cd25eae70de52fae4b54/1_25PercentHG514.mosdepth.summary.txt 1_25PercentHG514.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/4d/6afbfe09849fc1d413a5dabbd9ebf9/D0001109_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics D0001109_22q_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/9f/9fb7ee148d8a27e3a5e48ac9cd38d8/D0000162_22q.mosdepth.summary.txt D0000162_22q.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/67/f6ca871cb1f0032fe4e67058c4b45b/D0001483_22q.mosdepth.summary.txt D0001483_22q.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/da/cdbf486363750823e6d68590fa8b72/D0001483_22q.stats D0001483_22q.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0f/5976472a8869ccf52ac045208d0a15/.command.run .command.run") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/ab/809b7b5e1f8d189638f94093e7b0d1/5PercentHG514.mosdepth.summary.txt 5PercentHG514.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/82/bbe23264663e296cfc45c7eee21a60/5PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 5PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b6/685a5b8cf1923f14550a654410f641/14668865-cfDNA.stats 14668865-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/60/f72f374961a1c3a4ee529b9ced97a8/13511611-cfDNA.stats 13511611-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/e4/98d5b2db13b29fa32dc4ed195678d6/13739430-cfDNA.stats 13739430-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/94/bbeafa670a9e73e9bb23275dce583c/SH032_HG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics SH032_HG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/cc/f3b69aa351b8902c75c3c87800a872/14862332-cfDNA.stats 14862332-cfDNA.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/2e/95fc6cd1a49d5a5f25fca3bb3dc6b5/14558439-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 14558439-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/f3/7dcdb206f98fed92d334223e32f41f/1_25PercentNA24385.stats 1_25PercentNA24385.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/52/7a3e9f6519c15808a4b117f849d7f1/2_5PercentHG514.mosdepth.summary.txt 2_5PercentHG514.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/77/30aa78f424fd5104cf3dfd07ef202a/2_5PercentHG514.stats 2_5PercentHG514.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/1c/1c8012a1363549988dea83db519cbb/D0000162_22q.stats D0000162_22q.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/d8/8eff36dd002e9f13d07bc77022f593/1_25PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 1_25PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/7e/8097a5b53e22287f4d66bc206b7624/10PercentNA24385.stats 10PercentNA24385.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/b5/347af19643a8fe36cadba10ec4c8f4/20PercentHG514.mosdepth.summary.txt 20PercentHG514.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/a0/33acc9793f5d9da7fbf53793c4d0bb/3140_NA24143.stats 3140_NA24143.stats") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/6b/cb5ac0bf91af4250bb7f7905ca667b/15451964-cfDNA.mosdepth.summary.txt 15451964-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/1b/5372f5e9dd97940a50629984788bcf/2_5PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 2_5PercentNA24385_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/a3/23bedc9b57434a729fdf0b5fd0cef1/D0001109_22q.mosdepth.summary.txt D0001109_22q.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/c1/22e4760a639def84bb4d94ef9d3c0a/14138939-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 14138939-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/af/1c0af15b972729345d593dfa293e2d/2_5PercentNA24385.mosdepth.summary.txt 2_5PercentNA24385.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/4a/2bf6571c74f5d6e4611d271d7ce135/14389853-cfDNA.mosdepth.summary.txt 14389853-cfDNA.mosdepth.summary.txt") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/d0/2015137d6c557b304222d2fc3c1669/5PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 5PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/e4/a5547ca9fc79211dfb051098317895/15451964-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 15451964-cfDNA_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/2c/742f064ac897e5631089514bd00a0f/20PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics 20PercentHG514_IDT.Exomev2.targets.hg38.sentieon.hs_metrics") downloads+=("nxf_s3_download s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/7e/c441bc662c91fe945765721080300e/14558439-cfDNA.stats 14558439-cfDNA.stats") nxf_parallel "${downloads[@]}" echo "==> STAGING COMPLETE (98 inputs)" echo "" } nxf_unstage_outputs() { true uploads=() IFS=$'\n' for name in $(eval "ls -1d postdedup_qc.json versions.yml" | sort | uniq); do uploads+=("nxf_s3_upload '$name' s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0f/5976472a8869ccf52ac045208d0a15") done unset IFS nxf_parallel "${uploads[@]}" } nxf_unstage_controls() { true nxf_s3_upload .command.out s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0f/5976472a8869ccf52ac045208d0a15 || true nxf_s3_upload .command.err s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0f/5976472a8869ccf52ac045208d0a15 || true nxf_s3_upload .command.trace s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/0f/5976472a8869ccf52ac045208d0a15 || 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/0f/5976472a8869ccf52ac045208d0a15/.command.begin set +u set -u /opt/s5cmd/bin/s5cmd --log error cp "s3://natera-rnd-pltf-dev-nextflow-scratch-01/work/tmp/a8/1a6f1c6c1144943e0cbf834e7f94da/bin/*" $NXF_SCRATCH/nextflow-bin/ chmod +x $NXF_SCRATCH/nextflow-bin/* || true export PATH=$NXF_SCRATCH/nextflow-bin:$PATH [[ $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