コード例 #1
0
def plot_2D_comparison(batch_case,
                       network_tupla,
                       title,
                       savepath,
                       method="f0"):
    best_index = batch_case[1].index(min(batch_case[1]))
    weight_list = np.asarray([a for a in batch_case[0]])
    best_weights = weight_list[best_index]
    original_coords = network_tupla[1]
    base_coords = nt.get_spectral_coordinates(nx.laplacian_matrix(
        network_tupla[0]).todense(),
                                              dim=2)
    if method == "f0":
        after_coords = nt.get_spectral_coordinates(
            nx.laplacian_matrix(network_tupla[0]).todense(),
            mod_matrix=nt.create_inverse_mod_matrix(best_weights),
            dim=2)
    elif method == "f1":
        after_coords = nt.get_spectral_coordinates(
            laplacian=nt.create_customized_laplacian(network_tupla[0],
                                                     best_weights),
            dim=2)
    elif method == "f2":
        after_coords = nt.get_spectral_coordinates(
            laplacian=nt.create_weighted_laplacian(network_tupla[0],
                                                   best_weights),
            dim=2)
    else:
        assert False
    base_coords = pd.DataFrame(rmsd.kabsch_rotate(base_coords.values,
                                                  original_coords.values),
                               columns=["x", "y", "z"])
    after_coords = pd.DataFrame(rmsd.kabsch_rotate(after_coords.values,
                                                   original_coords.values),
                                columns=["x", "y", "z"])
    plt.scatter(original_coords["x"],
                original_coords["y"],
                color='C0',
                marker='.',
                label="Originali",
                s=50)
    plt.scatter(base_coords["x"],
                base_coords["y"],
                color='C2',
                marker='x',
                label="SD di base",
                s=10)
    plt.scatter(after_coords["x"],
                after_coords["y"],
                s=10,
                color='C1',
                marker='*',
                label="SD con modifica")
    plt.title("")
    plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.15), ncol=3)
    plt.xlabel("$X$")
    plt.ylabel("$Y$")
    plt.tight_layout()
    plt.savefig(savepath, dpi=DPI)
    plt.clf()
コード例 #2
0
def fitness_single(masses, fitness_parameters):
    # fitness_parameters[0] = protein_network
    # fitness_parameters[1] = target_coordinates
    network = nt.modify_edges_weitghts(fitness_parameters[0], masses)
    guess_coordinates = nt.get_spectral_coordinates(
        nx.laplacian_matrix(network).toarray(),
        mod_matrix=np.diag([float(1 / a[1]) for a in network.degree]),
        dim=3)
    return rmsd.kabsch_rmsd(guess_coordinates.values,
                            fitness_parameters[1].values)
コード例 #3
0
def fitness_all(masses, fitness_parameters):
    # fitness_parameters[0] = protein_network_list
    # fitness_parameters[1] = target_coordinates_list
    # fitness_parameters[2] = dataset_list
    # fitness_parameters[3] = edge_aa_list
    aa_contact_map = create_AA_contact_map(masses)
    fitness = 0.0
    laplacian_list = refresh_network_weights(fitness_parameters[2],
                                             fitness_parameters[0],
                                             aa_contact_map,
                                             fitness_parameters[3])
    for i in range(len(laplacian_list)):
        guess_coordinates = nt.get_spectral_coordinates(
            laplacian_list[i],
            mod_matrix=np.diag(1 / np.diag(laplacian_list[i])),
            dim=3)
        fitness += rmsd.kabsch_rmsd(guess_coordinates.values,
                                    fitness_parameters[1][i].values)
    return fitness
コード例 #4
0
def plot_3D_comparison(batch_case,
                       network_tupla,
                       title,
                       savepath,
                       method="f0",
                       angle=30):
    best_index = batch_case[1].index(min(batch_case[1]))
    weight_list = np.asarray([a for a in batch_case[0]])
    best_weights = weight_list[best_index]
    original_coords = network_tupla[1]
    base_coords = nt.get_spectral_coordinates(nx.laplacian_matrix(
        network_tupla[0]).todense(),
                                              dim=3)
    if method == "f0":
        after_coords = nt.get_spectral_coordinates(
            nx.laplacian_matrix(network_tupla[0]).todense(),
            mod_matrix=nt.create_inverse_mod_matrix(best_weights),
            dim=3)
    elif method == "f1":
        after_coords = nt.get_spectral_coordinates(
            laplacian=nt.create_customized_laplacian(network_tupla[0],
                                                     best_weights),
            dim=3)
    elif method == "f2":
        after_coords = nt.get_spectral_coordinates(
            laplacian=nt.create_weighted_laplacian(network_tupla[0],
                                                   best_weights),
            dim=3)
    else:
        assert False
    base_coords = pd.DataFrame(rmsd.kabsch_rotate(base_coords.values,
                                                  original_coords.values),
                               columns=["x", "y", "z"])
    after_coords = pd.DataFrame(rmsd.kabsch_rotate(after_coords.values,
                                                   original_coords.values),
                                columns=["x", "y", "z"])
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(original_coords["x"],
               original_coords["y"],
               original_coords["z"],
               color='C0',
               marker='.',
               label="Originali")
    ax.scatter(base_coords["x"],
               base_coords["y"],
               base_coords["z"],
               color='C2',
               marker='x',
               label="SD base")
    ax.scatter(after_coords["x"],
               after_coords["y"],
               after_coords["z"],
               color='C1',
               marker='*',
               label="SD con modifica")
    ax.set_title("")
    ax.legend()
    ax.set_xlabel("$X$")
    ax.set_ylabel("$Y$")
    ax.set_zlabel("$Z$")
    ax.view_init(30, angle)
    plt.tight_layout()
    plt.savefig(savepath, dpi=DPI)
    plt.clf()
