f03f56cd3c795a6fba2b8419662a9a2c5d49f69a max Sat Sep 26 14:16:17 2026 -0700 sfariSparkWgs45kAsd: now genome-wide (518M variants from the 45,178 genotype pVCFs, run on parasol); per-allele INFO fields declared Number=1 so the VCF track filters accept them, doc page no longer says DSCAM only, refs #38424 diff --git src/hg/makeDb/scripts/varFreqs/sparkWgs45kPvcfToSites.sh src/hg/makeDb/scripts/varFreqs/sparkWgs45kPvcfToSites.sh index 8350e88cd58..1f9f7a4479d 100755 --- src/hg/makeDb/scripts/varFreqs/sparkWgs45kPvcfToSites.sh +++ src/hg/makeDb/scripts/varFreqs/sparkWgs45kPvcfToSites.sh @@ -17,37 +17,40 @@ outBcf=$3 start=${4:-} end=${5:-} scriptDir=$(dirname "$(readlink -f "$0")") refFa=/hive/data/genomes/hg38/bed/varFreqs/all/hg38.fa # not the conda bcftools in ~max/software: it links libopenblas, which crashes # under the parasol -ram address-space limit BCFTOOLS=/cluster/software/src/bcftools-1.22/bcftools export BCFTOOLS_PLUGINS=/cluster/software/src/bcftools-1.22/plugins tmp=$outBcf.tmp.bcf # MONOALLELIC records are alleles that GLnexus could not merge into an # overlapping multiallelic site. In them only carriers have a called allele # (e.g. ./1) and everyone else is ./., so fill-tags gives AN=1 or 2 and AF=1. # GLnexus's own AF for them uses all samples, so set AN to 2 x the samples of -# each group and recompute AF from AC. Also add VARLEN. +# each group and recompute AF from AC. Also add VARLEN. After norm -m- every +# record has one ALT, so the Number=A INFO fields (AC, AF, AQ and the per-group +# ones) are declared Number=1: the VCF track filters only accept Number=1. nAll=$(( $(wc -l < "$groups") * 2 )) nAut=$(( $(grep -c $'\tAUT$' "$groups") * 2 )) nNon=$(( $(grep -c $'\tNON_AUT$' "$groups") * 2 )) fixAwk=' BEGIN {FS = OFS = "\t"} -/^#CHROM/ {print "##INFO=<ID=VARLEN,Number=A,Type=Integer,Description=\"Length of ALT minus length of REF: >0 insertion, <0 deletion, 0 substitution\">"} +/^#CHROM/ {print "##INFO=<ID=VARLEN,Number=1,Type=Integer,Description=\"Length of ALT minus length of REF: >0 insertion, <0 deletion, 0 substitution\">"} +/^##INFO=<ID=[^,]*,Number=A,/ {sub(/,Number=A,/, ",Number=1,")} /^#/ {print; next} $7 == "MONOALLELIC" { n = split($8, kv, ";") for (i = 1; i <= n; i++) {split(kv[i], p, "="); val[p[1]] = p[2]} val["AN"] = nAll; val["AN_AUT"] = nAut; val["AN_NON_AUT"] = nNon val["AF"] = sprintf("%.6g", val["AC"] / nAll) val["AF_AUT"] = sprintf("%.6g", val["AC_AUT"] / nAut) val["AF_NON_AUT"] = sprintf("%.6g", val["AC_NON_AUT"] / nNon) s = "" for (i = 1; i <= n; i++) {split(kv[i], p, "="); s = s (i > 1 ? ";" : "") p[1] "=" val[p[1]]} $8 = s delete val } {$8 = $8 ";VARLEN=" (length($5) - length($4)); print}'