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'])