d87ef2fb8472135b899fd1a89434033d5895217a
mspeir
  Thu Oct 1 15:31:26 2026 -0700
Add barChartReorder, a utility for changing the order of the bars in a barChart track, refs #37619

The bars of a barChart are drawn in the order their values appear in the
expScores field, and nothing re-sorts them when the track is drawn, so the
order is a property of the data file. Putting the bars in a different order
means rewriting that field in every row, which is awkward enough by hand that
we have twice done it for a data author instead of explaining it. This has
come up on #36998 and #37001.

barChartReorder takes the current bar order and the wanted order as two lists
of names, rewrites expScores in every row, optionally puts a .categories file
into the same order, and prints the barChartBars line for the track. It works
on any barChart BED whatever produced it, so unlike the --groupOrderFile
option of expMatrixToBarchartBed it does not assume the file was built here
from an expression matrix. A bigBarChart is handled by converting it with
bigBedToBed and rebuilding it afterwards, which the usage message spells out.

It refuses to write a half-correct file: the two orders must name the same
bars, every row must hold as many values as there are names, and a .categories
file must have a row for each bar.

Listed in USER_APP_SCRIPTS so it reaches hgdownload, and in the no-argument
branch of mkREADME.sh so the README picks up its usage message rather than the
argparse error that -verbose=2 would produce.

Its tests are also wired into the test target directly. testAll iterates
ALL_APPS, which does not include USER_APP_SCRIPTS, so none of these programs'
tests have ever been reachable from "make test" - that is why the suite sitting
next to expMatrixToBarchartBed never reported it was broken. The makefile
already keeps a short list of directories testAll cannot reach, and this adds
two more to it.

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

diff --git src/utils/barChartReorder/tests/expected/test.bed src/utils/barChartReorder/tests/expected/test.bed
new file mode 100644
index 00000000000..34235c9fd2b
--- /dev/null
+++ src/utils/barChartReorder/tests/expected/test.bed
@@ -0,0 +1,4 @@
+#chr	chromStart	chromEnd	name	score	strand	name2	expCount	expScores;wholeBlood muscleSkeletal adiposeSubcut breastMamTissue colonTransverse	_offset	_lineLength
+chr14	95086227	95158010	ENSG00000100697.10	999	-	DICER1	5	4.89,6.69,10.94,11.60,8.00	93153	26788
+chr14	95181939	95319906	ENSG00000165959.7	999	-	CLMN	5	1.68,1.38,7.08,9.53,9.32	66148	27004
+chr14	95417493	95475836	ENSG00000176438.8	999	-	SYNE3	5	1.39,0.35,7.29,3.73,0.74	38669	27478