c3bb4207fb2a58064b937ba9fef1cc11852f7576
hiram
  Wed Mar 25 10:48:49 2026 -0700
allow trackDb entry to override the in-code defaults of the gcOnFly track refs #35958

diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c
index 47375013db5..3950824e761 100644
--- src/hg/lib/hdb.c
+++ src/hg/lib/hdb.c
@@ -3980,30 +3980,32 @@
 trackDbAddTableField(tdbList);
 return tdbList;
 }
 
 boolean trackDataAccessibleHash(char *database, struct trackDb *tdb, struct hash *gbdbHash)
 /* Return TRUE if underlying data are accessible - meaning the track has either
  * a bigDataUrl with remote URL (http:// etc), a bigDataUrl with an existing local file,
  * or a database table with the same name.
  * Note: this returns FALSE for composite tracks; use this on subtracks or simple tracks. 
  *
  * if gbdbHash is not NULL, use it when looking for the file */
 {
 if (startsWith("mathWig", tdb->type) || startsWith("cartVersion", tdb->type)|| startsWith("instaPort", tdb->type)   )
     return TRUE; // assume mathWig data is available.  Fail at load time if it isn't
     // cartVersion is a pseudo trackDb entry with no data
+if (trackDbSettingOn(tdb, "syntheticTrack"))
+    return TRUE; // synthetic tracks compute data on the fly, no table or file needed
 char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl");
 if (bigDataUrl != NULL)
     {
     bigDataUrl = replaceChars(bigDataUrl, "$D", database);
     char *bigDataUrlLocal = hReplaceGbdb(bigDataUrl);
     if (hasProtocol(bigDataUrlLocal))
         return TRUE;
     else
         {
         if (gbdbHash == NULL)
             return fileExists(bigDataUrlLocal);
         else
             return hashLookup(gbdbHash, bigDataUrlLocal) != NULL;
         }
     }