49f31ee05d781083f1a9b7fcff2e99b974622c41
braney
  Tue Feb 4 09:06:51 2025 -0800
add custom tracks

diff --git src/hg/hgTracks/bedTrack.c src/hg/hgTracks/bedTrack.c
index 5fa6411c17c..3f022f2ea5d 100644
--- src/hg/hgTracks/bedTrack.c
+++ src/hg/hgTracks/bedTrack.c
@@ -134,34 +134,42 @@
     if (filtered)
        labelTrackAsFilteredNumber(tg, filtered);
 
     lmCleanup(&lm);
     }
 else
     {
     char *table = tg->table;
     struct customTrack *ct = tg->customPt;
     struct sqlConnection *conn = NULL;
     char *liftDb = cloneString(trackDbSetting(tg->tdb, "quickLiftDb"));
     char *scoreFilterClause = getScoreFilterClause(cart, tg->tdb,NULL);
 
     if (liftDb != NULL)
         {
+        char *table;
+        if (isCustomTrack(tg->table))
+            {
+            liftDb = CUSTOM_TRASH;
+            table = trackDbSetting(tg->tdb, "dbTableName");
+            }
+        else
+            table = tg->table;
         struct hash *chainHash = newHash(8);
         struct sqlConnection *conn = hAllocConn(liftDb);
         char *quickLiftFile = cloneString(trackDbSetting(tg->tdb, "quickLiftUrl"));
-        bed = (struct bed *)quickLiftSql(conn, quickLiftFile, &tg->table[4], chromName, winStart, winEnd,  NULL, scoreFilterClause, (ItemLoader)loader, chainHash);
+        bed = (struct bed *)quickLiftSql(conn, quickLiftFile, table, chromName, winStart, winEnd,  NULL, scoreFilterClause, (ItemLoader)loader, chainHash);
 
         list = quickLiftBeds(bed, chainHash, FALSE);
         hFreeConn(&conn);
         }
     else
         {
         if (ct == NULL)
             conn = hAllocConnTrack(database, tg->tdb);
         else
             {
             conn = hAllocConn(CUSTOM_TRASH);
             table = ct->dbTableName;
             }
         struct sqlResult *sr = NULL;
         /* limit to items above a specified score */
@@ -561,34 +569,42 @@
             adjustBedScoreGrayLevel(tdb, bed, scoreMin, scoreMax);
             lf = lfFromBedExtra(bed, scoreMin, scoreMax);
             if (useItemRgb)
                 {
                 lf->useItemRgb = TRUE;
                 lf->filterColor=bed->itemRgb;
                 }
             slAddHead(&lfList, lf);
             bedFree(&bed);
             }
         sqlFreeResult(&sr);
         hFreeConn(&conn);
         }
     else
         {
+        char *table;
+        if (isCustomTrack(tg->table))
+            {
+            liftDb = CUSTOM_TRASH;
+            table = trackDbSetting(tg->tdb, "dbTableName");
+            }
+        else
+            table = tg->table;
         struct hash *chainHash = newHash(8);
         struct sqlConnection *conn = hAllocConn(liftDb);
         char *quickLiftFile = cloneString(trackDbSetting(tg->tdb, "quickLiftUrl"));
-        bed = (struct bed *)quickLiftSql(conn, quickLiftFile, &tg->table[4], chromName, winStart, winEnd,  NULL, scoreFilterClause, (ItemLoader)bedLoad12, chainHash);
+        bed = (struct bed *)quickLiftSql(conn, quickLiftFile, table, chromName, winStart, winEnd,  NULL, scoreFilterClause, (ItemLoader)bedLoad12, chainHash);
 
         struct bed *liftedBeds = quickLiftBeds(bed, chainHash, TRUE);
         for(bed = liftedBeds; bed; bed = bed->next)
             {
             lf = lfFromBedExtra(bed, scoreMin, scoreMax);
             if (useItemRgb)
                 {
                 lf->useItemRgb = TRUE;
                 lf->filterColor=bed->itemRgb;
                 }
             slAddHead(&lfList, lf);
             }
         hFreeConn(&conn);
         }
     }