40b4fc89ec72c22cae51bf9a8b9a7e8dd887eebf
chmalee
  Thu Jun 4 15:34:16 2026 -0700
Show MANE-relative HGVS terms on myVariants SNV detail pages, refs #33808

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

diff --git src/hg/lib/hgHgvs.c src/hg/lib/hgHgvs.c
index 52c71d065c2..fcf864d512e 100644
--- src/hg/lib/hgHgvs.c
+++ src/hg/lib/hgHgvs.c
@@ -1230,31 +1230,31 @@
         // Since we found hgvs->seqAcc, split it into versionless and version parts.
         if (retFoundAcc)
             *retFoundAcc = cloneFirstWordByDelimiter(hgvs->seqAcc, '.');
         if (retFoundVersion)
             {
             char *p = strchr(hgvs->seqAcc, '.');
             if (p)
                 *retFoundVersion = atoi(p+1);
             }
         // Don't free chromInfo, it's cached!
         }
     }
 return coordsOK;
 }
 
-static char *txSeqFromGp(char *db, struct genePred *gp)
+char *txSeqFromGp(char *db, struct genePred *gp)
 /* Return transcribed-from-genome sequence for gp */
 {
 int seqLen = 0;
 int i;
 for (i = 0;  i < gp->exonCount;  i++)
     seqLen += (gp->exonEnds[i] - gp->exonStarts[i]);
 char *seq = needMem(seqLen+1);
 int offset = 0;
 for (i = 0;  i < gp->exonCount;  i++)
     {
     int exonStart = gp->exonStarts[i];
     int exonEnd = gp->exonEnds[i];
     struct dnaSeq *exonSeq = hChromSeq(db, gp->chrom, exonStart, exonEnd);
     safencpy(seq+offset, seqLen+1-offset, exonSeq->dna, exonSeq->size);
     offset += exonSeq->size;
@@ -3281,15 +3281,31 @@
         if (hitsStopCodon)
             aaToAbbr('X', refLastAbbr, sizeof(refLastAbbr));
         else
             aaToAbbr(pSeq[rangeEnd-1], refLastAbbr, sizeof(refLastAbbr));
         if (dupLen == 1)
             dyStringPrintf(dy, "%s%d", refStartAbbr, rangeStart+1);
         else
             dyStringPrintf(dy, "%s%d_%s%d", refStartAbbr, rangeStart+1, refLastAbbr, rangeEnd);
         }
     hgvsAppendChangesFromPepRefAlt(dy, vpPep->ref, vpPep->alt, dupLen);
     }
 if (addParens)
     dyStringAppendC(dy, ')');
 return dyStringCannibalize(&dy);
 }
+
+struct trackDb *hgvsDefaultGeneTrack(char *db)
+/* Return trackDb for the assembly's preferred gene-model track (MANE first), or NULL
+ * if none is present.  Caller checks tdb->type for genePred vs bigGenePred. */
+{
+static char *geneTrackPrefs[] =
+    { "mane", "ncbiRefSeqSelect", "ncbiRefSeqCurated", "refGene", "ensGene", "knownGene" };
+int i;
+for (i = 0;  i < ArraySize(geneTrackPrefs);  i++)
+    {
+    struct trackDb *tdb = hTrackDbForTrack(db, geneTrackPrefs[i]);
+    if (tdb != NULL)
+        return tdb;
+    }
+return NULL;
+}