nancyH commited on
Commit
89dec6b
·
verified ·
1 Parent(s): 9801f83

Add Supp. Fig. 2b JS-distance analysis: code, region/background BEDs, FASTAs, results, baseline tokenizers

Browse files
.gitattributes CHANGED
@@ -34,3 +34,11 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  figures/supp_fig2a_motif.png filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  figures/supp_fig2a_motif.png filter=lfs diff=lfs merge=lfs -text
37
+ data/background/region_union.bed filter=lfs diff=lfs merge=lfs -text
38
+ data/fastas/enhancer.fa filter=lfs diff=lfs merge=lfs -text
39
+ data/fastas/exon.fa filter=lfs diff=lfs merge=lfs -text
40
+ data/fastas/promoter.fa filter=lfs diff=lfs merge=lfs -text
41
+ data/fastas/random.fa filter=lfs diff=lfs merge=lfs -text
42
+ data/regions/enhancers_dels.clean.merged.bed filter=lfs diff=lfs merge=lfs -text
43
+ figures/combined_panel_a_b.png filter=lfs diff=lfs merge=lfs -text
44
+ figures/js_vs_random_heatmap.png filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,23 +1,49 @@
1
- # Supplementary: tokenizer motif-preservation benchmark
2
 
3
- Code, data, and results behind Supplementary Figure 2a (perfect match rate and motif fragmentation).
 
 
 
 
4
 
5
  ## Layout
6
- - `data/motifs.txt` — 904 unique motifs; wildcard (`*`) motifs are expanded to all A/C/G/T variants (≤5 wildcards), giving 3,737 test sequences of length 5–12.
7
- - `code/motif_coverage_eval.py` — tokenizes each variant (no special tokens) and computes per-tokenizer metrics.
8
- - `code/dna_motif_tokenizer.py` — wrapper exposing DNAMotifTokenizer through a `tokenizers`-like interface (seed = 42).
9
- - `code/plot_supp_fig2a_motif.py` — draws the figure from `results/summary_by_tokenizer.csv`.
10
- - `tokenizers/` — cCRE-guided BPE, motif-guided BPE, and DNAMotifTokenizer files. DNABERT-2 and Grover tokenizers come from their original releases.
11
- - `results/` — per-variant results, per-tokenizer summary, and per-motif consistency.
12
- - `figures/` — Supplementary Figure 2a.
13
-
14
- ## Metrics
15
- - **Perfect match rate** — % of motif variants encoded as exactly one token.
16
- - **Avg. tokens per motif** — mean number of tokens per motif variant (lower = less fragmentation).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  ## Reproduce
19
  ```
 
20
  python code/motif_coverage_eval.py --motif-file data/motifs.txt --output-dir results
21
  python code/plot_supp_fig2a_motif.py
 
 
 
 
22
  ```
23
- `motif_coverage_eval.py` resolves tokenizer paths relative to its original project layout (see `DEFAULT_TOKENIZER_PATHS` / `CUSTOM_TOKENIZER_PATHS`); point them at `tokenizers/` before running.
 
1
+ # Supplementary: tokenizer characterization benchmark
2
 
3
+ Code, data, and results behind Supplementary Figure 2:
4
+ - **(a)** motif preservation — perfect match rate and motif fragmentation
5
+ - **(b)** Jensen–Shannon distance between functional-region token distributions and a matched random genomic background
6
+
7
+ Tokenizers compared: DNABERT-2 BPE, Grover BPE, cCRE-guided BPE, motif-guided BPE, DNAMotifTokenizer.
8
 
9
  ## Layout
10
+
11
+ ### Shared
12
+ - `tokenizers/` — all five tokenizers used in both panels
13
+ - `DNAbert2_tokenizer.json`, `Grover_tokenizer.json` — original DNABERT-2 / Grover tokenizers
14
+ - `cCRE_region_BPE_tokenizer.json`, `motif_region_BPE_tokenizer.json`
15
+ - `DNAMotifTokenizer/` — trie, motif list, vocab (loaded via `code/dna_motif_tokenizer.py`, seed = 42)
16
+ - `code/dna_motif_tokenizer.py` — wrapper exposing DNAMotifTokenizer through a `tokenizers`-like interface
17
+
18
+ ### Panel a — motif preservation
19
+ - `data/motifs.txt` — 904 unique motifs; wildcard (`*`) motifs are expanded to all A/C/G/T variants (≤5 wildcards), giving 3,737 test sequences of length 5–12
20
+ - `code/motif_coverage_eval.py` — tokenizes each variant (no special tokens) and computes per-tokenizer metrics
21
+ - `results/summary_by_tokenizer.csv` — per-tokenizer metrics plotted in the figure
22
+ - `results/motif_variant_results.csv`, `results/consistency_by_motif.csv` — per-variant and per-motif detail
23
+ - `code/plot_supp_fig2a_motif.py` → `figures/supp_fig2a_motif.{pdf,png}`
24
+
25
+ Metrics:
26
+ - **Perfect match rate** — % of motif variants encoded as exactly one token
27
+ - **Avg. tokens per motif** — mean number of tokens per motif variant (lower = less fragmentation)
28
+
29
+ ### Panel b — region vs random-background JS distance
30
+ - `data/regions/` — promoter (2 kb), enhancer, and exon interval sets (merged BED)
31
+ - `data/background/` — `chrom.sizes` (canonical hg38 chromosomes), `region_union.bed` (union of the three region sets, used as exclusion), `random.bed` (exon intervals shuffled into the non-region genome with `bedtools shuffle -seed 42`, so total bp matches exon)
32
+ - `data/fastas/` — hg38 sequences for promoter, enhancer, exon, and random (`bedtools getfasta`)
33
+ - `code/js_vs_random_heatmap.py` — builds the background, tokenizes each FASTA, and computes the Jensen–Shannon distance (base 2) between each region's token-frequency distribution and the random background
34
+ - `results/js_vs_random_matrix.csv` — 5 tokenizers × 3 regions matrix plotted in the figure
35
+ - `results/js_vs_random.log` — run log with token counts per region and tokenizer
36
+ - `figures/js_vs_random_heatmap.{pdf,png}` — heatmap from `js_vs_random_heatmap.py`
37
+ - `code/plot_combined_panel_a_b.py` → `figures/combined_panel_a_b.{pdf,png}` — combined draft of panels a and b
38
 
39
  ## Reproduce
40
  ```
41
+ # Panel a
42
  python code/motif_coverage_eval.py --motif-file data/motifs.txt --output-dir results
43
  python code/plot_supp_fig2a_motif.py
44
+
45
+ # Panel b (requires bedtools and hg38.fa from UCSC)
46
+ python code/js_vs_random_heatmap.py # full run
47
+ python code/js_vs_random_heatmap.py --plot-only # redraw from results/js_vs_random_matrix.csv
48
  ```
