# Transcription start sites: ProCapNet predictions, #35528, Claude
Thu Sep 17 2026 (Claude/markd)

# Layout: a transcriptionStart superTrack holding one traditional composite per
# data source, each composite holding one multiWig overlay per cell line and the
# two strands as the overlay's leaves.  One .ra file per top-level track.
#
# Under a composite an overlay gets no configuration block of its own, and
# deselecting both strands of a cell line leaves an empty row where the overlay
# was, both because compositeUiSubtracks() lists descendant leaves and a
# multiWig is not a leaf.  That is #38441, to be fixed in hgTrackUi.  An earlier
# attempt made each data source a superTrack holding the overlays directly,
# which avoided #38441 but cost the subtrack matrix and the sample class filter,
# and needed the superTrack-in-superTrack fix of #38460 to nest in
# transcriptionStart.  It was reverted.
#
# The composite set is alpha until #38441 is fixed.  Beta and public keep the
# shape that is already released: proCapNet as a top-level superTrack holding
# the overlays, with no transcriptionStart container.  The script writes one
# file per shape and the include lines in trackDb.ra choose between them.

# 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/ has since been deleted, 367 GB over the two
# assemblies.  Nothing is lost by that: negation is its own inverse, so the
# originals can be recovered from the files in pred/ by running the same command
# again.  A rebuild from the downloads does not need any of this either:
# proCapNetPredBuild negates the minus strand itself.

cd ~/kent/src/hg/makeDb/outside/proCapNet
./proCapNetTrackDb hs1 proCapNetExperiments.tsv \
    ~/kent/src/hg/makeDb/trackDb/human/hs1

# That writes two files, one per shape: transcriptionStart.ra is the container
# with the composite inside it, transcriptionStartPublic.ra is the released
# shape; hs1 has no encode4ProCap.  The include lines in human/hs1/trackDb.ra
# are added by hand:
#   include transcriptionStart.ra alpha
#   include transcriptionStartPublic.ra beta,public

# 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
