80daf93864f5609f6b7695766a78edd90cac0c1d
braney
  Fri Jul 31 12:29:05 2026 -0700
quickLift: accept broadPeak tracks, and make lifted peak details right. refs #37970

Add broadPeak to the types validateOneTdb will lift; hgTracks already knew
how to load one.  Make hgc's encodePeak handler read the table out of the
source assembly and lift the items, instead of looking in the destination
assembly where the table does not exist and coming up empty.  Lift peaks with
a new quickLiftPeaks() rather than casting them to bed and calling
quickLiftBeds(), whose thickStart and thickEnd assignments land on
signalValue and pValue in struct encodePeak.

diff --git src/hg/hgTracks/encode.c src/hg/hgTracks/encode.c
index 74b869304d9..a35c45573f4 100644
--- src/hg/hgTracks/encode.c
+++ src/hg/hgTracks/encode.c
@@ -288,31 +288,31 @@
     case broadPeak:
         loader = (ItemLoader2)broadPeakLoad;
         break;
     case gappedPeak:
         loader = (ItemLoader2)gappedPeakLoad;
         break;
     case encodePeak:
         loader =  (ItemLoader2)encodePeakLoad;
         break;
     default:
         errAbort("bad value for peak type %d\n", pt);
         break;
     }
 
     struct encodePeak *peakList = (struct encodePeak *)quickLiftSql(conn, quickLiftFile, table, chromName, winStart, winEnd,  NULL, NULL, (ItemLoader2)loader, 0, chainHash);
-    struct encodePeak *liftedPeaks = (struct encodePeak *)quickLiftBeds((struct bed *)peakList, chainHash, FALSE);
+    struct encodePeak *liftedPeaks = quickLiftPeaks(peakList, chainHash);
 
     for(; liftedPeaks; liftedPeaks = liftedPeaks->next)
         {
         struct linkedFeatures *lf = lfFromEncodePeak((struct slList *)liftedPeaks, tg->tdb, scoreMin, scoreMax);
 
         if (lf)
             slAddHead(&lfList, lf);
         }
     }
 hFreeConn(&conn);
 slReverse(&lfList);
 slSort(&lfList, linkedFeaturesCmp);
 tg->items = lfList;
 }