46849f2053370ff9c0ff9594936d95a51124b162 markd Mon Aug 4 13:17:44 2025 -0700 adjustments to clsLongReadRna trackDb to address composite behavior problems diff --git src/hg/makeDb/outside/clsLongReadRna/clsTrackTool src/hg/makeDb/outside/clsLongReadRna/clsTrackTool index 1d00d29f1f2..2abca8b574c 100755 --- src/hg/makeDb/outside/clsLongReadRna/clsTrackTool +++ src/hg/makeDb/outside/clsLongReadRna/clsTrackTool @@ -342,36 +342,36 @@ post_capture_pacbio_models=Post-capture_PacBio_models \\ pre_capture_ont_reads=Pre-capture_ONT_reads \\ pre_capture_pacbio_reads=Pre-capture_PacBio_reads \\ post_capture_ont_reads=Post-capture_ONT_reads \\ post_capture_pacbio_reads=Post-capture_PacBio_reads dimensions dimX=type dimY=sample html clsLongReadRna.html """ TARGETS_TDB = """\ track targets_view view targets_view parent clsLongReadRnaTrack shortLabel Targets - visibility hide + visibility dense type bigBed noScoreFilter on track target_regions - parent targets_view on + parent targets_view off subGroups view=targets_view sample=combined type=targets shortLabel CLS targets longLabel CLS target regions labelFields name defaultLabelFields none type bigBed 6 + color 0,100,0 bigDataUrl {bigDataUrl} priority 1 """ MODELS_TDB = """\ track models_view view models_view @@ -396,64 +396,64 @@ SAMPLE_MODELS_VIEW_TDB = """\ track sample_models_view view sample_models_view parent clsLongReadRnaTrack shortLabel Sample models visibility squish type bigBed noScoreFilter on """ SAMPLE_MODELS_TDB = """\ track {sample}_models parent sample_models_view on - shortLabel {sample} models - longLabel {sample} transcript models + shortLabel {shortLabel} + longLabel {longLabel} bigDataUrl {bigDataUrl} type bigBed 12 + color 100,22,180 subGroups view=sample_models_view sample={sample} type=models """ EXPR_READS_VIEW_TDB = """\ track per_expr_reads_view - parent clsLongReadRnaTrack on view per_expr_reads_view + parent clsLongReadRnaTrack on shortLabel Reads visibility hide type bam """ EXPR_READS_TDB = """\ track {track} parent per_expr_reads_view on shortLabel {shortLabel} longLabel {longLabel} bigDataUrl {bigDataUrl} type bam subGroups view=per_expr_reads_view sample={sample} type={type} """ EXPR_MODELS_VIEW_TDB = """\ track per_expr_models_view + view per_expr_models_view parent clsLongReadRnaTrack on - view per_exp_models_view shortLabel Models visibility hide type bam noScoreFilter on """ EXPR_MODELS_TDB = """\ track {track} parent per_expr_models_view on shortLabel {shortLabel} longLabel {longLabel} bigDataUrl {bigDataUrl} type bigBed 12 + noScoreFilter on @@ -478,66 +478,77 @@ if sdef not in done: defs.append(sdef) done.add(sdef) return " \\\n".join(defs) def getTrackName(clsMeta, dtype): # post_ccap_cpool_pb_reads return (clsMeta.stage + '_' + clsMeta.tissue + '_' + platform_desc_map[clsMeta.platform] + '_' + shortCapture(clsMeta).lower() + '_' + dtype).lower() def getShortLabel(clsMeta, dtype): return clsMetaToDesc(clsMeta, short=True) + " " + dtype def getLongLabel(clsMeta, dtype): + if dtype == "models": + dtype = "transcript models" return clsMetaToDesc(clsMeta) + " " + dtype def getType(clsMeta, dtype): return (clsMeta.capture.replace('-', '_').lower() + '_' + platform_desc_map[clsMeta.platform].lower() + '_' + dtype) - def write_expr_data_trackdb(fh, clsMeta, dtype, bigDataUrl, template): fh.write(template.format(track=getTrackName(clsMeta, dtype), sample=sampleGrpName(clsMeta), + stage=stageTissueName(clsMeta), shortLabel=getShortLabel(clsMeta, dtype), longLabel=getLongLabel(clsMeta, dtype), type=getType(clsMeta, dtype), bigDataUrl=bigDataUrl)) -def write_sample_model_trackdb(fh, stage_tissue, sample, bigDataUrl): - fh.write(SAMPLE_MODELS_TDB.format(sample=sample, +def write_sample_model_trackdb(fh, clsMetaST, bigDataUrl): + "unique stage/tissue clsMeta" + fh.write(SAMPLE_MODELS_TDB.format(sample=sampleGrpName(clsMetaST), + shortLabel=clsMetaToSampleDesc(clsMetaST, short=True) + " models", + longLabel=clsMetaToSampleDesc(clsMetaST, short=False) + " transcript models", bigDataUrl=bigDataUrl)) -def build_stage_tissue_samples_list(clsMetas): - return set((stageTissueName(clsMeta), sampleGrpName(clsMeta)) - for clsMeta in clsMetas) - +def filter_stage_tissue_samples(clsMetas): + # only returns clsMetas on per stage/tissue + clsMetaSubset = [] + done = set() + for clsMeta in clsMetas: + stageTissue = (stageTissueName(clsMeta), sampleGrpName(clsMeta)) + if stageTissue not in done: + clsMetaSubset.append(clsMeta) + done.add(stageTissue) + return clsMetaSubset def writeTrackDb(fh, clsMetas, trackDir, parent): parentSpec = '' if parent is None else f'parent {parent}\n' fh.write(COMPOSITE_TDB.format(sampleSubgroups=buildSampleSubGroupDefs(clsMetas), parent=parentSpec)) fh.write(TARGETS_TDB.format(bigDataUrl=osp.join(trackDir, "cls-targets.bb"))) fh.write(MODELS_TDB.format(bigDataUrl=osp.join(trackDir, "cls-models.bb"))) fh.write(SAMPLE_MODELS_VIEW_TDB) - for stage_tissue, sample in build_stage_tissue_samples_list(clsMetas): - write_sample_model_trackdb(fh, stage_tissue, sample, - osp.join(trackDir, stageTissueToBigBedPath(stage_tissue))) + for clsMeta in filter_stage_tissue_samples(clsMetas): + write_sample_model_trackdb(fh, clsMeta, + osp.join(trackDir, stageTissueToBigBedPath(stageTissueName(clsMeta)))) 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, clsMeta.sid)