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()
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)
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
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()
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()