diff --git a/modelling/do_plots_promodII.py b/modelling/do_plots_promodII.py new file mode 100644 index 0000000000000000000000000000000000000000..6cbdc2ef95f483c07256ad5632fdaad320e82ee7 --- /dev/null +++ b/modelling/do_plots_promodII.py @@ -0,0 +1,163 @@ +import matplotlib.pyplot as plt +import json +import numpy as np +import math + + +promod_label = 'ProMod3' +promod2_label = 'ProModII' + +promod_data_file = 'promod_scores.json' +promod2_data_file = 'promodII_scores.json' + + +plot_name = 'promod3_vs_promodII.png' + +cred = (128.0/255,0.0,0.0) +cblue = (102.0/255,153.0/255,204.0/255) +cgreen = (102.0/255,148.0/255,0.0) +cpurple = (100.0/255,0.0,200.0/255) +corange = (255.0/255,123.0/255,0.0) + +with open(promod_data_file) as fh: + promod_data = json.load(fh) +with open(promod2_data_file) as fh: + promod2_data = json.load(fh) + +lddt_values_promod = list() +lddt_values_promod2 = list() +probity_values_promod = list() +probity_values_promod2 = list() +lddt_diffs = list() +probity_diffs = list() +keys = list() + +for key in promod_data: + if key in promod2_data: + lddt_values_promod.append(promod_data[key]['lddt'] * 100) + lddt_values_promod2.append(promod2_data[key]['lddt'] * 100) + lddt_diffs.append(lddt_values_promod[-1] - lddt_values_promod2[-1]) + probity_values_promod.append(promod_data[key]['MolProbity score']) + probity_values_promod2.append(promod2_data[key]['MolProbity score']) + probity_diffs.append(probity_values_promod[-1] - probity_values_promod2[-1]) + keys.append(key) + + +fig, axs = plt.subplots(3, 2, figsize=(7,10.5)) +hist_ax = axs[0,0] + +# plot both in the same plot +xs = np.linspace(-7.0, 7.0, 300) +n_lddt, bins_lddt, patches_lddt = hist_ax.hist(lddt_diffs, 50, range=(-7.0,7.0), + facecolor=cred, alpha=0.75, + label='lDDT', linewidth=2.0, edgecolor='k') +n_probity, bins_probity, patches_probity = hist_ax.hist(probity_diffs, 50, + range=(-7.0,7.0), + facecolor=cblue, alpha=0.75, + label='MolProbity', + linewidth=2.0, + edgecolor='k') +hist_ax.axvline(x=0.0, linewidth=2, color='k', linestyle='--') + +hist_ax.set_title('a) Modelling Benchmark', loc='left', y=1.08, x=-0.11, fontsize='x-large') +hist_ax.set_xlabel(r'$\Delta$ score (ProMod3 - ProModII)',fontsize='large') +hist_ax.set_ylabel('N',fontsize='large') +hist_ax.legend(frameon=False) + +probity_clash_promod = list() +probity_clash_promod2 = list() +probity_rotamer_outliers_promod = list() +probity_rotamer_outliers_promod2 = list() +probity_ramachandran_outliers_promod = list() +probity_ramachandran_outliers_promod2 = list() +keys = list() +for key in promod_data: + if key in promod2_data: + probity_clash_promod.append(promod_data[key]['Clashscore']) + probity_clash_promod2.append(promod2_data[key]['Clashscore']) + probity_rotamer_outliers_promod.append(promod_data[key]['Rotamer outliers']) + probity_rotamer_outliers_promod2.append(promod2_data[key]['Rotamer outliers']) + probity_ramachandran_outliers_promod.append(promod_data[key]['Ramachandran outliers']) + probity_ramachandran_outliers_promod2.append(promod2_data[key]['Ramachandran outliers']) + keys.append(key) + + + +def DoThingsWithAxes(ax, x_values, y_values, title, xlabel, ylabel): + + ax.plot(x_values, y_values, '.', color = (128.0/255,0.0,0.0)) + ax.plot([-1.0,1000.0], [-1.0,1000], color = 'k',linestyle='--') + ax.set_title(title, loc='left', y=1.08, x=-0.11, fontsize='x-large') + ax.set_xlabel(xlabel, fontsize='large') + ax.set_ylabel(ylabel, fontsize='large') + max_val = math.ceil(max([max(x_values), max(y_values)])) + ax.set_xlim([0, max_val]) + ax.set_ylim([0, max_val]) + ax.set_aspect('equal', 'box') + + tick_locations = list() + step_size = None + if max_val <= 5: + step_size = 1 + elif max_val <= 14: + step_size = 2 + elif max_val <= 30: + step_size = 5 + elif max_val <= 100: + step_size = 20 + else: + step_size = 50 + for i in range(0, int(max_val)+step_size, step_size): + tick_locations.append(i) + + ax.set_xticks(tick_locations) + ax.set_yticks(tick_locations) + + +lddt_ax = axs[0, 1] +probity_overall_ax = axs[1, 0] +probity_clash_ax = axs[1, 1] +probity_rotamer_ax = axs[2, 0] +probity_ramachandran_ax = axs[2, 1] + + +DoThingsWithAxes(lddt_ax, lddt_values_promod, + lddt_values_promod2, 'b) lDDT', + promod_label, promod2_label) + +DoThingsWithAxes(probity_overall_ax, probity_values_promod, + probity_values_promod2, 'c) MolProbity Overall', + promod_label, promod2_label) + +DoThingsWithAxes(probity_clash_ax, probity_clash_promod, + probity_clash_promod2, 'd) MolProbity Clash', + promod_label, promod2_label) + +DoThingsWithAxes(probity_rotamer_ax, probity_rotamer_outliers_promod, + probity_rotamer_outliers_promod2, 'e) MolProbity Rot. Outliers', + promod_label, promod2_label) + +DoThingsWithAxes(probity_ramachandran_ax, probity_ramachandran_outliers_promod, + probity_ramachandran_outliers_promod2, + 'f) MolProbity Ram. Outliers', promod_label, promod2_label) + +plt.tight_layout(pad=1.2, h_pad=1.5, w_pad=1.5, rect=None) +plt.savefig(plot_name, dpi=300) + +print('avg. lddt value', promod_label, np.mean(lddt_values_promod)) +print('avg. lddt value', promod2_label, np.mean(lddt_values_promod2)) +print('diff avg lddt value',np.mean(lddt_values_promod)-np.mean(lddt_values_promod2)) +print('avg. probity value', promod_label, np.mean(probity_values_promod)) +print('avg. probity value', promod2_label, np.mean(probity_values_promod2)) +print('diff avg probity value', np.mean(probity_values_promod)-np.mean(probity_values_promod2)) +print('avg. Molprobity clash', promod_label, np.mean(probity_clash_promod)) +print('avg. Molprobity clash', promod2_label, np.mean(probity_clash_promod2)) +print('avg. Molprobity rotamer outliers', promod_label, + np.mean(probity_rotamer_outliers_promod)) +print('avg. Molprobity rotamer outliers', promod2_label, + np.mean(probity_rotamer_outliers_promod2)) +print('avg. Ramachandran outliers', promod_label, + np.mean(probity_ramachandran_outliers_promod)) +print('avg. Ramachandran outliers', promod2_label, + np.mean(probity_ramachandran_outliers_promod2)) + diff --git a/modelling/promod3_vs_promodII.png b/modelling/promod3_vs_promodII.png new file mode 100644 index 0000000000000000000000000000000000000000..2643cc18d8f19d473827c4ccfd9055d1795e136b Binary files /dev/null and b/modelling/promod3_vs_promodII.png differ