d0ddd717713f275dc2f567c9b6d733fd3f55bd90
markd
  Fri Oct 2 21:27:25 2026 -0700
Put PRO-cap and ProCapNet inside a Transcription Initiation folder. refs #35528

The two data sources were top-level superTracks because a superTrack could not
be a member of another one. #38460 fixes that, so they now sit inside a
transcriptionStart superTrack, which is what the collection was meant to be.

The container is written before either of its children, and both children before
any of their members: tdbQuery -strict rejects a file in which another track
comes between a superTrack and one of its children.

This depends on the #38460 build. A plain make here with the installed binaries
produces a half-built state, since hgTrackDb drops the container from the table
and trackDbToTxt then writes an hs1 curated hub whose member names a parent
stanza that is not there. Both makedocs say so.

diff --git src/hg/makeDb/doc/hs1/transcriptionStart.txt src/hg/makeDb/doc/hs1/transcriptionStart.txt
index 628bcd0c8c0..24ee01a45d4 100644
--- src/hg/makeDb/doc/hs1/transcriptionStart.txt
+++ src/hg/makeDb/doc/hs1/transcriptionStart.txt
@@ -1,91 +1,94 @@
 # Transcription start sites: ProCapNet predictions, #35528, Claude
 Thu Sep 17 2026 (Claude/markd)
 
 # Layout: one superTrack per data source, each holding its multiWig overlays
 # directly, the way fantom5 does.  Not a composite: under a composite hgTrackUi
 # lists descendant leaves rather than containers, so an overlay gets no
 # configuration block of its own and hiding both strands of a cell line leaves an
 # empty row where the overlay was (#38441).  As a superTrack member each overlay
 # is a track in its own right, with a full configuration page, and hiding it
 # hides the whole overlay.  The cost is the subtrack matrix and the sample class
 # filter, neither of which a superTrack offers.
 #
-# These two superTracks are top level rather than sitting inside a single
-# transcriptionStart folder, because superTracks do not nest: a superTrack given
-# a parent passes tdbQuery -check -strict and is then silently dropped at load
-# (#38460).  transcriptionStart.html is left in the tree unused against that
-# being fixed.
+# The two data-source superTracks sit inside a transcriptionStart superTrack.
+# That needs the nesting fix in #38460: before it, a superTrack given a parent
+# passed tdbQuery -check -strict and was then silently dropped at load.  Until
+# that fix is released, a plain make here produces a half-built state, because
+# the trackDb make calls two installed binaries that predate it: hgTrackDb drops
+# the container from the table, and trackDbToTxt then writes an hs1 curated hub
+# whose member names a parent stanza that is not there.  Load with a build that
+# has the fix, and rebuild the hub, until it ships.
 
 # hs1 has the ProCapNet predictions only.  There is no PRO-cap experiment and no
 # sequence-contribution score set on this assembly.  See
 # makeDb/doc/hg38/transcriptionStart.txt for the hg38 build, which carries all
 # three.  Scripts are in ~/kent/src/hg/makeDb/outside/proCapNet.
 
 mkdir -p /hive/data/outside/proCapNet/hs1 /hive/data/genomes/hs1/bed/proCapNet
 cd /hive/data/genomes/hs1/bed/proCapNet
 ~/kent/src/hg/makeDb/outside/proCapNet/proCapNetDownload hs1 \
     ~/kent/src/hg/makeDb/outside/proCapNet/proCapNetExperiments.tsv \
     /hive/data/outside/proCapNet/hs1/pred
 # 300 GB, about 30 minutes at six parallel streams
 
 # Re-encode from one bedGraph interval per base into fixedStep sections.  Unlike
 # hg38 these files hold no NaN, so every base is kept.
 ~/kent/src/hg/makeDb/outside/proCapNet/proCapNetPredBuild \
     /hive/data/genomes/hs1/chrom.sizes /hive/data/outside/proCapNet/hs1/pred pred 6
 # all 12 files report:
 #   24 chroms, 3117275501 bases, 3117275501 with data, 0 dropped
 # about 25 GB in, 16.7 to 17.0 GB out per file
 
 # proCapNetPredBuild writes the minus strand negated, so it draws below the
 # baseline from its own values.  Doing it in the data rather than with the
 # trackDb negateValues setting is what makes the composite's own negate control
 # work: that control sets one shared value for the composite, which replaced the
 # per-track negateValues and sent both strands the same way, with no way back to
 # the default short of a cart reset.  encode4ProCap never had the problem,
 # because ENCODE already publishes its minus strand negative.
 
 # the mean matches the published file exactly, so nothing was altered
 bigWigInfo pred/K562.proCapNet.pos.bw | egrep 'basesCovered|mean'
 #   basesCovered: 3,117,275,501
 #   mean: 0.019773
 
 ##############################################################################
 # negating the minus strand, after the fact
 ##############################################################################
 
 # The prediction files were first built with the minus strand positive and
 # flipped at display time with the trackDb negateValues setting.  That broke the
 # composite's negate control, as described above, so the twelve minus-strand
 # files were rewritten with negated values rather than rebuilt from the
 # downloads, which had already been deleted:
 #
 #   for db in hg38 hs1 ; do
 #       base=/hive/data/genomes/$db/bed/proCapNet
 #       mkdir -p $base/previousPred
 #       ls $base/pred/*.neg.bw | while read f ; do
 #           ~/kent/src/hg/makeDb/outside/proCapNet/proCapNetPredToFixedStep \
 #               --negate /hive/data/genomes/$db/chrom.sizes $f $base/negated/$(basename $f)
 #       done
 #   done
 #
 # Each output was checked against its input: same nBasesCovered, value range
 # mirrored, sampled values exactly negated.  The originals were then moved to
 # previousPred/ and the negated files put in their place, so /gbdb needs no new
 # symlinks.  previousPred/ is about 197 GB and can be removed once the track has
 # been through QA.  A rebuild from the downloads does not need any of this:
 # proCapNetPredBuild negates the minus strand itself.
 
 cd ~/kent/src/hg/makeDb/outside/proCapNet
 ./proCapNetTrackDb hs1 proCapNetExperiments.tsv \
     ~/kent/src/hg/makeDb/trackDb/human/hs1/transcriptionStart.ra
 
 # transcriptionStart.ra is generated; the include line in human/hs1/trackDb.ra
 # is added by hand:
 #   include transcriptionStart.ra alpha
 
 # hs1 is a curated hub assembly, so the stanzas reach the browser through the
 # hub built under /gbdb/hs1/hubs/$USER by the trackDb make, and are visible only
 # when curatedHubPrefix in the sandbox hg.conf names that directory.
 
 # the downloads are only needed for the re-encoding
 rm -rf /hive/data/outside/proCapNet/hs1/pred