From c0c0c6f2ee7d140b3a890f4306cc0cf0068ddefa Mon Sep 17 00:00:00 2001 From: "Hartung, Michael" <michael.hartung@uni-hamburg.de> Date: Mon, 19 Sep 2022 17:27:43 +0200 Subject: [PATCH] first implementation of add edges Former-commit-id: 7a4b816159343135421f578808fa9ce45dca79fb --- docker-compose.yml | 2 +- drugstone/views.py | 9 +++++---- tasks/betweenness_centrality.py | 8 ++++++++ tasks/closeness_centrality.py | 8 +++++++- tasks/degree_centrality.py | 7 +++++++ tasks/multi_steiner.py | 9 +++++++++ tasks/network_proximity.py | 8 ++++++++ tasks/trust_rank.py | 9 +++++++++ tasks/util/custom_edges.py | 18 ++++++++++++++++++ 9 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 tasks/util/custom_edges.py diff --git a/docker-compose.yml b/docker-compose.yml index 1924f92..3b0d7a3 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -82,7 +82,7 @@ services: - db networks: - drugstone_net - flower: + flower: image: mher/flower container_name: drugstone_flower env_file: diff --git a/drugstone/views.py b/drugstone/views.py index a18fb48..1b5ae62 100755 --- a/drugstone/views.py +++ b/drugstone/views.py @@ -26,7 +26,6 @@ from drugstone.settings import DEFAULTS def get_ppi_ds(source, licenced): try: ds = models.PPIDataset.objects.filter(name__iexact=source, licenced=licenced).last() - ds.id return ds except: if licenced: @@ -37,7 +36,6 @@ def get_ppi_ds(source, licenced): def get_pdi_ds(source, licenced): try: ds = models.PDIDataset.objects.filter(name__iexact=source, licenced=licenced).last() - ds.id return ds except: if licenced: @@ -48,7 +46,6 @@ def get_pdi_ds(source, licenced): def get_pdis_ds(source, licenced): try: ds = models.PDisDataset.objects.filter(name__iexact=source, licenced=licenced).last() - ds.id return ds except: if licenced: @@ -59,7 +56,6 @@ def get_pdis_ds(source, licenced): def get_drdis_ds(source, licenced): try: ds = models.DrDiDataset.objects.filter(name__iexact=source, licenced=licenced).last() - ds.id return ds except: if licenced: @@ -75,6 +71,11 @@ class TaskView(APIView): parameters = request.data['parameters'] licenced = parameters.get('licenced', False) + print(models.PDIDataset.objects.all()) + + print(get_ppi_ds(parameters.get('ppi_dataset', DEFAULTS['ppi']), licenced)) + print(get_pdi_ds(parameters.get('pdi_dataset', DEFAULTS['pdi']), licenced)) + # find databases based on parameter strings parameters['ppi_dataset'] = PPIDatasetSerializer().to_representation( get_ppi_ds(parameters.get('ppi_dataset', DEFAULTS['ppi']), licenced)) diff --git a/tasks/betweenness_centrality.py b/tasks/betweenness_centrality.py index deba027..d4b9e21 100755 --- a/tasks/betweenness_centrality.py +++ b/tasks/betweenness_centrality.py @@ -1,3 +1,4 @@ +from tasks.util.custom_edges import add_edges from tasks.util.read_graph_tool_graph import read_graph_tool_graph from tasks.util.scores_to_results import scores_to_results from tasks.util.edge_weights import edge_weights @@ -172,6 +173,8 @@ def betweenness_centrality(task_hook: TaskHook): id_space = task_hook.parameters["config"].get("identifier","symbol") + custom_edges = task_hook.parameters.get("custom_edges", False) + # Parsing input file. task_hook.set_progress(0 / 3.0, "Parsing input.") filename = f"{id_space}_{ppi_dataset['name']}-{pdi_dataset['name']}" @@ -187,6 +190,11 @@ def betweenness_centrality(task_hook: TaskHook): include_non_approved_drugs, target=search_target ) + + if custom_edges: + edges = task_hook.parameters.get("input_network")['edges'] + g = add_edges(g, edges) + weights = edge_weights(g, hub_penalty) # Set number of threads if OpenMP support is enabled. diff --git a/tasks/closeness_centrality.py b/tasks/closeness_centrality.py index 1c306ee..3dafc51 100755 --- a/tasks/closeness_centrality.py +++ b/tasks/closeness_centrality.py @@ -1,4 +1,5 @@ import numpy as np +from tasks.util.custom_edges import add_edges from tasks.util.read_graph_tool_graph import read_graph_tool_graph from tasks.util.scores_to_results import scores_to_results from tasks.util.edge_weights import edge_weights @@ -173,13 +174,18 @@ def closeness_centrality(task_hook: TaskHook): id_space = task_hook.parameters["config"].get("identifier", "symbol") - node_name_attribute = "internal_id" + custom_edges = task_hook.parameters.get("custom_edges", False) filename = f"{id_space}_{ppi_dataset['name']}-{pdi_dataset['name']}" if ppi_dataset['licenced'] or pdi_dataset['licenced']: filename += "_licenced" filename = os.path.join(task_hook.data_directory, filename + ".gt") g, seed_ids, drug_ids = read_graph_tool_graph(filename, seeds, id_space, max_deg, include_indirect_drugs, include_non_approved_drugs, search_target) + + if custom_edges: + edges = task_hook.parameters.get("input_network")['edges'] + g = add_edges(g, edges) + task_hook.set_progress(1 / 4.0, "Computing edge weights.") weights = edge_weights(g, hub_penalty) diff --git a/tasks/degree_centrality.py b/tasks/degree_centrality.py index e529c8a..368b5a1 100755 --- a/tasks/degree_centrality.py +++ b/tasks/degree_centrality.py @@ -1,5 +1,6 @@ from tasks.util.read_graph_tool_graph import read_graph_tool_graph from tasks.util.scores_to_results import scores_to_results +from tasks.util.custom_edges import add_edges from tasks.task_hook import TaskHook import graph_tool as gt import os.path @@ -147,6 +148,8 @@ def degree_centrality(task_hook: TaskHook): search_target = task_hook.parameters.get("target", "drug-target") filterPaths = task_hook.parameters.get("filter_paths", True) + + custom_edges = task_hook.parameters.get("custom_edges", False) # Parsing input file. task_hook.set_progress(0 / 3.0, "Parsing input.") @@ -160,6 +163,10 @@ def degree_centrality(task_hook: TaskHook): # g, seed_ids, viral_protein_ids, drug_ids = read_graph_tool_graph(file_path, seeds, datasets, ignored_edge_types, max_deg, ignore_non_seed_baits, False, include_non_approved_drugs) g, seed_ids, drug_ids = read_graph_tool_graph(filename, seeds, id_space, max_deg, False, include_non_approved_drugs, search_target) + if custom_edges: + edges = task_hook.parameters.get("input_network")['edges'] + g = add_edges(g, edges) + # Set number of threads if OpenMP support is enabled. if gt.openmp_enabled(): gt.openmp_set_num_threads(num_threads) diff --git a/tasks/multi_steiner.py b/tasks/multi_steiner.py index cc479ad..210b82a 100755 --- a/tasks/multi_steiner.py +++ b/tasks/multi_steiner.py @@ -1,4 +1,5 @@ from tasks.task_hook import TaskHook +from tasks.util.custom_edges import add_edges from tasks.util.steiner_tree import steiner_tree from tasks.util.find_bridges import find_bridges from tasks.util.read_graph_tool_graph import read_graph_tool_graph @@ -99,6 +100,8 @@ def multi_steiner(task_hook: TaskHook): node_name_attribute = "internal_id" # nodes in the input network which is created from RepoTrialDB have primaryDomainId as name attribute + custom_edges = task_hook.parameters.get("custom_edges", False) + # Set number of threads if OpenMP support is enabled. if gt.openmp_enabled(): gt.openmp_set_num_threads(num_threads) @@ -112,7 +115,13 @@ def multi_steiner(task_hook: TaskHook): if ppi_dataset['licenced'] or pdi_dataset['licenced']: filename += "_licenced" filename = os.path.join(task_hook.data_directory, filename + ".gt") + print(filename) g, seed_ids, _ = read_graph_tool_graph(filename, seeds, id_space, max_deg, target=search_target) + + if custom_edges: + edges = task_hook.parameters.get("input_network")['edges'] + g = add_edges(g, edges) + seed_map = {g.vertex_properties[node_name_attribute][node]: node for node in seed_ids} task_hook.set_progress(1 / (float(num_trees + 3)), "Computing edge weights.") weights = edge_weights(g, hub_penalty) diff --git a/tasks/network_proximity.py b/tasks/network_proximity.py index c07beee..af1ad4a 100755 --- a/tasks/network_proximity.py +++ b/tasks/network_proximity.py @@ -1,4 +1,5 @@ from tasks.task_hook import TaskHook +from tasks.util.custom_edges import add_edges from tasks.util.read_graph_tool_graph import read_graph_tool_graph from tasks.util.edge_weights import edge_weights import os.path @@ -79,6 +80,8 @@ def network_proximity(task_hook: TaskHook): filter_paths = task_hook.parameters.get("filter_paths", True) + custom_edges = task_hook.parameters.get("custom_edges", False) + node_name_attribute = "internal_id" # nodes in the input network which is created from RepoTrialDB have primaryDomainId as name attribute # Set number of threads if OpenMP support is enabled. if gt.openmp_enabled(): @@ -95,6 +98,11 @@ def network_proximity(task_hook: TaskHook): filename = os.path.join(task_hook.data_directory, filename + ".gt") # g, seed_ids, _, drug_ids = read_graph_tool_graph(file_path, seeds, "", "", max_deg, False, True, include_non_approved_drugs) g, seed_ids, drug_ids = read_graph_tool_graph(filename, seeds, id_space, max_deg, True, include_non_approved_drugs, target=search_target) + + if custom_edges: + edges = task_hook.parameters.get("input_network")['edges'] + g = add_edges(g, edges) + # Computing edge weights. task_hook.set_progress(1.0 / 8, "Computing edge weights.") weights = edge_weights(g, hub_penalty) diff --git a/tasks/trust_rank.py b/tasks/trust_rank.py index 6922fa6..8f5c40c 100755 --- a/tasks/trust_rank.py +++ b/tasks/trust_rank.py @@ -1,3 +1,4 @@ +from tasks.util.custom_edges import add_edges from tasks.util.read_graph_tool_graph import read_graph_tool_graph from tasks.util.scores_to_results import scores_to_results from tasks.util.edge_weights import edge_weights @@ -195,6 +196,8 @@ def trust_rank(task_hook: TaskHook): search_target = task_hook.parameters.get("target", "drug-target") filter_paths = task_hook.parameters.get("filter_paths", True) + + custom_edges = task_hook.parameters.get("custom_edges", False) # Parsing input file. task_hook.set_progress(0 / 4.0, "Parsing input.") @@ -205,7 +208,13 @@ def trust_rank(task_hook: TaskHook): if ppi_dataset['licenced'] or pdi_dataset['licenced']: filename += "_licenced" filename = os.path.join(task_hook.data_directory, filename+".gt") + print(filename) g, seed_ids, drug_ids = read_graph_tool_graph(filename, seeds, id_space, max_deg, include_indirect_drugs, include_non_approved_drugs, search_target) + + if custom_edges: + edges = task_hook.parameters.get("input_network")['edges'] + g = add_edges(g, edges) + task_hook.set_progress(1 / 4.0, "Computing edge weights.") weights = edge_weights(g, hub_penalty, inverse=True) diff --git a/tasks/util/custom_edges.py b/tasks/util/custom_edges.py new file mode 100644 index 0000000..d0b8ea2 --- /dev/null +++ b/tasks/util/custom_edges.py @@ -0,0 +1,18 @@ +def make_node_id_map(g): + mapping = {} + for node in range(g.num_vertices()): + mapping[g.vertex_properties['internal_id'][node]] = node + return mapping + +def add_edges(g, edge_list): + """ + edge list is [{"fom":..., "to":...}, ...] + """ + mapping = make_node_id_map(g) + edge_id_list = [] + for edge in edge_list: + a = mapping[edge['from']] + b = mapping[edge['to']] + edge_id_list.append((a, b)) + g.add_edge_list(edge_list) + return g \ No newline at end of file -- GitLab