3d194de4d74f67c1a453035e20c4769d88bec4c4
lrnassar
  Mon Jul 13 12:52:57 2026 -0700
Order popEVE heatmap amino acid rows by class to match the MaveDB track. refs #37791

Change the heatmap row order from alphabetical to physicochemical-amino-acid-class order
(A V L I M F Y W R H K D E S T N Q G C P), matching the MaveDB Experiments heatmap so the
tracks can be compared row-for-row. Rebuilds popEve.bb; updates the makedoc, the AutoSql
row label comment, and the description page.

diff --git src/hg/makeDb/scripts/popEve/vcfToPopEveHeatmap.py src/hg/makeDb/scripts/popEve/vcfToPopEveHeatmap.py
index cc436e7b88d..a40682bd110 100644
--- src/hg/makeDb/scripts/popEve/vcfToPopEveHeatmap.py
+++ src/hg/makeDb/scripts/popEve/vcfToPopEveHeatmap.py
@@ -11,31 +11,31 @@
 from hg38 ncbiRefSeq) used to validate / override the strand inferred from coordinates.
 
 Produces one heatmap BED12+ line per protein (see popEve_heatmap.as):
   Columns = protein positions ordered by ascending genomic coordinate; reverse-strand
             genes therefore read C-terminus -> N-terminus, matching genomic orientation.
   Rows    = 20 standard amino acids (A C D E F G H I K L M N P Q R S T V W Y).
   Each codon is a block.  popEVE lists only positions carrying a missense alt, so a codon
   may have 2 of 3 genomic positions; block sizes are therefore clamped so adjacent blocks
   cannot overlap (min(3, gap-to-next)), keeping the file valid for bedToBigBed.
   Wildtype cells are left empty.  Mouseover carries popEVE + severity class plus the
   component EVE / ESM-1v / pop-adjusted scores and gap frequency.
 """
 
 import sys
 
-STANDARD_AAS = list('ACDEFGHIKLMNPQRSTVWY')   # 20 standard AAs, alphabetical
+STANDARD_AAS = list('AVLIMFYWRHKDESTNQGCP')   # 20 standard AAs, by class, to match MaveDB
 
 # Published popEVE severity cutoffs (fixed interior color anchors).
 SEVERE_MAX = -5.056      # popEVE < SEVERE_MAX            -> severe
 MODERATE_MAX = -4.617    # SEVERE_MAX <= popEVE < this    -> moderate; >= this -> tolerated
 MEDIAN_ANCHOR = -3.5     # interior white anchor (~ proteome-wide median)
 
 COLOR_VALUES = "#b2182b,#d6604d,#f4a582,#f7f7f7,#2166ac"  # deleterious red -> tolerated blue
 
 
 def r3(s):
     """Round a numeric string to 3 decimals, trimming trailing zeros."""
     try:
         v = float(s)
     except (ValueError, TypeError):
         return s