d8900846fdae9183808ccd57864191ee48fca00e
chmalee
  Fri Jun 5 10:07:25 2026 -0700
myVariants: fix item display and HGVS gene-track lookup on GenArk hubs, refs #33808

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

diff --git src/hg/lib/hgHgvs.c src/hg/lib/hgHgvs.c
index fcf864d512e..cccf4d10816 100644
--- src/hg/lib/hgHgvs.c
+++ src/hg/lib/hgHgvs.c
@@ -3288,24 +3288,33 @@
             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" };
+// On an assembly hub the gene tracks carry a hub_<id>_ prefix and hTrackDb() is empty,
+// so enumerate the hub genome's tracks and match by bare name; native dbs fall back to
+// hTrackDbForTrack.  Guard trackHubGetGenome: it aborts when no hub is registered.
+struct trackHubGenome *hubGenome = trackHubDatabase(db) ? trackHubGetGenome(db) : NULL;
+struct trackDb *hubTdbList = (hubGenome != NULL) ? trackHubAddTracksGenome(hubGenome) : NULL;
 int i;
 for (i = 0;  i < ArraySize(geneTrackPrefs);  i++)
     {
-    struct trackDb *tdb = hTrackDbForTrack(db, geneTrackPrefs[i]);
+    struct trackDb *tdb;
+    if (hubTdbList != NULL)
+        tdb = findTdbByBareName(hubTdbList, geneTrackPrefs[i]);
+    else
+        tdb = hTrackDbForTrack(db, geneTrackPrefs[i]);
     if (tdb != NULL)
         return tdb;
     }
 return NULL;
 }