def main(list_input_dirs, energies_names, output_pre, scales, offsets):
    #read in and rename arguments
    inp_dir1=list_input_dirs[0][0]
    scoretype1=list_input_dirs[0][1]
    inp_dir2=list_input_dirs[1][0]
    scoretype2=list_input_dirs[1][1]

    title1 = os.path.basename(inp_dir1)
    title2 = os.path.basename(inp_dir2)

    #keep inp_dir1 as constant
    #loop through energies_names[scoretype2]
    #for each energies_names - make a list of weights either using random or centered around mean using sampling bins and nbins from input parameters

    #recursive method - input is list of energies, list of weights per energy, and index of energy. 
    #for that energy, loops thru list of weights, and kicks off further method per next index
    #base case - index = len(list). create weighted dec2, nat2.  merge dicts. convert_disc and get list of discs, one per pdb. return this.
    dec1_total = scorefileparse.read_dir(inp_dir1, scoretype1)
    dec1_total_disc = discparse.pdbs_dict_to_metrics(dec1_total)
    dec2_total = scorefileparse.read_dir(inp_dir2, scoretype2)
    dec2_total_disc = discparse.pdbs_dict_to_metrics(dec2_total)

    dec1 = scorefileparse.read_dir(inp_dir1, scoretype1, list_energies=energies_names[scoretype1])

    weights = [ np.linspace(-2.0, 2.0, num=9).tolist() for _ in energies_names[scoretype2] ] 

    lwd = [ [] for _ in xrange(0, len(weights)+1) ] # need list for each weight + one for pdb_disc_dict
    loop_weights(energies_names[scoretype2], weights, scales, offsets, dec1, inp_dir2, scoretype2, [], lwd)
    list_avg_pdbs_deltaS_R = [ avg_pdbs_deltaS(deltaS_pdbs_disc_dict(pdbs_disc_dict, dec1_total_disc)) for pdbs_disc_dict in lwd[-1] ] 
    list_avg_pdbs_deltaS_A = [ avg_pdbs_deltaS(deltaS_pdbs_disc_dict(pdbs_disc_dict, dec2_total_disc)) for pdbs_disc_dict in lwd[-1] ]

    list_weights_deltaS = lwd[:-1]
    list_weights_deltaS.append(list_avg_pdbs_deltaS_R)
    list_weights_deltaS.append(list_avg_pdbs_deltaS_A)
    
    weights_deltaS_arr = np.array(list_weights_deltaS, dtype="float")
    weights_deltaS_arr = weights_deltaS_arr.T
    
    unique_z_vals = np.unique(weights_deltaS_arr[:,2])

    low_dS = sorted(weights_deltaS_arr[:,3].tolist())[0:3]
    low_dS_ind = [ i for i,dS in enumerate(weights_deltaS_arr[:,3].tolist()) if dS in low_dS ]

    for ind in low_dS_ind:
	pdvd.plot(dec1_total_disc, lwd[-1][ind], "Rosetta", "Combined", "{0}{1}_".format(output_pre,ind,"_"), add_slash=False)
        pdvd.plot(dec2_total_disc, lwd[-1][ind], "Amber", "Combined", "{0}{1}_".format(output_pre,ind,"_"), add_slash=False)

    #w_dS_sorted = weights_deltaS_arr[np.lexsort((weights_deltaS_arr[:,0],weights_deltaS_arr[:,1]))]
    w_dS_sorted = weights_deltaS_arr

    plot_weights_dS(w_dS_sorted, 3, unique_z_vals, title1, title2, energies_names[scoretype2][0], energies_names[scoretype2][1], energies_names[scoretype2][2])

    plot_weights_dS(w_dS_sorted, 4, unique_z_vals, title1, title2, energies_names[scoretype2][0], energies_names[scoretype2][1], energies_names[scoretype2][2])

    filename_txt = args.output_pre + "/" + title1 + "_" + title2 + "_weights_vs_deltaS.txt"

    np.savetxt(filename_txt, w_dS_sorted, fmt='%2.5f', delimiter=",", header="gb,elec,dihedral,deltaSR,deltaSA")
