752cb1161a3dc006932fd3ba179c9b2fbe449c8d
jnavarr5
  Fri Sep 25 14:27:43 2026 -0700
Updating the episignatures makedoc for the semicolon filter labels and adding a recount command for the opposite-direction sites count, refs #38112

diff --git src/hg/makeDb/doc/hg38/episignatures.txt src/hg/makeDb/doc/hg38/episignatures.txt
index 826e2a9c354..550d4a4aca8 100644
--- src/hg/makeDb/doc/hg38/episignatures.txt
+++ src/hg/makeDb/doc/hg38/episignatures.txt
@@ -248,41 +248,54 @@
 # every one of them is at the same position; 799 are only here.
 bigBedToBed /gbdb/hg38/episignatures/methaDory.bb stdout \
     | awk -F'\t' '{print $4"\t"$1":"$2}' | sort -u > /tmp/md.pos
 awk -F'\t' '{print $4"\t"$1":"$2}' epigenCentral.bed | sort -u > /tmp/ec.pos
 join -t$'\t' /tmp/md.pos /tmp/ec.pos | awk -F'\t' '$2!=$3' | wc -l
 # 0
 
 # The signature filter menu and the "Included episignatures" table of the description
 # page are generated by the build, into epigenCentralFilters.ra and
 # epigenCentralTable.html. On a refresh, paste the two .ra lines back into
 # human/hg38/episignatures.ra, and the table back into human/hg38/epigenCentral.html
 # between the "<!-- BEGIN generated ... -->" and "<!-- END generated -->" markers,
 # rather than editing either by hand. The counts quoted in the Description and Methods
 # paragraphs of that page have to be updated at the same time.
 #
+# One of those counts, in Display Conventions, is how many multi-signature sites also carry
+# a signature in the opposite direction to the strongest one, which the color and the
+# direction filter do not show (1,618 of 2,848 in this build). Recount it with:
+python3 -c "
+m = x = 0
+for l in open('epigenCentral.bed'):
+    rows = [r.split('|') for r in l.rstrip('\\n').split('\\t')[16].split(';')][1:]
+    if len(rows) > 1:
+        m += 1
+        x += len({r[3] for r in rows if r[3] != 'NA'}) > 1
+print(x, 'of', m)"
+#
 # The publication behind each signature comes from the hub's README and is kept in
 # scripts/episignatures/epigenCentralRefs.tsv, since the README is not machine
 # readable. All 18 distinct PMIDs were checked against PubMed esummary before being
 # written down; EHMT1 is the one signature with no PubMed record and is cited by DOI.
 # The hub's own HTML page has every one of these links pointing at PMID 31311581 while
 # displaying a different number, which is why they are generated here instead.
 
 # A comma in a filterValues entry is the entry separator and cannot be escaped when the
-# filterType is one of the *List* kinds, so the commas inside four of the disorder names
-# ("Dystonia 28, childhood-onset" and friends) are dropped in the menu labels by
-# writeRa() in epigenCentralToBed.py. The bigBed keeps the names as the source has them.
+# filterType is one of the *List* kinds, so the commas inside three of the disorder names
+# ("Dystonia 28, childhood-onset" and friends) become semicolons in the menu labels, as in
+# the methaDory menu, by writeRa() in epigenCentralToBed.py. The bigBed keeps the names as
+# the source has them. (Changed from dropping the commas during QA, 2026-09-25.)
 
 # Track search: the position box finds a probe by its cg number. The bigBed carries
 # -extraIndex=name and episignatures.ra has a matching searchTable stanza. Both this
 # spec and the methaDory one carry termRegex and semiShortCircuit, so a probe ID that
 # is in both tracks returns a hit in both, plus the Illumina array tracks.
 hgsql hg38 -Ne "select searchName, shortCircuit, searchPriority from hgFindSpec_max where searchTable='epigenCentral'"
 # epigenCentral  1  51
 
 # Lou asked on the ticket for downloads to be off, so the stanza has "tableBrowser off"
 # and the Data Access section points at EpigenCentral's own portal and repository. That
 # switch covers the Table Browser, the Data Integrator and the REST API; the bigBed
 # still sits in /gbdb and is reachable on hgdownload, so it is not a hard block, and QA
 # should confirm with the lab that this is what they wanted.
 
 # Visibility: the track is sparse almost everywhere, 15,035 sites over the genome, but it