956500207b58c263485009212f223836152176d3 hiram Thu Mar 26 14:58:55 2026 -0700 simplify the gcOnFly track - it does not need to by completely synthetic - it only comes in from trackDb stanzas refs #35958 diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 5b07c063d0f..b948062dd5c 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -7433,72 +7433,61 @@ * Best to load custom last. */ // load the track list and check to see if we need to rewrite the cart int cartVersionFromTrackDb = loadFromTrackDb(&trackList); int cartVersionFromCart = cartGetVersion(cart); if (cartVersionFromTrackDb > cartVersionFromCart) cartRewrite(cart, cartVersionFromTrackDb, cartVersionFromCart); if (measureTiming) measureTime("Time after trackDbLoad "); if (pcrResultParseCart(database, cart, NULL, NULL, NULL)) slSafeAddHead(&trackList, pcrResultTg()); if (userSeqString != NULL) slSafeAddHead(&trackList, userPslTg()); slSafeAddHead(&trackList, oligoMatchTg()); -/* gcOnFly track: prefer trackDb entry if present, otherwise - * build synthetically when gcOnTheFly config is enabled. */ -{ -struct track *gcTg = rFindTrackWithTable(GC_ON_FLY_TRACK_NAME, trackList); -if (gcTg != NULL) - { - /* trackDb entry exists - patch in on-the-fly methods */ - gc5BaseOnTheFlyMethods(gcTg, cart); - } -else if (cfgOptionBooleanDefault("gcOnTheFly", FALSE)) - { - if (cfgOptionBooleanDefault("gcOnTheFlyCoExist", FALSE)) - { - slSafeAddHead(&trackList, gc5BaseOnTheFlyTg(cart)); - } - else - { - if (rFindTrackWithTable("gc5Base", trackList) == NULL && - rFindTrackWithTable("gc5BaseBw", trackList) == NULL) - slSafeAddHead(&trackList, gc5BaseOnTheFlyTg(cart)); - } - } -} if (restrictionEnzymesOk()) { slSafeAddHead(&trackList, cuttersTg()); } if (wikiTrackEnabled(database, NULL)) { addWikiTrack(&trackList); struct sqlConnection *conn = wikiConnect(); if (sqlTableExists(conn, "variome")) addVariomeWikiTrack(&trackList); wikiDisconnect(&conn); } struct grp *grpList = NULL; if (cartOptionalString(cart, "hgt.trackNameFilter") == NULL) { // If a single track was asked for and it is from a hub, then it is already in trackList loadTrackHubs(&trackList, &grpList); } +/* gcOnFly track: if a trackDb entry exists (native or hub, possibly + * with a hub_#_ prefix on the table name), patch in on-the-fly + * computation methods so data comes from genome sequence, not a file. + * This must run after loadTrackHubs so assembly hub tracks are present. */ +{ +struct track *t; +for (t = trackList; t != NULL; t = t->next) + { + if (sameString(GC_ON_FLY_TRACK_NAME, trackHubSkipHubName(t->table))) + gc5BaseOnTheFlyMethods(t, cart); + } +} loadCustomTracks(&trackList); makeDupeTracks(&trackList); groupTracks( &trackList, pGroupList, grpList, vis); setSearchedTrackToPackOrFull(trackList); char *rtsLoad = cgiOptionalString( "rtsLoad"); if (rtsLoad) // load a recommended track set using the merge method { // store session name and user char *otherUserName = cartOptionalString(cart, hgsOtherUserName); char *otherUserSessionName = rtsLoad; // Hide all tracks except custom tracks struct hash *excludeHash = newHash(2); hashStore(excludeHash, "user"); changeTrackVisExclude(groupList, NULL, tvHide, excludeHash);