コード例 #5
0
def plot_protein_network(network,
                         distance_matrix,
                         threshold,
                         coords_original,
                         coords_modified=pd.DataFrame(),
                         spectral_basic=False,
                         title="",
                         savepath="",
                         showfig=True,
                         view_thet=30,
                         view_phi=30):
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    # Make network to be plotted (low threshold)
    plt_network = make_network_from_distance_matrix(distance_matrix, threshold)
    # Plot original coords
    ax.scatter(coords_original["x"],
               coords_original["y"],
               coords_original["z"],
               label="Originale",
               c="C0")
    for edge in list(plt_network.edges):
        ax.plot((coords_original.iloc[edge[0]]["x"],
                 coords_original.iloc[edge[1]]["x"]),
                (coords_original.iloc[edge[0]]["y"],
                 coords_original.iloc[edge[1]]["y"]),
                (coords_original.iloc[edge[0]]["z"],
                 coords_original.iloc[edge[1]]["z"]),
                c="grey",
                alpha=0.7)
    # If any, plot given coords
    if not coords_modified.empty:
        print("given coords")
        # APPLY THE RMSD (you never know...)
        coords_modified = pd.DataFrame(rmsd.kabsch_rotate(
            coords_modified.values, coords_original.values),
                                       columns=["x", "y", "z"])
        score_modified = rmsd.kabsch_rmsd(coords_modified.values,
                                          coords_original.values)
        ax.scatter(coords_modified["x"],
                   coords_modified["y"],
                   coords_modified["z"],
                   label="SD Perturbato, RMSD = {:.6f}".format(score_modified),
                   c="C1")
        for edge in list(plt_network.edges):
            ax.plot((coords_modified.iloc[edge[0]]["x"],
                     coords_modified.iloc[edge[1]]["x"]),
                    (coords_modified.iloc[edge[0]]["y"],
                     coords_modified.iloc[edge[1]]["y"]),
                    (coords_modified.iloc[edge[0]]["z"],
                     coords_modified.iloc[edge[1]]["z"]),
                    c="red",
                    alpha=0.4)
    # Do you also want the spectral basic?
    if spectral_basic:
        print("spectral_basic")
        coords_basic = nt.get_spectral_coordinates(
            nx.laplacian_matrix(network).todense(),
            mod_matrix=np.diag([1 / a[1] for a in list(network.degree)]),
            dim=3)
        coords_basic = pd.DataFrame(rmsd.kabsch_rotate(coords_basic.values,
                                                       coords_original.values),
                                    columns=["x", "y", "z"])
        score_basic = rmsd.kabsch_rmsd(coords_basic.values,
                                       coords_original.values)
        ax.scatter(coords_basic["x"],
                   coords_basic["y"],
                   coords_basic["z"],
                   label="SD Originale, RMSD = {:.6f}".format(score_basic),
                   c="C2")
        for edge in list(plt_network.edges):
            ax.plot((coords_basic.iloc[edge[0]]["x"],
                     coords_basic.iloc[edge[1]]["x"]),
                    (coords_basic.iloc[edge[0]]["y"],
                     coords_basic.iloc[edge[1]]["y"]),
                    (coords_basic.iloc[edge[0]]["z"],
                     coords_basic.iloc[edge[1]]["z"]),
                    c="green",
                    alpha=0.4)
    ax.legend()
    ax.set_xlabel("X $[\\AA]$")
    ax.set_ylabel("Y $[\\AA]$")
    ax.set_zlabel("Z $[\\AA]$")
    if title != "":
        ax.set_title(title)
    if showfig:
        ax.view_init(view_thet, view_phi)
        plt.show()
    if savepath != "":
        ax.view_init(view_thet, view_phi)
        plt.savefig(savepath, dpi=300)
        plt.clf()
    fig.close()