From 6ec37d3aa4871770e218133f5b8406f3e56346ab Mon Sep 17 00:00:00 2001 From: AndiMajore <andi.majore@googlemail.com> Date: Wed, 27 Jul 2022 14:14:13 +0200 Subject: [PATCH] handled issues with kpm results --- tasks/keypathwayminer_task.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/tasks/keypathwayminer_task.py b/tasks/keypathwayminer_task.py index 3e5099a..4036466 100755 --- a/tasks/keypathwayminer_task.py +++ b/tasks/keypathwayminer_task.py @@ -198,10 +198,16 @@ def kpm_task(task_hook: TaskHook): network = {'nodes': nodes, 'edges': edges} # Remapping everything from UniProt Accession numbers to internal IDs - result_nodes = Protein.objects.filter(uniprot_code__in=network["nodes"]) + flat_map = lambda f, xs: (y for ys in xs for y in f(ys)) + uniprote_nodes = [] + uniprote_nodes.extend(network["nodes"]) + uniprote_nodes.extend(set(flat_map(lambda l: [l['from'], l['to']], network['edges']))) + + result_nodes = Protein.objects.filter(uniprot_code__in=uniprote_nodes) node_map = {} node_map_for_edges = {} + for node in result_nodes: node_map_for_edges[node.uniprot_code] = node.id if id_space == 'symbol': @@ -213,19 +219,21 @@ def kpm_task(task_hook: TaskHook): if id_space == 'ensembl': node_map[node.uniprot_code] = [ensg.name for ensg in EnsemblGene.objects.filter(protein_id=node.id)] - flat_map = lambda f, xs: (y for ys in xs for y in f(ys)) - network["nodes"] = flat_map(lambda uniprot: node_map[uniprot], network["nodes"]) - network["edges"] = list(map( - lambda uniprot_edge: {"from": "p" + str(node_map_for_edges[uniprot_edge["from"]]), - "to": "p" + str(node_map_for_edges[uniprot_edge["to"]])}, - network["edges"])) + + network["nodes"] = list(flat_map(lambda uniprot: node_map[uniprot], network["nodes"])) + drugstone_edges = [] + for uniprot_edge in network['edges']: + from_node = f'p{node_map_for_edges[uniprot_edge["from"]]}' if uniprot_edge['from'] in node_map_for_edges else uniprot_edge['from'] + to_node = f'p{node_map_for_edges[uniprot_edge["to"]]}' if uniprot_edge['to'] in node_map_for_edges else uniprot_edge['to'] + drugstone_edges.append({"from": from_node,"to": to_node}) + network['edges']=drugstone_edges node_types = {node: "protein" for node in network["nodes"]} - is_seed = {node: node in set(map(lambda p: "p"+str(p),protein_backend_ids)) for node in network["nodes"]} + is_seed = {node: node in set(map(lambda p: "p" + str(p), protein_backend_ids)) for node in network["nodes"]} result_dict = { "network": network, - "target_nodes":[node for node in network["nodes"] if node not in task_hook.seeds], + "target_nodes": [node for node in network["nodes"] if node not in task_hook.seeds], "node_attributes": {"node_types": node_types, "is_seed": is_seed} } task_hook.set_results(results=result_dict) -- GitLab