7d1fa338ded4783ef25abad8afecfe6ee3077d71
markd
  Sat Jun 7 15:03:18 2025 -0700
keep ordering consistent when clsLongReadRna trackDb is generated

diff --git src/hg/makeDb/outside/clsLongReadRna/clsTrackTool src/hg/makeDb/outside/clsLongReadRna/clsTrackTool
index c422baa1e13..1d00d29f1f2 100755
--- src/hg/makeDb/outside/clsLongReadRna/clsTrackTool
+++ src/hg/makeDb/outside/clsLongReadRna/clsTrackTool
@@ -528,31 +528,31 @@
                                    osp.join(trackDir, stageTissueToBigBedPath(stage_tissue)))
 
     fh.write(EXPR_MODELS_VIEW_TDB)
     for clsMeta in clsMetas:
         write_expr_data_trackdb(fh, clsMeta, 'models',
                                 osp.join(trackDir, sampleIdToBigBedPath(clsMeta)),
                                 EXPR_MODELS_TDB)
 
     fh.write(EXPR_READS_VIEW_TDB)
     for clsMeta in clsMetas:
         write_expr_data_trackdb(fh, clsMeta, 'reads',
                                 osp.join(trackDir, sampleIdToBamPath(clsMeta)),
                                 EXPR_READS_TDB)
 
 def metaSortKey(clsMeta):
-    return (clsMeta.tissue, clsMeta.stage)
+    return (clsMeta.tissue, clsMeta.stage, clsMeta.sid)
 
 def makeTrackDb(opts, clsMetadataTab, trackDir, trackDb, parent):
     clsMetas = sorted(loadClsMetadata(clsMetadataTab).values(), key=metaSortKey)
     with open(trackDb, 'w') as fh:
         writeTrackDb(fh, clsMetas, trackDir, parent)
 
 ##
 # check for BAMs matching metadata
 ##
 def listBams(trackDir, capture):
     pat = osp.join(trackDir, capture, '*.bam')
     bams = glob.glob(pat)
     if len(bams) == 0:
         raise Exception(f"no BAMs found matching {pat}")
     return frozenset(bams)