e5697049b1e077237d1f83c8293e23d62ded0820
braney
  Tue May 12 11:40:26 2026 -0700
quickLiftBench: Mode C reference hub + hub-variant case schema, refs #37445

Adds a synthetic 4-track hub (bigBed native + lifted, bigWig native +
lifted) at utils/qa/quickLiftBench/testHub/, regenerated via
buildTestHub.sh, and extends the bench schema so a variant can be a
mapping (hubUrl + db + position + tracks) in addition to the existing
saved-session string. The two new cases mode_c_hs1_bb and mode_c_hs1_bw
exercise quickLift on hs1 against an hg38-sourced chain, with both
variants rendering at the same hs1 coords so the only difference is
whether the chain-remap step runs.

First numbers (n=10, hgwdev, chr22:15M-50M, 5000 source features /
34000 bedGraph bins):

case             native total   lifted total   parallel-fetch delta
mode_c_hs1_bb    1376 ms        1154 ms        +900 ms (chain remap)
mode_c_hs1_bw    26 ms          27 ms          negligible

bigBed scales per-feature (~180 us/feature for 5000 hg38 features
remapped); bigWig is essentially free.

Also moves the regress_quickLift_parallel case from server: sandbox to
server: hgwdev now that #37470 has landed on dev.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

diff --git src/utils/qa/quickLiftBench/cases.yaml src/utils/qa/quickLiftBench/cases.yaml
index d0fb7ae939c..89ff48c1083 100644
--- src/utils/qa/quickLiftBench/cases.yaml
+++ src/utils/qa/quickLiftBench/cases.yaml
@@ -50,39 +50,84 @@
       lifted: Brianraney/benchQuickList1
     compare:
       - [native, lifted]
 
   # -------- Bench pair 1: same sessions on the public RR --------
   - id: bench1_rr
     description: |
       Same session pair as bench1_hgwdev, run against genome.ucsc.edu.
     server: rr
     variants:
       native: Brianraney/benchQuickNative1
       lifted: Brianraney/benchQuickList1
     compare:
       - [native, lifted]
 
+  # -------- Mode C: lift on/off, same hub on hs1 (refs #37445) --------
+  # Reference hub at utils/qa/quickLiftBench/testHub/ (built by buildTestHub.sh).
+  # Both stanzas render the same conceptual features at the same hs1 coords;
+  # the only difference is whether the lifted variant goes through the
+  # quickLift chain-remap path. This isolates pure quickLift overhead from
+  # track-content differences -- the cleanest measurement for the paper.
+  - id: mode_c_hs1_bb
+    description: |
+      Mode C bigBed: same hub, same position on hs1; native (hs1-coord
+      bigBed) vs lifted (hg38-coord bigBed + quickLiftUrl chain). Isolates
+      the chain-remap overhead from track-content differences.
+    server: hgwdev
+    variants:
+      native:
+        hubUrl: https://hgwdev.gi.ucsc.edu/~braney/quickLiftBench/testHub/hub.txt
+        db: hs1
+        position: chr22:15000000-50000000
+        tracks: {modeC_bb_native: pack, modeC_bb_lifted: hide, modeC_bw_native: hide, modeC_bw_lifted: hide}
+      lifted:
+        hubUrl: https://hgwdev.gi.ucsc.edu/~braney/quickLiftBench/testHub/hub.txt
+        db: hs1
+        position: chr22:15000000-50000000
+        tracks: {modeC_bb_native: hide, modeC_bb_lifted: pack, modeC_bw_native: hide, modeC_bw_lifted: hide}
+    compare:
+      - [native, lifted]
+
+  - id: mode_c_hs1_bw
+    description: |
+      Mode C bigWig: same hub + position; native (hs1-coord bigWig) vs
+      lifted (hg38-coord bigWig + quickLiftUrl chain). Same isolation as
+      mode_c_hs1_bb but for the bigWig track type.
+    server: hgwdev
+    variants:
+      native:
+        hubUrl: https://hgwdev.gi.ucsc.edu/~braney/quickLiftBench/testHub/hub.txt
+        db: hs1
+        position: chr22:15000000-50000000
+        tracks: {modeC_bb_native: hide, modeC_bb_lifted: hide, modeC_bw_native: full, modeC_bw_lifted: hide}
+      lifted:
+        hubUrl: https://hgwdev.gi.ucsc.edu/~braney/quickLiftBench/testHub/hub.txt
+        db: hs1
+        position: chr22:15000000-50000000
+        tracks: {modeC_bb_native: hide, modeC_bb_lifted: hide, modeC_bw_native: hide, modeC_bw_lifted: full}
+    compare:
+      - [native, lifted]
+
   # -------- Regression: parallel-fetch tripwire (refs #37488, #37470) --------
   # phase_asserts make this case fail-fast if the parallel pool stops
   # firing for quickLift tracks (e.g. a regression in isTrackForParallelLoad
-  # or customFactoryParallelLoad). Runs against the sandbox until the fix
-  # lands on hgwdev.
+  # or customFactoryParallelLoad).
   - id: regress_quickLift_parallel
     description: |
       Regression tripwire: a quickLifted multi-track session must
       spawn the parallel-fetch worker pool. Asserts the
       "Waiting for parallel..." span is emitted in every iteration.
-    server: sandbox
+    server: hgwdev
     variants:
       base: Brianraney/benchQuickPara
     phase_asserts:
       # Required + min_median together: catch a regression that drops the
       # quickLift tracks back to serial. With the fix in place the median
       # parallel wait is several seconds; without it (only non-quickLift
       # tracks parallelize) the wait is ~50 ms, so 500 ms cleanly separates
       # the working and broken cases.
       - variant: base
         phase: 'Waiting for parallel \(\d+ threads for \d+ tracks\) remote data fetch'
         required: true
         min_median_ms: 500
         max_median_ms: 15000