|
|
|
from streamlit_agraph import Node, Edge, Config |
|
|
|
def build_agraph(res: Dict) -> (list, list, Config): |
|
nodes, edges = [], [] |
|
|
|
for i,p in enumerate(res["papers"]): |
|
nid = f"paper_{i}" |
|
nodes.append(Node(id=nid, label=p["title"], size=20, color="#0984e3")) |
|
|
|
|
|
for u in res["umls"]: |
|
cid = f"cui_{u['cui']}" |
|
label = f"{u['name']} ({u['cui']})" |
|
nodes.append(Node(id=cid, label=label, size=25, color="#00b894")) |
|
|
|
edges.append(Edge(source=cid, target="paper_0", label="mentioned_in")) |
|
|
|
g = res.get("gene",{}) |
|
if g: |
|
gid = "gene_node" |
|
nodes.append(Node(id=gid, label=g.get("symbol",g.get("name","gene")), color="#d63031")) |
|
edges.append(Edge(source=gid, target="cui_"+res["umls"][0]["cui"], label="related")) |
|
|
|
for v in res["variants"]: |
|
vid = f"var_{v['mutationId']}" |
|
nodes.append(Node(id=vid, label=v["mutationId"], color="#fdcb6e", size=15)) |
|
edges.append(Edge(source=vid, target=gid, label="affects")) |
|
|
|
for t in res["trials"]: |
|
tid = t["NCTId"][0] |
|
nodes.append(Node(id=tid, label=tid, color="#6c5ce7")) |
|
edges.append(Edge(source=tid, target=gid, label="studies")) |
|
|
|
cfg = Config(width="100%", height="600", directed=True, |
|
nodeHighlightBehavior=True, highlightColor="#fdcb6e") |
|
return nodes, edges, cfg |
|
|