a7dd4fa7826142ecfe082ad496d5019effa0c8e6
braney
  Wed Mar 13 13:27:35 2024 -0700
if bigChain trackDb doesn't specify linkDataUrl then try adding .link.bb
to the bigDataUrl

diff --git src/hg/hgTracks/chainTrack.c src/hg/hgTracks/chainTrack.c
index 7dae716..8aa43a0 100644
--- src/hg/hgTracks/chainTrack.c
+++ src/hg/hgTracks/chainTrack.c
@@ -147,36 +147,44 @@
 int start, end, extra;
 struct simpleFeature *lastSf = NULL;
 int maxOverLeft = 0, maxOverRight = 0;
 int overLeft, overRight;
 void *closure;
 struct sqlClosure sqlClosure;
 struct bbClosure bbClosure;
 linkRetrieveFunc queryFunc;
 if (tg->isBigBed)
     {
     closure = &bbClosure;
     queryFunc = doBbQuery;
     char *fileName = trackDbSetting(tg->tdb, "linkDataUrl");
     if (fileName == NULL)
         {
-        warn("Cannot find linkDataUrl in custom track \"%s\"\n", tg->shortLabel);
-        return;
+        char buffer[4096];
+
+        char *bigDataUrl = cloneString(trackDbSetting(tg->tdb, "bigDataUrl"));
+        char *dot = strrchr(bigDataUrl, '.');
+        if (dot == NULL)
+            errAbort("No linkDataUrl in track %s", tg->track);
+
+        *dot = 0;
+        safef(buffer, sizeof buffer, "%s.link.bb", bigDataUrl);
+        fileName = buffer;
         }
     struct bbiFile *bbi =  bigBedFileOpenAlias(fileName, chromAliasFindAliases);
     if (bbi == NULL)
-        return;
+        errAbort("cannot open linkDataUrl %s", fileName);
     bbClosure.bbi =  bbi;
     }
 else
     {
     closure = &sqlClosure;
     queryFunc = doQuery;
     sqlClosure.conn = hAllocConn(database);
     }
 
 lm = lmInit(1024*4);
 hash = newHash(0);
 
 /* Make up a hash of all linked features keyed by
  * id, which is held in the extras field.  To
  * avoid burning memory on full chromosome views