7aa59c8f6afbda4c2157d3990b2bbc48a39cac63 max Fri Sep 25 02:48:31 2026 -0700 varFreqs: add SFARI SPARK 45k WGS subtracks. sfariSparkWgs45k is built from the release's AF table (AN estimated, singletons dropped); sfariSparkWgs45kAsd is built from the genotype pVCFs with ASD/non-ASD counts, for now only the DSCAM locus while the genome-wide parasol run finishes, refs #38424 diff --git src/hg/makeDb/scripts/varFreqs/sparkWgs45kPvcfRange.sh src/hg/makeDb/scripts/varFreqs/sparkWgs45kPvcfRange.sh new file mode 100755 index 00000000000..a98baf4212e --- /dev/null +++ src/hg/makeDb/scripts/varFreqs/sparkWgs45kPvcfRange.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Convert a position range of one SPARK WGS 2026_08 pVCF chunk to a sites VCF, +# splitting the range into pieces that run in parallel on this machine. +# Usage: sparkWgs45kPvcfRange.sh <in.vcf.gz> <groups.txt> <start> <end> <out.vcf.gz> [pieces] [jobs] +# start/end: 1-based, [start, end) +# Each piece is converted by sparkWgs45kPvcfToSites.sh. Left-alignment can move +# a record a few bases before its piece start, so the pieces are concatenated +# and then sorted. +set -euo pipefail + +inVcf=$1 +groups=$2 +start=$3 +end=$4 +outVcf=$5 +pieces=${6:-48} +jobs=${7:-48} +scriptDir=$(dirname "$(readlink -f "$0")") +work=$outVcf.work +mkdir -p "$work" + +step=$(( (end - start + pieces - 1) / pieces )) +for ((i = 0; i < pieces; i++)); do + s=$(( start + i * step )) + e=$(( s + step < end ? s + step : end )) + [ "$s" -lt "$end" ] && printf '%s\t%d\t%d\n' "$(printf 'p%04d' $i)" "$s" "$e" +done > "$work/pieces.txt" + +parallel -j "$jobs" --colsep '\t' \ + bash "$scriptDir/sparkWgs45kPvcfToSites.sh" "$inVcf" "$groups" "$work/{1}.bcf" {2} {3} \ + '2>' "$work/{1}.log" < "$work/pieces.txt" + +# Concatenate and sort the pieces +bash "$scriptDir/sparkWgs45kPvcfMerge.sh" "$outVcf" \ + $(cut -f1 "$work/pieces.txt" | sed "s|^|$work/|; s|$|.bcf|") +cat "$work"/p*.log | grep -v '^Lines' || true