d459a7a421c710541b9e29a43473f502b6d7c8c1 max Mon Sep 21 05:30:00 2026 -0700 hgTracks: the indel is before the shifted codon, not at it, refs #38298 The codon mouseover's note said the transcript has extra or missing bases compared to the genome "at this codon". It is not at it: a codon's transcript number is counted from its 5'-most base, so every codon 3' of an indel is flagged, and the indel that caused the shift always lies before it. On canFam3 NM_001131049.1 one 21-base insertion flags all 730 codons from p.129 to the end of the CDS, none before. diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index 8803bbf7e55..c82fcfef41b 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -3376,31 +3376,31 @@ * transcript there is one count and "Codon" says it. */ boolean shifted = baseColorCodonIsShifted(codon); dyStringPrintf(codonDy, "%s: c.%d-%d (p.%d)
", shifted ? "Genomic codon number" : "Codon", cStart, cEnd, pPos); if (shifted) { int txCStart = (codon->txCodonIndex - 1) * 3 + 1; dyStringPrintf(codonDy, "Transcript codon number: " "c.%d-%d (p.%d)
", txCStart, txCStart+2, codon->txCodonIndex); dyStringPrintf(codonDy, "Note: This transcript's sequence has " "extra or missing bases compared to the genome " - "at this codon, so the genomic and transcript " + "before this codon, so the genomic and transcript " "codon numbers differ. " "" "Help
"); } if (!isEmpty(aaAbbr)) { if (aaName != NULL) dyStringPrintf(codonDy, "Amino acid: %s - %s
", aaAbbr, aaName); else dyStringPrintf(codonDy, "Amino acid: %s
", aaAbbr); } } else if (lf->tallStart < lf->tallEnd) {