def design_fnd_scatter(args): sc_df = Rf.score_file2df(args['sc'], args['names']) args['logger'].log('found %i structs in sc_df' % len(sc_df)) pc_df = get_rmsds_from_table(args['pc']) args['logger'].log('found %i structs in pc' % len(pc_df)) a = sc_df.merge(pc_df, on='description') sc_df = a.copy() sc_df = sc_df[sc_df['a_tms_span'] > 0.5] threshold = np.percentile(sc_df['score'], args['percent']) sc_df = sc_df[sc_df['score'] < threshold] original_df = Rf.score_file2df(args['original_sc']) for d in original_df['description']: if args['name'] in d: row_name = d original_row = original_df[original_df['description'] == row_name] term_dict = {'total_score': {'ou': 'under'}, 'a_sasa': {'ou': 'over'}, 'a_pack': {'ou': 'over'}, # 'a_shape': {'ou': 'over'}, 'a_res_solv': {'ou': 'under'}, 'a_ddg': {'ou': 'under'}, 'a_span_topo': {'ou': 'over'}} for term in term_dict.keys(): if term == 'a_res_solv': term_dict[term]['threshold'] = 0.5 * original_row[term].values[0] else: term_dict[term]['threshold'] = 0.8 * original_row[term].values[0] sc_df, fail_msg = Rf.remove_failed_dict(sc_df, term_dict) for k, v in fail_msg.items(): print(v) if args['mode'] == 'all_fnds': return sc_df fig, ax = plt.subplots() ax.scatter(sc_df['pc_rmsd'].values, sc_df['score'].values, marker='o', c=sc_df['a_span_topo'].values, picker=True, cmap=plt.cm.coolwarm) min_energy = np.nanmin(list(sc_df['score'].values)) max_energy = np.nanmax(list(sc_df['score'].values)) plt.ylim([min_energy - 1, max_energy + 1]) plt.xlim([0, 15]) plt.title(args['name']) z_score, rmsd_threshold = rf.get_z_score_by_rmsd_percent(sc_df) plt.text(0.75, 0.2, "zscore=%.2f" % z_score, transform=ax.transaxes) plt.axvline(rmsd_threshold) point_label_cols = list(set(args['terms'] + ['description', 'a_sasa', 'a_res_solv', 'a_pack', 'a_span_topo', 'a_ddg', 'fa_elec'])) pl = PointLabel(sc_df, ax, fig, 'pc_rmsd', 'score', point_label_cols, args['logger']) # a_shape ??? fig.canvas.mpl_connect('pick_event', pl.onpick) if args['show'] == 'show': plt.show() else: plt.savefig('%s.png' % args['name'])