def _extract_chp_query(self, query, message_type): # Extract Message message = query.message # Initialize CHP BKB Query chp_query = ChpQuery(reasoning_type='updating') # Grab edge for qedge_id, qedge in message.query_graph.edges.items(): break # Process predicate proxy chp_query = self._process_predicate_proxy(qedge, chp_query) # Process predicate context chp_query = self._process_predicate_context(qedge, message_type, chp_query) #TODO: Probably need a more robust solution for when no context is provided in wildcard queries and you need it. #if len(evidence) == 0: # raise ValueError('Did not supply context with a query that required context.') if message_type == 'standard': # Setup gene and drug evidence for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[ 0] == BIOLINK_GENE_ENTITY or qnode.categories[ 0] == BIOLINK_DRUG_ENTITY: chp_query.add_meta_evidence(qnode.ids[0], 'True') elif message_type == 'gene' or message_type == 'drug_two_hop': for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[0] == BIOLINK_DRUG_ENTITY: if qnode.ids is not None: chp_query.add_meta_evidence(qnode.ids[0], 'True') elif message_type == 'drug' or message_type == 'gene_two_hop': for qnode_id, qnode in message.query_graph.nodes.items(): if qnode.categories[0] == BIOLINK_GENE_ENTITY: if qnode.ids is not None: chp_query.add_meta_evidence(qnode.ids[0], 'True') target = list(chp_query.dynamic_targets.keys())[0] truth_target = (target, '{} {}'.format( chp_query.dynamic_targets[target]["op"], chp_query.dynamic_targets[target]["value"])) # Set some other helpful attributes chp_query.truth_target = truth_target return chp_query
def _extract_chp_query(self, message, message_type=None): # Initialize Chp Query chp_query = ChpQuery(reasoning_type='updating') # Ensure we are using all nodes/edges total_nodes = 0 total_edges = 0 query_graph = message.query_graph # get phenotype node targets = list() for node_key in query_graph.nodes.keys(): node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_PHENOTYPIC_FEATURE_ENTITY: target_id = node_key total_nodes += 1 survival_value = 970 survival_operator = '>=' # get disease node info and ensure only 1 disease: for node_key in query_graph.nodes.keys(): node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_DISEASE_ENTITY: disease_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support( edge.predicates[0], BIOLINK_HAS_PHENOTYPE_ENTITY ) and edge.subject == disease_id and edge.object == target_id: survival_time_constraint = edge.find_constraint( name='survival_time') if survival_time_constraint is not None: survival_value = survival_time_constraint.value survival_operator = survival_time_constraint.operator if survival_operator == 'matches': survival_operator = '==' total_edges += 1 total_nodes += 1 # set BKB target chp_query.add_dynamic_target(node.ids[0], survival_operator, survival_value) truth_target = (node.ids[0], '{} {}'.format(survival_operator, survival_value)) # get evidence for node_key in query_graph.nodes.keys(): # genes node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_GENE_ENTITY: # check for appropriate gene node structure gene_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support( edge.predicates[0], BIOLINK_GENE_ASSOCIATED_WITH_CONDITION_ENTITY ) and edge.subject == gene_id and edge.object == disease_id: total_edges += 1 # check for appropriate gene node curie gene_curie = node.ids[0] gene = gene_curie chp_query.add_meta_evidence(gene, 'True') total_nodes += 1 # drugs if node.categories[0] == BIOLINK_DRUG_ENTITY: # check for appropriate drug node structure drug_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support( edge.predicates[0], BIOLINK_TREATS_ENTITY ) and edge.subject == drug_id and edge.object == disease_id: total_edges += 1 # check for appropriate drug node curie drug_curie = node.ids[0] drug = drug_curie chp_query.add_dynamic_evidence(node.ids[0], '==', 'True') total_nodes += 1 # Set some other helpful attributes chp_query.truth_target = truth_target return chp_query
def _extract_chp_query(self, message, message_type): # Initialize CHP BKB Query chp_query = ChpQuery(reasoning_type='updating') # ensure we are using all nodes/edges total_nodes = 0 total_edges = 0 query_graph = message.query_graph # get phenotype node targets = list() acceptable_target_curies = ['EFO:0000714'] self.implicit_survival_node = False for node_key in query_graph.nodes.keys(): node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_PHENOTYPIC_FEATURE_ENTITY and node.ids[0] in acceptable_target_curies: target_id = node_key total_nodes += 1 if total_nodes == 0: # Use Default Survival self.implicit_survival_node = True total_nodes += 1 #acceptable_target_curies_print = ','.join(acceptable_target_curies) #sys.exit("Survival Node not found. Node category must be '{}' and id must be in: {}".format(Biolink(BIOLINK_PHENOTYPIC_FEATURE), # acceptable_target_curies_print)) survival_value = 970 survival_operator = '>=' # get disease node info and ensure only 1 disease: acceptable_disease_curies = ['MONDO:0007254'] for node_key in query_graph.nodes.keys(): node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_DISEASE_ENTITY and node.ids[0] in acceptable_disease_curies: disease_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support(edge.predicates[0], BIOLINK_HAS_PHENOTYPE_ENTITY) and edge.subject == disease_id and edge.object == target_id: survival_time_constraint = edge.find_constraint(name='survival_time') if survival_time_constraint is not None: survival_value = survival_time_constraint.value survival_operator = survival_time_constraint.operator if survival_operator == 'matches': survival_operator = '==' total_edges += 1 total_nodes += 1 if self.implicit_survival_node: days=970 qualifier = '>=' total_edges += 1 # set BKB target chp_query.add_dynamic_target('EFO:0000714', survival_operator, survival_value) truth_target = ('EFO:0000714', '{} {}'.format(survival_operator, survival_value)) # get evidence for node_key in query_graph.nodes.keys(): # genes node = query_graph.nodes[node_key] if node.categories[0] == BIOLINK_GENE_ENTITY: # check for appropriate gene node structure gene_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support(edge.predicates[0], BIOLINK_GENE_ASSOCIATED_WITH_CONDITION_ENTITY) and edge.subject == gene_id and edge.object == disease_id: total_edges += 1 # check for appropriate gene node curie if message_type != 'gene': gene_curie = node.ids[0] if gene_curie in self.curies[BIOLINK_GENE_ENTITY.get_curie()]: gene = gene_curie chp_query.add_meta_evidence(gene, 'True') total_nodes += 1 # drugs if node.categories[0] == BIOLINK_DRUG_ENTITY: # check for appropriate drug node structure drug_id = node_key for edge_key in query_graph.edges.keys(): edge = query_graph.edges[edge_key] if self.check_predicate_support(edge.predicates[0], BIOLINK_TREATS_ENTITY) and edge.subject == drug_id and edge.object == disease_id: total_edges += 1 # check for appropriate drug node curie if message_type != 'drug': drug_curie = node.ids[0] if drug_curie in self.curies[BIOLINK_DRUG_ENTITY.get_curie()]: drug = drug_curie chp_query.add_meta_evidence(drug, 'True') total_nodes += 1 # Temporary solution to no evidence linking if len(chp_query.evidence.keys()) == 0 and len(chp_query.dynamic_evidence.keys()) == 0: self.no_evidence_probability_check = True else: self.no_evidence_probability_check = False # Set some other helpful attributes chp_query.truth_target = truth_target return chp_query