ad92b87bb799c20abccadf1f923972c1a9b6a6e7 max Fri Oct 17 06:39:16 2025 -0700 adding gnomad mpc track, ref #36531 diff --git src/hg/makeDb/gnomad/gnomadMpcToBed.py src/hg/makeDb/gnomad/gnomadMpcToBed.py new file mode 100644 index 00000000000..58c5c8c63a4 --- /dev/null +++ src/hg/makeDb/gnomad/gnomadMpcToBed.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +import sys +import numpy as np + +# from chatGPT +viridis_colors = [ + "68,1,84", + "71,20,102", + "71,37,117", + "69,54,129", + "63,69,135", + "57,85,139", + "50,98,141", + "44,112,142", + "39,124,142", + "34,137,141", + "31,150,139", + "31,163,134", + "41,175,127", + "61,187,116", + "85,198,102", + "116,208,84", + "149,215,63", + "186,222,39", + "220,226,24", + "253,231,36" +] + +allVals = [] +allRows = [] + +for line in sys.stdin: + if line.strip() == "" or line.startswith("transcript"): + continue # skip empty or header lines + + fields = line.strip().split("\t") + + # Parse fields + chrom = "chr"+fields[3].split(":")[0] + start = int(fields[3].split(":")[1]) + end = int(fields[4].split(":")[1]) + + trans, gene, gene_id = fields[:3] + start_aa, stop_aa, obs, exp, oe, chisq, pval = fields[5:] + + oe = float(oe) + exp = float(exp) + chisq = float(chisq) + pval = float(pval) + + # Compute score + #score = 1000 if oe > 1.0 else oe * 1000 + score = 0 + allVals.append(oe) + + # Print formatted output + row = [chrom, start, end, gene+"-"+start_aa+"-"+stop_aa, str(int(score)), ".", start, end, "0", gene, gene_id, trans, start_aa, stop_aa, obs, exp, oe, chisq, pval] + allRows.append(row) + +viridis_colors = list(reversed(viridis_colors)) + +#allVals.sort(reverse=True) + +# Compute quantile bins +numbers = allVals +num_colors = len(viridis_colors) +# Compute quantiles for bin edges +quantile_edges = np.quantile(numbers, np.linspace(0, 1, num_colors + 1)) + +# Assign each number to a quantile bin +quantile_indices = np.digitize(numbers, quantile_edges, right=True) - 1 + +# Clip indices to valid range +quantile_indices = np.clip(quantile_indices, 0, num_colors - 1) + +# Annotate each number with corresponding Viridis color +valToCol = dict([(num, viridis_colors[idx]) for num, idx in zip(numbers, quantile_indices)]) + +for row in allRows: + oe = row[-3] + color = valToCol[oe] + row = [str(x) for x in row] + row[8] = color + print("\t".join(row)) +