1010from .gene_nmf_adapter import get_gene_nmf_novelty_for_gene_list
1111from ..config import settings
1212
13+
14+ def result_node_id (result , query_id_node ):
15+ """Return the KG id of the non-query (result) node for a TRAPI result.
16+
17+ Picks the first node-bound Knowledge Graph identifier that is not the
18+ queried node.
19+ """
20+ for binding in result ["node_bindings" ].values ():
21+ for kg_id in binding ["ids" ]:
22+ if kg_id != query_id_node :
23+ return kg_id
24+ return None
25+
26+
1327"""
1428This script computes the novelty score for a list of results obtained for a 1-H response using publications from 5 ARAs.
1529The steps for the ideal workflow are as follows:
@@ -114,27 +128,11 @@ async def molecular_sim(known, unknown, message, query_id):
114128 known_ids = []
115129 if len (unknown ) > 0 :
116130 for drug in unknown :
117- s = list (message ["results" ][drug ]["node_bindings" ].keys ())
118- if message ["results" ][drug ]["node_bindings" ][s [0 ]][0 ]["id" ] == query_id :
119- unknown_ids .append (
120- message ["results" ][drug ]["node_bindings" ][s [1 ]][0 ]["id" ]
121- )
122- else :
123- unknown_ids .append (
124- message ["results" ][drug ]["node_bindings" ][s [0 ]][0 ]["id" ]
125- )
131+ unknown_ids .append (result_node_id (message ["results" ][drug ], query_id ))
126132
127133 if len (known ) > 0 :
128134 for drug in known :
129- s = list (message ["results" ][drug ]["node_bindings" ].keys ())
130- if message ["results" ][drug ]["node_bindings" ][s [0 ]][0 ]["id" ] == query_id :
131- known_ids .append (
132- message ["results" ][drug ]["node_bindings" ][s [1 ]][0 ]["id" ]
133- )
134- else :
135- known_ids .append (
136- message ["results" ][drug ]["node_bindings" ][s [0 ]][0 ]["id" ]
137- )
135+ known_ids .append (result_node_id (message ["results" ][drug ], query_id ))
138136
139137 smile_unkown = await mol_to_smile_molpro (unknown_ids )
140138 smile_known = await mol_to_smile_molpro (known_ids )
@@ -225,10 +223,10 @@ def extracting_publications(message, result):
225223 publications = []
226224 for idi , i in enumerate (result ["analyses" ]):
227225 edge_keys = list (i ["edge_bindings" ].keys ())
228- for idj , j in enumerate ( i ["edge_bindings" ][edge_keys [0 ]]) :
226+ for edge_id in i ["edge_bindings" ][edge_keys [0 ]][ "ids" ] :
229227 aux_graph , edges = [], []
230228 for idl , l in enumerate (
231- message ["knowledge_graph" ]["edges" ][j [ "id" ] ]["attributes" ]
229+ message ["knowledge_graph" ]["edges" ][edge_id ]["attributes" ]
232230 ):
233231 if l ["attribute_type_id" ] == "biolink:publications" :
234232 publications .extend (l ["value" ])
@@ -271,19 +269,17 @@ def extract_results(message, unknown, known):
271269 if idi in unknown :
272270 results .append ([])
273271 for idj , j in enumerate (i ["analyses" ]):
274- for idk , k in enumerate (
275- j ["edge_bindings" ][list (j ["edge_bindings" ].keys ())[0 ]]
276- ):
277- results [ukid ].append (k ["id" ])
272+ edge_key = list (j ["edge_bindings" ].keys ())[0 ]
273+ for edge_id in j ["edge_bindings" ][edge_key ]["ids" ]:
274+ results [ukid ].append (edge_id )
278275 ukid += 1
279276
280277 elif idi in known :
281278 results_known .append ([])
282279 for idj , j in enumerate (i ["analyses" ]):
283- for idk , k in enumerate (
284- j ["edge_bindings" ][list (j ["edge_bindings" ].keys ())[0 ]]
285- ):
286- results_known [kid ].append (k ["id" ])
280+ edge_key = list (j ["edge_bindings" ].keys ())[0 ]
281+ for edge_id in j ["edge_bindings" ][edge_key ]["ids" ]:
282+ results_known [kid ].append (edge_id )
287283 kid += 1
288284 return results , results_known
289285
@@ -335,11 +331,7 @@ async def compute_novelty(
335331 novelty_score_rec_tdl , novelty_score_rec_clin = [], []
336332 for idi , i in enumerate (message ["results" ]):
337333 curated = 0
338- node_binding_keys = list (i ["node_bindings" ].keys ())
339- if i ["node_bindings" ][node_binding_keys [0 ]][0 ]["id" ] == query_id_node :
340- result_id_node = i ["node_bindings" ][node_binding_keys [1 ]][0 ]["id" ]
341- else :
342- result_id_node = i ["node_bindings" ][node_binding_keys [0 ]][0 ]["id" ]
334+ result_id_node = result_node_id (i , query_id_node )
343335 df_numpy .append ([query_id_node , result_id_node ])
344336 result_node_cat = message ["knowledge_graph" ]["nodes" ][result_id_node ][
345337 "categories"
@@ -363,39 +355,17 @@ async def compute_novelty(
363355 correct_results .append (idi )
364356 for idj , j in enumerate (i ["analyses" ]):
365357 edge_keys = list (j ["edge_bindings" ].keys ())
366- for idk , k in enumerate ( j ["edge_bindings" ][edge_keys [0 ]]) :
358+ for edge_id in j ["edge_bindings" ][edge_keys [0 ]][ "ids" ] :
367359 knowledge_graph_edge = message ["knowledge_graph" ]["edges" ][
368- k [ "id" ]
360+ edge_id
369361 ]
370- epc_found = 0
371- for idl , l in enumerate (knowledge_graph_edge ["attributes" ]):
372- if l ["attribute_type_id" ] == "biolink:knowledge_level" :
373- epc_found = 1
374- if l ["value" ] != "prediction" :
375- curated = 1
376- df_numpy [idi ].extend (
377- [l ["attribute_type_id" ], l ["value" ]]
378- )
379- break
380- if curated == 1 and epc_found == 1 :
362+ knowledge_level = knowledge_graph_edge ["knowledge_level" ]
363+ if knowledge_level != "prediction" :
364+ curated = 1
365+ df_numpy [idi ].extend (
366+ ["biolink:knowledge_level" , knowledge_level ]
367+ )
381368 break
382- elif curated == 0 and epc_found == 0 :
383- for idl , l in enumerate (knowledge_graph_edge ["sources" ]):
384- if l ["resource_role" ] == "primary_knowledge_source" :
385- if l ["resource_id" ] not in [
386- "infores:arax" ,
387- "infores:aragorn" ,
388- "infores:biothings-explorer" ,
389- "infores:unsecret-agent" ,
390- "infores:improving-agent" ,
391- "infores:cqs" ,
392- ]:
393- curated = 1
394- df_numpy [idi ].extend (
395- [l ["resource_role" ], l ["resource_id" ]]
396- )
397- break
398-
399369 if curated == 1 :
400370 break
401371 if curated == 1 :
@@ -470,14 +440,7 @@ async def compute_novelty(
470440 map_result_keys = list (map_result ["gene_results" ].keys ())
471441 for idi , i in enumerate (message ["results" ]):
472442 if idi in unknown_list :
473- node_binding_keys = list (i ["node_bindings" ].keys ())
474- if (
475- i ["node_bindings" ][node_binding_keys [0 ]][0 ]["id" ]
476- == query_id_node
477- ):
478- res = i ["node_bindings" ][node_binding_keys [1 ]][0 ]["id" ]
479- else :
480- res = i ["node_bindings" ][node_binding_keys [0 ]][0 ]["id" ]
443+ res = result_node_id (i , query_id_node )
481444 if res in map_result_keys :
482445 gene_distinct = (
483446 1 - map_result ["gene_results" ][res ]["novelty_score" ]
@@ -589,14 +552,7 @@ async def compute_novelty(
589552 similarity_map_keys = list (similarity_map .keys ())
590553 for idi , i in enumerate (message ["results" ]):
591554 if idi in unknown_list :
592- node_binding_keys = list (i ["node_bindings" ].keys ())
593- if (
594- i ["node_bindings" ][node_binding_keys [0 ]][0 ]["id" ]
595- == query_id_node
596- ):
597- res = i ["node_bindings" ][node_binding_keys [1 ]][0 ]["id" ]
598- else :
599- res = i ["node_bindings" ][node_binding_keys [0 ]][0 ]["id" ]
555+ res = result_node_id (i , query_id_node )
600556
601557 if res in similarity_map_keys and similarity_map [res ] != []:
602558 similarity = similarity_map [res ][0 ][1 ]
0 commit comments