Ejemplo n.º 2
0
def main(input_dir, output_pre, repl_orig):
    #read in and rename arguments
    title1 = os.path.basename(input_dir[0][0])
    title2 = os.path.basename(input_dir[1][0])

    d1 = scorefileparse.read_dir(input_dir[0][0], input_dir[0][1], repl_orig)
    d2 = scorefileparse.read_dir(input_dir[1][0], input_dir[1][1], repl_orig)
    [dec_inter1, dec_inter2] = scorefileparse.pdbs_scores_intersect([d1, d2])       
    disc_metrics_1 = discparse.pdbs_dict_to_metrics(dec_inter1,input_dir[0][1])
    disc_metrics_2 = discparse.pdbs_dict_to_metrics(dec_inter2,input_dir[1][1])
    print len(dec_inter1)
    print len(dec_inter2)
    print disc_metrics_2
    plot(disc_metrics_1, disc_metrics_2, title1, title2, output_pre)
Ejemplo n.º 3
0
def main(input_dir, output_file):
    #read in and rename arguments
    title1 = os.path.basename(input_dir[0][0])

    d1 = scorefileparse.read_dir(input_dir[0][0], input_dir[0][1], repl_orig=False)
    disc_metrics = discparse.pdbs_dict_to_metrics(d1,input_dir[0][1])

    discparse.show_pdbs_dict_metrics(disc_metrics, filename=output_file) 
Ejemplo n.º 4
0
def main(input_dir_rosetta_sf, input_dir_amber_sf, input_dir_rosetta_pdb, input_dir_amber_pdb, output_dir, n_results):

    d1 = scorefileparse.read_dir(input_dir_rosetta_sf, 'rosetta', repl_orig=True)
    d2 = scorefileparse.read_dir(input_dir_amber_sf, 'amber', repl_orig=True)

    dec_norm1 = scorefileparse.norm_pdbs(d1)
    dec_norm2 = scorefileparse.norm_pdbs(d2)

    [dec_inter1, dec_inter2] = scorefileparse.pdbs_scores_intersect([dec_norm1, dec_norm2])       

    dec1_cp = copy.deepcopy(dec_inter1)
    dec2_cp = copy.deepcopy(dec_inter2)

    min_naive_by_pdb = {}

    for pdb in sorted(dec_inter1.keys()):
        for i in range(1,n_results+1):
            rosetta_lowest_energy = find_lowest_energy( dec_inter1[pdb] )
            amber_lowest_energy = find_lowest_energy( dec_inter2[pdb] )
            pareto_lowest_energy = find_pareto(dec1_cp, dec2_cp, pdb)

            #copy rosetta file
            src = os.join(input_dir_rosetta_pdb, pdb, rosetta_lowest_energy + "_0001.pdb")
            dst = os.join(output_dir,"rosetta","{0}_{1}.pdb".format(pdb,i)) 
            copyfile(src, dst)
            #copy amber file
            src = os.join(input_dir_rosetta_pdb, pdb, "min_NoH_" + amber_lowest_energy + ".pdb")
            dst = os.join(output_dir,"amber","{0}_{1}.pdb".format(pdb,i))
            copyfile(src, dst)
            #copy pareto file
            src = os.join(input_dir_rosetta_pdb, pdb, pareto_lowest_energy + "_0001.pdb")
            dst = os.join(output_dir,"combined","{0}_{1}.pdb".format(pdb,i))
            copyfile(src, dst)

            #delete from original scoredict so that next round will get the next-lowest
            dec_inter1[pdb].pop(rosetta_lowest_energy)
            dec_inter2[pdb].pop(amber_lowest_energy)
            dec1_cp[pdb].pop(pareto_lowest_energy)
            dec2_cp[pdb].pop(pareto_lowest_energy)
def loop_weights(energies, weights, scales, offsets, dec1, inp_dir2, scoretype2, curr_weights, list_weight_discs):
    if len(curr_weights) == len(energies):
        dec2 = scorefileparse.read_dir(inp_dir2, scoretype2, list_energies=energies, weights=curr_weights, scales=scales, offsets=offsets)
        [dec_inter1, dec_inter2] = scorefileparse.pdbs_intersect([dec1, dec2])
        merged = scorefileparse.merge_pdbs_dicts([dec_inter1, dec_inter2])

        list_discs = discparse.pdbs_dict_to_metrics(merged)
        for ind, weight in enumerate(curr_weights):
            list_weight_discs[ind].append(weight)
        list_weight_discs[-1].append(list_discs)
        return 

    energies_ind = len(curr_weights)

    list_weights = weights[energies_ind]
    for w in list_weights:
        temp_weights = curr_weights[:]
        temp_weights.append(w)
        loop_weights(energies, weights, scales, offsets, dec1, inp_dir2, scoretype2, temp_weights, list_weight_discs)
