import os
import util
import viz_sequence
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import vdom.helpers as vdomh
from IPython.display import display
import tqdm
tqdm.tqdm_notebook()
/users/vir/miniconda2/envs/basepairmodels_latest/lib/python3.7/site-packages/ipykernel_launcher.py:11: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0 Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook` # This is added back by InteractiveShellApp.init_path()
<tqdm.notebook.tqdm_notebook at 0x7fbc7bab9110>
# Plotting defaults
font_manager.fontManager.ttflist.extend(
font_manager.createFontList(
font_manager.findSystemFonts(fontpaths="/users/amtseng/modules/fonts")
)
)
plot_params = {
"figure.titlesize": 22,
"axes.titlesize": 22,
"axes.labelsize": 20,
"legend.fontsize": 18,
"xtick.labelsize": 16,
"ytick.labelsize": 16,
"font.family": "Roboto",
"font.weight": "bold"
}
plt.rcParams.update(plot_params)
/users/vir/miniconda2/envs/basepairmodels_latest/lib/python3.7/site-packages/ipykernel_launcher.py:4: MatplotlibDeprecationWarning: The createFontList function was deprecated in Matplotlib 3.2 and will be removed two minor releases later. Use FontManager.addfont instead. after removing the cwd from sys.path.
# Define parameters/fetch arguments
preds_path = os.environ["TFM_PRED_PATH"]
shap_scores_path = os.environ["TFM_SHAP_PATH"]
tfm_results_path = os.environ["TFM_TFM_PATH"]
print("Predictions path: %s" % preds_path)
print("DeepSHAP scores path: %s" % shap_scores_path)
print("TF-MoDISco results path: %s" % tfm_results_path)
Predictions path: /mnt/lab_data2/vir/tf_chr_atlas/02-24-2021//predictions/ENCSR000EEB/profile_predictions.h5 DeepSHAP scores path: /mnt/lab_data2/vir/tf_chr_atlas/02-24-2021//shap/ENCSR000EEB/counts_scores_alex_format.h5 TF-MoDISco results path: /mnt/lab_data2/vir/tf_chr_atlas/02-24-2021//modisco/ENCSR000EEB/counts/modisco_results.hd5
# Define constants
input_length, profile_length = 2114, 1000
shap_score_center_size = 400
hyp_score_key = "hyp_scores"
task_index = None
For plotting and organizing things
def plot_profiles(profs, title=None, return_fig=False):
"""
Plots the given profiles as a signal track.
It should be a T x O x 2 NumPy array, where the subarrays are the
tracks for the plus and minus strand, for each task. No normalization is
performed prior to plotting.
"""
assert len(profs.shape) == 3
num_tasks, prof_length, _ = profs.shape
fig, ax = plt.subplots(num_tasks, figsize=(20, num_tasks * 3 * 2))
if num_tasks == 1:
ax = [ax]
for i in range(num_tasks):
ax[i].plot(profs[i,:,0], color="royalblue")
ax[i].plot(-profs[i,:,1], color="goldenrod")
if title:
fig.suptitle(title)
if return_fig:
return fig
plt.show()
# Import SHAP coordinates and one-hot sequences
hyp_scores, _, one_hot_seqs, shap_coords = util.import_shap_scores(shap_scores_path, hyp_score_key, center_cut_size=shap_score_center_size, remove_non_acgt=False)
# This cuts the sequences/scores off just as how TF-MoDISco saw them, but the coordinates are uncut
Importing SHAP scores: 0%| | 0/73 [00:00<?, ?it/s] Importing SHAP scores: 1%|▏ | 1/73 [00:00<00:11, 6.44it/s] Importing SHAP scores: 3%|▎ | 2/73 [00:00<00:13, 5.29it/s] Importing SHAP scores: 4%|▍ | 3/73 [00:00<00:13, 5.10it/s] Importing SHAP scores: 5%|▌ | 4/73 [00:00<00:13, 5.00it/s] Importing SHAP scores: 7%|▋ | 5/73 [00:00<00:13, 4.95it/s] Importing SHAP scores: 8%|▊ | 6/73 [00:01<00:13, 4.91it/s] Importing SHAP scores: 10%|▉ | 7/73 [00:01<00:13, 4.87it/s] Importing SHAP scores: 11%|█ | 8/73 [00:01<00:13, 4.91it/s] Importing SHAP scores: 12%|█▏ | 9/73 [00:01<00:11, 5.56it/s] Importing SHAP scores: 14%|█▎ | 10/73 [00:01<00:11, 5.34it/s] Importing SHAP scores: 15%|█▌ | 11/73 [00:02<00:11, 5.26it/s] Importing SHAP scores: 16%|█▋ | 12/73 [00:02<00:11, 5.18it/s] Importing SHAP scores: 18%|█▊ | 13/73 [00:02<00:11, 5.04it/s] Importing SHAP scores: 19%|█▉ | 14/73 [00:02<00:11, 4.98it/s] Importing SHAP scores: 21%|██ | 15/73 [00:02<00:11, 4.96it/s] Importing SHAP scores: 22%|██▏ | 16/73 [00:03<00:11, 4.94it/s] Importing SHAP scores: 23%|██▎ | 17/73 [00:03<00:11, 4.91it/s] Importing SHAP scores: 25%|██▍ | 18/73 [00:03<00:10, 5.49it/s] Importing SHAP scores: 26%|██▌ | 19/73 [00:03<00:10, 5.27it/s] Importing SHAP scores: 27%|██▋ | 20/73 [00:03<00:10, 5.14it/s] Importing SHAP scores: 29%|██▉ | 21/73 [00:04<00:10, 5.06it/s] Importing SHAP scores: 30%|███ | 22/73 [00:04<00:10, 5.01it/s] Importing SHAP scores: 32%|███▏ | 23/73 [00:04<00:10, 4.98it/s] Importing SHAP scores: 33%|███▎ | 24/73 [00:04<00:09, 4.93it/s] Importing SHAP scores: 34%|███▍ | 25/73 [00:04<00:09, 4.92it/s] Importing SHAP scores: 36%|███▌ | 26/73 [00:05<00:08, 5.50it/s] Importing SHAP scores: 37%|███▋ | 27/73 [00:05<00:08, 5.28it/s] Importing SHAP scores: 38%|███▊ | 28/73 [00:05<00:08, 5.16it/s] Importing SHAP scores: 40%|███▉ | 29/73 [00:05<00:08, 5.07it/s] Importing SHAP scores: 41%|████ | 30/73 [00:05<00:08, 5.03it/s] Importing SHAP scores: 42%|████▏ | 31/73 [00:06<00:08, 5.02it/s] Importing SHAP scores: 44%|████▍ | 32/73 [00:06<00:08, 4.99it/s] Importing SHAP scores: 45%|████▌ | 33/73 [00:06<00:08, 4.99it/s] Importing SHAP scores: 47%|████▋ | 34/73 [00:06<00:07, 4.96it/s] Importing SHAP scores: 48%|████▊ | 35/73 [00:06<00:06, 5.59it/s] Importing SHAP scores: 49%|████▉ | 36/73 [00:07<00:06, 5.32it/s] Importing SHAP scores: 51%|█████ | 37/73 [00:07<00:07, 5.10it/s] Importing SHAP scores: 52%|█████▏ | 38/73 [00:07<00:06, 5.08it/s] Importing SHAP scores: 53%|█████▎ | 39/73 [00:07<00:06, 4.87it/s] Importing SHAP scores: 55%|█████▍ | 40/73 [00:07<00:06, 4.85it/s] Importing SHAP scores: 56%|█████▌ | 41/73 [00:08<00:06, 4.82it/s] Importing SHAP scores: 58%|█████▊ | 42/73 [00:08<00:06, 4.78it/s] Importing SHAP scores: 59%|█████▉ | 43/73 [00:08<00:06, 4.81it/s] Importing SHAP scores: 60%|██████ | 44/73 [00:08<00:05, 5.41it/s] Importing SHAP scores: 62%|██████▏ | 45/73 [00:08<00:05, 5.07it/s] Importing SHAP scores: 63%|██████▎ | 46/73 [00:09<00:05, 5.00it/s] Importing SHAP scores: 64%|██████▍ | 47/73 [00:09<00:05, 4.82it/s] Importing SHAP scores: 66%|██████▌ | 48/73 [00:09<00:05, 4.78it/s] Importing SHAP scores: 67%|██████▋ | 49/73 [00:09<00:05, 4.79it/s] Importing SHAP scores: 68%|██████▊ | 50/73 [00:09<00:04, 4.71it/s] Importing SHAP scores: 70%|██████▉ | 51/73 [00:10<00:04, 4.74it/s] Importing SHAP scores: 71%|███████ | 52/73 [00:10<00:03, 5.40it/s] Importing SHAP scores: 73%|███████▎ | 53/73 [00:10<00:03, 5.18it/s] Importing SHAP scores: 74%|███████▍ | 54/73 [00:10<00:03, 5.12it/s] Importing SHAP scores: 75%|███████▌ | 55/73 [00:10<00:03, 5.10it/s] Importing SHAP scores: 77%|███████▋ | 56/73 [00:11<00:03, 5.08it/s] Importing SHAP scores: 78%|███████▊ | 57/73 [00:11<00:03, 5.04it/s] Importing SHAP scores: 79%|███████▉ | 58/73 [00:11<00:02, 5.03it/s] Importing SHAP scores: 81%|████████ | 59/73 [00:11<00:02, 5.01it/s] Importing SHAP scores: 82%|████████▏ | 60/73 [00:11<00:02, 5.00it/s] Importing SHAP scores: 84%|████████▎ | 61/73 [00:12<00:02, 5.57it/s] Importing SHAP scores: 85%|████████▍ | 62/73 [00:12<00:02, 5.24it/s] Importing SHAP scores: 86%|████████▋ | 63/73 [00:12<00:01, 5.10it/s] Importing SHAP scores: 88%|████████▊ | 64/73 [00:12<00:01, 5.00it/s] Importing SHAP scores: 89%|████████▉ | 65/73 [00:12<00:01, 4.97it/s] Importing SHAP scores: 90%|█████████ | 66/73 [00:13<00:01, 4.90it/s] Importing SHAP scores: 92%|█████████▏| 67/73 [00:13<00:01, 4.89it/s] Importing SHAP scores: 93%|█████████▎| 68/73 [00:13<00:01, 4.86it/s] Importing SHAP scores: 95%|█████████▍| 69/73 [00:13<00:00, 4.72it/s] Importing SHAP scores: 96%|█████████▌| 70/73 [00:13<00:00, 5.24it/s] Importing SHAP scores: 97%|█████████▋| 71/73 [00:14<00:00, 5.02it/s] Importing SHAP scores: 100%|██████████| 73/73 [00:14<00:00, 5.08it/s]
# Import long version of SHAP coordinates and one-hot sequences
hyp_scores_long, _, one_hot_seqs_long, shap_coords_long = util.import_shap_scores(shap_scores_path, hyp_score_key, center_cut_size=None, remove_non_acgt=False)
# This cuts the sequences/scores off just as how TF-MoDISco saw them, but the coordinates are uncut
Importing SHAP scores: 0%| | 0/73 [00:00<?, ?it/s] Importing SHAP scores: 1%|▏ | 1/73 [00:00<00:53, 1.34it/s] Importing SHAP scores: 3%|▎ | 2/73 [00:01<01:08, 1.04it/s] Importing SHAP scores: 4%|▍ | 3/73 [00:03<01:19, 1.14s/it] Importing SHAP scores: 5%|▌ | 4/73 [00:04<01:22, 1.20s/it] Importing SHAP scores: 7%|▋ | 5/73 [00:05<01:22, 1.22s/it] Importing SHAP scores: 8%|▊ | 6/73 [00:14<04:01, 3.61s/it] Importing SHAP scores: 10%|▉ | 7/73 [00:20<05:08, 4.67s/it] Importing SHAP scores: 11%|█ | 8/73 [00:28<06:07, 5.65s/it] Importing SHAP scores: 12%|█▏ | 9/73 [00:34<05:59, 5.62s/it] Importing SHAP scores: 14%|█▎ | 10/73 [00:41<06:27, 6.15s/it] Importing SHAP scores: 15%|█▌ | 11/73 [00:48<06:31, 6.32s/it] Importing SHAP scores: 16%|█▋ | 12/73 [00:51<05:32, 5.45s/it] Importing SHAP scores: 18%|█▊ | 13/73 [00:56<05:08, 5.14s/it] Importing SHAP scores: 19%|█▉ | 14/73 [00:57<03:54, 3.98s/it] Importing SHAP scores: 21%|██ | 15/73 [00:58<03:05, 3.19s/it] Importing SHAP scores: 22%|██▏ | 16/73 [00:59<02:27, 2.59s/it] Importing SHAP scores: 23%|██▎ | 17/73 [01:01<02:02, 2.19s/it] Importing SHAP scores: 25%|██▍ | 18/73 [01:01<01:36, 1.75s/it] Importing SHAP scores: 26%|██▌ | 19/73 [01:03<01:25, 1.58s/it] Importing SHAP scores: 27%|██▋ | 20/73 [01:04<01:17, 1.46s/it] Importing SHAP scores: 29%|██▉ | 21/73 [01:05<01:14, 1.44s/it] Importing SHAP scores: 30%|███ | 22/73 [01:06<01:09, 1.37s/it] Importing SHAP scores: 32%|███▏ | 23/73 [01:14<02:40, 3.21s/it] Importing SHAP scores: 33%|███▎ | 24/73 [01:23<04:04, 4.99s/it] Importing SHAP scores: 34%|███▍ | 25/73 [01:32<05:02, 6.31s/it] Importing SHAP scores: 36%|███▌ | 26/73 [01:41<05:34, 7.11s/it] Importing SHAP scores: 37%|███▋ | 27/73 [01:50<05:48, 7.57s/it] Importing SHAP scores: 38%|███▊ | 28/73 [01:58<05:52, 7.83s/it] Importing SHAP scores: 40%|███▉ | 29/73 [02:00<04:18, 5.87s/it] Importing SHAP scores: 41%|████ | 30/73 [02:01<03:13, 4.50s/it] Importing SHAP scores: 42%|████▏ | 31/73 [02:03<02:38, 3.76s/it] Importing SHAP scores: 44%|████▍ | 32/73 [02:04<02:04, 3.04s/it] Importing SHAP scores: 45%|████▌ | 33/73 [02:06<01:40, 2.52s/it] Importing SHAP scores: 47%|████▋ | 34/73 [02:07<01:24, 2.17s/it] Importing SHAP scores: 48%|████▊ | 35/73 [02:08<01:06, 1.74s/it] Importing SHAP scores: 49%|████▉ | 36/73 [02:09<00:59, 1.60s/it] Importing SHAP scores: 51%|█████ | 37/73 [02:10<00:53, 1.49s/it] Importing SHAP scores: 52%|█████▏ | 38/73 [02:12<00:49, 1.41s/it] Importing SHAP scores: 53%|█████▎ | 39/73 [02:13<00:46, 1.37s/it] Importing SHAP scores: 55%|█████▍ | 40/73 [02:14<00:45, 1.37s/it] Importing SHAP scores: 56%|█████▌ | 41/73 [02:16<00:43, 1.35s/it] Importing SHAP scores: 58%|█████▊ | 42/73 [02:17<00:42, 1.38s/it] Importing SHAP scores: 59%|█████▉ | 43/73 [02:25<01:43, 3.45s/it] Importing SHAP scores: 60%|██████ | 44/73 [02:33<02:18, 4.76s/it] Importing SHAP scores: 62%|██████▏ | 45/73 [02:42<02:47, 5.99s/it] Importing SHAP scores: 63%|██████▎ | 46/73 [02:43<02:04, 4.61s/it] Importing SHAP scores: 64%|██████▍ | 47/73 [02:45<01:34, 3.62s/it] Importing SHAP scores: 66%|██████▌ | 48/73 [02:46<01:13, 2.93s/it] Importing SHAP scores: 67%|██████▋ | 49/73 [02:48<01:00, 2.53s/it] Importing SHAP scores: 68%|██████▊ | 50/73 [02:49<00:49, 2.17s/it] Importing SHAP scores: 70%|██████▉ | 51/73 [02:50<00:41, 1.89s/it] Importing SHAP scores: 71%|███████ | 52/73 [02:51<00:32, 1.54s/it] Importing SHAP scores: 73%|███████▎ | 53/73 [02:52<00:28, 1.44s/it] Importing SHAP scores: 74%|███████▍ | 54/73 [02:53<00:26, 1.40s/it] Importing SHAP scores: 75%|███████▌ | 55/73 [02:55<00:24, 1.36s/it] Importing SHAP scores: 77%|███████▋ | 56/73 [02:56<00:22, 1.33s/it] Importing SHAP scores: 78%|███████▊ | 57/73 [02:57<00:21, 1.34s/it] Importing SHAP scores: 79%|███████▉ | 58/73 [02:59<00:19, 1.31s/it] Importing SHAP scores: 81%|████████ | 59/73 [03:00<00:18, 1.29s/it] Importing SHAP scores: 82%|████████▏ | 60/73 [03:06<00:34, 2.63s/it] Importing SHAP scores: 84%|████████▎ | 61/73 [03:15<00:54, 4.57s/it] Importing SHAP scores: 85%|████████▍ | 62/73 [03:24<01:07, 6.12s/it] Importing SHAP scores: 86%|████████▋ | 63/73 [03:32<01:06, 6.61s/it] Importing SHAP scores: 88%|████████▊ | 64/73 [03:40<01:02, 6.99s/it] Importing SHAP scores: 89%|████████▉ | 65/73 [03:49<01:00, 7.51s/it] Importing SHAP scores: 90%|█████████ | 66/73 [04:00<01:00, 8.61s/it] Importing SHAP scores: 92%|█████████▏| 67/73 [04:08<00:50, 8.44s/it] Importing SHAP scores: 93%|█████████▎| 68/73 [04:20<00:47, 9.48s/it] Importing SHAP scores: 95%|█████████▍| 69/73 [04:33<00:42, 10.64s/it] Importing SHAP scores: 96%|█████████▌| 70/73 [04:45<00:33, 11.09s/it] Importing SHAP scores: 97%|█████████▋| 71/73 [04:52<00:19, 9.64s/it] Importing SHAP scores: 99%|█████████▊| 72/73 [05:03<00:10, 10.06s/it] Importing SHAP scores: 100%|██████████| 73/73 [05:05<00:00, 4.19s/it]
# Subset the long SHAP data to the SHAP data that was used to run TF-MoDISco
shap_coords_table = pd.DataFrame(shap_coords, columns=["chrom", "start", "end"])
shap_coords_long_table = pd.DataFrame(shap_coords_long, columns=["chrom", "start", "end"])
subset_inds = shap_coords_long_table.reset_index().drop_duplicates(["chrom", "start", "end"]).merge(
shap_coords_table.reset_index(), on=["chrom", "start", "end"]
).sort_values("index_y")["index_x"].values
hyp_scores_long = hyp_scores_long[subset_inds]
one_hot_seqs_long = one_hot_seqs_long[subset_inds]
shap_coords_long = shap_coords_long[subset_inds]
# Make sure the coordinates all match
assert np.all(shap_coords_long == shap_coords)
# Import the set of all profiles and their coordinates
true_profs, pred_profs, all_pred_coords = util.import_profiles(preds_path)
# Subset the predicted profiles/coordinates to the task-specific SHAP coordinates/scores
pred_coords_table = pd.DataFrame(all_pred_coords, columns=["chrom", "start", "end"])
subset_inds = pred_coords_table.reset_index().drop_duplicates(["chrom", "start", "end"]).merge(
shap_coords_table.reset_index(), on=["chrom", "start", "end"]
).sort_values("index_y")["index_x"].values
true_profs = true_profs[subset_inds]
pred_profs = pred_profs[subset_inds]
pred_coords = all_pred_coords[subset_inds]
# Make sure the coordinates all match
assert np.all(pred_coords == shap_coords)
# Import the TF-MoDISco results object
tfm_obj = util.import_tfmodisco_results(tfm_results_path, hyp_scores, one_hot_seqs, shap_score_center_size)
For each motif, show:
num_seqlets_to_show = 3
sizes_to_show = [1000, 400]
metaclusters = tfm_obj.metacluster_idx_to_submetacluster_results
num_metaclusters = len(metaclusters.keys())
for metacluster_i, metacluster_key in enumerate(metaclusters.keys()):
metacluster = metaclusters[metacluster_key]
display(vdomh.h3("Metacluster %d/%d" % (metacluster_i + 1, num_metaclusters)))
patterns = metacluster.seqlets_to_patterns_result.patterns
if not patterns:
break
num_patterns = len(patterns)
for pattern_i, pattern in enumerate(patterns):
seqlets = pattern.seqlets
display(vdomh.h4("Pattern %d/%d" % (pattern_i + 1, num_patterns)))
display(vdomh.p("%d seqlets" % len(seqlets)))
pfm = pattern["sequence"].fwd
hcwm = pattern["task0_hypothetical_contribs"].fwd
cwm = pattern["task0_contrib_scores"].fwd
# Trim motif based on information content
ic = util.info_content(pfm)
pass_inds = np.where(ic >= 0.2)[0] # Cut off flanks with less than 0.2 IC
trimmed_hcwm = hcwm[max(0, np.min(pass_inds) - 4): min(len(pfm), np.max(pass_inds) + 4 + 1)]
viz_sequence.plot_weights(trimmed_hcwm, figsize=(20, 4), subticks_frequency=(len(trimmed_hcwm) + 1))
# Pick some random seqlets to show
for seqlet_i in np.random.choice(len(seqlets), size=num_seqlets_to_show, replace=False):
seqlet = seqlets[seqlet_i]
coord_index = seqlet.coor.example_idx
seqlet_start = seqlet.coor.start
seqlet_end = seqlet.coor.end
seqlet_rc = seqlet.coor.is_revcomp
hyp = hyp_scores_long[coord_index]
seq = one_hot_seqs_long[coord_index]
seqlet_seq = one_hot_seqs[coord_index, seqlet_start:seqlet_end]
seqlet_hyp = hyp_scores[coord_index, seqlet_start:seqlet_end]
true_prof = true_profs[coord_index]
pred_prof = pred_profs[coord_index]
true_prof_fig = plot_profiles(true_prof, return_fig=True)
pred_prof_fig = plot_profiles(pred_prof, return_fig=True)
true_prof_fig.tight_layout()
pred_prof_fig.tight_layout()
table_rows = [
vdomh.tr(
vdomh.td("Observed profiles"),
vdomh.td(util.figure_to_vdom_image(true_prof_fig))
),
vdomh.tr(
vdomh.td("Predicted profiles"),
vdomh.td(util.figure_to_vdom_image(pred_prof_fig))
)
]
for size in sizes_to_show:
start = (input_length // 2) - (size // 2)
end = start + size
fig = viz_sequence.plot_weights(hyp[start:end] * seq[start:end], subticks_frequency=(size + 1), return_fig=True)
fig.tight_layout()
table_rows.append(
vdomh.tr(
vdomh.td("Importance scores (%d bp)" % size),
vdomh.td(util.figure_to_vdom_image(fig))
)
)
fig = viz_sequence.plot_weights(seqlet_hyp * seqlet_seq, subticks_frequency=(len(seqlet_hyp) + 1), return_fig=True)
fig.tight_layout()
table_rows.append(
vdomh.tr(
vdomh.td("Seqlet"),
vdomh.td(util.figure_to_vdom_image(fig))
)
)
table = vdomh.table(*table_rows)
display(table)
plt.close("all")
12988 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
527 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
324 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
164 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
150 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
206 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
212 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
107 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
41 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
133 seqlets
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |
| Observed profiles | |
| Predicted profiles | |
| Importance scores (1000 bp) | |
| Importance scores (400 bp) | |
| Seqlet |