biothings / biothings_explorer

TRAPI service for BioThings Explorer

Home Page:https://api.bte.ncats.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

error in subclass node expansion

andrewsu opened this issue · comments

I'm executing this query for ChemicalEntity - treats - Diabetes Mellitus (MONDO:0005015)

{
    "message": {
        "query_graph": {
            "edges": {
                "t_edge": {
                    "object": "on",
                    "predicates": ["biolink:treats"],
                    "subject": "sn"
                }
            },
            "nodes": {
                "on": {
                    "categories": ["biolink:Disease"],
                    "ids": ["MONDO:0005015"]
                },
                "sn": {
                    "categories": ["biolink:ChemicalEntity"]
                }
            }
        }
    }
}

I've run this locally, on test, on ci, and on prod, I get the following edge:

                "expanded-MONDO:0010026-subclass_of-MONDO:0005015": {
                    "predicate": "biolink:subclass_of",
                    "subject": "MONDO:0010026",
                    "object": "MONDO:0005015",
                    "attributes": [],
                    "sources": [
                        {
                            "resource_id": "infores:mondo",
                            "resource_role": "primary_knowledge_source"
                        },
                        {
                            "resource_id": "infores:biothings-explorer",
                            "resource_role": "aggregator_knowledge_source"
                        }
                    ]
                },

when consulting OLS or consulting mydisease.info, it's clear that MONDO:0010026 is not a subclass of MONDO:0005015, and in fact it has been annotated as excluded_subClassOf.

