7bef2434fec624473e81cfec3012f5ff0a2c853f gperez2 Mon Sep 14 18:12:47 2026 -0700 Renaming the codon-number tooltip labels to "Genomic codon number" and "Transcript codon number" and rewriting the indel note in plain language, fixing a broken FontAwesome class on the Codon phase link, and rewriting the FAQ's txIndel explanation for accuracy and clarity, refs #38298 diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index 3ee4d114db6..62324fcfcce 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -2703,31 +2703,31 @@ Note that start/end-phases are in the direction of transcription: if transcript is on + strand, the start phase is the exonFrame value, and the end phase is the next exonFrame (3' on DNA) value if transcript is on - strand, the start phase is the previous (=3' on DNA) exonFrame and the end phase is the exonFrame */ { if (startPhase==-1) // UTRs don't have a frame at all { safef(buf, EXONTEXTLEN, "<b>No Codon:</b> Untranslated region<br>"); } else { char *exonNote = ""; boolean isNotLastExon = (exonIntronNumber<numExons); static const char *phasePrefix = - "<b><a target=_blank href='../goldenPath/help/codonPhase.html'> <i class='fa fa-question-circle-o'></i></a></b>"; + "<b><a target=_blank href='../goldenPath/help/codonPhase.html'> <i class='fa fa-question-circle'></i></a></b>"; if (isNotLastExon) { if (startPhase==endPhase) exonNote = ": in-frame exon"; else exonNote = ": out-of-frame exon"; safef(buf, EXONTEXTLEN, "<b>Codon phase %s :</b> start %d, end %d%s<br>", phasePrefix, startPhase, endPhase, exonNote); } else { if (startPhase==0) exonNote = ": in-frame exon"; else exonNote = ": out-of-frame exon"; @@ -3245,44 +3245,45 @@ } else if (aaLetter == 'X') // error/partial codon: nothing to show aaAbbr[0] = '\0'; else { aaToAbbr(aaLetter, aaAbbr, sizeof(aaAbbr)); aaName = aaToName(aaLetter); } /* These numbers are counted along the genome, as this * track has always counted them. Where the transcript * has an indel relative to the genome the transcript's * own numbering differs, so show both, and name which * is which only in that case: for every other * transcript there is one count and "Codon" says it. */ boolean shifted = baseColorCodonIsShifted(codon); - dyStringPrintf(codonDy, "<b>Codon%s: </b> c.%d-%d (p.%d)<br>", - shifted ? " counted on the genome" : "", + dyStringPrintf(codonDy, "<b>%s: </b> c.%d-%d (p.%d)<br>", + shifted ? "Genomic codon number" : "Codon", cStart, cEnd, pPos); if (shifted) { int txCStart = (codon->txCodonIndex - 1) * 3 + 1; dyStringPrintf(codonDy, - "<b>Counted on the transcript: </b> " + "<b>Transcript codon number: </b> " "c.%d-%d (p.%d)<br>", txCStart, txCStart+2, codon->txCodonIndex); dyStringPrintf(codonDy, - "<b>Note: </b>This transcript's sequence has an " - "indel relative to the genome, so the two " - "numbers differ. " + "<b>Note: </b>This transcript's sequence has " + "extra or missing bases compared to the genome " + "at this codon, so the genomic and transcript " + "codon numbers differ. " "<a target=_blank " "href=\"../FAQ/FAQgenes.html#txIndel\">" "Help</a><br>"); } if (!isEmpty(aaAbbr)) { if (aaName != NULL) dyStringPrintf(codonDy, "<b>Amino acid: </b> %s - %s<br>", aaAbbr, aaName); else dyStringPrintf(codonDy, "<b>Amino acid: </b> %s<br>", aaAbbr); } } else if (lf->tallStart < lf->tallEnd) { // UTR block of a coding transcript (codonIndex 0, so no