Ejemplo n.º 6
0
def main(input_dir_rosetta_sf, input_dir_amber_sf, input_dir_rosetta_pdb, input_dir_amber_pdb, output_dir, n_results, alternate_rmsd, start_ind_desc_amber, start_ind_desc_rosetta, end_ind_desc_amber, end_ind_desc_rosetta, add_pdb_to_path):

    if alternate_rmsd is True:
        d1 = scorefileparse.read_dir(input_dir_rosetta_sf, 'rosetta', repl_orig=False, rmsd='total_score', start_ind_desc=start_ind_desc_rosetta, end_ind_desc=end_ind_desc_rosetta)
        d2 = scorefileparse.read_dir(input_dir_amber_sf, 'amber', repl_orig=False, rmsd='tot', start_ind_desc=start_ind_desc_amber, end_ind_desc=end_ind_desc_amber)
    else:
	d1 = scorefileparse.read_dir(input_dir_rosetta_sf, 'rosetta', repl_orig=False, start_ind_desc=start_ind_desc_rosetta, end_ind_desc=end_ind_desc_rosetta)
        d2 = scorefileparse.read_dir(input_dir_amber_sf, 'amber', repl_orig=False, start_ind_desc=start_ind_desc_amber, end_ind_desc=end_ind_desc_amber)
    
    dec_norm1 = scorefileparse.norm_pdbs(d1)
    dec_norm2 = scorefileparse.norm_pdbs(d2)
    
    [dec_inter1, dec_inter2] = scorefileparse.pdbs_scores_intersect([dec_norm1, dec_norm2])       
    
    dec1_cp = copy.deepcopy(dec_inter1)
    dec2_cp = copy.deepcopy(dec_inter2)

    try:
        os.mkdir( os.path.join(output_dir,"rosetta") )
    except OSError:
        pass
    try:
        os.mkdir( os.path.join(output_dir,"amber") )
    except OSError:
        pass
    try:
        os.mkdir( os.path.join(output_dir,"combined") )
    except OSError:
        pass
    
    for pdb in sorted(dec_inter1.keys()):
        for i in range(1,n_results+1):
            rosetta_lowest_energy = find_lowest_energy( dec_inter1[pdb] )
            amber_lowest_energy = find_lowest_energy( dec_inter2[pdb] )
            pareto_lowest_energy = find_pareto(dec1_cp, dec2_cp, pdb)
	    
	    if add_pdb_to_path == "True": 
                path_p = pdb
	    else:
		path_p = "" 
	    
            if end_ind_desc_rosetta == 1000:
                r_suffix = ".pdb"
            else:
                r_suffix = "_0001.pdb"

	    if start_ind_desc_amber is None:
                a_prefix = "min_NoH_"
            else:
		a_prefix = "min_"

            if end_ind_desc_amber is None:
                a_suffix = ".pdb"
            else:
                a_suffix = ".pdb.pdb"
	
	    #copy rosetta file
            src = os.path.join(input_dir_rosetta_pdb, path_p, rosetta_lowest_energy + r_suffix)
            dst = os.path.join(output_dir,"rosetta","{0}_{1}.pdb".format(pdb,i)) 
            copyfile(src, dst)
            #copy amber file
            src = os.path.join(input_dir_amber_pdb, path_p, a_prefix + amber_lowest_energy + a_suffix) 
            dst = os.path.join(output_dir,"amber","{0}_{1}.pdb".format(pdb,i))
            copyfile(src, dst)
            #copy pareto file
            src = os.path.join(input_dir_rosetta_pdb, path_p, pareto_lowest_energy + r_suffix)
            dst = os.path.join(output_dir,"combined","{0}_{1}.pdb".format(pdb,i))
            copyfile(src, dst)

            #delete from original scoredict so that next round will get the next-lowest
            dec_inter1[pdb].pop(rosetta_lowest_energy)
            dec_inter2[pdb].pop(amber_lowest_energy)
            dec1_cp[pdb].pop(pareto_lowest_energy)
            dec2_cp[pdb].pop(pareto_lowest_energy)