When I exclude mydisease.info and the Monarch API from the apis.js config file, I still see this edge. So I'm guessing this is happening during the node expansion step? Here is I think the relevant line from the console log:

  bte:biothings-explorer-trapi:QEdge Expanded edges: subclass_of +0ms
  bte:biothings-explorer-trapi:QEdge (2) Created Edge "t_edge" Reverse = false +0ms
  bte:biothings-explorer-trapi:main (3) All edges created [{"id":"t_edge","predicate":["biolink:subclass_of"],"subject":{"id":"sn","categories":["biolink:DiseaseOrPhenotypicFeature"],"expandedCategories":["Disease"],"equivalentIDsUpdated":false,"curie":["MONDO:0005015","MONDO:0005147","MONDO:0005148","MONDO:0005406","MONDO:0006920","MONDO:0008185","MONDO:0008491","MONDO:0008696","MONDO:0008812","MONDO:0009192","MONDO:0009419","MONDO:0009517","MONDO:0009575","MONDO:0009874","MONDO:0010026","MONDO:0010773","MONDO:0010785","MONDO:0010802","MONDO:0011273","MONDO:0012520","MONDO:0012819","MONDO:0013225","MONDO:0013478","MONDO:0014497","MONDO:0014523","MONDO:0015308","MONDO:0015967","MONDO:0016391","MONDO:0016464","MONDO:0017230","MONDO:0018320","MONDO:0018573","MONDO:0018575","MONDO:0018911","MONDO:0019017","MONDO:0019193","MONDO:0005827","MONDO:0011027","MONDO:0011072","MONDO:0011363","MONDO:0011955","MONDO:0014488","MONDO:0011986","MONDO:0018581","MONDO:0018625","MONDO:0018629","MONDO:0012192","MONDO:0012436","MONDO:0020525","MONDO:0100164","MONDO:0014686","MONDO:0014991","MONDO:0007452","MONDO:0007453","MONDO:0007669","MONDO:0010894","MONDO:0011667","MONDO:0011668","MONDO:0012348","MONDO:0012513","MONDO:0012818","MONDO:0013240","MONDO:0013242","MONDO:0014458","MONDO:0014589","MONDO:0014674","MONDO:0011073","MONDO:0012480","MONDO:0012522","MONDO:0019207","MONDO:0030087","MONDO:0030088","MONDO:0030089","MONDO:0100165","MONDO:0020569"],"is_set":true,"expanded_curie":{"MONDO:0005015":["MONDO:0005015"],"MONDO:0005147":["MONDO:0005147"],"MONDO:0005148":["MONDO:0005148"],"MONDO:0005406":["MONDO:0005406"],"MONDO:0006920":["MONDO:0006920"],"MONDO:0008185":["MONDO:0008185"],"MONDO:0008491":["MONDO:0008491"],"MONDO:0008696":["MONDO:0008696"],"MONDO:0008812":["MONDO:0008812"],"MONDO:0009192":["MONDO:0009192"],"MONDO:0009419":["MONDO:0009419"],"MONDO:0009517":["MONDO:0009517"],"MONDO:0009575":["MONDO:0009575"],"MONDO:0009874":["MONDO:0009874"],"MONDO:0010026":["MONDO:0010026"],"MONDO:0010773":["MONDO:0010773"],"MONDO:0010785":["MONDO:0010785"],"MONDO:0010802":["MONDO:0010802"],"MONDO:0011273":["MONDO:0011273"],"MONDO:0012520":["MONDO:0012520"],"MONDO:0012819":["MONDO:0012819"],"MONDO:0013225":["MONDO:0013225"],"MONDO:0013478":["MONDO:0013478"],"MONDO:0014497":["MONDO:0014497"],"MONDO:0014523":["MONDO:0014523"],"MONDO:0015308":["MONDO:0015308"],"MONDO:0015967":["MONDO:0015967"],"MONDO:0016391":["MONDO:0016391"],"MONDO:0016464":["MONDO:0016464"],"MONDO:0017230":["MONDO:0017230"],"MONDO:0018320":["MONDO:0018320"],"MONDO:0018573":["MONDO:0018573"],"MONDO:0018575":["MONDO:0018575"],"MONDO:0018911":["MONDO:0018911"],"MONDO:0019017":["MONDO:0019017"],"MONDO:0019193":["MONDO:0019193"],"MONDO:0005827":["MONDO:0005827"],"MONDO:0011027":["MONDO:0011027"],"MONDO:0011072":["MONDO:0011072"],"MONDO:0011363":["MONDO:0011363"],"MONDO:0011955":["MONDO:0011955"],"MONDO:0014488":["MONDO:0014488"],"MONDO:0011986":["MONDO:0011986"],"MONDO:0018581":["MONDO:0018581"],"MONDO:0018625":["MONDO:0018625"],"MONDO:0018629":["MONDO:0018629"],"MONDO:0012192":["MONDO:0012192"],"MONDO:0012436":["MONDO:0012436"],"MONDO:0020525":["MONDO:0020525"],"MONDO:0100164":["MONDO:0100164"],"MONDO:0014686":["MONDO:0014686"],"MONDO:0014991":["MONDO:0014991"],"MONDO:0007452":["MONDO:0007452"],"MONDO:0007453":["MONDO:0007453"],"MONDO:0007669":["MONDO:0007669"],"MONDO:0010894":["MONDO:0010894"],"MONDO:0011667":["MONDO:0011667"],"MONDO:0011668":["MONDO:0011668"],"MONDO:0012348":["MONDO:0012348"],"MONDO:0012513":["MONDO:0012513"],"MONDO:0012818":["MONDO:0012818"],"MONDO:0013240":["MONDO:0013240"],"MONDO:0013242":["MONDO:0013242"],"MONDO:0014458":["MONDO:0014458"],"MONDO:0014589":["MONDO:0014589"],"MONDO:0014674":["MONDO:0014674"],"MONDO:0011073":["MONDO:0011073"],"MONDO:0012480":["MONDO:0012480"],"MONDO:0012522":["MONDO:0012522"],"MONDO:0019207":["MONDO:0019207"],"MONDO:0030087":["MONDO:0030087"],"MONDO:0030088":["MONDO:0030088"],"MONDO:0030089":["MONDO:0030089"],"MONDO:0100165":["MONDO:0100165"],"MONDO:0020569":["MONDO:0020569"]},"entity_count":75,"held_curie":[],"held_expanded":{},"connected_to":{}},"object":{"id":"on","categories":["biolink:DiseaseOrPhenotypicFeature"],"expandedCategories":["Disease"],"equivalentIDsUpdated":false,"expanded_curie":{},"entity_count":0,"held_curie":[],"held_expanded":{},"connected_to":{}},"expanded_predicates":["subclass_of"],"qualifier_constraints":[],"reverse":false,"executed":false,"logs":[],"records":[]}]  +671ms

originally identified in NCATSTranslator/Feedback#519 (comment)

After running this query locally, I can confirm that MONDO:0010026 (SHORT syndrome) is being added by the ID/node-expansion of MONDO:0005015 (Diabetes Mellitus), at the beginning of execution.

relevant console logs

diabetes is expanded into 75 IDs: bte:biothings-explorer-trapi:main Expanded ids for node on: (1 ids -> 75 ids) +0ms

log listing all the expanded IDs, which includes MONDO:0010026:

