1de43b26fd18d5be3585829158d9b65944979094
lrnassar
  Wed Aug 5 17:19:10 2026 -0700
Harden popEVE build drivers per code review. refs #37950 refs #37791

- Add "set -o pipefail" to both build scripts so a bedToBigBed failure piped to tail is not
masked (runBuildDense.sh reported the previous file's size on failure).
- runBuild.sh (sparse) now writes popEve_sparse.bb instead of popEve.bb, so re-running it
cannot silently clobber the dense popEve.bb produced by runBuildDense.sh. Makedoc updated.

diff --git src/hg/makeDb/scripts/popEve/runBuildDense.sh src/hg/makeDb/scripts/popEve/runBuildDense.sh
index da38ba26f2e..5cc67bf137a 100755
--- src/hg/makeDb/scripts/popEve/runBuildDense.sh
+++ src/hg/makeDb/scripts/popEve/runBuildDense.sh
@@ -1,20 +1,21 @@
 #!/bin/bash
 # popEVE hg38 DENSE build: full per-amino-acid matrix from the transcript CSVs, with
 # genomic coordinates reused from the VCF-derived popEve_sorted.tsv. Proteins absent from
 # the CSV fall back to the sparse (single-nucleotide-reachable) VCF scores.
 set -e
+set -o pipefail   # so a bedToBigBed failure piped to tail is not masked
 export PATH=$PATH:$HOME/bin/x86_64
 cd /hive/data/genomes/hg38/bed/popEve
 KS=$HOME/kent/src/hg/makeDb/scripts/popEve
 CSVDIR=/hive/data/outside/popEve/popeve_csv/popEVE_ukbb_20250312
 CHROMSIZES=/hive/data/genomes/hg38/chrom.sizes
 
 echo "[$(date +%T)] 1. proteins not in the CSV (sparse fallback)"
 ls "$CSVDIR" | sed 's/\.csv$//' | sort -u > csv_prots.txt
 cut -f1 popEve_sorted.tsv | sort -u > all_prots.txt
 comm -13 csv_prots.txt all_prots.txt > noncsv_prots.txt
 echo "  CSV proteins: $(wc -l < csv_prots.txt)  non-CSV (sparse): $(wc -l < noncsv_prots.txt)"
 
 echo "[$(date +%T)] 2. color anchors over the full matrix"
 find "$CSVDIR" -name '*.csv' -print0 | xargs -0 awk -F, 'FNR>1 && $3!="nan" && $3!="" {print $3}' > allscores.txt
 awk -F'\t' 'NR==FNR{np[$1];next} ($1 in np) && $8!="nan" && $8!="" {print $8}' \