49
+ `motif_coverage_eval.py`, `js_vs_random_heatmap.py`, and `plot_combined_panel_a_b.py` are uploaded as run and resolve paths relative to the original project layout (`DEFAULT_TOKENIZER_PATHS`, `ROOT`, `REGION_BEDS`, etc.); point them at `tokenizers/` and `data/` before running. The hg38 reference genome is not included (public, ~3 GB); the extracted FASTAs in `data/fastas/` are what the analysis tokenized.
code/js_vs_random_heatmap.py ADDED
@@ -0,0 +1,241 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Simplified region-vs-random JS-distance heatmap.
3
+
4
+ For each tokenizer, compute token-frequency distributions for
5
+ promoter, enhancer, exon, and a random background (genomic shuffle
6
+ excluding those three region sets, total bp matched to exon).
7
+
8
+ Metric: Jensen-Shannon distance (sqrt of JS divergence) of each
9
+ region distribution vs the random-background distribution.
10
+
11
+ Output: 5 (tokenizers) x 3 (regions) heatmap.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import argparse
17
+ import subprocess
18
+ from collections import Counter
19
+ from pathlib import Path
20
+
21
+ import matplotlib.pyplot as plt
22
+ import numpy as np
23
+ import pandas as pd
24
+ import seaborn as sns
25
+ from matplotlib.colors import LinearSegmentedColormap
26
+ from scipy.spatial.distance import jensenshannon
27
+ from tokenizers import Tokenizer
28
+
29
+ ROOT = Path("/data/n5huang/dna_token")
30
+ GENOME = ROOT / "hg38.fa"
31
+ FAI = ROOT / "hg38.fa.fai"
32
+ OUTDIR = ROOT / "enrichment_analysis"
33
+
34
+ REGION_BEDS = {
35
+ "promoter": ROOT / "promoters_2kb.clean.merged.bed",
36
+ "enhancer": ROOT / "enhancers_dels.clean.merged.bed",
37
+ "exon": ROOT / "exon.clean.merged.bed",
38
+ }
39
+
40
+ TOKENIZER_PATHS = {
41
+ "DNAbert2": ROOT / "pretrain/models/DNAbert2_Pretrained/tokenizer.json",
42
+ "Grover": ROOT / "pretrain/models/Grover_Pretrained/tokenizer.json",
43
+ "cCRE_region_BPE": ROOT / "tokenizer_files/cCRE_region_BPE_tokenizer.json",
44
+ "motif_region_BPE": ROOT / "tokenizer_files/motif_region_BPE_tokenizer.json",
45
+ }
46
+
47
+ CUSTOM_TOKENIZER_PATHS = {
48
+ "DNAMotifTokenizer": ROOT / "tokenizer_files/DNAMotifTokenizer_official",
49
+ }
50
+
51
+ REGIONS = ["promoter", "enhancer", "exon"]
52
+
53
+ TITLE_MAP = {
54
+ "merge_len2": "EvoLen (5120)",
55
+ "DNAbert2": "DNABERT-2",
56
+ "Grover": "Grover",
57
+ "cCRE_region_BPE": "cCRE-Region BPE",
58
+ "motif_region_BPE": "Motif-Region BPE",
59
+ "DNAMotifTokenizer": "DNAMotif",
60
+ }
61
+
62
+
63
+ def make_chrom_sizes(fai: Path, out: Path) -> None:
64
+ if out.exists() and out.stat().st_size > 0:
65
+ return
66
+ with fai.open() as fh, out.open("w") as oh:
67
+ for line in fh:
68
+ name, size, *_ = line.rstrip("\n").split("\t")
69
+ # keep only canonical autosomes + X/Y (skip alt/random/unlocalized)
70
+ if "_" in name or name in ("chrM", "chrEBV"):
71
+ continue
72
+ oh.write(f"{name}\t{size}\n")
73
+
74
+
75
+ def union_bed(beds: list[Path], out: Path) -> None:
76
+ if out.exists() and out.stat().st_size > 0:
77
+ return
78
+ cmd = "cat " + " ".join(str(b) for b in beds) + \
79
+ f" | cut -f1-3 | bedtools sort -i - | bedtools merge -i - > {out}"
80
+ subprocess.run(cmd, shell=True, check=True)
81
+
82
+
83
+ def shuffle_to_random(exon_bed: Path, excl_bed: Path, chrom_sizes: Path, out: Path) -> None:
84
+ """Shuffle exon intervals into genome excluding region union -> same bp as exon."""
85
+ if out.exists() and out.stat().st_size > 0:
86
+ return
87
+ subprocess.run(
88
+ f"bedtools shuffle -i {exon_bed} -g {chrom_sizes} -excl {excl_bed} -seed 42 "
89
+ f"| bedtools sort -i - | bedtools merge -i - > {out}",
90
+ shell=True, check=True,
91
+ )
92
+
93
+
94
+ def get_fasta(bed: Path, out_fa: Path) -> None:
95
+ if out_fa.exists() and out_fa.stat().st_size > 0:
96
+ return
97
+ subprocess.run(
98
+ f"bedtools getfasta -fi {GENOME} -bed {bed} -fo {out_fa}",
99
+ shell=True, check=True,
100
+ )
101
+
102
+
103
+ def tokenize_fasta(fasta: Path, tok: Tokenizer, batch_size: int = 2000) -> Counter:
104
+ counts: Counter = Counter()
105
+ sequences: list[str] = []
106
+ seq_parts: list[str] = []
107
+ with fasta.open() as f:
108
+ for line in f:
109
+ line = line.strip()
110
+ if line.startswith(">"):
111
+ if seq_parts:
112
+ sequences.append("".join(seq_parts))
113
+ seq_parts = []
114
+ else:
115
+ seq_parts.append(line.upper().replace("N", ""))
116
+ if seq_parts:
117
+ sequences.append("".join(seq_parts))
118
+ sequences = [s for s in sequences if s]
119
+
120
+ for i in range(0, len(sequences), batch_size):
121
+ batch = sequences[i:i + batch_size]
122
+ for enc in tok.encode_batch(batch):
123
+ counts.update(enc.tokens)
124
+ return counts
125
+
126
+
127
+ def js_distance(p_counts: Counter, q_counts: Counter) -> float:
128
+ vocab = sorted(set(p_counts) | set(q_counts))
129
+ p = np.array([p_counts.get(t, 0) for t in vocab], dtype=float)
130
+ q = np.array([q_counts.get(t, 0) for t in vocab], dtype=float)
131
+ p_sum = p.sum() or 1.0
132
+ q_sum = q.sum() or 1.0
133
+ p /= p_sum
134
+ q /= q_sum
135
+ # scipy's jensenshannon already returns the distance (sqrt of divergence), base=2 below
136
+ return float(jensenshannon(p, q, base=2))
137
+
138
+
139
+ def main() -> None:
140
+ parser = argparse.ArgumentParser()
141
+ parser.add_argument("--plot-only", action="store_true")
142
+ args = parser.parse_args()
143
+
144
+ OUTDIR.mkdir(exist_ok=True)
145
+ beds_dir = OUTDIR / "beds_simple"
146
+ fasta_dir = OUTDIR / "fastas_simple"
147
+ beds_dir.mkdir(exist_ok=True)
148
+ fasta_dir.mkdir(exist_ok=True)
149
+
150
+ matrix_csv = OUTDIR / "js_vs_random_matrix.csv"
151
+
152
+ if args.plot_only:
153
+ df = pd.read_csv(matrix_csv, index_col=0)
154
+ else:
155
+ chrom_sizes = beds_dir / "chrom.sizes"
156
+ make_chrom_sizes(FAI, chrom_sizes)
157
+
158
+ # Build region union to use as exclusion
159
+ excl = beds_dir / "region_union.bed"
160
+ union_bed(list(REGION_BEDS.values()), excl)
161
+
162
+ # Shuffle exon into non-region genome -> "random" background
163
+ random_bed = beds_dir / "random.bed"
164
+ shuffle_to_random(REGION_BEDS["exon"], excl, chrom_sizes, random_bed)
165
+
166
+ # Extract FASTA for each set
167
+ fastas: dict[str, Path] = {}
168
+ for name, bed in REGION_BEDS.items():
169
+ fa = fasta_dir / f"{name}.fa"
170
+ get_fasta(bed, fa)
171
+ fastas[name] = fa
172
+ fa_rand = fasta_dir / "random.fa"
173
+ get_fasta(random_bed, fa_rand)
174
+ fastas["random"] = fa_rand
175
+
176
+ rows = []
177
+ tok_names_ordered = list(TOKENIZER_PATHS.keys()) + list(CUSTOM_TOKENIZER_PATHS.keys())
178
+ # Load HF tokenizers
179
+ loaded = {n: Tokenizer.from_file(str(p)) for n, p in TOKENIZER_PATHS.items()}
180
+ # Load custom tokenizers
181
+ import sys
182
+ sys.path.insert(0, str(ROOT / "tokenizer_evaluation"))
183
+ from dna_motif_tokenizer import DNAMotifTokenizer, Trie, TrieNode
184
+ sys.modules["__main__"].Trie = Trie
185
+ sys.modules["__main__"].TrieNode = TrieNode
186
+ for n, p in CUSTOM_TOKENIZER_PATHS.items():
187
+ loaded[n] = DNAMotifTokenizer(str(p), seed=42)
188
+
189
+ for tok_name in tok_names_ordered:
190
+ print(f"\nTokenizing with {tok_name}...")
191
+ tok = loaded[tok_name]
192
+ counts = {}
193
+ for name, fa in fastas.items():
194
+ counts[name] = tokenize_fasta(fa, tok)
195
+ print(f" {name}: {sum(counts[name].values()):,} tokens")
196
+ row = {r: js_distance(counts[r], counts["random"]) for r in REGIONS}
197
+ rows.append(row)
198
+ df = pd.DataFrame(rows, index=tok_names_ordered, columns=REGIONS)
199
+ df.to_csv(matrix_csv)
200
+ print(f"\nSaved matrix: {matrix_csv}")
201
+ print(df.round(4))
202
+
203
+ # Plot
204
+ display_index = [TITLE_MAP.get(n, n) for n in df.index]
205
+ df_display = df.copy()
206
+ df_display.index = display_index
207
+
208
+ cmap = LinearSegmentedColormap.from_list("evo_heat", ["white", "#7EDCC5", "#636E72"])
209
+ fig, ax = plt.subplots(figsize=(22, 32), constrained_layout=True)
210
+ sns.heatmap(
211
+ df_display,
212
+ ax=ax,
213
+ annot=True,
214
+ fmt=".4f",
215
+ annot_kws={"size": 56, "fontweight": "bold"},
216
+ cmap=cmap,
217
+ vmin=0.0,
218
+ vmax=float(df_display.values.max()) or 0.001,
219
+ linewidths=0.5,
220
+ cbar_kws={"label": "Jensen-Shannon distance"},
221
+ )
222
+ ax.set_title("Region vs random-genome token-frequency separation",
223
+ fontsize=60, fontweight="bold", pad=30)
224
+ ax.set_xlabel("Genomic region", fontsize=56)
225
+ ax.set_ylabel("Tokenizer", fontsize=56)
226
+ ax.tick_params(axis="x", labelsize=48)
227
+ ax.tick_params(axis="y", labelsize=48, rotation=0)
228
+ cbar = ax.collections[0].colorbar
229
+ cbar.ax.tick_params(labelsize=48)
230
+ cbar.set_label("Jensen-Shannon distance", size=56)
231
+
232
+ out_pdf = OUTDIR / "js_vs_random_heatmap.pdf"
233
+ out_png = OUTDIR / "js_vs_random_heatmap.png"
234
+ fig.savefig(out_pdf, dpi=300, bbox_inches="tight")
235
+ fig.savefig(out_png, dpi=300, bbox_inches="tight")
236
+ print(f"Saved: {out_pdf}")
237
+ print(f"Saved: {out_png}")
238
+
239
+
240
+ if __name__ == "__main__":
241
+ main()
code/plot_combined_panel_a_b.py ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Combined figure: (a) Motif Preservation (A1 + A2 stacked) and (b) JS heatmap, in one row."""
3
+
4
+ import os
5
+ import numpy as np
6
+ import pandas as pd
7
+ import matplotlib.pyplot as plt
8
+ import matplotlib as mpl
9
+ import seaborn as sns
10
+ from matplotlib.colors import LinearSegmentedColormap
11
+ from matplotlib.gridspec import GridSpec, GridSpecFromSubplotSpec
12
+
13
+ # ── Data ──
14
+ df_summary = pd.read_csv(
15
+ "/data/n5huang/dna_token/tokenizer_evaluation/motif_eval_outputs_new/summary_by_tokenizer.csv"
16
+ )
17
+ df_js = pd.read_csv(
18
+ "/data/n5huang/dna_token/enrichment_analysis/js_vs_random_matrix.csv",
19
+ index_col=0,
20
+ )
21
+
22
+ # ── Method config (shared) ──
23
+ METHODS = ["DNAbert2", "Grover", "cCRE_region_BPE", "motif_region_BPE", "DNAMotifTokenizer"]
24
+ DISPLAY_NAMES = {
25
+ "DNAbert2": "DNABERT-2",
26
+ "Grover": "Grover",
27
+ "cCRE_region_BPE": "cCRE-Region BPE",
28
+ "motif_region_BPE": "Motif-Region BPE",
29
+ "DNAMotifTokenizer": "DNAMotif",
30
+ }
31
+ METHOD_COLORS = {
32
+ "DNAbert2": "#6C5CE7", # purple (from C)
33
+ "Grover": "#E74C3C", # red (from T)
34
+ "cCRE_region_BPE": "#52BE80", # green (from A)
35
+ "motif_region_BPE": "#F4D03F", # yellow (Token Characterization)
36
+ "DNAMotifTokenizer": "#E67E22", # orange (Fine-tuning Ability)
37
+ }
38
+ HEATMAP_REGIONS = ["promoter", "enhancer", "exon"]
39
+ JS_INDEX_DISPLAY = [DISPLAY_NAMES.get(n, n) for n in df_js.index]
40
+
41
+ # ── Plot style ──
42
+ mpl.rcParams.update({
43
+ "font.family": "sans-serif",
44
+ "font.size": 58,
45
+ "axes.labelsize": 64,
46
+ "axes.titlesize": 66,
47
+ "axes.titleweight": "bold",
48
+ "xtick.labelsize": 58,
49
+ "ytick.labelsize": 58,
50
+ })
51
+
52
+
53
+ def get_value(method, source_df, col_name):
54
+ row = source_df[source_df["Tokenizer"] == method]
55
+ if len(row) == 0:
56
+ return float("nan")
57
+ return row[col_name].values[0]
58
+
59
+
60
+ def draw_bar_panel(ax, title, ylabel, col_name, higher_better, title_pad=30, ylabel_y=0.5):
61
+ vals = [get_value(m, df_summary, col_name) for m in METHODS]
62
+ colors = [METHOD_COLORS[m] for m in METHODS]
63
+ x_labels = [DISPLAY_NAMES[m] for m in METHODS]
64
+ x = np.arange(len(METHODS)) * 0.3
65
+ bars = ax.bar(x, vals, color=colors, edgecolor="white", linewidth=0.5, alpha=0.85, width=0.2)
66
+
67
+ for i, v in enumerate(vals):
68
+ if np.isnan(v):
69
+ continue
70
+ y_off = max(vals) * 0.02
71
+ fmt = f"{v:.2f}" if abs(v) >= 1 else f"{v:.4f}"
72
+ ax.text(x[i], v + y_off, fmt, ha="center", va="bottom", fontsize=62, fontweight="bold")
73
+
74
+ ax.set_xticks(x)
75
+ ax.set_xticklabels(x_labels, rotation=15, ha="right")
76
+ ax.set_xlim(x[0] - 0.2, x[-1] + 0.2)
77
+ ax.set_ylabel(ylabel)
78
+ # Pin ylabel position in axes coords so A1 and A2 line up regardless of tick-label widths.
79
+ ax.yaxis.set_label_coords(-0.08, ylabel_y)
80
+ ax.set_title(title, pad=title_pad)
81
+ ax.tick_params(axis="x", pad=10)
82
+ ax.tick_params(axis="y", pad=15)
83
+ ax.spines["top"].set_visible(False)
84
+ ax.spines["right"].set_visible(False)
85
+ ax.grid(axis="y", alpha=0.3, linewidth=0.8)
86
+
87
+ valid = [v for v in vals if not np.isnan(v)]
88
+ if valid:
89
+ best = (np.nanargmax if higher_better else np.nanargmin)(vals)
90
+ bars[best].set_edgecolor("black")
91
+ bars[best].set_linewidth(2)
92
+
93
+
94
+ # ── Figure layout: 1 row, 2 top-level columns ──
95
+ fig = plt.figure(figsize=(50, 26))
96
+ gs = GridSpec(1, 2, figure=fig, width_ratios=[1, 0.9], wspace=0.30)
97
+
98
+ # Left column (panel a): 2 stacked subplots
99
+ gs_a = GridSpecFromSubplotSpec(2, 1, subplot_spec=gs[0, 0], hspace=0.8)
100
+ ax_a1 = fig.add_subplot(gs_a[0, 0])
101
+ ax_a2 = fig.add_subplot(gs_a[1, 0])
102
+
103
+ # Right column (panel b): heatmap
104
+ ax_b = fig.add_subplot(gs[0, 1])
105
+
106
+ # ── Draw panel a (A1 + A2) ──
107
+ draw_bar_panel(ax_a1, "Perfect Match Rate", "Perfect match rate (%)",
108
+ "Perfect_Match_Rate", higher_better=True, title_pad=80, ylabel_y=0.35)
109
+ draw_bar_panel(ax_a2, "Motif Fragmentation", "Avg tokens per motif",
110
+ "Avg_Tokens_Per_Motif", higher_better=False, title_pad=80)
111
+
112
+ # ── Draw panel b (heatmap) ──
113
+ df_disp = df_js.copy()
114
+ df_disp.index = JS_INDEX_DISPLAY
115
+ cmap = LinearSegmentedColormap.from_list("evo_heat", ["white", "#AED6F1", "#5DADE2", "#2E86C1"])
116
+ sns.heatmap(
117
+ df_disp,
118
+ ax=ax_b,
119
+ annot=True,
120
+ fmt=".4f",
121
+ annot_kws={"size": 62, "fontweight": "bold"}, # matches bar-value annotation size
122
+ cmap=cmap,
123
+ vmin=0.0,
124
+ vmax=float(df_disp.values.max()) or 0.001,
125
+ linewidths=0.5,
126
+ cbar_kws={"label": "Jensen-Shannon distance"},
127
+ )
128
+ ax_b.set_title("Region vs random-genome separation",
129
+ fontsize=66, fontweight="bold", pad=80)
130
+ ax_b.set_xlabel("Genomic region", fontsize=64, labelpad=15)
131
+ ax_b.set_ylabel("")
132
+ ax_b.tick_params(axis="x", labelsize=58)
133
+ ax_b.tick_params(axis="y", labelsize=58, rotation=0)
134
+ cbar = ax_b.collections[0].colorbar
135
+ cbar.ax.tick_params(labelsize=58)
136
+ cbar.set_label("Jensen-Shannon distance", size=64)
137
+
138
+ fig.subplots_adjust(left=0.06, right=0.98, top=0.88, bottom=0.10)
139
+
140
+ # ─��� Panel labels (a), (b) on same line as titles ──
141
+ # Use axes-relative y so they line up with titles (which sit just above each axes top).
142
+ ax_a1.text(-0.08, 1.234, "(a)", transform=ax_a1.transAxes,
143
+ fontsize=66, fontweight="bold", va="center", ha="center")
144
+ ax_b.text(-0.30, 1.083, "(b)", transform=ax_b.transAxes,
145
+ fontsize=66, fontweight="bold", va="center", ha="center")
146
+
147
+ out_dir = "/data/n5huang/dna_token/paper_figures"
148
+ os.makedirs(out_dir, exist_ok=True)
149
+ out = os.path.join(out_dir, "combined_panel_a_b.pdf")
150
+ fig.savefig(out, dpi=300)
151
+ fig.savefig(out.replace(".pdf", ".png"), dpi=80)
152
+ print(f"Saved: {out}")
153
+ print(f"Saved: {out.replace('.pdf', '.png')}")
154
+ plt.close(fig)
data/background/chrom.sizes ADDED
@@ -0,0 +1,592 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ chr1 248956422
2
+ chr2 242193529
3
+ chr3 198295559
4
+ chr4 190214555
5
+ chr5 181538259
6
+ chr6 170805979
7
+ chr7 159345973
8
+ chr8 145138636
9
+ chr9 138394717
10
+ chr10 133797422
11
+ chr11 135086622
12
+ chr12 133275309
13
+ chr13 114364328
14
+ chr14 107043718
15
+ chr15 101991189
16
+ chr16 90338345
17
+ chr17 83257441
18
+ chr18 80373285
19
+ chr19 58617616
20
+ chr20 64444167
21
+ chr21 46709983
22
+ chr22 50818468
23
+ chrX 156040895
24
+ chrY 57227415
25
+ GL000008.2 209709
26
+ GL000009.2 201709
27
+ GL000194.1 191469
28
+ GL000195.1 182896
29
+ GL000205.2 185591
30
+ GL000208.1 92689
31
+ GL000213.1 164239
32
+ GL000214.1 137718
33
+ GL000216.2 176608
34
+ GL000218.1 161147
35
+ GL000219.1 179198
36
+ GL000220.1 161802
37
+ GL000221.1 155397
38
+ GL000224.1 179693
39
+ GL000225.1 211173
40
+ GL000226.1 15008
41
+ KQ759759.1 196940
42
+ KN538364.1 415308
43
+ KQ759762.1 101037
44
+ KQ031383.1 467143
45
+ KN538369.1 541038
46
+ JH159136.1 200998
47
+ JH159137.1 191409
48
+ KZ208923.1 48370
49
+ KZ208924.1 209722
50
+ KQ031387.1 320750
51
+ KV766195.1 140877
52
+ KZ208916.1 1046838
53
+ KN538360.1 460100
54
+ KZ208920.1 690932
55
+ KZ208906.1 330031
56
+ KN196484.1 370917
57
+ KN196476.1 305979
58
+ KQ983257.1 230434
59
+ KN196479.1 330164
60
+ KV575245.1 154723
61
+ KZ208917.1 64689
62
+ KZ208911.1 242796
63
+ KN196473.1 166200
64
+ KZ559108.1 305244
65
+ KN196487.1 101150
66
+ KQ759760.1 315610
67
+ KN196475.1 451168
68
+ KV880766.1 156998
69
+ KV880767.1 265876
70
+ KQ090016.1 245716
71
+ KV880764.1 142129
72
+ KN538361.1 305542
73
+ KN196474.1 122022
74
+ KZ559109.1 279644
75
+ KQ090022.1 181958
76
+ KN196478.1 268330
77
+ KZ559104.1 105527
78
+ KN196480.1 277797
79
+ KQ090028.1 407387
80
+ KN196483.1 35455
81
+ KN196481.1 108875
82
+ KN538363.1 365499
83
+ KN538362.1 208149
84
+ KQ031385.1 373699
85
+ KV766192.1 411654
86
+ KQ031386.1 165718
87
+ KQ031388.1 179932
88
+ KN538365.1 14347
89
+ KN538366.1 85284
90
+ KN538367.1 420164
91
+ KN538370.1 86533
92
+ KN538373.1 148762
93
+ KZ559113.1 480415
94
+ KV880765.1 468267
95
+ KV766196.1 281919
96
+ KN538371.1 206320
97
+ KQ031384.1 481245
98
+ KN538372.1 356766
99
+ KQ090021.1 264545
100
+ KN196482.1 211377
101
+ KZ559115.1 230843
102
+ KZ208914.1 165120
103
+ KZ208922.1 93070
104
+ KQ458386.1 405389
105
+ KV575244.1 673059
106
+ KZ559100.1 44955
107
+ KZ208912.1 589656
108
+ KZ208915.1 6367528
109
+ KV880768.1 1927115
110
+ KN196472.1 186494
111
+ GL383545.1 179254
112
+ GL383546.1 309802
113
+ KI270824.1 181496
114
+ KI270825.1 188315
115
+ KQ090020.1 185507
116
+ GL383547.1 154407
117
+ KN538368.1 203552
118
+ KI270826.1 186169
119
+ KI270827.1 67707
120
+ KZ559111.1 181167
121
+ KI270829.1 204059
122
+ KI270830.1 177092
123
+ KI270831.1 296895
124
+ KI270832.1 210133
125
+ KI270902.1 106711
126
+ KI270903.1 214625
127
+ KZ559110.1 301637
128
+ KI270927.1 218612
129
+ GL877875.1 167313
130
+ GL383549.1 120804
131
+ GL383550.2 169178
132
+ KQ090023.1 109323
133
+ GL877876.1 408271
134
+ GL383552.1 138655
135
+ KI270904.1 572349
136
+ GL383553.2 152874
137
+ KI270835.1 238139
138
+ GL383551.1 184319
139
+ KI270837.1 40090
140
+ KI270833.1 76061
141
+ KI270834.1 119498
142
+ KI270836.1 56134
143
+ KZ208918.1 174808
144
+ KZ559112.1 154139
145
+ KI270838.1 306913
146
+ KI270839.1 180306
147
+ KI270840.1 191684
148
+ KI270841.1 169134
149
+ KI270842.1 37287
150
+ KI270843.1 103832
151
+ KQ090024.1 168146
152
+ KQ090025.1 123480
153
+ KI270844.1 322166
154
+ KI270845.1 180703
155
+ KI270846.1 1351393
156
+ KI270847.1 1511111
157
+ KZ208919.1 171798
158
+ KI270852.1 478999
159
+ KI270848.1 327382
160
+ GL383554.1 296527
161
+ KI270906.1 196384
162
+ GL383555.2 388773
163
+ KI270851.1 263054
164
+ KI270849.1 244917
165
+ KI270905.1 5161414
166
+ KI270850.1 430880
167
+ KQ031389.1 2365364
168
+ KI270853.1 2659700
169
+ GL383556.1 192462
170
+ GL383557.1 89672
171
+ KI270855.1 232857
172
+ KQ031390.1 169136
173
+ KI270856.1 63982
174
+ KQ090027.1 267463
175
+ KQ090026.1 59016
176
+ KZ208921.1 78609
177
+ KI270854.1 134193
178
+ KI270909.1 325800
179
+ KV766197.1 246895
180
+ KZ559114.1 116753
181
+ GL383563.3 375691
182
+ KI270861.1 196688
183
+ GL383564.2 133151
184
+ GL000258.2 1821992
185
+ KI270860.1 178921
186
+ KI270907.1 137721
187
+ KI270862.1 391357
188
+ GL383565.1 223995
189
+ KI270908.1 1423190
190
+ KV766198.1 276292
191
+ KI270910.1 157099
192
+ GL383566.1 90219
193
+ JH159146.1 278131
194
+ JH159147.1 70345
195
+ JH159148.1 88070
196
+ KI270857.1 2877074
197
+ KI270858.1 235827
198
+ KI270859.1 108763
199
+ KZ559116.1 163186
200
+ GL383567.1 289831
201
+ GL383568.1 104552
202
+ GL383569.1 167950
203
+ GL383570.1 164789
204
+ GL383571.1 198278
205
+ GL383572.1 159547
206
+ KI270863.1 167999
207
+ KI270864.1 111737
208
+ KQ458385.1 205101
209
+ KI270912.1 174061
210
+ KI270911.1 157710
211
+ KV575254.1 99845
212
+ KV575246.1 163926
213
+ KV575256.1 223118
214
+ KV575253.1 166713
215
+ KV575252.1 178197
216
+ KV575255.1 161095
217
+ KV575259.1 171263
218
+ KI270917.1 190932
219
+ KI270918.1 123111
220
+ KI270919.1 170701
221
+ KV575247.1 170206
222
+ KV575248.1 168131
223
+ KV575250.1 241058
224
+ KV575249.1 293522
225
+ KV575257.1 100553
226
+ KI270920.1 198005
227
+ KI270921.1 282224
228
+ KI270922.1 187935
229
+ KI270923.1 189352
230
+ KI270929.1 186203
231
+ KI270930.1 200773
232
+ KI270931.1 170148
233
+ KI270932.1 215732
234
+ KI270933.1 170537
235
+ KI270882.1 248807
236
+ KI270883.1 170399
237
+ KI270884.1 157053
238
+ KI270885.1 171027
239
+ KI270886.1 204239
240
+ KI270887.1 209512
241
+ KI270888.1 155532
242
+ KV575258.1 156965
243
+ KV575251.1 159285
244
+ KV575260.1 145691
245
+ KI270889.1 170698
246
+ KI270890.1 184499
247
+ GL000209.2 177381
248
+ KI270891.1 170680
249
+ KI270914.1 205194
250
+ KI270915.1 170665
251
+ KI270916.1 184516
252
+ GL949746.1 987716
253
+ GL949747.2 729520
254
+ GL949748.2 1064304
255
+ GL949749.2 1091841
256
+ GL949750.2 1066390
257
+ GL949751.2 1002683
258
+ GL949752.1 987100
259
+ GL949753.2 796479
260
+ GL383573.1 385657
261
+ GL383574.1 155864
262
+ GL383575.2 170222
263
+ KI270866.1 43156
264
+ GL383576.1 188024
265
+ KI270867.1 233762
266
+ KI270865.1 52969
267
+ KI270938.1 1066800
268
+ KI270868.1 61734
269
+ KI270760.1 109528
270
+ KI270762.1 354444
271
+ GL383518.1 182439
272
+ KI270759.1 425601
273
+ KI270766.1 256271
274
+ GL383519.1 110268
275
+ KI270761.1 165834
276
+ KQ458382.1 141019
277
+ GL383520.2 366580
278
+ KI270763.1 911658
279
+ KQ458383.1 349938
280
+ KI270765.1 185285
281
+ KI270764.1 50258
282
+ KQ983255.1 278659
283
+ KQ458384.1 212205
284
+ KV880763.1 551020
285
+ KZ208904.1 166136
286
+ KZ208905.1 140355
287
+ KI270892.1 162212
288
+ GL383577.2 128386
289
+ KI270869.1 118774
290
+ KI270870.1 183433
291
+ KI270871.1 58661
292
+ GL383578.2 63917
293
+ GL383579.2 201197
294
+ GL383580.2 74653
295
+ GL383581.2 116689
296
+ KI270872.1 82692
297
+ KI270873.1 143900
298
+ KI270874.1 166743
299
+ GL383582.2 162811
300
+ GL383583.2 96924
301
+ KI270875.1 259914
302
+ KI270876.1 263666
303
+ KI270877.1 101331
304
+ KI270878.1 186262
305
+ KI270879.1 304135
306
+ KB663609.1 74013
307
+ KI270928.1 176103
308
+ KN196485.1 156562
309
+ KN196486.1 153027
310
+ KQ458387.1 155930
311
+ KQ458388.1 174749
312
+ KQ759761.1 145162
313
+ KI270769.1 120616
314
+ KI270767.1 161578
315
+ GL383521.1 143390
316
+ KI270772.1 133041
317
+ GL383522.1 123821
318
+ KI270770.1 136240
319
+ KI270893.1 161218
320
+ KI270894.1 214158
321
+ GL582966.2 96131
322
+ KI270773.1 70887
323
+ KI270776.1 174166
324
+ KI270768.1 110099
325
+ KI270774.1 223625
326
+ KI270771.1 110395
327
+ KI270775.1 138019
328
+ KQ983256.1 535088
329
+ KZ208907.1 181658
330
+ KZ208908.1 140361
331
+ JH636055.2 173151
332
+ GL383526.1 180671
333
+ KI270779.1 205312
334
+ KI270777.1 173649
335
+ KI270782.1 162429
336
+ KI270783.1 109187
337
+ KI270778.1 248252
338
+ KI270895.1 162896
339
+ KZ208909.1 175849
340
+ KI270780.1 224108
341
+ KI270924.1 166540
342
+ KI270781.1 113034
343
+ KI270934.1 163458
344
+ KZ559105.1 195063
345
+ KI270935.1 197351
346
+ KZ559101.1 164041
347
+ KI270936.1 164170
348
+ KZ559102.1 197752
349
+ KI270937.1 165607
350
+ KZ559103.1 302885
351
+ KI270784.1 184404
352
+ KQ983258.1 205407
353
+ KV766193.1 420675
354
+ GL383527.1 164536
355
+ KI270790.1 220246
356
+ GL383528.1 376187
357
+ KI270787.1 111943
358
+ GL000257.2 586476
359
+ KI270785.1 119912
360
+ KQ090013.1 90922
361
+ KI270786.1 244096
362
+ KI270788.1 158965
363
+ KI270789.1 205944
364
+ KI270896.1 378547
365
+ KI270925.1 555799
366
+ KQ090014.1 163749
367
+ KQ090015.1 236512
368
+ GL383532.1 82728
369
+ KI270897.1 1144418
370
+ GL383531.1 173459
371
+ GL949742.1 226852
372
+ GL339449.2 1612928
373
+ KI270795.1 131892
374
+ KI270791.1 195710
375
+ GL383530.1 101241
376
+ KI270898.1 130957
377
+ KI270792.1 179043
378
+ KI270796.1 172708
379
+ KI270793.1 126136
380
+ KI270794.1 164558
381
+ KN196477.1 139087
382
+ KV575243.1 362221
383
+ KZ208910.1 135987
384
+ KQ090017.1 82315
385
+ GL383533.1 124736
386
+ KB021644.2 185823
387
+ KI270797.1 197536
388
+ KI270798.1 271782
389
+ KI270799.1 152148
390
+ KI270800.1 175808
391
+ KI270801.1 870480
392
+ KI270802.1 75005
393
+ KI270758.1 76752
394
+ GL000250.2 4672374
395
+ GL000251.2 4795265
396
+ GL000252.2 4604811
397
+ GL000253.2 4677643
398
+ GL000254.2 4827813
399
+ GL000255.2 4606388
400
+ GL000256.2 4929269
401
+ KI270804.1 157952
402
+ KI270806.1 158166
403
+ GL383534.2 119183
404
+ KI270805.1 209988
405
+ KI270899.1 190869
406
+ KI270809.1 209586
407
+ KI270803.1 1111570
408
+ KI270807.1 126434
409
+ KZ559106.1 172555
410
+ KZ208913.1 680662
411
+ KI270808.1 271455
412
+ KI270811.1 292436
413
+ KI270814.1 141812
414
+ KI270810.1 374415
415
+ KI270812.1 282736
416
+ KI270815.1 132244
417
+ KI270813.1 300230
418
+ KI270816.1 305841
419
+ KI270818.1 145606
420
+ KI270817.1 158983
421
+ KI270900.1 318687
422
+ KI270819.1 133535
423
+ KI270901.1 136959
424
+ KI270820.1 36640
425
+ KI270926.1 229282
426
+ KZ559107.1 103072
427
+ KI270821.1 985506
428
+ KI270822.1 624492
429
+ GL383539.1 162988
430
+ GL383540.1 71551
431
+ GL383541.1 171286
432
+ GL383542.1 60032
433
+ KI270823.1 439082
434
+ KQ090018.1 163882
435
+ KQ090019.1 134099
436
+ KI270880.1 284869
437
+ KI270881.1 144206
438
+ KI270913.1 274009
439
+ KV766199.1 188004
440
+ KI270302.1 2274
441
+ KI270303.1 1942
442
+ KI270304.1 2165
443
+ KI270305.1 1472
444
+ KI270310.1 1201
445
+ KI270311.1 12399
446
+ KI270312.1 998
447
+ KI270315.1 2276
448
+ KI270316.1 1444
449
+ KI270317.1 37690
450
+ KI270320.1 4416
451
+ KI270322.1 21476
452
+ KI270329.1 1040
453
+ KI270330.1 1652
454
+ KI270333.1 2699
455
+ KI270334.1 1368
456
+ KI270335.1 1048
457
+ KI270336.1 1026
458
+ KI270337.1 1121
459
+ KI270338.1 1428
460
+ KI270340.1 1428
461
+ KI270362.1 3530
462
+ KI270363.1 1803
463
+ KI270364.1 2855
464
+ KI270366.1 8320
465
+ KI270371.1 2805
466
+ KI270372.1 1650
467
+ KI270373.1 1451
468
+ KI270374.1 2656
469
+ KI270375.1 2378
470
+ KI270376.1 1136
471
+ KI270378.1 1048
472
+ KI270379.1 1045
473
+ KI270381.1 1930
474
+ KI270382.1 4215
475
+ KI270383.1 1750
476
+ KI270384.1 1658
477
+ KI270385.1 990
478
+ KI270386.1 1788
479
+ KI270387.1 1537
480
+ KI270388.1 1216
481
+ KI270389.1 1298
482
+ KI270390.1 2387
483
+ KI270391.1 1484
484
+ KI270392.1 971
485
+ KI270393.1 1308
486
+ KI270394.1 970
487
+ KI270395.1 1143
488
+ KI270396.1 1880
489
+ KI270411.1 2646
490
+ KI270412.1 1179
491
+ KI270414.1 2489
492
+ KI270417.1 2043
493
+ KI270418.1 2145
494
+ KI270419.1 1029
495
+ KI270420.1 2321
496
+ KI270422.1 1445
497
+ KI270423.1 981
498
+ KI270424.1 2140
499
+ KI270425.1 1884
500
+ KI270429.1 1361
501
+ KI270435.1 92983
502
+ KI270438.1 112505
503
+ KI270442.1 392061
504
+ KI270448.1 7992
505
+ KI270465.1 1774
506
+ KI270466.1 1233
507
+ KI270467.1 3920
508
+ KI270468.1 4055
509
+ KI270507.1 5353
510
+ KI270508.1 1951
511
+ KI270509.1 2318
512
+ KI270510.1 2415
513
+ KI270511.1 8127
514
+ KI270512.1 22689
515
+ KI270515.1 6361
516
+ KI270516.1 1300
517
+ KI270517.1 3253
518
+ KI270518.1 2186
519
+ KI270519.1 138126
520
+ KI270521.1 7642
521
+ KI270522.1 5674
522
+ KI270528.1 2983
523
+ KI270529.1 1899
524
+ KI270530.1 2168
525
+ KI270538.1 91309
526
+ KI270539.1 993
527
+ KI270544.1 1202
528
+ KI270548.1 1599
529
+ KI270579.1 31033
530
+ KI270580.1 1553
531
+ KI270581.1 7046
532
+ KI270582.1 6504
533
+ KI270583.1 1400
534
+ KI270584.1 4513
535
+ KI270587.1 2969
536
+ KI270588.1 6158
537
+ KI270589.1 44474
538
+ KI270590.1 4685
539
+ KI270591.1 5796
540
+ KI270593.1 3041
541
+ KI270706.1 175055
542
+ KI270707.1 32032
543
+ KI270708.1 127682
544
+ KI270709.1 66860
545
+ KI270710.1 40176
546
+ KI270711.1 42210
547
+ KI270712.1 176043
548
+ KI270713.1 40745
549
+ KI270714.1 41717
550
+ KI270715.1 161471
551
+ KI270716.1 153799
552
+ KI270717.1 40062
553
+ KI270718.1 38054
554
+ KI270719.1 176845
555
+ KI270720.1 39050
556
+ KI270721.1 100316
557
+ KI270722.1 194050
558
+ KI270723.1 38115
559
+ KI270724.1 39555
560
+ KI270725.1 172810
561
+ KI270726.1 43739
562
+ KI270727.1 448248
563
+ KI270728.1 1872759
564
+ KI270729.1 280839
565
+ KI270730.1 112551
566
+ KI270731.1 150754
567
+ KI270732.1 41543
568
+ KI270733.1 179772
569
+ KI270734.1 165050
570
+ KI270735.1 42811
571
+ KI270736.1 181920
572
+ KI270737.1 103838
573
+ KI270738.1 99375
574
+ KI270739.1 73985
575
+ KI270740.1 37240
576
+ KI270741.1 157432
577
+ KI270742.1 186739
578
+ KI270743.1 210658
579
+ KI270744.1 168472
580
+ KI270745.1 41891
581
+ KI270746.1 66486
582
+ KI270747.1 198735
583
+ KI270748.1 93321
584
+ KI270749.1 158759
585
+ KI270750.1 148850
586
+ KI270751.1 150742
587
+ KI270752.1 27745
588
+ KI270753.1 62944
589
+ KI270754.1 40191
590
+ KI270755.1 36723
591
+ KI270756.1 79590
592
+ KI270757.1 71251
data/background/random.bed ADDED
The diff for this file is too large to render. See raw diff
 
data/background/region_union.bed ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:170c641b152b0405def079ef1a79cfdca6a6fc915f449cab7cecc6a8dbd4e84c
3
+ size 39227263
data/fastas/enhancer.fa ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0f98c1d46ae623caf1f128fe47da58746fa3cb2587d24af058cac8dea94d2ed7
3
+ size 432577659
data/fastas/exon.fa ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:86f7a41eaac27fbcefc0ed229e19c1e7fb97d7f5311858841bd45e2ef9f94c14
3
+ size 202189721
data/fastas/promoter.fa ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7f9d5c0997ee9662710fd0ba41e00db70a82bde794a33e5ae0f439e3a887b4be
3
+ size 61863838
data/fastas/random.fa ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3624642aa274d4162f0d2defb9b9d91d28e292c7a5b518448b34e37c7720beba
3
+ size 192538591
data/regions/enhancers_dels.clean.merged.bed ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:05d56b3f533818c9b8e283c107b2f7aa7176d4140625f1cf97b04e9915ead343
3
+ size 35011481
data/regions/exon.clean.merged.bed ADDED
The diff for this file is too large to render. See raw diff
 
data/regions/promoters_2kb.clean.merged.bed ADDED
The diff for this file is too large to render. See raw diff
 
figures/combined_panel_a_b.pdf ADDED
Binary file (45.4 kB). View file
 
figures/combined_panel_a_b.png ADDED

Git LFS Details

  • SHA256: 715fb9f3c13d96b4422a8b6012e0aad15d8384f642b4f4955afb678b7812027b
  • Pointer size: 131 Bytes
  • Size of remote file: 627 kB
figures/js_vs_random_heatmap.pdf ADDED
Binary file (49.5 kB). View file
 
figures/js_vs_random_heatmap.png ADDED

Git LFS Details

  • SHA256: baaa32e4146df4c3117ee118ba9d7b8100235bab23f23468df462eb4d3afacc8
  • Pointer size: 132 Bytes
  • Size of remote file: 1.13 MB
results/js_vs_random.log ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Tokenizing with DNAbert2...
3
+ promoter: 12,334,449 tokens
4
+ enhancer: 81,613,472 tokens
5
+ exon: 39,014,803 tokens
6
+ random: 32,378,182 tokens
7
+
8
+ Tokenizing with Grover...
9
+ promoter: 15,845,529 tokens
10
+ enhancer: 102,460,422 tokens
11
+ exon: 49,411,407 tokens
12
+ random: 41,049,736 tokens
13
+
14
+ Tokenizing with cCRE_region_BPE...
15
+ promoter: 12,016,320 tokens
16
+ enhancer: 77,428,659 tokens
17
+ exon: 37,654,355 tokens
18
+ random: 31,601,798 tokens
19
+
20
+ Tokenizing with motif_region_BPE...
21
+ promoter: 13,091,114 tokens
22
+ enhancer: 83,353,540 tokens
23
+ exon: 40,627,217 tokens
24
+ random: 33,666,692 tokens
25
+
26
+ Tokenizing with DNAMotifTokenizer...
27
+ promoter: 19,543,735 tokens
28
+ enhancer: 126,777,588 tokens
29
+ exon: 61,613,820 tokens
30
+ random: 52,419,078 tokens
31
+
32
+ Saved matrix: /data/n5huang/dna_token/enrichment_analysis/js_vs_random_matrix.csv
33
+ promoter enhancer exon
34
+ DNAbert2 0.2700 0.1530 0.1658
35
+ Grover 0.2465 0.1292 0.1440
36
+ cCRE_region_BPE 0.2677 0.1527 0.1705
37
+ motif_region_BPE 0.2575 0.1444 0.1626
38
+ DNAMotifTokenizer 0.2047 0.1049 0.1227
39
+ Saved: /data/n5huang/dna_token/enrichment_analysis/js_vs_random_heatmap.pdf
40
+ Saved: /data/n5huang/dna_token/enrichment_analysis/js_vs_random_heatmap.png
results/js_vs_random_matrix.csv ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ ,promoter,enhancer,exon
2
+ DNAbert2,0.2700467663332958,0.1530054987812049,0.16576869998910815
3
+ Grover,0.24645834442494668,0.12922598364042234,0.14397131314322673
4
+ cCRE_region_BPE,0.2676769058033193,0.1526687523936217,0.17054039887560096
5
+ motif_region_BPE,0.2574520985639099,0.1443754257311266,0.16263857681147068
6
+ DNAMotifTokenizer,0.20469228698318975,0.10486649424832019,0.12271872972266289
tokenizers/DNAbert2_tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizers/Grover_tokenizer.json ADDED
@@ -0,0 +1,1359 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": "1.0",
3
+ "truncation": null,
4
+ "padding": null,
5
+ "added_tokens": [
6
+ {
7
+ "id": 0,
8
+ "content": "[PAD]",
9
+ "single_word": false,
10
+ "lstrip": false,
11
+ "rstrip": false,
12
+ "normalized": false,
13
+ "special": true
14
+ },
15
+ {
16
+ "id": 1,
17
+ "content": "[UNK]",
18
+ "single_word": false,
19
+ "lstrip": false,
20
+ "rstrip": false,
21
+ "normalized": false,
22
+ "special": true
23
+ },
24
+ {
25
+ "id": 2,
26
+ "content": "[CLS]",
27
+ "single_word": false,
28
+ "lstrip": false,
29
+ "rstrip": false,
30
+ "normalized": false,
31
+ "special": true
32
+ },
33
+ {
34
+ "id": 3,
35
+ "content": "[SEP]",
36
+ "single_word": false,
37
+ "lstrip": false,
38
+ "rstrip": false,
39
+ "normalized": false,
40
+ "special": true
41
+ },
42
+ {
43
+ "id": 4,
44
+ "content": "[MASK]",
45
+ "single_word": false,
46
+ "lstrip": false,
47
+ "rstrip": false,
48
+ "normalized": false,
49
+ "special": true
50
+ }
51
+ ],
52
+ "normalizer": null,
53
+ "pre_tokenizer": {
54
+ "type": "Whitespace"
55
+ },
56
+ "post_processor": {
57
+ "type": "TemplateProcessing",
58
+ "single": [
59
+ {
60
+ "SpecialToken": {
61
+ "id": "[CLS]",
62
+ "type_id": 0
63
+ }
64
+ },
65
+ {
66
+ "Sequence": {
67
+ "id": "A",
68
+ "type_id": 0
69
+ }
70
+ },
71
+ {
72
+ "SpecialToken": {
73
+ "id": "[SEP]",
74
+ "type_id": 0
75
+ }
76
+ }
77
+ ],
78
+ "pair": [
79
+ {
80
+ "SpecialToken": {
81
+ "id": "[CLS]",
82
+ "type_id": 0
83
+ }
84
+ },
85
+ {
86
+ "Sequence": {
87
+ "id": "A",
88
+ "type_id": 0
89
+ }
90
+ },
91
+ {
92
+ "SpecialToken": {
93
+ "id": "[SEP]",
94
+ "type_id": 0
95
+ }
96
+ },
97
+ {
98
+ "Sequence": {
99
+ "id": "B",
100
+ "type_id": 1
101
+ }
102
+ },
103
+ {
104
+ "SpecialToken": {
105
+ "id": "[SEP]",
106
+ "type_id": 1
107
+ }
108
+ }
109
+ ],
110
+ "special_tokens": {
111
+ "[CLS]": {
112
+ "id": "[CLS]",
113
+ "ids": [
114
+ 2
115
+ ],
116
+ "tokens": [
117
+ "[CLS]"
118
+ ]
119
+ },
120
+ "[SEP]": {
121
+ "id": "[SEP]",
122
+ "ids": [
123
+ 3
124
+ ],
125
+ "tokens": [
126
+ "[SEP]"
127
+ ]
128
+ }
129
+ }
130
+ },
131
+ "decoder": null,
132
+ "model": {
133
+ "type": "BPE",
134
+ "dropout": null,
135
+ "unk_token": "[UNK]",
136
+ "continuing_subword_prefix": null,
137
+ "end_of_word_suffix": null,
138
+ "fuse_unk": false,
139
+ "byte_fallback": false,
140
+ "vocab": {
141
+ "[PAD]": 0,
142
+ "[UNK]": 1,
143
+ "[CLS]": 2,
144
+ "[SEP]": 3,
145
+ "[MASK]": 4,
146
+ "A": 5,
147
+ "C": 6,
148
+ "G": 7,
149
+ "T": 8,
150
+ "TT": 9,
151
+ "AA": 10,
152
+ "TG": 11,
153
+ "AG": 12,
154
+ "CC": 13,
155
+ "TC": 14,
156
+ "AC": 15,
157
+ "GG": 16,
158
+ "ATT": 17,
159
+ "AT": 18,
160
+ "ATG": 19,
161
+ "GC": 20,
162
+ "TAA": 21,
163
+ "TCC": 22,
164
+ "ACC": 23,
165
+ "AAAA": 24,
166
+ "AGG": 25,
167
+ "ATC": 26,
168
+ "AGC": 27,
169
+ "TTC": 28,
170
+ "AAG": 29,
171
+ "TTTT": 30,
172
+ "TGC": 31,
173
+ "TGG": 32,
174
+ "AAC": 33,
175
+ "TTG": 34,
176
+ "TAG": 35,
177
+ "TAC": 36,
178
+ "CCC": 37,
179
+ "TATT": 38,
180
+ "TGGG": 39,
181
+ "TAT": 40,
182
+ "AGAA": 41,
183
+ "AGGG": 42,
184
+ "TTTC": 43,
185
+ "AGGC": 44,
186
+ "AGCC": 45,
187
+ "ATAA": 46,
188
+ "TGTG": 47,
189
+ "TTGG": 48,
190
+ "ATTC": 49,
191
+ "AAGG": 50,
192
+ "ACAC": 51,
193
+ "TCCC": 52,
194
+ "TCTC": 53,
195
+ "TATG": 54,
196
+ "TTTG": 55,
197
+ "TTCC": 56,
198
+ "AGTG": 57,
199
+ "ATGG": 58,
200
+ "AGAC": 59,
201
+ "AAAC": 60,
202
+ "ACCC": 61,
203
+ "TGCC": 62,
204
+ "ATTG": 63,
205
+ "ATCC": 64,
206
+ "AGAG": 65,
207
+ "ATGC": 66,
208
+ "ATAC": 67,
209
+ "TCTG": 68,
210
+ "TTAA": 69,
211
+ "TCAC": 70,
212
+ "TGAA": 71,
213
+ "TGGC": 72,
214
+ "TTGC": 73,
215
+ "TAAG": 74,
216
+ "TATC": 75,
217
+ "TAAC": 76,
218
+ "AAAG": 77,
219
+ "TTAC": 78,
220
+ "AAGC": 79,
221
+ "GGG": 80,
222
+ "TAGC": 81,
223
+ "GGC": 82,
224
+ "ATAT": 83,
225
+ "TACC": 84,
226
+ "AACC": 85,
227
+ "AATG": 86,
228
+ "TAGG": 87,
229
+ "GCC": 88,
230
+ "ATATT": 89,
231
+ "AGTC": 90,
232
+ "TTTTC": 91,
233
+ "AAAAC": 92,
234
+ "TGAC": 93,
235
+ "TTTAA": 94,
236
+ "AAAAG": 95,
237
+ "AATC": 96,
238
+ "TGTC": 97,
239
+ "TTATT": 98,
240
+ "ATAG": 99,
241
+ "TGAG": 100,
242
+ "TTTTG": 101,
243
+ "AAATT": 102,
244
+ "AATT": 103,
245
+ "AATAA": 104,
246
+ "TTTCC": 105,
247
+ "ACAG": 106,
248
+ "TCAG": 107,
249
+ "AAATG": 108,
250
+ "TGGGC": 109,
251
+ "ACTC": 110,
252
+ "AGGCC": 111,
253
+ "TTAG": 112,
254
+ "ACTG": 113,
255
+ "ACG": 114,
256
+ "ATATG": 115,
257
+ "TGGCC": 116,
258
+ "ATTTC": 117,
259
+ "ACAA": 118,
260
+ "ATCTC": 119,
261
+ "TATTC": 120,
262
+ "TGTAA": 121,
263
+ "ACTT": 122,
264
+ "ATGCC": 123,
265
+ "TAAAA": 124,
266
+ "AAAAAAAA": 125,
267
+ "ATTCC": 126,
268
+ "TTTAG": 127,
269
+ "TCCCC": 128,
270
+ "TTTGC": 129,
271
+ "TTCCC": 130,
272
+ "TGGGG": 131,
273
+ "TTCTC": 132,
274
+ "ATAAAA": 133,
275
+ "AGAAG": 134,
276
+ "TTTTTTTT": 135,
277
+ "ACCCC": 136,
278
+ "AGGGC": 137,
279
+ "ACCTC": 138,
280
+ "AGATG": 139,
281
+ "ATTAC": 140,
282
+ "AAGCC": 141,
283
+ "GGCC": 142,
284
+ "AGGAG": 143,
285
+ "TCAA": 144,
286
+ "ATTGC": 145,
287
+ "TATTG": 146,
288
+ "ATAAC": 147,
289
+ "ATATC": 148,
290
+ "TTTAC": 149,
291
+ "ATGGC": 150,
292
+ "AAGGC": 151,
293
+ "ACCAC": 152,
294
+ "GTG": 153,
295
+ "ATCCC": 154,
296
+ "AGAAC": 155,
297
+ "ATTTT": 156,
298
+ "TTGCC": 157,
299
+ "AAATC": 158,
300
+ "ATAAG": 159,
301
+ "TTGGC": 160,
302
+ "TGGAG": 161,
303
+ "ATGGG": 162,
304
+ "AAAGC": 163,
305
+ "AGGGG": 164,
306
+ "ATCAC": 165,
307
+ "ATTTG": 166,
308
+ "AATTC": 167,
309
+ "TGCAC": 168,
310
+ "TTTGG": 169,
311
+ "TCG": 170,
312
+ "AGAGC": 171,
313
+ "AAAGG": 172,
314
+ "GGGC": 173,
315
+ "TTGGG": 174,
316
+ "AGAAAA": 175,
317
+ "TATCC": 176,
318
+ "TCTCC": 177,
319
+ "ATAGC": 178,
320
+ "TGAGG": 179,
321
+ "TTTATT": 180,
322
+ "AGTAA": 181,
323
+ "AGAGG": 182,
324
+ "TCTTC": 183,
325
+ "ACATT": 184,
326
+ "TCCTG": 185,
327
+ "AGCCC": 186,
328
+ "TATGC": 187,
329
+ "TTAAAA": 188,
330
+ "AGATT": 189,
331
+ "TTAAC": 190,
332
+ "GGGG": 191,
333
+ "AAGAC": 192,
334
+ "TCATT": 193,
335
+ "TTCTG": 194,
336
+ "AGACC": 195,
337
+ "AAGGG": 196,
338
+ "ATACC": 197,
339
+ "TTTAT": 198,
340
+ "AAGTG": 199,
341
+ "TTATG": 200,
342
+ "AAGAA": 201,
343
+ "TAGCC": 202,
344
+ "TTCAC": 203,
345
+ "AGGTG": 204,
346
+ "TTGAA": 205,
347
+ "ATCTG": 206,
348
+ "AGCAC": 207,
349
+ "TGCTG": 208,
350
+ "AAACC": 209,
351
+ "ATGTG": 210,
352
+ "TTTTCC": 211,
353
+ "AGTTC": 212,
354
+ "TCCTC": 213,
355
+ "TATGG": 214,
356
+ "AATAC": 215,
357
+ "AGTGG": 216,
358
+ "TAGGC": 217,
359
+ "AGCTC": 218,
360
+ "ATAGG": 219,
361
+ "TTATC": 220,
362
+ "TTAAG": 221,
363
+ "TACCC": 222,
364
+ "TTTTTG": 223,
365
+ "AACAC": 224,
366
+ "TGCTC": 225,
367
+ "AGATC": 226,
368
+ "TCCCAGC": 227,
369
+ "AGCTG": 228,
370
+ "AATAG": 229,
371
+ "TCTTG": 230,
372
+ "AGTGGC": 231,
373
+ "ATTGG": 232,
374
+ "TACTC": 233,
375
+ "TAAAC": 234,
376
+ "AATGG": 235,
377
+ "AGGTC": 236,
378
+ "AGGAC": 237,
379
+ "TTGTG": 238,
380
+ "TATAC": 239,
381
+ "ATTTTC": 240,
382
+ "ATATAA": 241,
383
+ "AGGCTG": 242,
384
+ "ATTTAA": 243,
385
+ "AGTT": 244,
386
+ "AGTAG": 245,
387
+ "ATGAC": 246,
388
+ "AATGC": 247,
389
+ "TCCAC": 248,
390
+ "CCCC": 249,
391
+ "ATGTC": 250,
392
+ "AACTC": 251,
393
+ "TTTTTC": 252,
394
+ "TAAGC": 253,
395
+ "AAGTC": 254,
396
+ "TGGTG": 255,
397
+ "TATAA": 256,
398
+ "AGTGC": 257,
399
+ "TAAGG": 258,
400
+ "ACCTG": 259,
401
+ "TTAGC": 260,
402
+ "AAATAA": 261,
403
+ "TGCCTC": 262,
404
+ "AATCC": 263,
405
+ "TTGGCC": 264,
406
+ "TAGGG": 265,
407
+ "TGGAC": 266,
408
+ "TTGTC": 267,
409
+ "AACCC": 268,
410
+ "TTACC": 269,
411
+ "TAACC": 270,
412
+ "AATTTT": 271,
413
+ "AAAGAA": 272,
414
+ "ATTATT": 273,
415
+ "AGCG": 274,
416
+ "AAAAAC": 275,
417
+ "TAATG": 276,
418
+ "TTGAC": 277,
419
+ "AGTCC": 278,
420
+ "AACTG": 279,
421
+ "AGTTG": 280,
422
+ "AATTG": 281,
423
+ "TCTGC": 282,
424
+ "TTAGG": 283,
425
+ "TACAC": 284,
426
+ "AGAAGG": 285,
427
+ "ATATTC": 286,
428
+ "AAAACC": 287,
429
+ "AAAAGC": 288,
430
+ "TGCCC": 289,
431
+ "ACTGC": 290,
432
+ "AGAAGC": 291,
433
+ "TAATAA": 292,
434
+ "AATATT": 293,
435
+ "ACCATG": 294,
436
+ "TGGTC": 295,
437
+ "TTTTGC": 296,
438
+ "AACG": 297,
439
+ "TACTG": 298,
440
+ "ACACACAC": 299,
441
+ "ATTTTG": 300,
442
+ "TCCG": 301,
443
+ "TGCG": 302,
444
+ "AAAATG": 303,
445
+ "ACATG": 304,
446
+ "TCAGC": 305,
447
+ "ATCG": 306,
448
+ "AGTAC": 307,
449
+ "TTTTGG": 308,
450
+ "AATAT": 309,
451
+ "AGAGAA": 310,
452
+ "TTCG": 311,
453
+ "TCCAGCC": 312,
454
+ "ATATAC": 313,
455
+ "TCACC": 314,
456
+ "AAAAGG": 315,
457
+ "TGTGTGTG": 316,
458
+ "TCATC": 317,
459
+ "TGCTGGG": 318,
460
+ "TGAAG": 319,
461
+ "TGTAG": 320,
462
+ "TGTGG": 321,
463
+ "AAAAATT": 322,
464
+ "ACTTC": 323,
465
+ "TTCCCC": 324,
466
+ "ATAGAA": 325,
467
+ "TTGCCC": 326,
468
+ "AGGAGG": 327,
469
+ "TTTCCC": 328,
470
+ "TATATT": 329,
471
+ "ACCG": 330,
472
+ "ACTAC": 331,
473
+ "TCACTGC": 332,
474
+ "GCG": 333,
475
+ "TTTGTG": 334,
476
+ "ACAGC": 335,
477
+ "TCATG": 336,
478
+ "AGTTTT": 337,
479
+ "AGGAA": 338,
480
+ "TTTATG": 339,
481
+ "ATATTG": 340,
482
+ "TGATG": 341,
483
+ "TCTAA": 342,
484
+ "TGTGC": 343,
485
+ "AGGAAG": 344,
486
+ "TTTGGG": 345,
487
+ "TGTTC": 346,
488
+ "AGCCCC": 347,
489
+ "AGTTTC": 348,
490
+ "AGGCTGG": 349,
491
+ "TTTGCC": 350,
492
+ "ATTTCC": 351,
493
+ "ATACAC": 352,
494
+ "AAAATAA": 353,
495
+ "TAGAC": 354,
496
+ "AGGAGAA": 355,
497
+ "TGAGC": 356,
498
+ "TGGAA": 357,
499
+ "TTTTTAA": 358,
500
+ "AGCCTCCC": 359,
501
+ "ATGAA": 360,
502
+ "TTTAAG": 361,
503
+ "TCTGG": 362,
504
+ "TTTATC": 363,
505
+ "TTATAA": 364,
506
+ "TGATT": 365,
507
+ "AACAA": 366,
508
+ "TAGCTGGG": 367,
509
+ "TCAAG": 368,
510
+ "AAAAAA": 369,
511
+ "ACTTTGGG": 370,
512
+ "TATTCC": 371,
513
+ "TCAGG": 372,
514
+ "AACAG": 373,
515
+ "TTCTTC": 374,
516
+ "TGTGGC": 375,
517
+ "ATATGC": 376,
518
+ "ATTACAGGC": 377,
519
+ "AGGGGC": 378,
520
+ "AGGGCC": 379,
521
+ "TTATTC": 380,
522
+ "ATATCC": 381,
523
+ "TGTAATCCCAGC": 382,
524
+ "TACG": 383,
525
+ "AGAAAC": 384,
526
+ "TGTCC": 385,
527
+ "AGATGG": 386,
528
+ "TGTGCC": 387,
529
+ "TTTCTC": 388,
530
+ "TGAAC": 389,
531
+ "AGTCTC": 390,
532
+ "TGTTG": 391,
533
+ "ATTTTTT": 392,
534
+ "AAGAAG": 393,
535
+ "TGGGGC": 394,
536
+ "AGCAGC": 395,
537
+ "GCCC": 396,
538
+ "TTTGGC": 397,
539
+ "AGGCTGAGGC": 398,
540
+ "TGGGCC": 399,
541
+ "TTCTCC": 400,
542
+ "TAGAA": 401,
543
+ "TGGAGTGC": 402,
544
+ "ATTAA": 403,
545
+ "AGTGCC": 404,
546
+ "TGTCTC": 405,
547
+ "ATATGG": 406,
548
+ "ACATC": 407,
549
+ "TGGGGG": 408,
550
+ "TGACC": 409,
551
+ "ACTCC": 410,
552
+ "TAAAAC": 411,
553
+ "AGATAA": 412,
554
+ "TAATTTT": 413,
555
+ "TCAAC": 414,
556
+ "TCTAC": 415,
557
+ "TCTAG": 416,
558
+ "GAG": 417,
559
+ "TAAATG": 418,
560
+ "AGCAA": 419,
561
+ "TATATG": 420,
562
+ "ATATATAT": 421,
563
+ "ATTTGC": 422,
564
+ "TCCTCC": 423,
565
+ "CCCAC": 424,
566
+ "ATTTATT": 425,
567
+ "TCTGCC": 426,
568
+ "ATGGCC": 427,
569
+ "TCGC": 428,
570
+ "AGTATT": 429,
571
+ "AGAACC": 430,
572
+ "TTAAAC": 431,
573
+ "AAATTC": 432,
574
+ "AGAGAC": 433,
575
+ "ATTTAC": 434,
576
+ "ATTGCC": 435,
577
+ "AACAAC": 436,
578
+ "TTTAAC": 437,
579
+ "ACGG": 438,
580
+ "AAGAAAA": 439,
581
+ "TCTGGC": 440,
582
+ "ATTCTCC": 441,
583
+ "AGGTGG": 442,
584
+ "TGCTGC": 443,
585
+ "TTCAAG": 444,
586
+ "AGAGGG": 445,
587
+ "ACACC": 446,
588
+ "TCTTTT": 447,
589
+ "AGAGGC": 448,
590
+ "ATCACC": 449,
591
+ "TAAATT": 450,
592
+ "AAGGCC": 451,
593
+ "TTGCAGTG": 452,
594
+ "TGTAC": 453,
595
+ "AATTTC": 454,
596
+ "ATCCCC": 455,
597
+ "ACAAG": 456,
598
+ "ACAGG": 457,
599
+ "ACAAC": 458,
600
+ "TGCCCC": 459,
601
+ "AGATTC": 460,
602
+ "TTAGAA": 461,
603
+ "TTGGGG": 462,
604
+ "AGACAC": 463,
605
+ "TGGAAG": 464,
606
+ "ACCTCC": 465,
607
+ "ATGGGG": 466,
608
+ "AGCCTCC": 467,
609
+ "TTATTG": 468,
610
+ "TAAAAG": 469,
611
+ "ATCTTC": 470,
612
+ "ATCTCC": 471,
613
+ "TGAAGC": 472,
614
+ "TAATC": 473,
615
+ "AAATGC": 474,
616
+ "TTGTTG": 475,
617
+ "ATTCCC": 476,
618
+ "TACTAAAA": 477,
619
+ "ATAGTG": 478,
620
+ "AAATAC": 479,
621
+ "TTGGGC": 480,
622
+ "TAGAGAC": 481,
623
+ "TGTTTT": 482,
624
+ "TTCTGC": 483,
625
+ "TGGCCC": 484,
626
+ "TCTGTC": 485,
627
+ "AGCTCC": 486,
628
+ "AACTCC": 487,
629
+ "TTAGCC": 488,
630
+ "AAAGTGCTGGG": 489,
631
+ "ATAGAC": 490,
632
+ "TATTTTTAG": 491,
633
+ "ACTTG": 492,
634
+ "ACCACC": 493,
635
+ "AAACAC": 494,
636
+ "GTGG": 495,
637
+ "ATTTAG": 496,
638
+ "AGGAGC": 497,
639
+ "AGGCTGGAGTGC": 498,
640
+ "ATACCC": 499,
641
+ "ATGTAA": 500,
642
+ "ACGC": 501,
643
+ "AGTAT": 502,
644
+ "TTTACC": 503,
645
+ "ACTAA": 504,
646
+ "AGGCCC": 505,
647
+ "AAGGGG": 506,
648
+ "TCTCG": 507,
649
+ "ATGAAG": 508,
650
+ "AAAGAC": 509,
651
+ "TGAAAA": 510,
652
+ "AAGGGC": 511,
653
+ "ATAGGC": 512,
654
+ "AGAGTG": 513,
655
+ "AGCTGC": 514,
656
+ "ATGTTC": 515,
657
+ "TATTTC": 516,
658
+ "TGATC": 517,
659
+ "AGTTTG": 518,
660
+ "AGCTAA": 519,
661
+ "AGAGCC": 520,
662
+ "TGCTTC": 521,
663
+ "ATCATC": 522,
664
+ "AACATGG": 523,
665
+ "AGCTTC": 524,
666
+ "AAGAAC": 525,
667
+ "TTTTTTG": 526,
668
+ "AGGGGG": 527,
669
+ "ATAAGC": 528,
670
+ "TAAGCC": 529,
671
+ "ACTGG": 530,
672
+ "ACAAAA": 531,
673
+ "ATCATT": 532,
674
+ "TCTTTC": 533,
675
+ "ATGATG": 534,
676
+ "TGCAA": 535,
677
+ "AGGTTC": 536,
678
+ "AACATT": 537,
679
+ "ATGGGC": 538,
680
+ "ATAGAG": 539,
681
+ "AAATGG": 540,
682
+ "AGTTCC": 541,
683
+ "TTTAGC": 542,
684
+ "AACTTC": 543,
685
+ "AGCAAG": 544,
686
+ "ATAAAAC": 545,
687
+ "AAAATC": 546,
688
+ "AGCCAC": 547,
689
+ "AGGAAC": 548,
690
+ "TTAACC": 549,
691
+ "TATTTATT": 550,
692
+ "TTTCTG": 551,
693
+ "ATAAGG": 552,
694
+ "AGCCACC": 553,
695
+ "AGATGC": 554,
696
+ "TTAAGC": 555,
697
+ "TTGTAA": 556,
698
+ "AGTGTG": 557,
699
+ "AACCCC": 558,
700
+ "TTCATT": 559,
701
+ "ATCATG": 560,
702
+ "AATGAA": 561,
703
+ "AGGTGC": 562,
704
+ "AAAAAAAAAAAAAAAA": 563,
705
+ "AGGATG": 564,
706
+ "AGCCG": 565,
707
+ "TGGTGG": 566,
708
+ "AGTGGG": 567,
709
+ "TGCACTCCAGCC": 568,
710
+ "TATTGC": 569,
711
+ "TAGTC": 570,
712
+ "CCCG": 571,
713
+ "AAGTAA": 572,
714
+ "TAGTG": 573,
715
+ "TTTTTTTTTTTTTTTT": 574,
716
+ "AGCATT": 575,
717
+ "ATCTGC": 576,
718
+ "TCTCAC": 577,
719
+ "AAATTG": 578,
720
+ "TTTAGG": 579,
721
+ "AGACCC": 580,
722
+ "GGGCC": 581,
723
+ "TCCTTC": 582,
724
+ "ATAGGG": 583,
725
+ "AATATG": 584,
726
+ "TTATAC": 585,
727
+ "TAGAAG": 586,
728
+ "AAAGTG": 587,
729
+ "AAATCC": 588,
730
+ "TTCCTC": 589,
731
+ "TTTCAC": 590,
732
+ "AGTATG": 591,
733
+ "TACTAAAAATAC": 592,
734
+ "ATGTGC": 593,
735
+ "AGGAGGC": 594,
736
+ "TATATC": 595,
737
+ "TTCTAA": 596,
738
+ "TGAGGC": 597,
739
+ "ACACAC": 598,
740
+ "TCCCCC": 599,
741
+ "AACATC": 600,
742
+ "AAGCG": 601,
743
+ "AATGGC": 602,
744
+ "ACCCCC": 603,
745
+ "AGATAC": 604,
746
+ "ATAAAAG": 605,
747
+ "ATGATT": 606,
748
+ "TGGAGG": 607,
749
+ "AGTTAA": 608,
750
+ "": 609
751
+ },
752
+ "merges": [
753
+ "A ",
754
+ "C ",
755
+ "G ",
756
+ "T ",
757
+ "T T",
758
+ "A A",
759
+ "T G",
760
+ "A G",
761
+ "C C",
762
+ "T C",
763
+ "A C",
764
+ "G G",
765
+ "A TT",
766
+ "A T",
767
+ "A TG",
768
+ "G C",
769
+ "T AA",
770
+ "T CC",
771
+ "A CC",
772
+ "AA AA",
773
+ "AG G",
774
+ "A TC",
775
+ "AG C",
776
+ "TT C",
777
+ "AA G",
778
+ "TT TT",
779
+ "TG C",
780
+ "TG G",
781
+ "AA C",
782
+ "TT G",
783
+ "T AG",
784
+ "T AC",
785
+ "CC C",
786
+ "T ATT",
787
+ "TG GG",
788
+ "T AT",
789
+ "AG AA",
790
+ "AG GG",
791
+ "TT TC",
792
+ "AG GC",
793
+ "AG CC",
794
+ "AT AA",
795
+ "TG TG",
796
+ "TT GG",
797
+ "ATT C",
798
+ "AA GG",
799
+ "AC AC",
800
+ "TCC C",
801
+ "TC TC",
802
+ "T ATG",
803
+ "TT TG",
804
+ "TT CC",
805
+ "AG TG",
806
+ "ATG G",
807
+ "AG AC",
808
+ "AA AC",
809
+ "ACC C",
810
+ "TG CC",
811
+ "ATT G",
812
+ "AT CC",
813
+ "AG AG",
814
+ "ATG C",
815
+ "AT AC",
816
+ "TC TG",
817
+ "TT AA",
818
+ "TC AC",
819
+ "TG AA",
820
+ "TG GC",
821
+ "TT GC",
822
+ "TAA G",
823
+ "T ATC",
824
+ "TAA C",
825
+ "AA AG",
826
+ "TT AC",
827
+ "AA GC",
828
+ "GG G",
829
+ "T AGC",
830
+ "GG C",
831
+ "AT AT",
832
+ "T ACC",
833
+ "AA CC",
834
+ "AA TG",
835
+ "T AGG",
836
+ "G CC",
837
+ "AT ATT",
838
+ "AG TC",
839
+ "TT TTC",
840
+ "AAAA C",
841
+ "TG AC",
842
+ "TT TAA",
843
+ "AAAA G",
844
+ "AA TC",
845
+ "TG TC",
846
+ "TT ATT",
847
+ "AT AG",
848
+ "TG AG",
849
+ "TTTT G",
850
+ "AA ATT",
851
+ "AA TT",
852
+ "AA TAA",
853
+ "TT TCC",
854
+ "AC AG",
855
+ "TC AG",
856
+ "AA ATG",
857
+ "TGGG C",
858
+ "AC TC",
859
+ "AGG CC",
860
+ "TT AG",
861
+ "AC TG",
862
+ "AC G",
863
+ "AT ATG",
864
+ "TGG CC",
865
+ "ATT TC",
866
+ "AC AA",
867
+ "ATC TC",
868
+ "TATT C",
869
+ "TG TAA",
870
+ "AC TT",
871
+ "ATG CC",
872
+ "TAA AA",
873
+ "AAAA AAAA",
874
+ "ATT CC",
875
+ "TT TAG",
876
+ "TCC CC",
877
+ "TT TGC",
878
+ "TT CCC",
879
+ "TGGG G",
880
+ "TTC TC",
881
+ "AT AAAA",
882
+ "AG AAG",
883
+ "TTTT TTTT",
884
+ "ACC CC",
885
+ "AGGG C",
886
+ "ACC TC",
887
+ "AG ATG",
888
+ "ATT AC",
889
+ "AAG CC",
890
+ "GG CC",
891
+ "AGG AG",
892
+ "TC AA",
893
+ "ATT GC",
894
+ "TATT G",
895
+ "AT AAC",
896
+ "AT ATC",
897
+ "TT TAC",
898
+ "ATG GC",
899
+ "AAGG C",
900
+ "ACC AC",
901
+ "G TG",
902
+ "AT CCC",
903
+ "AG AAC",
904
+ "ATT TT",
905
+ "TTG CC",
906
+ "AA ATC",
907
+ "AT AAG",
908
+ "TTGG C",
909
+ "TGG AG",
910
+ "ATG GG",
911
+ "AA AGC",
912
+ "AGGG G",
913
+ "ATC AC",
914
+ "ATT TG",
915
+ "AA TTC",
916
+ "TGC AC",
917
+ "TT TGG",
918
+ "TC G",
919
+ "AG AGC",
920
+ "AA AGG",
921
+ "GG GC",
922
+ "TTGG G",
923
+ "AG AAAA",
924
+ "TAT CC",
925
+ "TC TCC",
926
+ "AT AGC",
927
+ "TG AGG",
928
+ "TT TATT",
929
+ "AG TAA",
930
+ "AG AGG",
931
+ "TC TTC",
932
+ "AC ATT",
933
+ "TCC TG",
934
+ "AG CCC",
935
+ "TATG C",
936
+ "TT AAAA",
937
+ "AG ATT",
938
+ "TT AAC",
939
+ "GG GG",
940
+ "AAG AC",
941
+ "TC ATT",
942
+ "TTC TG",
943
+ "AG ACC",
944
+ "AAGG G",
945
+ "AT ACC",
946
+ "TT TAT",
947
+ "AAG TG",
948
+ "TT ATG",
949
+ "AAG AA",
950
+ "TAG CC",
951
+ "TTC AC",
952
+ "AGG TG",
953
+ "TTG AA",
954
+ "ATC TG",
955
+ "AGC AC",
956
+ "TGC TG",
957
+ "AA ACC",
958
+ "ATG TG",
959
+ "TTTT CC",
960
+ "AG TTC",
961
+ "TCC TC",
962
+ "TATG G",
963
+ "AA TAC",
964
+ "AG TGG",
965
+ "TAG GC",
966
+ "AGC TC",
967
+ "AT AGG",
968
+ "TT ATC",
969
+ "TT AAG",
970
+ "T ACCC",
971
+ "TTTT TG",
972
+ "AAC AC",
973
+ "TGC TC",
974
+ "AG ATC",
975
+ "TCCC AGC",
976
+ "AGC TG",
977
+ "AA TAG",
978
+ "TC TTG",
979
+ "AGTG GC",
980
+ "ATT GG",
981
+ "TAC TC",
982
+ "TAA AC",
983
+ "AA TGG",
984
+ "AGG TC",
985
+ "AGG AC",
986
+ "TTG TG",
987
+ "TAT AC",
988
+ "ATT TTC",
989
+ "AT ATAA",
990
+ "AGGC TG",
991
+ "ATT TAA",
992
+ "AG TT",
993
+ "AG TAG",
994
+ "ATG AC",
995
+ "AA TGC",
996
+ "TCC AC",
997
+ "CC CC",
998
+ "ATG TC",
999
+ "AAC TC",
1000
+ "TTTT TC",
1001
+ "TAA GC",
1002
+ "AAG TC",
1003
+ "TGG TG",
1004
+ "TAT AA",
1005
+ "AG TGC",
1006
+ "TAA GG",
1007
+ "ACC TG",
1008
+ "TT AGC",
1009
+ "AA ATAA",
1010
+ "TGCC TC",
1011
+ "AA TCC",
1012
+ "TTGG CC",
1013
+ "TAG GG",
1014
+ "TGG AC",
1015
+ "TTG TC",
1016
+ "AA CCC",
1017
+ "TT ACC",
1018
+ "TAA CC",
1019
+ "AA TTTT",
1020
+ "AA AGAA",
1021
+ "ATT ATT",
1022
+ "AGC G",
1023
+ "AAAA AC",
1024
+ "TAA TG",
1025
+ "TTG AC",
1026
+ "AG TCC",
1027
+ "AAC TG",
1028
+ "AG TTG",
1029
+ "AA TTG",
1030
+ "TC TGC",
1031
+ "TT AGG",
1032
+ "TAC AC",
1033
+ "AGAA GG",
1034
+ "AT ATTC",
1035
+ "AAAA CC",
1036
+ "AAAA GC",
1037
+ "TG CCC",
1038
+ "AC TGC",
1039
+ "AGAA GC",
1040
+ "TAA TAA",
1041
+ "AA TATT",
1042
+ "ACC ATG",
1043
+ "TGG TC",
1044
+ "TTTT GC",
1045
+ "AAC G",
1046
+ "TAC TG",
1047
+ "ACAC ACAC",
1048
+ "ATT TTG",
1049
+ "TCC G",
1050
+ "TGC G",
1051
+ "AAAA TG",
1052
+ "AC ATG",
1053
+ "TC AGC",
1054
+ "ATC G",
1055
+ "AG TAC",
1056
+ "TTTT GG",
1057
+ "AA TAT",
1058
+ "AG AGAA",
1059
+ "TTC G",
1060
+ "TCC AGCC",
1061
+ "AT ATAC",
1062
+ "TC ACC",
1063
+ "AAAA GG",
1064
+ "TGTG TGTG",
1065
+ "TC ATC",
1066
+ "TGC TGGG",
1067
+ "TG AAG",
1068
+ "TG TAG",
1069
+ "TG TGG",
1070
+ "AAAA ATT",
1071
+ "AC TTC",
1072
+ "TTCC CC",
1073
+ "AT AGAA",
1074
+ "TTG CCC",
1075
+ "AGG AGG",
1076
+ "TT TCCC",
1077
+ "TAT ATT",
1078
+ "ACC G",
1079
+ "AC TAC",
1080
+ "TCAC TGC",
1081
+ "GC G",
1082
+ "TT TGTG",
1083
+ "AC AGC",
1084
+ "TC ATG",
1085
+ "AG TTTT",
1086
+ "AGG AA",
1087
+ "TT TATG",
1088
+ "AT ATTG",
1089
+ "TG ATG",
1090
+ "TC TAA",
1091
+ "TG TGC",
1092
+ "AGG AAG",
1093
+ "TT TGGG",
1094
+ "TG TTC",
1095
+ "AGCC CC",
1096
+ "AG TTTC",
1097
+ "AGGC TGG",
1098
+ "TTTG CC",
1099
+ "ATT TCC",
1100
+ "AT ACAC",
1101
+ "AAAA TAA",
1102
+ "TAG AC",
1103
+ "AGG AGAA",
1104
+ "TG AGC",
1105
+ "TGG AA",
1106
+ "TTTT TAA",
1107
+ "AGCC TCCC",
1108
+ "ATG AA",
1109
+ "TT TAAG",
1110
+ "TC TGG",
1111
+ "TT TATC",
1112
+ "TT ATAA",
1113
+ "TG ATT",
1114
+ "AAC AA",
1115
+ "TAGC TGGG",
1116
+ "TC AAG",
1117
+ "AAAA AA",
1118
+ "ACTT TGGG",
1119
+ "TATT CC",
1120
+ "TC AGG",
1121
+ "AAC AG",
1122
+ "TTC TTC",
1123
+ "TGTG GC",
1124
+ "AT ATGC",
1125
+ "ATTAC AGGC",
1126
+ "AGGG GC",
1127
+ "AGGG CC",
1128
+ "TT ATTC",
1129
+ "AT ATCC",
1130
+ "TGTAA TCCCAGC",
1131
+ "TAC G",
1132
+ "AGAA AC",
1133
+ "TG TCC",
1134
+ "AG ATGG",
1135
+ "TGTG CC",
1136
+ "TTTC TC",
1137
+ "TG AAC",
1138
+ "AG TCTC",
1139
+ "TG TTG",
1140
+ "ATT TTTT",
1141
+ "AAG AAG",
1142
+ "TGGG GC",
1143
+ "AGC AGC",
1144
+ "G CCC",
1145
+ "TTTG GC",
1146
+ "AGGCTG AGGC",
1147
+ "TGGG CC",
1148
+ "TTC TCC",
1149
+ "TAG AA",
1150
+ "TGGAG TGC",
1151
+ "ATT AA",
1152
+ "AGTG CC",
1153
+ "TG TCTC",
1154
+ "AT ATGG",
1155
+ "AC ATC",
1156
+ "TGGG GG",
1157
+ "TG ACC",
1158
+ "AC TCC",
1159
+ "TAA AAC",
1160
+ "AG ATAA",
1161
+ "TAA TTTT",
1162
+ "TC AAC",
1163
+ "TC TAC",
1164
+ "TC TAG",
1165
+ "G AG",
1166
+ "TAA ATG",
1167
+ "AGC AA",
1168
+ "TAT ATG",
1169
+ "ATAT ATAT",
1170
+ "ATT TGC",
1171
+ "TCC TCC",
1172
+ "CCC AC",
1173
+ "ATT TATT",
1174
+ "TC TGCC",
1175
+ "ATGG CC",
1176
+ "TC GC",
1177
+ "AG TATT",
1178
+ "AGAA CC",
1179
+ "TT AAAC",
1180
+ "AA ATTC",
1181
+ "AG AGAC",
1182
+ "ATT TAC",
1183
+ "ATTG CC",
1184
+ "AAC AAC",
1185
+ "TT TAAC",
1186
+ "AC GG",
1187
+ "AAG AAAA",
1188
+ "TCTG GC",
1189
+ "ATTC TCC",
1190
+ "AGG TGG",
1191
+ "TGC TGC",
1192
+ "TTC AAG",
1193
+ "AG AGGG",
1194
+ "AC ACC",
1195
+ "TC TTTT",
1196
+ "AG AGGC",
1197
+ "ATC ACC",
1198
+ "TAA ATT",
1199
+ "AAGG CC",
1200
+ "TTGC AGTG",
1201
+ "TG TAC",
1202
+ "AA TTTC",
1203
+ "ATCC CC",
1204
+ "AC AAG",
1205
+ "AC AGG",
1206
+ "AC AAC",
1207
+ "TGCC CC",
1208
+ "AG ATTC",
1209
+ "TT AGAA",
1210
+ "TTGG GG",
1211
+ "AG ACAC",
1212
+ "TGG AAG",
1213
+ "ACC TCC",
1214
+ "ATG GGG",
1215
+ "AGCC TCC",
1216
+ "TT ATTG",
1217
+ "TAA AAG",
1218
+ "ATC TTC",
1219
+ "ATC TCC",
1220
+ "TGAA GC",
1221
+ "TAA TC",
1222
+ "AA ATGC",
1223
+ "TTG TTG",
1224
+ "ATT CCC",
1225
+ "TAC TAAAA",
1226
+ "AT AGTG",
1227
+ "AA ATAC",
1228
+ "TTGG GC",
1229
+ "TAG AGAC",
1230
+ "TG TTTT",
1231
+ "TTC TGC",
1232
+ "TGG CCC",
1233
+ "TCTG TC",
1234
+ "AGC TCC",
1235
+ "AAC TCC",
1236
+ "TT AGCC",
1237
+ "AAAG TGCTGGG",
1238
+ "AT AGAC",
1239
+ "TATT TTTAG",
1240
+ "AC TTG",
1241
+ "ACC ACC",
1242
+ "AA ACAC",
1243
+ "G TGG",
1244
+ "ATT TAG",
1245
+ "AGG AGC",
1246
+ "AGGC TGGAGTGC",
1247
+ "AT ACCC",
1248
+ "ATG TAA",
1249
+ "AC GC",
1250
+ "AG TAT",
1251
+ "TT TACC",
1252
+ "AC TAA",
1253
+ "AGG CCC",
1254
+ "AAGG GG",
1255
+ "TCTC G",
1256
+ "ATG AAG",
1257
+ "AA AGAC",
1258
+ "TG AAAA",
1259
+ "AAGG GC",
1260
+ "AT AGGC",
1261
+ "AG AGTG",
1262
+ "AGC TGC",
1263
+ "ATG TTC",
1264
+ "TATT TC",
1265
+ "TG ATC",
1266
+ "AG TTTG",
1267
+ "AGC TAA",
1268
+ "AG AGCC",
1269
+ "TGC TTC",
1270
+ "ATC ATC",
1271
+ "AAC ATGG",
1272
+ "AGC TTC",
1273
+ "AAG AAC",
1274
+ "TTTT TTG",
1275
+ "AGGG GG",
1276
+ "ATAA GC",
1277
+ "TAAG CC",
1278
+ "AC TGG",
1279
+ "AC AAAA",
1280
+ "ATC ATT",
1281
+ "TC TTTC",
1282
+ "ATG ATG",
1283
+ "TGC AA",
1284
+ "AGG TTC",
1285
+ "AAC ATT",
1286
+ "ATG GGC",
1287
+ "AT AGAG",
1288
+ "AA ATGG",
1289
+ "AG TTCC",
1290
+ "TT TAGC",
1291
+ "AAC TTC",
1292
+ "AGC AAG",
1293
+ "AT AAAAC",
1294
+ "AAAA TC",
1295
+ "AGCC AC",
1296
+ "AGG AAC",
1297
+ "TTAA CC",
1298
+ "TATT TATT",
1299
+ "TTTC TG",
1300
+ "ATAA GG",
1301
+ "AGCC ACC",
1302
+ "AG ATGC",
1303
+ "TTAA GC",
1304
+ "TTG TAA",
1305
+ "AG TGTG",
1306
+ "AACC CC",
1307
+ "TTC ATT",
1308
+ "ATC ATG",
1309
+ "AA TGAA",
1310
+ "AGG TGC",
1311
+ "AAAAAAAA AAAAAAAA",
1312
+ "AGG ATG",
1313
+ "AGCC G",
1314
+ "TGG TGG",
1315
+ "AG TGGG",
1316
+ "TGCAC TCCAGCC",
1317
+ "TATT GC",
1318
+ "TAG TC",
1319
+ "CCC G",
1320
+ "AAG TAA",
1321
+ "TAG TG",
1322
+ "TTTTTTTT TTTTTTTT",
1323
+ "AGC ATT",
1324
+ "ATC TGC",
1325
+ "TCTC AC",
1326
+ "AA ATTG",
1327
+ "TT TAGG",
1328
+ "AG ACCC",
1329
+ "GGG CC",
1330
+ "TCC TTC",
1331
+ "AT AGGG",
1332
+ "AA TATG",
1333
+ "TT ATAC",
1334
+ "TAG AAG",
1335
+ "AA AGTG",
1336
+ "AA ATCC",
1337
+ "TTCC TC",
1338
+ "TTTC AC",
1339
+ "AG TATG",
1340
+ "TACTAAAA ATAC",
1341
+ "ATG TGC",
1342
+ "AGG AGGC",
1343
+ "TAT ATC",
1344
+ "TTC TAA",
1345
+ "TG AGGC",
1346
+ "ACAC AC",
1347
+ "TCC CCC",
1348
+ "AAC ATC",
1349
+ "AAGC G",
1350
+ "AA TGGC",
1351
+ "ACC CCC",
1352
+ "AG ATAC",
1353
+ "AT AAAAG",
1354
+ "ATG ATT",
1355
+ "TGG AGG",
1356
+ "AG TTAA"
1357
+ ]
1358
+ }
1359
+ }