bte:biothings-explorer-trapi:QNode (1) Node "on" has (75) entities at start. +0ms bte:biothings-explorer-trapi:QNode (1) Node "on" expanded initial curie. {"MONDO:0005015":["MONDO:0005015"],"MONDO:0005147":["MONDO:0005147"],"MONDO:0005148":["MONDO:0005148"],"MONDO:0005406":["MONDO:0005406"],"MONDO:0006920":["MONDO:0006920"],"MONDO:0008185":["MONDO:0008185"],"MONDO:0008491":["MONDO:0008491"],"MONDO:0008696":["MONDO:0008696"],"MONDO:0008812":["MONDO:0008812"],"MONDO:0009192":["MONDO:0009192"],"MONDO:0009419":["MONDO:0009419"],"MONDO:0009517":["MONDO:0009517"],"MONDO:0009575":["MONDO:0009575"],"MONDO:0009874":["MONDO:0009874"],"MONDO:0010026":["MONDO:0010026"],"MONDO:0010773":["MONDO:0010773"],"MONDO:0010785":["MONDO:0010785"],"MONDO:0010802":["MONDO:0010802"],"MONDO:0011273":["MONDO:0011273"],"MONDO:0012520":["MONDO:0012520"],"MONDO:0012819":["MONDO:0012819"],"MONDO:0013225":["MONDO:0013225"],"MONDO:0013478":["MONDO:0013478"],"MONDO:0014497":["MONDO:0014497"],"MONDO:0014523":["MONDO:0014523"],"MONDO:0015308":["MONDO:0015308"],"MONDO:0015967":["MONDO:0015967"],"MONDO:0016391":["MONDO:0016391"],"MONDO:0016464":["MONDO:0016464"],"MONDO:0017230":["MONDO:0017230"],"MONDO:0018320":["MONDO:0018320"],"MONDO:0018573":["MONDO:0018573"],"MONDO:0018575":["MONDO:0018575"],"MONDO:0018911":["MONDO:0018911"],"MONDO:0019017":["MONDO:0019017"],"MONDO:0019193":["MONDO:0019193"],"MONDO:0005827":["MONDO:0005827"],"MONDO:0011027":["MONDO:0011027"],"MONDO:0011072":["MONDO:0011072"],"MONDO:0011363":["MONDO:0011363"],"MONDO:0011955":["MONDO:0011955"],"MONDO:0014488":["MONDO:0014488"],"MONDO:0011986":["MONDO:0011986"],"MONDO:0018581":["MONDO:0018581"],"MONDO:0018625":["MONDO:0018625"],"MONDO:0018629":["MONDO:0018629"],"MONDO:0012192":["MONDO:0012192"],"MONDO:0012436":["MONDO:0012436"],"MONDO:0020525":["MONDO:0020525"],"MONDO:0100164":["MONDO:0100164"],"MONDO:0014686":["MONDO:0014686"],"MONDO:0014991":["MONDO:0014991"],"MONDO:0007452":["MONDO:0007452"],"MONDO:0007453":["MONDO:0007453"],"MONDO:0007669":["MONDO:0007669"],"MONDO:0010894":["MONDO:0010894"],"MONDO:0011667":["MONDO:0011667"],"MONDO:0011668":["MONDO:0011668"],"MONDO:0012348":["MONDO:0012348"],"MONDO:0012513":["MONDO:0012513"],"MONDO:0012818":["MONDO:0012818"],"MONDO:0013240":["MONDO:0013240"],"MONDO:0013242":["MONDO:0013242"],"MONDO:0014458":["MONDO:0014458"],"MONDO:0014589":["MONDO:0014589"],"MONDO:0014674":["MONDO:0014674"],"MONDO:0011073":["MONDO:0011073"],"MONDO:0012480":["MONDO:0012480"],"MONDO:0012522":["MONDO:0012522"],"MONDO:0019207":["MONDO:0019207"],"MONDO:0030087":["MONDO:0030087"],"MONDO:0030088":["MONDO:0030088"],"MONDO:0030089":["MONDO:0030089"],"MONDO:0100165":["MONDO:0100165"],"MONDO:0020569":["MONDO:0020569"]} +1ms

BTE then continues execution using the MONDO:0010026 (SHORT syndrome) ID. It finds 3 KG edges for this MONDO, from text-mining targeted API and biothings semmeddb.

Expand for screenshots showing these edges

Screen Shot 2024-03-28 at 9 46 54 PM

Screen Shot 2024-03-28 at 9 47 11 PM


I suspect that there's an error parsing MONDO (and maybe other ontologies) in the node-expansion module https://github.com/biothings/node-expansion. Perhaps excluded_subClassOf annotations are mistakenly being treated as subclassOf.

As an FYI, I'm also remembering another old issue with UMLS chemical subclasses #518

node-expansion module has data files that appear to be the product of running the download/parser code.

I've confirmed that MONDO:0010026 (SHORT syndrome) is recorded as being a subclass of MONDO:0005015 (Diabetes Mellitus) in the mondo-parsed.json file. So something went awry in either the mondo file itself or the parsing code.

jless screenshot

Screen Shot 2024-04-19 at 12 18 16 AM

When I was trying this locally the issue seemed to be fixed when I re-ran the download.js file (node download.js, which updates the parsed files). I don't have access to the original files used to generate umls-parsed.json, so that should probably used to do a full update of the parsed files in the node expansion repository.
image