| import numpy as np |
| import matplotlib |
| import matplotlib.pyplot as plt |
| import matplotlib.patches as mpatches |
| import random |
| import seaborn as sns |
| import os |
| import torch |
| import argparse |
| from util import * |
| sns.set() |
| sns.set_style('ticks') |
|
|
| device = 'cpu' |
|
|
|
|
| |
| params = {'legend.fontsize': 50, |
| 'figure.figsize': (54, 54), |
| 'axes.labelsize':60, |
| 'axes.titlesize':60, |
| 'xtick.labelsize':60, |
| 'ytick.labelsize':40} |
|
|
| plt.rcParams.update(params) |
|
|
| colors = ["#3c5068", "#acbab6", "#dcd3cd", "#d4a6a6", '#451120'] |
|
|
| np.random.seed(25) |
|
|
| fig, axs = plt.subplots(4,2, ) |
|
|
| def prepare_mttrans(seqs): |
| seqs_init = torch.tensor(np.array(one_hot_all_motif(seqs),dtype=np.float32)) |
|
|
| seqs_init = torch.transpose(seqs_init, 1, 2) |
| seqs_init = torch.tensor(seqs_init,dtype=torch.float32).to('cpu') |
| return seqs_init |
|
|
| DISPLAY_DIFF = True |
|
|
| root_path = './outputs/' |
| mpath = './scripts/checkpoint/RL_hard_share_MTL/3M/schedule_lr-model_best_cv1.pth' |
| gpath = './../../models/checkpoint_3000.h5' |
| mrl_path = './../../models/utr_model_combined_residual_new.h5' |
| exp_path = './../../models/humanMedian_trainepoch.11-0.426.h5' |
| tpath = './scripts/checkpoint/RL_hard_share_MTL/3R/schedule_MTL-model_best_cv1.pth' |
|
|
|
|
| K = 64 |
|
|
| |
| gene_name = 'IFNG' |
|
|
| init = [] |
| with open('./outputs_joint/init_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init = [float(score.replace('\n','')) for score in scores] |
|
|
| opt = [] |
| with open('./outputs_joint/opt_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt = [float(score.replace('\n','')) for score in scores] |
|
|
| init_seqs = [] |
| with open('./outputs_joint/init_seqs_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init_seqs = [score.replace('\n','') for score in scores] |
|
|
| opt_seqs = [] |
| with open('./outputs_joint/best_seqs_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt_seqs = [score.replace('\n','') for score in scores] |
|
|
| te_model = torch.load(tpath,map_location=torch.device(device))['state_dict'] |
| te_model.train().to(device) |
|
|
| mrl_model = torch.load(mpath,map_location=torch.device(device))['state_dict'] |
| mrl_model.train().to(device) |
|
|
| te_seqs_init = prepare_mttrans(init_seqs) |
| te_seqs_opt = prepare_mttrans(opt_seqs) |
|
|
| te_preds_init = np.reshape(te_model.forward(te_seqs_init).cpu().data.numpy(),(-1)) |
| te_preds_opt = np.reshape(te_model.forward(te_seqs_opt).cpu().data.numpy(),(-1)) |
|
|
| mrl_preds_init = np.reshape(mrl_model.forward(te_seqs_init).cpu().data.numpy(),(-1)) |
| mrl_preds_opt = np.reshape(mrl_model.forward(te_seqs_opt).cpu().data.numpy(),(-1)) |
|
|
| init = np.power(10,init) |
| opt = np.power(10,opt) |
|
|
| selected = random.choices([i for i in range(len(init))],k=64) |
| init = init[selected] |
| opt = opt[selected] |
|
|
| print(gene_name) |
| print(f"Average Opt: {np.average(opt)}") |
| print(f"Average Init: {np.average(init)}") |
| print(f"Max Opt: {np.max(opt)}") |
| print(f"Max Init: {np.max(init)}") |
| print(f"Max Increase (wrt Init) : {np.max(opt/init)}") |
| print(f"Average Increase (wrt Init) : {np.mean(opt/init)}") |
| print(f"Max Increase (wrt Natural) : {np.max(opt/np.power(10,-0.63))}") |
|
|
| diffs = (opt - init)/init |
| print(f"Average Percent Increase (wrt Init): {np.average(diffs)}") |
| print(f"Max TE after opt: {np.max(te_preds_opt)}") |
|
|
| indices = np.argsort(opt)[::-1] |
|
|
| init_large = [] |
| init_small = [] |
| opt_large = [] |
| opt_small = [] |
|
|
| for i in range(len(indices)): |
| if diffs[indices[i]] >= 0: |
| init_small.append(init[indices[i]]) |
| init_large.append(0) |
| opt_small.append(0) |
| opt_large.append(opt[indices[i]]) |
| else: |
| init_large.append(init[indices[i]]) |
| init_small.append(0) |
| opt_large.append(0) |
| opt_small.append(opt[indices[i]]) |
|
|
| width = 1.0/(len(indices)) |
| bins = [(i+1) * width for i in range(len(indices))] |
|
|
| ns = [i * width for i in range(len(indices))] |
|
|
|
|
| axs[0,0].bar(x=ns, bottom=0, width=width, height=opt_large, color=colors[0], edgecolor="white") |
| axs[0,0].bar(x=ns, bottom=0, width=width, height=opt_small, color=colors[0], edgecolor="white") |
| axs[0,0].bar(x=ns, bottom=0, width=width, height=init_small, color=colors[3], edgecolor="white") |
| axs[0,0].bar(x=ns, bottom=0, width=width, height=init_large, color=colors[3], edgecolor="white") |
| axs[0,0].axhline(y = np.power(10,-1.09), color = colors[4], linestyle = '-', linewidth = 5) |
|
|
| axs[0,0].set_title(gene_name,loc='left',style='italic') |
| axs[0,0].set_xticks([]) |
|
|
| real_x = ['Optimized' for i in range(len(init))] |
| gen_x = ['Initial' for i in range(len(opt))] |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((init,opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((mrl_preds_init,mrl_preds_opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((te_preds_init,te_preds_opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| sns.boxplot(x=df['x'],y=df['y'],ax=axs[0,1],palette={'Initial':colors[3],'Optimized':colors[0]}) |
|
|
| orange_patch = mpatches.Patch(color='tab:orange', label='Initial Expression') |
| blue_patch = mpatches.Patch(color='tab:blue', label='Optimized Expression') |
|
|
| gene_name = 'TLR6' |
|
|
| init = [] |
| with open('./outputs_joint/init_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init = [float(score.replace('\n','')) for score in scores] |
|
|
| opt = [] |
| with open('./outputs_joint/opt_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt = [float(score.replace('\n','')) for score in scores] |
|
|
| init_seqs = [] |
| with open('./outputs_joint/init_seqs_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init_seqs = [score.replace('\n','') for score in scores] |
|
|
| opt_seqs = [] |
| with open('./outputs_joint/best_seqs_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt_seqs = [score.replace('\n','') for score in scores] |
|
|
| te_model = torch.load(tpath,map_location=torch.device(device))['state_dict'] |
| te_model.train().to(device) |
|
|
| mrl_model = torch.load(mpath,map_location=torch.device(device))['state_dict'] |
| mrl_model.train().to(device) |
|
|
| te_seqs_init = prepare_mttrans(init_seqs) |
| te_seqs_opt = prepare_mttrans(opt_seqs) |
|
|
| te_preds_init = np.reshape(te_model.forward(te_seqs_init).cpu().data.numpy(),(-1)) |
| te_preds_opt = np.reshape(te_model.forward(te_seqs_opt).cpu().data.numpy(),(-1)) |
|
|
| mrl_preds_init = np.reshape(mrl_model.forward(te_seqs_init).cpu().data.numpy(),(-1)) |
| mrl_preds_opt = np.reshape(mrl_model.forward(te_seqs_opt).cpu().data.numpy(),(-1)) |
|
|
| init = np.power(10,init) |
| opt = np.power(10,opt) |
|
|
| selected = random.choices([i for i in range(len(init))],k=64) |
| init = init[selected] |
| opt = opt[selected] |
|
|
| print(gene_name) |
| print(f"Average Opt: {np.average(opt)}") |
| print(f"Average Init: {np.average(init)}") |
| print(f"Max Opt: {np.max(opt)}") |
| print(f"Max Init: {np.max(init)}") |
| print(f"Max Increase (wrt Init) : {np.max(opt/init)}") |
| print(f"Average Increase (wrt Init) : {np.mean(opt/init)}") |
| print(f"Max Increase (wrt Natural) : {np.max(opt/np.power(10,-0.63))}") |
|
|
| diffs = (opt - init)/init |
| print(f"Average Percent Increase (wrt Init): {np.average(diffs)}") |
| print(f"Max TE after opt: {np.max(te_preds_opt)}") |
|
|
| indices = np.argsort(opt)[::-1] |
|
|
| init_large = [] |
| init_small = [] |
| opt_large = [] |
| opt_small = [] |
|
|
| for i in range(len(indices)): |
| if diffs[indices[i]] >= 0: |
| init_small.append(init[indices[i]]) |
| init_large.append(0) |
| opt_small.append(0) |
| opt_large.append(opt[indices[i]]) |
| else: |
| init_large.append(init[indices[i]]) |
| init_small.append(0) |
| opt_large.append(0) |
| opt_small.append(opt[indices[i]]) |
|
|
| width = 1.0/(len(indices)) |
| bins = [(i+1) * width for i in range(len(indices))] |
|
|
| ns = [i * width for i in range(len(indices))] |
|
|
| axs[1,0].bar(x=ns, bottom=0, width=width, height=opt_large, color= colors[0], edgecolor="white") |
| axs[1,0].bar(x=ns, bottom=0, width=width, height=opt_small, color= colors[0], edgecolor="white") |
| axs[1,0].bar(x=ns, bottom=0, width=width, height=init_small, color= colors[3], edgecolor="white") |
| axs[1,0].bar(x=ns, bottom=0, width=width, height=init_large, color= colors[3], edgecolor="white") |
| axs[1,0].axhline(y = np.power(10,-0.37), color = colors[4], linestyle = '-', linewidth = 5) |
|
|
| axs[1,0].set_title(gene_name,loc='left',style='italic') |
|
|
| axs[1,0].set_xticks([]) |
|
|
| real_x = ['Optimized' for i in range(len(init))] |
| gen_x = ['Initial' for i in range(len(opt))] |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((init,opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((mrl_preds_init,mrl_preds_opt)) |
|
|
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((te_preds_init,te_preds_opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| sns.boxplot(x=df['x'],y=df['y'],ax=axs[1,1],palette={'Initial':colors[3],'Optimized':colors[0]}) |
|
|
| orange_patch = mpatches.Patch(color='tab:orange', label='Initial Expression') |
| blue_patch = mpatches.Patch(color='tab:blue', label='Optimized Expression') |
|
|
| gene_name = 'TNF' |
|
|
| init = [] |
| with open('./outputs_joint/init_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init = [float(score.replace('\n','')) for score in scores] |
|
|
| opt = [] |
| with open('./outputs_joint/opt_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt = [float(score.replace('\n','')) for score in scores] |
|
|
| init_seqs = [] |
| with open('./outputs_joint/init_seqs_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init_seqs = [score.replace('\n','') for score in scores] |
|
|
| opt_seqs = [] |
| with open('./outputs_joint/best_seqs_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt_seqs = [score.replace('\n','') for score in scores] |
|
|
| te_model = torch.load(tpath,map_location=torch.device(device))['state_dict'] |
| te_model.train().to(device) |
|
|
| mrl_model = torch.load(mpath,map_location=torch.device(device))['state_dict'] |
| mrl_model.train().to(device) |
|
|
| te_seqs_init = prepare_mttrans(init_seqs) |
| te_seqs_opt = prepare_mttrans(opt_seqs) |
|
|
| te_preds_init = np.reshape(te_model.forward(te_seqs_init).cpu().data.numpy(),(-1)) |
| te_preds_opt = np.reshape(te_model.forward(te_seqs_opt).cpu().data.numpy(),(-1)) |
|
|
| mrl_preds_init = np.reshape(mrl_model.forward(te_seqs_init).cpu().data.numpy(),(-1)) |
| mrl_preds_opt = np.reshape(mrl_model.forward(te_seqs_opt).cpu().data.numpy(),(-1)) |
|
|
| init = np.power(10,init) |
| opt = np.power(10,opt) |
|
|
| selected = random.choices([i for i in range(len(init))],k=64) |
| init = init[selected] |
| opt = opt[selected] |
|
|
| print(gene_name) |
| print(f"Average Opt: {np.average(opt)}") |
| print(f"Average Init: {np.average(init)}") |
| print(f"Max Opt: {np.max(opt)}") |
| print(f"Max Init: {np.max(init)}") |
| print(f"Max Increase (wrt Init) : {np.max(opt/init)}") |
| print(f"Average Increase (wrt Init) : {np.mean(opt/init)}") |
| print(f"Max Increase (wrt Natural) : {np.max(opt/np.power(10,-0.63))}") |
|
|
| diffs = (opt - init)/init |
| print(f"Average Percent Increase (wrt Init): {np.average(diffs)}") |
| print(f"Max TE after opt: {np.max(te_preds_opt)}") |
|
|
| indices = np.argsort(opt)[::-1] |
|
|
| init_large = [] |
| init_small = [] |
| opt_large = [] |
| opt_small = [] |
|
|
| for i in range(len(indices)): |
| if diffs[indices[i]] >= 0: |
| init_small.append(init[indices[i]]) |
| init_large.append(0) |
| opt_small.append(0) |
| opt_large.append(opt[indices[i]]) |
| else: |
| init_large.append(init[indices[i]]) |
| init_small.append(0) |
| opt_large.append(0) |
| opt_small.append(opt[indices[i]]) |
|
|
| width = 1.0/(len(indices)) |
| bins = [(i+1) * width for i in range(len(indices))] |
|
|
| ns = [i * width for i in range(len(indices))] |
|
|
| axs[2,0].bar(x=ns, bottom=0, width=width, height=opt_large, color= colors[0], edgecolor="white") |
| axs[2,0].bar(x=ns, bottom=0, width=width, height=opt_small, color= colors[0], edgecolor="white") |
| axs[2,0].bar(x=ns, bottom=0, width=width, height=init_small, color= colors[3], edgecolor="white") |
| axs[2,0].bar(x=ns, bottom=0, width=width, height=init_large, color= colors[3], edgecolor="white") |
| axs[2,0].axhline(y = np.power(10,-0.91), color = colors[4], linestyle = '-', linewidth = 5) |
|
|
| axs[2,0].set_title(gene_name,loc='left',style='italic') |
| axs[2,0].set_xticks([]) |
|
|
| real_x = ['Optimized' for i in range(len(init))] |
| gen_x = ['Initial' for i in range(len(opt))] |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((init,opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((mrl_preds_init,mrl_preds_opt)) |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((te_preds_init,te_preds_opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| sns.boxplot(x=df['x'],y=df['y'],ax=axs[2,1],palette={'Initial':colors[3],'Optimized':colors[0]}) |
|
|
| orange_patch = mpatches.Patch(color='tab:orange', label='Initial Expression') |
| blue_patch = mpatches.Patch(color='tab:blue', label='Optimized Expression') |
|
|
|
|
| gene_name = 'TP53' |
|
|
| init = [] |
| with open('./outputs_joint/init_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init = [float(score.replace('\n','')) for score in scores] |
|
|
| opt = [] |
| with open('./outputs_joint/opt_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt = [float(score.replace('\n','')) for score in scores] |
|
|
| init_seqs = [] |
| with open('./outputs_joint/init_seqs_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init_seqs = [score.replace('\n','') for score in scores] |
|
|
| opt_seqs = [] |
| with open('./outputs_joint/best_seqs_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt_seqs = [score.replace('\n','') for score in scores] |
|
|
| te_model = torch.load(tpath,map_location=torch.device(device))['state_dict'] |
| te_model.train().to(device) |
|
|
| mrl_model = torch.load(mpath,map_location=torch.device(device))['state_dict'] |
| mrl_model.train().to(device) |
|
|
| te_seqs_init = prepare_mttrans(init_seqs) |
| te_seqs_opt = prepare_mttrans(opt_seqs) |
|
|
| te_preds_init = np.reshape(te_model.forward(te_seqs_init).cpu().data.numpy(),(-1)) |
| te_preds_opt = np.reshape(te_model.forward(te_seqs_opt).cpu().data.numpy(),(-1)) |
|
|
| mrl_preds_init = np.reshape(mrl_model.forward(te_seqs_init).cpu().data.numpy(),(-1)) |
| mrl_preds_opt = np.reshape(mrl_model.forward(te_seqs_opt).cpu().data.numpy(),(-1)) |
|
|
| init = np.power(10,init) |
| opt = np.power(10,opt) |
|
|
| selected = random.choices([i for i in range(len(init))],k=64) |
| init = init[selected] |
| opt = opt[selected] |
|
|
| print(gene_name) |
| print(f"Average Opt: {np.average(opt)}") |
| print(f"Average Init: {np.average(init)}") |
| print(f"Max Opt: {np.max(opt)}") |
| print(f"Max Init: {np.max(init)}") |
| print(f"Max Increase (wrt Init) : {np.max(opt/init)}") |
| print(f"Average Increase (wrt Init) : {np.mean(opt/init)}") |
| print(f"Max Increase (wrt Natural) : {np.max(opt/np.power(10,-0.63))}") |
|
|
| diffs = (opt - init)/init |
| print(f"Average Percent Increase (wrt Init): {np.average(diffs)}") |
| print(f"Max TE after opt: {np.max(te_preds_opt)}") |
|
|
| indices = np.argsort(opt)[::-1] |
|
|
| init_large = [] |
| init_small = [] |
| opt_large = [] |
| opt_small = [] |
|
|
| for i in range(len(indices)): |
| if diffs[indices[i]] >= 0: |
| init_small.append(init[indices[i]]) |
| init_large.append(0) |
| opt_small.append(0) |
| opt_large.append(opt[indices[i]]) |
| else: |
| init_large.append(init[indices[i]]) |
| init_small.append(0) |
| opt_large.append(0) |
| opt_small.append(opt[indices[i]]) |
|
|
| width = 1.0/(len(indices)) |
| bins = [(i+1) * width for i in range(len(indices))] |
|
|
| ns = [i * width for i in range(len(indices))] |
|
|
| axs[3,0].bar(x=ns, bottom=0, width=width, height=opt_large, color=colors[0], edgecolor="white") |
| axs[3,0].bar(x=ns, bottom=0, width=width, height=opt_small, color=colors[0], edgecolor="white") |
| axs[3,0].bar(x=ns, bottom=0, width=width, height=init_small, color=colors[3], edgecolor="white") |
| axs[3,0].bar(x=ns, bottom=0, width=width, height=init_large, color=colors[3], edgecolor="white") |
| axs[3,0].axhline(y = np.power(10,-0.63), color = colors[4], linestyle = '-', linewidth = 5) |
|
|
| axs[3,0].set_title(gene_name,loc='left',style='italic') |
| axs[3,0].set_xticks([]) |
|
|
| real_x = ['Optimized' for i in range(len(init))] |
| gen_x = ['Initial' for i in range(len(opt))] |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((init,opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((mrl_preds_init,mrl_preds_opt)) |
|
|
| print(len(x)) |
| print(len(y)) |
|
|
| print(x) |
| print(y) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| |
|
|
| x = np.concatenate((gen_x,real_x)) |
| y = np.concatenate((te_preds_init,te_preds_opt)) |
|
|
| df = pd.DataFrame({'x':x,'y':y}) |
|
|
| sns.boxplot(x=df['x'],y=df['y'],ax=axs[3,1],palette={'Initial':colors[3],'Optimized':colors[0]}) |
|
|
| orange_patch = mpatches.Patch(color=colors[3], label='Initial Expression') |
| blue_patch = mpatches.Patch(color=colors[0], label='Optimized Expression') |
| fig.legend(handles=[orange_patch,blue_patch],loc=(0.52,0.95)) |
|
|
| axs[0,0].set_ylabel('TPM Expression') |
| axs[1,0].set_ylabel('TPM Expression') |
| axs[2,0].set_ylabel('TPM Expression') |
| axs[3,0].set_ylabel('TPM Expression') |
| axs[3,0].set_xlabel('UTR Samples') |
|
|
| axs[0,1].set_xlabel('') |
| axs[1,1].set_xlabel('') |
| axs[2,1].set_xlabel('') |
| axs[3,1].set_xlabel('') |
| axs[0,1].set_ylabel('Log Translation Efficiency') |
| axs[1,1].set_ylabel('Log Translation Efficiency') |
| axs[2,1].set_ylabel('Log Translation Efficiency') |
| axs[3,1].set_ylabel('Log Translation Efficiency') |
| axs[0,1].yaxis.tick_right() |
| axs[1,1].yaxis.tick_right() |
| axs[2,1].yaxis.tick_right() |
| axs[3,1].yaxis.tick_right() |
| axs[0,1].yaxis.set_label_position("right") |
| axs[1,1].yaxis.set_label_position("right") |
| axs[2,1].yaxis.set_label_position("right") |
| axs[3,1].yaxis.set_label_position("right") |
|
|
| fig.tight_layout() |
|
|
| plt.savefig(f'./../../analysis/plots/joint_all.png') |
|
|
| print('Figure saved in: "./../../analysis/plots/joint_all.png"') |
|
|
|
|
|
|
|
|
|
|
|
|