Ejemplo n.º 7
0
def main(input_dir_rosetta_sf, input_dir_amber_sf, input_dir_rosetta_pdb,
         input_dir_amber_pdb, output_dir, n_results, alternate_rmsd,
         start_ind_desc_amber, start_ind_desc_rosetta, end_ind_desc_amber,
         end_ind_desc_rosetta, add_pdb_to_path):

    if alternate_rmsd is True:
        d1 = scorefileparse.read_dir(input_dir_rosetta_sf,
                                     'rosetta',
                                     repl_orig=False,
                                     rmsd='total_score',
                                     start_ind_desc=start_ind_desc_rosetta,
                                     end_ind_desc=end_ind_desc_rosetta)
        d2 = scorefileparse.read_dir(input_dir_amber_sf,
                                     'amber',
                                     repl_orig=False,
                                     rmsd='tot',
                                     start_ind_desc=start_ind_desc_amber,
                                     end_ind_desc=end_ind_desc_amber)
    else:
        d1 = scorefileparse.read_dir(input_dir_rosetta_sf,
                                     'rosetta',
                                     repl_orig=False,
                                     start_ind_desc=start_ind_desc_rosetta,
                                     end_ind_desc=end_ind_desc_rosetta)
        d2 = scorefileparse.read_dir(input_dir_amber_sf,
                                     'amber',
                                     repl_orig=False,
                                     start_ind_desc=start_ind_desc_amber,
                                     end_ind_desc=end_ind_desc_amber)

    dec_norm1 = scorefileparse.norm_pdbs(d1)
    dec_norm2 = scorefileparse.norm_pdbs(d2)

    [dec_inter1,
     dec_inter2] = scorefileparse.pdbs_scores_intersect([dec_norm1, dec_norm2])

    dec1_cp = copy.deepcopy(dec_inter1)
    dec2_cp = copy.deepcopy(dec_inter2)

    try:
        os.mkdir(os.path.join(output_dir, "rosetta"))
    except OSError:
        pass
    try:
        os.mkdir(os.path.join(output_dir, "amber"))
    except OSError:
        pass
    try:
        os.mkdir(os.path.join(output_dir, "combined"))
    except OSError:
        pass

    for pdb in sorted(dec_inter1.keys()):
        for i in range(1, n_results + 1):
            rosetta_lowest_energy = find_lowest_energy(dec_inter1[pdb])
            amber_lowest_energy = find_lowest_energy(dec_inter2[pdb])
            pareto_lowest_energy = find_pareto(dec1_cp, dec2_cp, pdb)

            if add_pdb_to_path == "True":
                path_p = pdb
            else:
                path_p = ""

            if end_ind_desc_rosetta == 1000:
                r_suffix = ".pdb"
            else:
                r_suffix = "_0001.pdb"

            if start_ind_desc_amber is None:
                a_prefix = "min_NoH_"
            else:
                a_prefix = "min_"

            if end_ind_desc_amber is None:
                a_suffix = ".pdb"
            else:
                a_suffix = ".pdb.pdb"

#copy rosetta file
            src = os.path.join(input_dir_rosetta_pdb, path_p,
                               rosetta_lowest_energy + r_suffix)
            dst = os.path.join(output_dir, "rosetta",
                               "{0}_{1}.pdb".format(pdb, i))
            copyfile(src, dst)
            #copy amber file
            src = os.path.join(input_dir_amber_pdb, path_p,
                               a_prefix + amber_lowest_energy + a_suffix)
            dst = os.path.join(output_dir, "amber",
                               "{0}_{1}.pdb".format(pdb, i))
            copyfile(src, dst)
            #copy pareto file
            src = os.path.join(input_dir_rosetta_pdb, path_p,
                               pareto_lowest_energy + r_suffix)
            dst = os.path.join(output_dir, "combined",
                               "{0}_{1}.pdb".format(pdb, i))
            copyfile(src, dst)

            #delete from original scoredict so that next round will get the next-lowest
            dec_inter1[pdb].pop(rosetta_lowest_energy)
            dec_inter2[pdb].pop(amber_lowest_energy)
            dec1_cp[pdb].pop(pareto_lowest_energy)
            dec2_cp[pdb].pop(pareto_lowest_energy)