15bdf707a4bde0a281109bb810499a2fa98ef6ac
lrnassar
  Tue Jul 14 07:48:05 2026 -0700
Fix stale "row Y" reference in popEVE trailingFix comment per CR feedback. refs #37791

The amino acid row reorder made P the last row, not Y, but the trailingFix explanation in
the converter comment and the makedoc still said "row Y, last column". Reworded both to be
order-agnostic ("last row, last column"). Documentation only; the code already operates
positionally on labelParts[-1].

diff --git src/hg/makeDb/scripts/popEve/vcfToPopEveHeatmap.py src/hg/makeDb/scripts/popEve/vcfToPopEveHeatmap.py
index a40682bd110..ceb315681c7 100644
--- src/hg/makeDb/scripts/popEve/vcfToPopEveHeatmap.py
+++ src/hg/makeDb/scripts/popEve/vcfToPopEveHeatmap.py
@@ -185,33 +185,33 @@
                 scoreParts.append(r3(pe))
                 cls = classify(float(pe))
                 # Mouseover rendered as HTML (<br>/<b>). No commas inside labels (the field is
                 # comma-split by the renderer); values use '.' and '/' only, so labels are unquoted.
                 lbl = ("%s%s&rarr;%s<br><b>popEVE:</b> %s (%s)<br><b>EVE:</b> %s<br>"
                        "<b>ESM1v:</b> %s<br><b>popAdj:</b> EVE %s / ESM1v %s<br><b>gap:</b> %s" %
                        (wt, protPos, aa, r3(pe), cls, comp(eve), comp(esm), comp(paEve),
                         comp(paEsm), comp(gap)))
                 labelParts.append(lbl)
             else:
                 scoreParts.append('')
                 labelParts.append('')
 
     # The heatmap renderer parses the score array with chopCommas (keeps a trailing empty
     # field) but the label array with chopByCharRespectDoubleQuotesKeepEmpty (drops one
-    # trailing empty field). When the very last cell (row Y, last column) is empty - common on
-    # minus-strand genes whose last column is the start codon, whose M1 substitutions are
-    # 'nan' and were skipped - the two field counts disagree and the track aborts. Guarantee a
+    # trailing empty field). When the very last cell (last row, last column) has no scored
+    # substitution - common, since each codon has only a few single-nucleotide-reachable
+    # substitutions - the two field counts disagree and the track aborts. Guarantee a
     # non-empty final label cell; the empty score keeps that cell uncolored (background).
     if labelParts[-1] == '':
         labelParts[-1] = '(no popEVE score)'
         stats['trailingFix'] += 1
 
     fields = [
         chrom, chromStart, chromEnd,
         gene, bedScore, strand,
         chromStart, chromEnd, 0,
         nCols,
         ','.join(str(s) for s in blockSizes) + ',',
         ','.join(str(s) for s in relStarts) + ',',
         rowCount, labels,
         colorBounds, COLOR_VALUES,
         ','.join(scoreParts), ','.join(labelParts),