diff --git a/.env.example b/.env.example index d36524d2..e0f90bbf 100644 --- a/.env.example +++ b/.env.example @@ -2,7 +2,6 @@ NEXT_PUBLIC_PREFIX= NEXT_PUBLIC_NEO4J_DEV_URL=bolt://localhost:7687 NEXT_PUBLIC_NEO4J_URL=bolt://neo4j:7687 NEO4J_DEV_URL=bolt://localhost:7687 -NEXT_PUBLIC_NEO4J_V5_URL=bolt://neo4j-v5:7687 NEXT_PUBLIC_NEO4J_USER=neo4j NEXT_PUBLIC_NEO4J_NAME=kg diff --git a/BiomarkerKGDemo-1.code-workspace b/BiomarkerKGDemo-1.code-workspace new file mode 100644 index 00000000..27fad7c9 --- /dev/null +++ b/BiomarkerKGDemo-1.code-workspace @@ -0,0 +1,12 @@ +{ + "folders": [ + { + "name": "BiomarkerKGDemo-1", + "path": "../../BiomarkerKGDemo-1" + }, + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/app/ThemeRegistry.tsx b/app/ThemeRegistry.tsx index 94b31aba..4e3277bc 100644 --- a/app/ThemeRegistry.tsx +++ b/app/ThemeRegistry.tsx @@ -8,10 +8,12 @@ import CssBaseline from '@mui/material/CssBaseline'; import { cfde_theme } from '@/themes/cfde'; import { enrichr_kg_theme } from '@/themes/enrichr-kg'; import { lncRNAlyzr } from '@/themes/lncRNAlyzr'; +import { biomarker_kg_theme } from '@/themes/biomarker-kg'; const themes = { cfde_theme: cfde_theme, enrichr_kg_theme: enrichr_kg_theme, - lncRNAlyzr: lncRNAlyzr + lncRNAlyzr: lncRNAlyzr, + biomarker_kg_theme: biomarker_kg_theme, } // This implementation is from emotion-js diff --git a/app/api/biomarker/breastcancerdiagnosis/route.ts b/app/api/biomarker/breastcancerdiagnosis/route.ts new file mode 100644 index 00000000..93e6b35b --- /dev/null +++ b/app/api/biomarker/breastcancerdiagnosis/route.ts @@ -0,0 +1,110 @@ +import { resolve_results } from "../../knowledge_graph/helper"; +import { NextResponse } from "next/server"; +import type { NextRequest } from "next/server"; +import { z } from 'zod'; +import { initialize } from "../../initialize/helper"; +async function process_query({ + term, + limit, + aggr_scores, + colors, + field, + type}: { + term: string, + limit: number, + aggr_scores?: {[key:string]: {max: number, min: number}}, + colors?: {[key: string]: {color?: string, field?: string, aggr_type?: string}}, + field: string, + type: string, + }) { + + const query = `MATCH p = (c:Condition {label: 'breast cancer'})<-[:diagnostic_for]-(b:Biomarker)-[:diagnostic_for]->(a:Condition) + RETURN p, nodes(p) AS n, relationships(p) AS r LIMIT TOINTEGER($limit) + + ` + const query_params = { term, limit } + return resolve_results({query, query_params, terms: [term], aggr_scores, colors, fields: [field]}) +} + +const InputSchema = z.object({ + start: z.string(), + start_term: z.string(), + limit: z.number().optional(), + start_field: z.string().optional(), +}) +/** + * @swagger + * /api/distillery/disease2exrna: + * get: + * description: Performs liquid biopsy of condition + * tags: + * - distillery apps + * parameters: + * - name: filter + * in: query + * required: true + * content: + * application/json: + * schema: + * type: object + * required: + * - start + * - start_term + * properties: + * start: + * type: string + * start_field: + * type: string + * start_term: + * type: string + * limit: + * type: integer + * default: 5 + * responses: + * 200: + * description: Subnetwork + * content: + * application/json: + * schema: + * type: object + * properties: + * nodes: + * type: array + * items: + * type: object + * properties: + * data: + * type: object + * edges: + * type: array + * items: + * type: object + * properties: + * data: + * type: object + */ +export async function GET(req: NextRequest) { + try { + const filter = req.nextUrl.searchParams.get("filter") + if (!filter) return NextResponse.json({error: "No filter inputted"}, {status: 400}) + const f = JSON.parse(filter) + if (f.limit && !isNaN(f.limit) && typeof f.limit === 'string') f.limit = parseInt(f.limit) + const { start, start_term, limit=10, start_field="label" } = InputSchema.parse(f) + + const {aggr_scores, colors} = await initialize() + + if (start_term === undefined) return NextResponse.json({error: "No term inputted"}, {status: 400}) + else { + try { + const results = await process_query({type:start, term:start_term, limit, aggr_scores, colors, field:start_field }) + fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/counter/update`) + return NextResponse.json(results, {status: 200}) + } catch (e) { + return NextResponse.json(e, {status: 400}) + } + } + } catch (e) { + return NextResponse.json(e, {status: 400}) + } + } + \ No newline at end of file diff --git a/app/api/biomarker/thyroidandskinmelanoma/route.ts b/app/api/biomarker/thyroidandskinmelanoma/route.ts new file mode 100644 index 00000000..cb83d379 --- /dev/null +++ b/app/api/biomarker/thyroidandskinmelanoma/route.ts @@ -0,0 +1,110 @@ +import { resolve_results } from "../../knowledge_graph/helper"; +import { NextResponse } from "next/server"; +import type { NextRequest } from "next/server"; +import { z } from 'zod'; +import { initialize } from "../../initialize/helper"; +async function process_query({ + term, + limit, + aggr_scores, + colors, + field, + type}: { + term: string, + limit: number, + aggr_scores?: {[key:string]: {max: number, min: number}}, + colors?: {[key: string]: {color?: string, field?: string, aggr_type?: string}}, + field: string, + type: string, + }) { + + const query = `MATCH p = (c:Condition {label: 'thyroid cancer'})<-[:indicates_risk_of_developing]-(b:Biomarker)-[:indicates_risk_of_developing]->(a:Condition {label: 'Skin Squamous Cell Carcinoma'}) + RETURN p, nodes(p) AS n, relationships(p) AS r LIMIT TOINTEGER($limit) + + ` + const query_params = { term, limit } + return resolve_results({query, query_params, terms: [term], aggr_scores, colors, fields: [field]}) +} + +const InputSchema = z.object({ + start: z.string(), + start_term: z.string(), + limit: z.number().optional(), + start_field: z.string().optional(), +}) +/** + * @swagger + * /api/distillery/disease2exrna: + * get: + * description: Performs liquid biopsy of condition + * tags: + * - distillery apps + * parameters: + * - name: filter + * in: query + * required: true + * content: + * application/json: + * schema: + * type: object + * required: + * - start + * - start_term + * properties: + * start: + * type: string + * start_field: + * type: string + * start_term: + * type: string + * limit: + * type: integer + * default: 5 + * responses: + * 200: + * description: Subnetwork + * content: + * application/json: + * schema: + * type: object + * properties: + * nodes: + * type: array + * items: + * type: object + * properties: + * data: + * type: object + * edges: + * type: array + * items: + * type: object + * properties: + * data: + * type: object + */ +export async function GET(req: NextRequest) { + try { + const filter = req.nextUrl.searchParams.get("filter") + if (!filter) return NextResponse.json({error: "No filter inputted"}, {status: 400}) + const f = JSON.parse(filter) + if (f.limit && !isNaN(f.limit) && typeof f.limit === 'string') f.limit = parseInt(f.limit) + const { start, start_term, limit=10, start_field="label" } = InputSchema.parse(f) + + const {aggr_scores, colors} = await initialize() + + if (start_term === undefined) return NextResponse.json({error: "No term inputted"}, {status: 400}) + else { + try { + const results = await process_query({type:start, term:start_term, limit, aggr_scores, colors, field:start_field }) + fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/counter/update`) + return NextResponse.json(results, {status: 200}) + } catch (e) { + return NextResponse.json(e, {status: 400}) + } + } + } catch (e) { + return NextResponse.json(e, {status: 400}) + } + } + \ No newline at end of file diff --git a/app/api/counter/route.ts b/app/api/counter/route.ts index 47c9a9eb..be4c92c7 100644 --- a/app/api/counter/route.ts +++ b/app/api/counter/route.ts @@ -32,4 +32,6 @@ export async function GET() { console.log(error) return NextResponse.error() } -} \ No newline at end of file +} + +export const revalidate = 0; \ No newline at end of file diff --git a/app/api/counter/update/route.ts b/app/api/counter/update/route.ts index e4f1934a..1af0a00b 100644 --- a/app/api/counter/update/route.ts +++ b/app/api/counter/update/route.ts @@ -40,4 +40,6 @@ export async function GET() { console.log(error) return NextResponse.error() } -} \ No newline at end of file +} + +export const revalidate = 0; \ No newline at end of file diff --git a/app/api/knowledge_graph/node_search/route.ts b/app/api/knowledge_graph/node_search/route.ts index 1b7d1e6d..98741349 100644 --- a/app/api/knowledge_graph/node_search/route.ts +++ b/app/api/knowledge_graph/node_search/route.ts @@ -45,7 +45,7 @@ const query_schema = z.object({ */ export async function GET(req: NextRequest) { try { - const node_properties = await (await fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/knowledge_graph/search_properties`)).json() + const node_properties = await (await fetch(`${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/knowledge_graph/search_properties`)).json() const {type, field="label", term, limit=100, filter={}} = query_schema.parse(convert_query(req)) const session = neo4jDriver.session({ defaultAccessMode: neo4j.session.READ diff --git a/app/api/knowledge_graph/route.ts b/app/api/knowledge_graph/route.ts index 4c314d2d..6d1f457e 100644 --- a/app/api/knowledge_graph/route.ts +++ b/app/api/knowledge_graph/route.ts @@ -681,16 +681,13 @@ export async function GET(req: NextRequest) { if (start && end && start_term && end_term) { if(augment) return NextResponse.json({error: "You can only augment on single search"}, {status: 400}) const results = await resolve_two_terms({edges, start, start_field, start_term, end, end_field, end_term, relation, limit, path_length, aggr_scores, colors, remove: remove ? remove: [], expand: expand ? expand : [], gene_links, additional_link_tags}) - fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/counter/update`) return NextResponse.json(results, {status: 200}) } else if (start && end && start_term ) { if(augment) return NextResponse.json({error: "You can only augment on single search"}, {status: 400}) const results = await resolve_term_and_end_type({edges, start_term, start_field, start, end, relation, limit, path_length, aggr_scores, colors, remove, expand: expand, gene_links, additional_link_tags}) - fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/counter/update`) return NextResponse.json(results, {status: 200}) } else if (start) { const results = await resolve_one_term({edges, start, field: start_field, term: start_term, relation, limit, path_length, aggr_scores, colors, remove, expand, gene_links, additional_link_tags, augment, augment_limit }) - fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/counter/update`) return NextResponse.json(results, {status: 200}) } else { return NextResponse.json({error: "Invalid Input"}, {status: 400}) @@ -708,4 +705,4 @@ export async function GET(req: NextRequest) { } catch (error) { return NextResponse.json(error, {status: 400}) } -} +} \ No newline at end of file diff --git a/app/page.tsx b/app/page.tsx index ed60b84a..035b6277 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -38,11 +38,9 @@ export default async function Home({searchParams}: {
- - - - - + + +
diff --git a/components/APIDoc/react-swagger.tsx b/components/APIDoc/react-swagger.tsx index 9e5eb06c..1b8eb0e4 100644 --- a/components/APIDoc/react-swagger.tsx +++ b/components/APIDoc/react-swagger.tsx @@ -13,7 +13,7 @@ function ReactSwagger({ spec }: Props) { const [specs, setSpecs] = useState(null) useEffect(()=>{ const resolve_specs = async () => { - const specs = await (await fetch(`${process.env.NEXT_PUBLIC_HOST}/api/docs`)).json() + const specs = await (await fetch(`${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}/api/docs`)).json() setSpecs(specs) } resolve_specs() diff --git a/components/Counter.tsx b/components/Counter.tsx index 15e25ad9..00c2941d 100644 --- a/components/Counter.tsx +++ b/components/Counter.tsx @@ -1,32 +1,17 @@ 'use client' -import {useState, useEffect} from 'react' -import { delay } from '@/utils/helper'; import { Stack, Typography } from '@mui/material'; -export const Counter = ({ui_theme}: {ui_theme?: string}) => { - const [count, setCount] = useState(0) - const [timer, setTimer] = useState(0) - const query_counter = async (delay_time=5000) => { - try { - await delay(delay_time) - const {count} = await ( await fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/counter`)).json() - setCount(count) - setTimer(timer + 1) - } catch (error) { - console.log(error) - console.error(error) - } - } +import useSWR from 'swr'; +const fetcher = (url) => fetch(url).then(r => r.json()) +export const Counter = ({ui_theme}: {ui_theme?: string}) => { + + const { data } = useSWR('/api/counter', fetcher, { refreshInterval: 5000 }) - useEffect(()=>{ - if (timer === 0) query_counter(0) - else query_counter() - }, [timer]) return ( Queries Submitted: {ui_theme === undefined || ui_theme === 'cfde_theme' ? - {count}: - {count} + {(data || {}).count}: + {(data || {}).count} } ) diff --git a/components/Cytoscape/index.tsx b/components/Cytoscape/index.tsx index a3b0f77f..a054e240 100644 --- a/components/Cytoscape/index.tsx +++ b/components/Cytoscape/index.tsx @@ -1,5 +1,6 @@ 'use client' import { useRef, useState, useEffect } from 'react'; +import { useSWRConfig } from 'swr' // import dynamic from 'next/dynamic'; import { NetworkSchema } from '@/app/api/knowledge_graph/route'; import CytoscapeComponent from 'react-cytoscapejs'; @@ -11,7 +12,6 @@ import HubIcon from '@mui/icons-material/Hub'; import { mdiFamilyTree, mdiDotsCircle} from '@mdi/js'; import Icon from '@mdi/react'; import fileDownload from 'js-file-download'; - export const layouts = { "Force-directed": { name: 'cose', @@ -36,6 +36,9 @@ export const layouts = { }, } + + + export default function Cytoscape ({ elements, schema, @@ -51,7 +54,6 @@ export default function Cytoscape ({ }) { const cyref = useRef(null); const networkRef = useRef(null); - const [ready, setReady] = useState(false) const [id, setId] = useState(0) const [node, setNode] = useState(null) const [edge, setEdge] = useState(null) @@ -64,6 +66,8 @@ export default function Cytoscape ({ const [legend_size, setLegendSize] = useQueryState('legend_size') const [download_image, setDownloadImage] = useQueryState('download_image') const edgeStyle = edge_labels ? {label: 'data(label)'} : {} + + const { mutate } = useSWRConfig() useEffect(()=>{ const cytoscape = require('cytoscape') const svg = require('cytoscape-svg') @@ -81,9 +85,19 @@ export default function Cytoscape ({ setDownloadImage(null) }, [download_image]) + useEffect(()=>{ + const update_counter = async () => { + await fetch(`${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/counter/update`) + mutate('/api/counter') + } + if (elements && elements.nodes.length > 0) update_counter() + setId(id+1) + }, [elements]) + + useEffect(()=>{ setId(id+1) - },[elements, layout]) + },[layout, elements]) // if (!ready) return return (
diff --git a/components/Download/client_side.tsx b/components/Download/client_side.tsx index eb9b78b8..6acfbc33 100644 --- a/components/Download/client_side.tsx +++ b/components/Download/client_side.tsx @@ -31,7 +31,7 @@ const default_header: GridColDef[] = [ align: "left" }, { - field: 'terms', + field: 'nodes', headerName: "Nodes", align: "left" }, @@ -64,13 +64,6 @@ const default_header: GridColDef[] = [ ] const node_header: GridColDef[] = [ - { - field: 'resource', - headerName: "Resource", - // flex: 1, - // style: {flexDirection: "row"}, - align: "left" - }, { field: 'node_type', headerName: "Node Type", @@ -91,7 +84,7 @@ const node_header: GridColDef[] = [ align: "left" }, { - field: 'terms', + field: 'nodes', headerName: "Nodes", align: "left" }, @@ -113,13 +106,6 @@ const node_header: GridColDef[] = [ ] const edge_header: GridColDef[] = [ - { - field: 'resource', - headerName: "Resource", - // flex: 1, - // style: {flexDirection: "row"}, - align: "left" - }, { field: 'source', headerName: "Source", @@ -252,13 +238,12 @@ const ClientSide = ({download, type}: {download: Array<{ size: string }> | Array<{ node_type: string, - resource: string, description?: string, terms: number, url: string, size: string }> | Array<{ - resource: string, + source: string, relation: string, target: string, diff --git a/components/Enrichment/index.tsx b/components/Enrichment/index.tsx index 50eb0d8b..67411552 100644 --- a/components/Enrichment/index.tsx +++ b/components/Enrichment/index.tsx @@ -134,8 +134,8 @@ const Enrichment = async ({ if (request.ok) shortId = (await (request.json())).link_id else console.log(`failed ${process.env.NEXT_PUBLIC_ENRICHR_URL}/share?userListId=${userListId}`) console.log(`ShortID: ${shortId}`) - console.log(`Enrichment ${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/enrichment${parsedParams.augment===true ? '/augment': ''}`) - const res = await fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/enrichment${parsedParams.augment===true ? '/augment': ''}`, + console.log(`Enrichment ${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/enrichment${parsedParams.augment===true ? '/augment': ''}`) + const res = await fetch(`${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/enrichment${parsedParams.augment===true ? '/augment': ''}`, { method: "POST", body: JSON.stringify({ @@ -155,7 +155,7 @@ const Enrichment = async ({ }), }) if (!res.ok) { - console.log(`failed connecting to ${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/enrichment${parsedParams.augment===true ? '/augment': ''}`) + console.log(`failed connecting to ${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/enrichment${parsedParams.augment===true ? '/augment': ''}`) console.log(await res.text()) } else{ @@ -168,7 +168,7 @@ const Enrichment = async ({ } } const payload = { - 'url': `${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}${endpoint}?q=${searchParams.q}`, + 'url': `${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}${endpoint}?q=${searchParams.q}`, 'apikey': process.env.NEXT_PUBLIC_TURL } console.log("Getting short url") diff --git a/components/MarkdownComponent/index.tsx b/components/MarkdownComponent/index.tsx index e2271530..2540ad40 100644 --- a/components/MarkdownComponent/index.tsx +++ b/components/MarkdownComponent/index.tsx @@ -2,7 +2,7 @@ import { Typography, Link } from '@mui/material'; import MarkdownToJSX from 'markdown-to-jsx'; export const get_path = (src) => { if (src.startsWith("/")) { - return `${process.env.NEXT_PUBLIC_HOST}${src}` + return `${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${src}` } else { return src } diff --git a/components/TermAndGeneSearch/index.tsx b/components/TermAndGeneSearch/index.tsx index 8b3f7fe1..1c9d8eb7 100644 --- a/components/TermAndGeneSearch/index.tsx +++ b/components/TermAndGeneSearch/index.tsx @@ -110,8 +110,8 @@ const TermAndGeneSearch = async ({searchParams, props}: { const selected_edges = [] const genes = [] if (Object.keys(filter).length > 0) { - console.log(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/knowledge_graph?filter=${JSON.stringify(filter)}`) - const res = await fetch(`${process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/knowledge_graph?filter=${JSON.stringify(filter)}`, + console.log(`${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/knowledge_graph?filter=${JSON.stringify(filter)}`) + const res = await fetch(`${process.env.NODE_ENV==="development" ? process.env.NEXT_PUBLIC_HOST_DEV : process.env.NEXT_PUBLIC_HOST}${process.env.NEXT_PUBLIC_PREFIX ? process.env.NEXT_PUBLIC_PREFIX: ''}/api/knowledge_graph?filter=${JSON.stringify(filter)}`, { method: 'GET', signal: controller.signal, diff --git a/db.dump b/db.dump new file mode 100644 index 00000000..e69de29b diff --git a/docker-compose.yml b/docker-compose.yml index e34f7f1f..1c693599 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,13 +5,13 @@ services: context: . dockerfile: ./Dockerfile.next platform: linux/amd64 - image: maayanlab/distillery:2.3.12 + image: nlingam05/bkg:2.4.5 x-kubernetes: strategy: type: Recreate imagePullPolicy: IfNotPresent annotations: - maayanlab.cloud/ingress: https://dd-kg-ui.cfde.cloud + maayanlab.cloud/ingress: https://bkg.dev.maayanlab.cloud/ ports: - 3000:3000 environment: @@ -48,7 +48,7 @@ services: - 7687:7687 - 7474:7474 volumes: - - distillery-neo4j-v5:/data + - bkg-neo4j-v5:/data deploy: resources: limits: @@ -57,11 +57,11 @@ services: memory: 10G volumes: - distillery-neo4j-v5: + bkg-neo4j-v5: x-kubernetes: size: 25Gi class: gp2 x-kubernetes: - name: distillery - namespace: distillery + name: bkg + namespace: bkg diff --git a/load.ipynb b/load.ipynb new file mode 100644 index 00000000..be4358ae --- /dev/null +++ b/load.ipynb @@ -0,0 +1,82 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error setting COMMAND_MODE: ssh: connect to host ssh.dev.maayanlab.cloud port 22: Operation timed out\n", + "\n", + "Error setting DISPLAY: ssh: connect to host ssh.dev.maayanlab.cloud port 22: Operation timed out\n", + "\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/Users/nialingam/BiomarkerKGDemo-1/Gene-Knowledge-Graph/load.ipynb Cell 1\u001b[0m line \u001b[0;36m2\n\u001b[1;32m 19\u001b[0m \u001b[39m# Iterate over the loaded environment variables and set them on Dokku app\u001b[39;00m\n\u001b[1;32m 20\u001b[0m \u001b[39mfor\u001b[39;00m key, value \u001b[39min\u001b[39;00m os\u001b[39m.\u001b[39menviron\u001b[39m.\u001b[39mitems():\n\u001b[0;32m---> 21\u001b[0m set_env_var(key, value)\n", + "\u001b[1;32m/Users/nialingam/BiomarkerKGDemo-1/Gene-Knowledge-Graph/load.ipynb Cell 1\u001b[0m line \u001b[0;36m1\n\u001b[1;32m 11\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mset_env_var\u001b[39m(key, value):\n\u001b[1;32m 12\u001b[0m command \u001b[39m=\u001b[39m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mssh \u001b[39m\u001b[39m{\u001b[39;00mDOKKU_SERVER\u001b[39m}\u001b[39;00m\u001b[39m \u001b[39m\u001b[39m'\u001b[39m\u001b[39mdokku config:set \u001b[39m\u001b[39m{\u001b[39;00mAPP_NAME\u001b[39m}\u001b[39;00m\u001b[39m \u001b[39m\u001b[39m{\u001b[39;00mkey\u001b[39m}\u001b[39;00m\u001b[39m=\u001b[39m\u001b[39m{\u001b[39;00mvalue\u001b[39m}\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m---> 13\u001b[0m result \u001b[39m=\u001b[39m subprocess\u001b[39m.\u001b[39;49mrun(command, shell\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, stdout\u001b[39m=\u001b[39;49msubprocess\u001b[39m.\u001b[39;49mPIPE, stderr\u001b[39m=\u001b[39;49msubprocess\u001b[39m.\u001b[39;49mPIPE)\n\u001b[1;32m 14\u001b[0m \u001b[39mif\u001b[39;00m result\u001b[39m.\u001b[39mreturncode \u001b[39m!=\u001b[39m \u001b[39m0\u001b[39m:\n\u001b[1;32m 15\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mError setting \u001b[39m\u001b[39m{\u001b[39;00mkey\u001b[39m}\u001b[39;00m\u001b[39m: \u001b[39m\u001b[39m{\u001b[39;00mresult\u001b[39m.\u001b[39mstderr\u001b[39m.\u001b[39mdecode()\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m)\n", + "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/subprocess.py:550\u001b[0m, in \u001b[0;36mrun\u001b[0;34m(input, capture_output, timeout, check, *popenargs, **kwargs)\u001b[0m\n\u001b[1;32m 548\u001b[0m \u001b[39mwith\u001b[39;00m Popen(\u001b[39m*\u001b[39mpopenargs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs) \u001b[39mas\u001b[39;00m process:\n\u001b[1;32m 549\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 550\u001b[0m stdout, stderr \u001b[39m=\u001b[39m process\u001b[39m.\u001b[39;49mcommunicate(\u001b[39minput\u001b[39;49m, timeout\u001b[39m=\u001b[39;49mtimeout)\n\u001b[1;32m 551\u001b[0m \u001b[39mexcept\u001b[39;00m TimeoutExpired \u001b[39mas\u001b[39;00m exc:\n\u001b[1;32m 552\u001b[0m process\u001b[39m.\u001b[39mkill()\n", + "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/subprocess.py:1209\u001b[0m, in \u001b[0;36mPopen.communicate\u001b[0;34m(self, input, timeout)\u001b[0m\n\u001b[1;32m 1206\u001b[0m endtime \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 1208\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m-> 1209\u001b[0m stdout, stderr \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_communicate(\u001b[39minput\u001b[39;49m, endtime, timeout)\n\u001b[1;32m 1210\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyboardInterrupt\u001b[39;00m:\n\u001b[1;32m 1211\u001b[0m \u001b[39m# https://bugs.python.org/issue25942\u001b[39;00m\n\u001b[1;32m 1212\u001b[0m \u001b[39m# See the detailed comment in .wait().\u001b[39;00m\n\u001b[1;32m 1213\u001b[0m \u001b[39mif\u001b[39;00m timeout \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", + "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/subprocess.py:2115\u001b[0m, in \u001b[0;36mPopen._communicate\u001b[0;34m(self, input, endtime, orig_timeout)\u001b[0m\n\u001b[1;32m 2108\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_check_timeout(endtime, orig_timeout,\n\u001b[1;32m 2109\u001b[0m stdout, stderr,\n\u001b[1;32m 2110\u001b[0m skip_check_and_raise\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n\u001b[1;32m 2111\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mRuntimeError\u001b[39;00m( \u001b[39m# Impossible :)\u001b[39;00m\n\u001b[1;32m 2112\u001b[0m \u001b[39m'\u001b[39m\u001b[39m_check_timeout(..., skip_check_and_raise=True) \u001b[39m\u001b[39m'\u001b[39m\n\u001b[1;32m 2113\u001b[0m \u001b[39m'\u001b[39m\u001b[39mfailed to raise TimeoutExpired.\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m-> 2115\u001b[0m ready \u001b[39m=\u001b[39m selector\u001b[39m.\u001b[39;49mselect(timeout)\n\u001b[1;32m 2116\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_check_timeout(endtime, orig_timeout, stdout, stderr)\n\u001b[1;32m 2118\u001b[0m \u001b[39m# XXX Rewrite these to use non-blocking I/O on the file\u001b[39;00m\n\u001b[1;32m 2119\u001b[0m \u001b[39m# objects; they are no longer using C stdio!\u001b[39;00m\n", + "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/selectors.py:415\u001b[0m, in \u001b[0;36m_PollLikeSelector.select\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 413\u001b[0m ready \u001b[39m=\u001b[39m []\n\u001b[1;32m 414\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 415\u001b[0m fd_event_list \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_selector\u001b[39m.\u001b[39;49mpoll(timeout)\n\u001b[1;32m 416\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mInterruptedError\u001b[39;00m:\n\u001b[1;32m 417\u001b[0m \u001b[39mreturn\u001b[39;00m ready\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "import os\n", + "from dotenv import load_dotenv\n", + "import subprocess\n", + "\n", + "load_dotenv(dotenv_path='/Users/nialingam/BiomarkerKGDemo-1/Gene-Knowledge-Graph/.env')\n", + "\n", + "APP_NAME = 'bkg'\n", + "DOKKU_SERVER = 'ssh.dev.maayanlab.cloud'\n", + "\n", + "# Function to set environment variables on Dokku app\n", + "def set_env_var(key, value):\n", + " command = f\"ssh {DOKKU_SERVER} 'dokku config:set {APP_NAME} {key}={value}'\"\n", + " result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n", + " if result.returncode != 0:\n", + " print(f\"Error setting {key}: {result.stderr.decode()}\")\n", + " else:\n", + " print(f\"Set {key}\")\n", + "\n", + "# Iterate over the loaded environment variables and set them on Dokku app\n", + "for key, value in os.environ.items():\n", + " set_env_var(key, value)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/package-lock.json b/package-lock.json index d7e98e0c..ada0fbd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cfde-knowledge-exchange", - "version": "2.3.12", + "version": "2.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cfde-knowledge-exchange", - "version": "2.3.12", + "version": "2.4.5", "dependencies": { "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", @@ -48,6 +48,7 @@ "sanitize-html": "^2.11.0", "sharp": "^0.33.2", "swagger-ui-react": "^5.15.2", + "swr": "^2.2.5", "tailwindcss": "^3.4.1", "zod": "^3.22.4", "zod_utilz": "^0.7.3" @@ -4995,11 +4996,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -6772,9 +6773,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -11423,6 +11424,19 @@ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.0.tgz", "integrity": "sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg==" }, + "node_modules/swr": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", + "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", + "license": "MIT", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/tailwindcss": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", diff --git a/package.json b/package.json index 28e13142..198547b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cfde-knowledge-exchange", - "version": "2.3.12", + "version": "2.4.5", "private": true, "scripts": { "dev": "NODE_ENV=development next dev", @@ -52,6 +52,7 @@ "sanitize-html": "^2.11.0", "sharp": "^0.33.2", "swagger-ui-react": "^5.15.2", + "swr": "^2.2.5", "tailwindcss": "^3.4.1", "zod": "^3.22.4", "zod_utilz": "^0.7.3" diff --git a/public/BiomarkerKGDemo-1.code-workspace b/public/BiomarkerKGDemo-1.code-workspace new file mode 100644 index 00000000..8ca4aa1b --- /dev/null +++ b/public/BiomarkerKGDemo-1.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "../.." + }, + { + "path": "../../../Desktop/m" + } + ], + "settings": {} +} \ No newline at end of file diff --git a/public/icon/anatomy.png b/public/icon/anatomy.png new file mode 100644 index 00000000..90b27cad Binary files /dev/null and b/public/icon/anatomy.png differ diff --git a/public/icon/bkg.png b/public/icon/bkg.png new file mode 100644 index 00000000..c52beec2 Binary files /dev/null and b/public/icon/bkg.png differ diff --git a/public/icon/bkg_zoom.png b/public/icon/bkg_zoom.png new file mode 100644 index 00000000..5918d319 Binary files /dev/null and b/public/icon/bkg_zoom.png differ diff --git a/public/icon/breast.png b/public/icon/breast.png new file mode 100644 index 00000000..b0d1e932 Binary files /dev/null and b/public/icon/breast.png differ diff --git a/public/icon/compound.png b/public/icon/compound.png new file mode 100644 index 00000000..d4ae4a85 Binary files /dev/null and b/public/icon/compound.png differ diff --git a/public/icon/condition.png b/public/icon/condition.png new file mode 100644 index 00000000..75491b8e Binary files /dev/null and b/public/icon/condition.png differ diff --git a/public/icon/gene.png b/public/icon/gene.png new file mode 100644 index 00000000..e20962fa Binary files /dev/null and b/public/icon/gene.png differ diff --git a/public/icon/role.png b/public/icon/role.png new file mode 100644 index 00000000..03f0eafc Binary files /dev/null and b/public/icon/role.png differ diff --git a/public/icon/thyroidandskin.png b/public/icon/thyroidandskin.png new file mode 100644 index 00000000..aba1759b Binary files /dev/null and b/public/icon/thyroidandskin.png differ diff --git a/public/icon/variant.png b/public/icon/variant.png new file mode 100644 index 00000000..7c7260d2 Binary files /dev/null and b/public/icon/variant.png differ diff --git a/public/schema.json b/public/schema.json index fd34bc61..921e36d7 100644 --- a/public/schema.json +++ b/public/schema.json @@ -1,1603 +1,17 @@ { "nodes": [ { - "node": "Glytoucan", + "node": "Biomarker", "example": [ - "543.22", - "2296.82" + "presence of rs881844 in ERBB2", + "presence of rs73159014 in NF2" ], "display": [ { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "GLYTOUCAN", - "text": "${GLYTOUCAN}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GLYTOUCAN" - ] - }, - { - "node": "Glycoprotein", - "example": [ - "GLYCOPROTEIN:Q9UKS6-1-1 CUI", - "GLYCOPROTEIN:P43251-1-33 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "GLYCOPROTEIN", - "text": "${GLYCOPROTEIN}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "GLYCOPROTEIN", - "type" - ] - }, - { - "node": "Isoform", - "example": [ - "UNIPROTKB.ISOFORM:Q6NUT3-1 CUI", - "UNIPROTKB.ISOFORM:P21661-1 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "UNIPROTKB.ISOFORM", - "text": "${UNIPROTKB.ISOFORM}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "UNIPROTKB.ISOFORM" - ] - }, - { - "node": "Protein", - "example": [ - "Casein kinase I isoform delta ", - "Regulator of G-protein signaling 4 " - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "UNIPROTKB", - "text": "${UNIPROTKB}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "PR", - "text": "${PR}", - "type": "text" - } - ], - "search": [ - "label", - "UNIPROTKB", - "type", - "PR" - ] - }, - { - "node": "4DN File", - "example": [ - "Micro-C on HFFc6 cells.HFFc6.Dekker", - "in situ Hi-C on HFFc6 cells.HFFc6.protocol variations.Dekker" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "4DNF", - "text": "${4DNF}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "4DNF", - "type" - ] - }, - { - "node": "Gene", - "example": [ - "STAT3", - "MAPK1" - ], - "display": [ - { - "label": "ORDO", - "text": "${ORDO}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "NCI", - "text": "${NCI}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "ENTREZ", - "text": "${ENTREZ}", - "type": "text" - }, - { - "label": "ENSEMBL", - "text": "${ENSEMBL}", - "type": "text" - }, - { - "label": "HGNC", - "text": "${HGNC}", - "type": "text" - }, - { - "label": "OMIM", - "text": "${OMIM}", - "type": "text" - } - ], - "search": [ - "ORDO", - "type", - "NCI", - "label", - "ENTREZ", - "ENSEMBL", - "HGNC", - "OMIM" - ] - }, - { - "node": "MOTRPAC", - "example": [ - "MOTRPAC:ENSRNOG00000011775-liver-female CUI", - "MOTRPAC:ENSRNOG00000003953-liver-female CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "MOTRPAC", - "text": "${MOTRPAC}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "MOTRPAC" - ] - }, - { - "node": "Anatomy", - "example": [ - "fibroblast derived cell line", - "Heart" - ], - "display": [ - { - "label": "PSY", - "text": "${PSY}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "NCI", - "text": "${NCI}", - "type": "text" - }, - { - "label": "UBERON", - "text": "${UBERON}", - "type": "text" - }, - { - "label": "FMA", - "text": "${FMA}", - "type": "text" - }, - { - "label": "CHV", - "text": "${CHV}", - "type": "text" - }, - { - "label": "ICF-CY", - "text": "${ICF-CY}", - "type": "text" - }, - { - "label": "ICF", - "text": "${ICF}", - "type": "text" - }, - { - "label": "CSP", - "text": "${CSP}", - "type": "text" - }, - { - "label": "LCH_NW", - "text": "${LCH_NW}", - "type": "text" - }, - { - "label": "EFO", - "text": "${EFO}", - "type": "text" - }, - { - "label": "LNC", - "text": "${LNC}", - "type": "text" - }, - { - "label": "CARO", - "text": "${CARO}", - "type": "text" - }, - { - "label": "PAX.PAXRAT", - "text": "${PAX.PAXRAT}", - "type": "text" - }, - { - "label": "PAX.PAXSPN", - "text": "${PAX.PAXSPN}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "HL7V2.5", - "text": "${HL7V2.5}", - "type": "text" - }, - { - "label": "UWDA", - "text": "${UWDA}", - "type": "text" - }, - { - "label": "MSH", - "text": "${MSH}", - "type": "text" - }, - { - "label": "AZ", - "text": "${AZ}", - "type": "text" - }, - { - "label": "CL", - "text": "${CL}", - "type": "text" - }, - { - "label": "OMIM", - "text": "${OMIM}", - "type": "text" - } - ], - "search": [ - "PSY", - "type", - "NCI", - "UBERON", - "FMA", - "CHV", - "ICF-CY", - "ICF", - "CSP", - "LCH_NW", - "EFO", - "LNC", - "CARO", - "PAX.PAXRAT", - "PAX.PAXSPN", - "label", - "HL7V2.5", - "UWDA", - "MSH", - "AZ", - "CL", - "OMIM" - ] - }, - { - "node": "GlyGen Location", - "example": [ - "label:523", - "label:546" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "GLYGEN.LOCATION", - "text": "${GLYGEN.LOCATION}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GLYGEN.LOCATION" - ] - }, - { - "node": "SO", - "example": [ - "region", - "sequence_feature" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "SO", - "text": "${SO}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "SO", - "type" - ] - }, - { - "node": "ILX", - "example": [ - "parcellation label", - "Glutamate receptor" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "ILX", - "text": "${ILX}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "ILX.TR", - "text": "${ILX.TR}", - "type": "text" - } - ], - "search": [ - "label", - "ILX", - "type", - "ILX.TR" - ] - }, - { - "node": "Amino Acid", - "example": [ - "AMINO.ACID:Trp CUI", - "AMINO.ACID:Cys CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "AMINO.ACID", - "text": "${AMINO.ACID}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "AMINO.ACID" - ] - }, - { - "node": "Compound", - "example": [ - "dexamethasone", - "imatinib" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "CHEBI", - "text": "${CHEBI}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "PUBCHEM", - "text": "${PUBCHEM}", - "type": "text" - } - ], - "search": [ - "label", - "CHEBI", - "type", - "PUBCHEM" - ] - }, - { - "node": "Enzyme", - "example": [ - "CES1", - "MAOB" - ], - "display": [ - { - "label": "ORDO", - "text": "${ORDO}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "NCI", - "text": "${NCI}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "ENTREZ", - "text": "${ENTREZ}", - "type": "text" - }, - { - "label": "ENSEMBL", - "text": "${ENSEMBL}", - "type": "text" - }, - { - "label": "HGNC", - "text": "${HGNC}", - "type": "text" - }, - { - "label": "OMIM", - "text": "${OMIM}", - "type": "text" - } - ], - "search": [ - "ORDO", - "type", - "NCI", - "label", - "ENTREZ", - "ENSEMBL", - "HGNC", - "OMIM" - ] - }, - { - "node": "HSCLO", - "example": [ - "HSCLO:chr20.35838001-35839000 CUI", - "HSCLO:chr1.93258001-93259000 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "HSCLO", - "text": "${HSCLO}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "HSCLO", - "type" - ] - }, - { - "node": "Metabolite", - "example": [ - "trans-Zeatin", - "urea" - ], - "display": [ - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "PUBMED", - "text": "${PUBMED}", - "type": "text" - }, - { - "label": "PUBCHEM", - "text": "${PUBCHEM}", - "type": "text" - }, - { - "label": "HMDB", - "text": "${HMDB}", - "type": "text" - } - ], - "search": [ - "type", - "label", - "PUBMED", - "PUBCHEM", - "HMDB" - ] - }, - { - "node": "Glycoprotein Citation", - "example": [ - "GLYGEN.CITATION:12901863 CUI", - "GLYGEN.CITATION:8435067 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "GLYGEN.CITATION", - "text": "${GLYGEN.CITATION}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "GLYGEN.CITATION", - "type" - ] - }, - { - "node": "PATO", - "example": [ - "biological sex", - "morphology" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "PATO", - "text": "${PATO}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "PATO", - "type" - ] - }, - { - "node": "MSIGDB", - "example": [ - "MAGRANGEAS_MULTIPLE_MYELOMA_IGG_VS_IGA_UP", - "REACTOME_INCRETIN_SYNTHESIS_SECRETION_AND_INACTIVATION" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "MSIGDB", - "text": "${MSIGDB}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "MSIGDB" - ] - }, - { - "node": "EXPBINS", - "example": [ - "EXPBINS:23.0.24.0 CUI", - "EXPBINS:86.0.87.0 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "EXPBINS", - "text": "${EXPBINS}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "EXPBINS" - ] - }, - { - "node": "RBP Binding Loci", - "example": [ - "chr8.140544292.140544349.minus.b38.SF3B4", - "chr5.177594204.177594285.plus.b38.SND1" - ], - "display": [ - { - "label": "ENCODE.RBS.K562", - "text": "${ENCODE.RBS.K562}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "ENCODE.RBS.HEPG2", - "text": "${ENCODE.RBS.HEPG2}", - "type": "text" - }, - { - "label": "ENCODE.RBS.HEPG2.K562", - "text": "${ENCODE.RBS.HEPG2.K562}", - "type": "text" - } - ], - "search": [ - "ENCODE.RBS.K562", - "type", - "label", - "ENCODE.RBS.HEPG2", - "ENCODE.RBS.HEPG2.K562" - ] - }, - { - "node": "NIFSTD", - "example": [ - "Multimeric ion channel", - "Multimeric Voltage-gated ion channel" - ], - "display": [ - { - "label": "NIFSTD", - "text": "${NIFSTD}", - "type": "text" - }, - { - "label": "NIFSTD.NLX.ORG", - "text": "${NIFSTD.NLX.ORG}", - "type": "text" - }, - { - "label": "NIFSTD.NLX", - "text": "${NIFSTD.NLX}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "NIFSTD.NIFEXT", - "text": "${NIFSTD.NIFEXT}", - "type": "text" - }, - { - "label": "NIFSTD.NLX.MOL", - "text": "${NIFSTD.NLX.MOL}", - "type": "text" - } - ], - "search": [ - "NIFSTD", - "NIFSTD.NLX.ORG", - "NIFSTD.NLX", - "type", - "label", - "NIFSTD.NIFEXT", - "NIFSTD.NLX.MOL" - ] - }, - { - "node": "GTEXPVALUEBIN", - "example": [ - "PVALUEBINS:1e-10.1e-09 CUI", - "PVALUEBINS:0.02.0.03 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "PVALUEBINS", - "text": "${PVALUEBINS}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "PVALUEBINS" - ] - }, - { - "node": "GlyGen Residue", - "example": [ - "n-glycan_b-d-galp_28", - "n-glycan_a-d-neupngc_48" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "GLYGEN.RESIDUE", - "text": "${GLYGEN.RESIDUE}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GLYGEN.RESIDUE" - ] - }, - { - "node": "Disease or Phenotype", - "example": [ - "Cerebral Small Vessel Diseases", - "Enlarged kidney" - ], - "display": [ - { - "label": "DOID", - "text": "${DOID}", - "type": "text" - }, - { - "label": "ORDO", - "text": "${ORDO}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "ICPC2ICD10ENG", - "text": "${ICPC2ICD10ENG}", - "type": "text" - }, - { - "label": "ICD10CM", - "text": "${ICD10CM}", - "type": "text" - }, - { - "label": "NCI", - "text": "${NCI}", - "type": "text" - }, - { - "label": "CHV", - "text": "${CHV}", - "type": "text" - }, - { - "label": "MONDO", - "text": "${MONDO}", - "type": "text" - }, - { - "label": "EFO", - "text": "${EFO}", - "type": "text" - }, - { - "label": "LNC", - "text": "${LNC}", - "type": "text" - }, - { - "label": "MEDGEN", - "text": "${MEDGEN}", - "type": "text" - }, - { - "label": "MDR", - "text": "${MDR}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "MEDCIN", - "text": "${MEDCIN}", - "type": "text" - }, - { - "label": "MSH", - "text": "${MSH}", - "type": "text" - }, - { - "label": "HP", - "text": "${HP}", - "type": "text" - }, - { - "label": "OMIM", - "text": "${OMIM}", - "type": "text" - } - ], - "search": [ - "DOID", - "ORDO", - "type", - "ICPC2ICD10ENG", - "ICD10CM", - "NCI", - "CHV", - "MONDO", - "EFO", - "LNC", - "MEDGEN", - "MDR", - "label", - "MEDCIN", - "MSH", - "HP", - "OMIM" - ] - }, - { - "node": "exRNA Loci", - "example": [ - "chrX.111700360.111700399.plus.b38.EXOSC5", - "chr9.34107465.34107515.minus.b38.YBX3" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "ENCODE.RBS.150.NO.OVERLAP", - "text": "${ENCODE.RBS.150.NO.OVERLAP}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "ENCODE.RBS.150.NO.OVERLAP", - "type" - ] - }, - { - "node": "4DN QVal Bin", - "example": [ - "4DNQ:1e-9.1e-8 CUI", - "4DNQ:1e-29.1e-28 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "4DNQ", - "text": "${4DNQ}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "4DNQ" - ] - }, - { - "node": "Biofluid", - "example": [ - "Plasma", - "Cerebrospinal Fluid" - ], - "display": [ - { - "label": "PSY", - "text": "${PSY}", - "type": "text" - }, - { - "label": "MSH", - "text": "${MSH}", - "type": "text" - }, - { - "label": "LCH_NW", - "text": "${LCH_NW}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "NCI", - "text": "${NCI}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "UBERON", - "text": "${UBERON}", - "type": "text" - }, - { - "label": "FMA", - "text": "${FMA}", - "type": "text" - }, - { - "label": "CHV", - "text": "${CHV}", - "type": "text" - }, - { - "label": "UWDA", - "text": "${UWDA}", - "type": "text" - }, - { - "label": "CSP", - "text": "${CSP}", - "type": "text" - }, - { - "label": "LNC", - "text": "${LNC}", - "type": "text" - } - ], - "search": [ - "PSY", - "MSH", - "LCH_NW", - "type", - "NCI", - "label", - "UBERON", - "FMA", - "CHV", - "UWDA", - "CSP", - "LNC" - ] - }, - { - "node": "GO", - "example": [ - "cellular_component", - "non-membrane-bounded organelle" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "GO", - "text": "${GO}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GO" - ] - }, - { - "node": "Glycan Motif", - "example": [ - "Asialo-GM1", - "Type 1 LN3" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "GLYCAN.MOTIF", - "text": "${GLYCAN.MOTIF}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "GLYCAN.MOTIF", - "type" - ] - }, - { - "node": "Assay", - "example": [ - "Micro-C XL", - "in situ HiC" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "OBI", - "text": "${OBI}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "EFO", - "text": "${EFO}", - "type": "text" - } - ], - "search": [ - "label", - "OBI", - "type", - "EFO" - ] - }, - { - "node": "Regulatory Element Activity", - "example": [ - "EH38E3872573_testis", - "EH38E1502199_prostate_gland" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "ENCODE.CCRE.ACTIVITY", - "text": "${ENCODE.CCRE.ACTIVITY}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "ENCODE.CCRE.ACTIVITY" - ] - }, - { - "node": "Glycoprotein Evidence", - "example": [ - "GLYCOPROTEIN.EVIDENCE:GLYCOPROTEIN.EVIDENCE00001991 CUI", - "GLYCOPROTEIN.EVIDENCE:GLYCOPROTEIN.EVIDENCE00000307 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "GLYCOPROTEIN.EVIDENCE", - "text": "${GLYCOPROTEIN.EVIDENCE}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GLYCOPROTEIN.EVIDENCE" - ] - }, - { - "node": "Taxon", - "example": [ - "Artiodactyla", - "Felis catus" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "OBI", - "text": "${OBI}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "NCBI", - "text": "${NCBI}", - "type": "text" - } - ], - "search": [ - "label", - "OBI", - "type", - "NCBI" - ] - }, - { - "node": "ENCODE CCRE Data Matrix", - "example": [ - "ENCODE.CCRE.CTCF:LOW.ZSCORE CUI", - "ENCODE.CCRE.H3K27AC:HIGH.ZSCORE CUI" - ], - "display": [ - { - "label": "ENCODE.CCRE.CTCF", - "text": "${ENCODE.CCRE.CTCF}", - "type": "text" - }, - { - "label": "ENCODE.CCRE.H3K4ME3", - "text": "${ENCODE.CCRE.H3K4ME3}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "ENCODE.CCRE.H3K27AC", - "text": "${ENCODE.CCRE.H3K27AC}", - "type": "text" - }, - { - "label": "label", - "text": "${label}", - "type": "text" - } - ], - "search": [ - "ENCODE.CCRE.CTCF", - "ENCODE.CCRE.H3K4ME3", - "type", - "ENCODE.CCRE.H3K27AC", - "label" - ] - }, - { - "node": "Glycosyltransferase Reaction", - "example": [ - "GLYCOSYLTRANSFERASE.REACTION:RXN00000072 CUI", - "GLYCOSYLTRANSFERASE.REACTION:RXN00000131 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "GLYCOSYLTRANSFERASE.REACTION", - "text": "${GLYCOSYLTRANSFERASE.REACTION}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GLYCOSYLTRANSFERASE.REACTION" - ] - }, - { - "node": "Glycosylation", - "example": [ - "GLYGEN.GLYCOSYLATION:RXN00000164 CUI", - "GLYGEN.GLYCOSYLATION:RXN00000155 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "GLYGEN.GLYCOSYLATION", - "text": "${GLYGEN.GLYCOSYLATION}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GLYGEN.GLYCOSYLATION" - ] - }, - { - "node": "KFPT", - "example": [ - "KFPT:PT-4CC1RQ2X CUI", - "KFPT:PT-07FJF09T CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "KFPT", - "text": "${KFPT}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "KFPT", - "type" - ] - }, - { - "node": "GTEXEQTL", - "example": [ - "GTEXEQTL:eQTL.chr8.42546062.T.C.b38.Heart.Left.Ventricle CUI", - "GTEXEQTL:eQTL.chr1.93348442.G.A.b38.Kidney.Cortex CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "GTEXEQTL", - "text": "${GTEXEQTL}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GTEXEQTL" - ] - }, - { - "node": "KFGENEBIN", - "example": [ - "KFGENEBIN:TMEM115-variant-count CUI", - "KFGENEBIN:SCLT1-variant-count CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - }, - { - "label": "KFGENEBIN", - "text": "${KFGENEBIN}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "KFGENEBIN" - ] - }, - { - "node": "GP ID2PRO", - "example": [ - "GP.ID2PRO:P70699-1-9 CUI", - "GP.ID2PRO:Q7Z5M8-1-1 CUI" - ], - "display": [ - { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "GP.ID2PRO", - "text": "${GP.ID2PRO}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", - "type": "text" - } - ], - "search": [ - "label", - "GP.ID2PRO", - "type" - ] - }, - { - "node": "GlyGen src", - "example": [ - "GLYGEN.SRC:G56903ZB-SRC00004113 CUI", - "GLYGEN.SRC:G07194UG-SRC00022048 CUI" - ], - "display": [ + "label": "Biomarker ID", + "text": "${id}", + "type": "text" + }, { "label": "label", "text": "${label}", @@ -1607,55 +21,26 @@ "label": "type", "text": "${type}", "type": "text" - }, - { - "label": "GLYGEN.SRC", - "text": "${GLYGEN.SRC}", - "type": "text" } ], + "relation": [], "search": [ - "label", - "type", - "GLYGEN.SRC" + "id", + "label" ] }, { - "node": "GlyGen Glycosequence", + "node": "Anatomy", "example": [ - "GLYGEN.GLYCOSEQUENCE:G14043TF-GLYCOSEQ00157502 CUI", - "GLYGEN.GLYCOSEQUENCE:G17667YX-GLYCOSEQ00052873 CUI" + "blood", + "amniotic fluid" ], "display": [ { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", + "label": "Anatomy ID", + "text": "${id}", "type": "text" }, - { - "label": "GLYGEN.GLYCOSEQUENCE", - "text": "${GLYGEN.GLYCOSEQUENCE}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "GLYGEN.GLYCOSEQUENCE" - ] - }, - { - "node": "KFCOHORT", - "example": [ - "Kids First: Congenital Diaphragmatic Hernia", - "Kids First: Craniofacial Microsomia" - ], - "display": [ { "label": "label", "text": "${label}", @@ -1665,34 +50,29 @@ "label": "type", "text": "${type}", "type": "text" - }, - { - "label": "KFCOHORT", - "text": "${KFCOHORT}", - "type": "text" } ], + "relation": [], "search": [ - "label", - "type", - "KFCOHORT" + "id", + "label" ] }, { - "node": "Sex", + "node": "Role", "example": [ - "female", - "male" + "risk", + "diagnostic" ], "display": [ { - "label": "label", - "text": "${label}", + "label": "Role ID", + "text": "${id}", "type": "text" }, { - "label": "PATO", - "text": "${PATO}", + "label": "label", + "text": "${label}", "type": "text" }, { @@ -1701,48 +81,24 @@ "type": "text" } ], + "relation": [], "search": [ - "label", - "PATO", - "type" + "id", + "label" ] }, { - "node": "CLINGEN ALLELE REGISTRY", + "node": "Condition", "example": [ - "chr3.122444175.T.C.b38", - "chr6.136820748.T.TC.b38" + "lung carcinoma", + "neurilemmoma" ], "display": [ { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", + "label": "Condition ID", + "text": "${id}", "type": "text" }, - { - "label": "CLINGEN.ALLELE.REGISTRY", - "text": "${CLINGEN.ALLELE.REGISTRY}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "CLINGEN.ALLELE.REGISTRY" - ] - }, - { - "node": "4DN Loop", - "example": [ - "4DNL:4DNFI3RMWQ85.chr5.160500000-160510000.chr5.160780000-160790000 CUI", - "4DNL:4DNFI49A9Z1K.chr11.109420000-109430000.chr11.109690000-109700000 CUI" - ], - "display": [ { "label": "label", "text": "${label}", @@ -1752,55 +108,26 @@ "label": "type", "text": "${type}", "type": "text" - }, - { - "label": "4DNL", - "text": "${4DNL}", - "type": "text" } ], + "relation": [], "search": [ - "label", - "type", - "4DNL" + "id", + "label" ] }, { - "node": "ENCODE CCRE", + "node": "Variant", "example": [ - "ENCODE.CCRE:EH38E2998527 CUI", - "ENCODE.CCRE:EH38E1578950 CUI" + "EGFR", + "NF2" ], "display": [ { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", + "label": "Variant ID", + "text": "${id}", "type": "text" }, - { - "label": "ENCODE.CCRE", - "text": "${ENCODE.CCRE}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "ENCODE.CCRE" - ] - }, - { - "node": "GTEXEXP", - "example": [ - "GTEXEXP:ENSG00000163257-10-Brain-Amygdala CUI", - "GTEXEXP:ENSG00000172382-9-Vagina CUI" - ], - "display": [ { "label": "label", "text": "${label}", @@ -1810,55 +137,26 @@ "label": "type", "text": "${type}", "type": "text" - }, - { - "label": "GTEXEXP", - "text": "${GTEXEXP}", - "type": "text" } ], + "relation": [], "search": [ - "label", - "type", - "GTEXEXP" + "id", + "label" ] }, { - "node": "4DN Dataset", + "node": "Compound", "example": [ - "in situ Hi-C on HCT116 cells (containing AID-tagged WAPL) untreated.HCT116", - "in situ Dnase Hi-C on RUES2 cells differentiated to cardiomyocytes.RUES2_Stem cells" + "3-hydroxy-3-methylglutaric acid", + "3-hydroxy-isovaleric acid" ], "display": [ { - "label": "label", - "text": "${label}", - "type": "text" - }, - { - "label": "type", - "text": "${type}", + "label": "Compound ID", + "text": "${id}", "type": "text" }, - { - "label": "4DND", - "text": "${4DND}", - "type": "text" - } - ], - "search": [ - "label", - "type", - "4DND" - ] - }, - { - "node": "Glycosylation Site", - "example": [ - "GLYCOSYLATION.SITE:SITE00016061 CUI", - "GLYCOSYLATION.SITE:SITE00042312 CUI" - ], - "display": [ { "label": "label", "text": "${label}", @@ -1868,698 +166,259 @@ "label": "type", "text": "${type}", "type": "text" - }, - { - "label": "GLYCOSYLATION.SITE", - "text": "${GLYCOSYLATION.SITE}", - "type": "text" } ], + "relation": [], "search": [ - "label", - "type", - "GLYCOSYLATION.SITE" + "id", + "label" ] } ], "edges": [ { "match": [ - "indication", - "has_enzyme_protein", - "is_from_source", - "has_glycosequence", - "attached_by", - "synthesized_by", - "has_motif", - "has_canonical_residue", - "has_parent", - "belongs_to_cohort", - "has_phenotype", - "gene_has_variants", - "located_in", - "p_value", - "associated_with", - "sex", - "part_of", - "regulates", - "isa", - "has_assay_type", - "dataset_involves_cell_type", - "dataset_has_file", - "file_has_loop", - "loop_us_start", - "loop_us_end", - "loop_ds_start", - "loop_ds_end", - "loop_has_qvalue_bin", - "produces", - "causally_influences", - "correlated_with_condition", - "has_expression", - "molecularly_interacts_with", - "is_subsequence_of", - "correlated_in", - "not_correlated_in", - "overlaps", - "is_part_of", - "contributes_to_morphology_of", - "delineates", - "isdelineatedby", - "has_role", - "has_marker_gene_in_heart", - "has_marker_gene_in_kidney", - "has_marker_gene_in_liver", - "has_isoform", - "has_evidence", - "sequence", - "citation", - "has_pro_entry", - "glycosylated_at", - "location", - "has_saccharide", - "has_amino_acid" - ], - "color": "#bdbdbd", - "display": [ - { - "label": "source", - "text": "${source}", - "type": "text" - }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, - { - "label": "relation", - "text": "${relation}", - "type": "text" - }, - { - "label": "SAB", - "text": "${SAB}", - "type": "text" - }, - { - "label": "dcc", - "text": "${dcc}", - "type": "text" - } - ] - }, - { - "match": [ - "associated_with", - "gene_associated_with_disease_or_phenotype", - "targets_expression_of_gene", - "chr_band_contains_gene", - "pathway_associated_with_gene", - "has_marker_gene", - "has_signature_gene" - ], - "color": "#bdbdbd", - "display": [ - { - "label": "source", - "text": "${source}", - "type": "text" - }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, - { - "label": "relation", - "text": "${relation}", - "type": "text" - }, - { - "label": "SAB", - "text": "${SAB}", - "type": "text" - } - ] - }, - { - "match": [ - "bioactivity", - "in_similarity_relationship_with", - "expressed_in" - ], - "color": "#bdbdbd", - "display": [ - { - "label": "source", - "text": "${source}", - "type": "text" - }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, - { - "label": "relation", - "text": "${relation}", - "type": "text" - }, - { - "label": "SAB", - "text": "${SAB}", - "type": "text" - }, - { - "label": "evidence_class", - "text": "${evidence_class}", - "type": "text" - }, - { - "label": "dcc", - "text": "${dcc}", - "type": "text" - } - ] - }, - { - "match": [ - "negatively_regulates" - ], - "color": "#1FE0E0", - "display": [ - { - "label": "source", - "text": "${source}", - "type": "text" - }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, - { - "label": "relation", - "text": "${relation}", - "type": "text" - }, - { - "label": "SAB", - "text": "${SAB}", - "type": "text" - }, - { - "label": "dcc", - "text": "${dcc}", - "type": "text" - } - ] - }, - { - "match": [ - "positively_regulates" - ], - "color": "#E01F1F", - "display": [ - { - "label": "source", - "text": "${source}", - "type": "text" - }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, - { - "label": "relation", - "text": "${relation}", - "type": "text" - }, - { - "label": "SAB", - "text": "${SAB}", - "type": "text" - }, - { - "label": "dcc", - "text": "${dcc}", - "type": "text" - } - ] - }, - { - "match": [ - "positively_regulates" + "has_best_classification" ], - "color": "#E01F1F", + "selected": true, "display": [ { - "label": "source", - "text": "${source}", - "type": "text" - }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, - { - "label": "relation", - "text": "${relation}", - "type": "text" - }, - { - "label": "SAB", - "text": "${SAB}", + "label": "source", + "text": "${source}", "type": "text" }, { - "label": "evidence_class", - "text": "${evidence_class}", + "label": "relation", + "text": "${relation}", "type": "text" }, { - "label": "dcc", - "text": "${dcc}", + "label": "target", + "text": "${target}", "type": "text" } - ], - "order": [ - "evidence", - "DESC" ] }, { "match": [ - "negatively_regulates" + "diagnostic_for" ], - "color": "#1FE0E0", + "selected": true, "display": [ { "label": "source", "text": "${source}", "type": "text" }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, { "label": "relation", "text": "${relation}", "type": "text" }, { - "label": "SAB", - "text": "${SAB}", - "type": "text" - }, - { - "label": "evidence_class", - "text": "${evidence_class}", - "type": "text" - }, - { - "label": "dcc", - "text": "${dcc}", + "label": "target", + "text": "${target}", "type": "text" } - ], - "order": [ - "evidence_class", - "ASC" ] }, { "match": [ - "ARCHS4_coexpressed_genes" + "determined_using_sample_from" ], - "color": "#e0b321", + "selected": true, "display": [ { "label": "source", "text": "${source}", "type": "text" }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, { "label": "relation", "text": "${relation}", "type": "text" }, { - "label": "SAB", - "text": "${SAB}", - "type": "text" - }, - { - "label": "evidence_class", - "text": "${evidence_class}", - "type": "text" - }, - { - "label": "hidden", - "text": "${hidden}", - "type": "text" - }, - { - "label": "hidden_tag", - "text": "${hidden_tag}", + "label": "target", + "text": "${target}", "type": "text" } - ], - "hidden": true, - "order": [ - "evidence", - "DESC" ] }, { "match": [ - "ARCHS4_coexpressed_genes_LINCS_Up", - "ARCHS4_coexpressed_genes_LINCS_Down", - "ARCHS4_coexpressed_genes_MW", - "ARCHS4_coexpressed_genes_IDG", - "ARCHS4_coexpressed_genes_HuBMAP", - "ARCHS4_coexpressed_genes_Glygen" + "indicated_by_above_normal_level_of" ], - "color": "#214ee0", + "selected": true, "display": [ { "label": "source", "text": "${source}", "type": "text" }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, { "label": "relation", "text": "${relation}", "type": "text" }, { - "label": "SAB", - "text": "${SAB}", + "label": "target", + "text": "${target}", "type": "text" - }, + } + ], + "color": "#4fc3f7" + }, + { + "match": [ + "indicates_risk_of_developing" + ], + "selected": true, + "display": [ { - "label": "evidence_class", - "text": "${evidence_class}", + "label": "source", + "text": "${source}", "type": "text" }, { - "label": "hidden", - "text": "${hidden}", + "label": "relation", + "text": "${relation}", "type": "text" }, { - "label": "hidden_tag", - "text": "${hidden_tag}", + "label": "target", + "text": "${target}", "type": "text" } - ], - "hidden": true, - "order": [ - "evidence", - "DESC" ] }, { "match": [ - "predicted_in" + "indicated_by_below_normal_level_of" ], - "color": "#1fe01f", + "selected": true, "display": [ { "label": "source", "text": "${source}", "type": "text" }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, { "label": "relation", "text": "${relation}", "type": "text" }, { - "label": "SAB", - "text": "${SAB}", - "type": "text" - }, - { - "label": "dcc", - "text": "${dcc}", + "label": "target", + "text": "${target}", "type": "text" } - ] + ], + "color": "#f38d9f" }, { "match": [ - "not_predicted_in" + "prognostic_for" ], - "color": "#e01fe0", + "selected": true, "display": [ { "label": "source", "text": "${source}", "type": "text" }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, { "label": "relation", "text": "${relation}", "type": "text" }, { - "label": "SAB", - "text": "${SAB}", - "type": "text" - }, - { - "label": "dcc", - "text": "${dcc}", + "label": "target", + "text": "${target}", "type": "text" } ] }, { "match": [ - "is_protein" + "indicated_by_presence_of" ], - "color": "#bdbdbd", + "selected": true, "display": [ { "label": "source", "text": "${source}", "type": "text" }, - { - "label": "target", - "text": "${target}", - "type": "text" - }, { "label": "relation", "text": "${relation}", "type": "text" }, { - "label": "sab", - "text": "${sab}", + "label": "target", + "text": "${target}", "type": "text" } ] } ], "header": { - "title": "Data Distillery KG", + "header": "Biomarker-KG", + "title": "Biomarker-KG", + "background": { + "backgroundColor": "#000", + "contrastText": "#FFF" + }, "icon": { - "src": "https://s3.amazonaws.com/maayan-kg/cfde-kg/assets/CFDE.png", - "favicon": "https://s3.amazonaws.com/maayan-kg/cfde-kg/assets/favicon.png", - "faviconTitle": "Data Distillery KG", - "alt": "Data Distillery", - "key": "data_distillery_logo", + "src": "/icon/bkg.png", + "favicon": "/icon/bkg.png", + "faviconTitle": "Biomarker-KG", + "alt": "Biomarker-KG", + "key": "Biomarker-KG_logo", "width": 100, "height": 100 }, "tabs": [ { "endpoint": "/", - "label": "Connection Explorer", + "label": "BKG Explorer", "type": "page", "component": "KnowledgeGraph", - "position": "bottom", "props": { "init_function": "initialize_kg", - "title": "ConnectionExplorer: Find connections between CFDE DD KG entities", - "description": "Select a CFDE DD KG entity to find other entities connected to it or explore connections between two CFDE DD KG entities.", + "title": "BKG Explorer: Find connections between different entities from the Biomarker Partnership.", + "description": "Search two entities or one entity to see related entities.", "initial_query": { - "start": "Gene", - "start_term": "MAOB", - "start_field": "label" + "start": "Condition", + "start_term": "lung carcinoma", + "start_field": "label", + "end": "Condition", + "end_term": "ovarian carcinoma", + "end_field": "label" }, - "additional_link_button": true, - "additional_link_relation_tags": [ - "gene-gene coexpression", - "predicted term-gene association via coexpression" - ] + "subheader": { + "url_field": "filter", + "query_field": "relation" + } } }, { - "endpoint": "/dd_apps", - "label": "Apps", - "type": "group", - "component": "DistilleryLanding", - "position": "bottom", + "endpoint": "/downloads", + "label": "Download", + "type": "page", + "component": "Download", "props": { - "title": "Data Distillery Apps", - "description": "Explore Data Distillery data with these apps", - "pages": [ - { - "endpoint": "/dd_apps/tissue2drugs", - "label": "Tissue2Drugs", - "type": "page", - "component": "DistilleryUseCase", - "props": { - "init_function": "initialize_kg", - "title": "Tissue2Drugs", - "description": "Find all genes that are highly expressed in a GTEx tissue and may be perturbed by a specific compound based on data from the LINCS L1000 dataset, and are known drug targets based on data curated by IDG.", - "endpoint": "/api/distillery/tissue2drugs", - "type": "Anatomy", - "options_endpoint": "/api/distillery/gtex_tissue", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/tissues2drugs.png", - "fields": [ - "UBERON", - "id", - "label" - ], - "default_term": "Subcutaneous Fat" - } - }, - { - "endpoint": "/dd_apps/mw2diseases", - "label": "MW2Disease", - "type": "page", - "component": "DistilleryUseCase", - "props": { - "init_function": "initialize_kg", - "title": "MW2Disease", - "description": "For a specific disease in Metabolomics Workbench, find all IDG and GTEx assertions that may be related to the disease in a specific tissue type.", - "endpoint": "/api/distillery/mw", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/MW2Disease.png", - "type": "Disease or Phenotype", - "options_endpoint": "/api/distillery/mw_diseases", - "fields": [ - "DOID", - "id", - "label", - "MONDO", - "ORPHANET", - "HP" - ], - "default_term": "Hypertensive disease" - } - }, - { - "endpoint": "/dd_apps/enzymeminer", - "label": "EnzymeMiner", - "type": "page", - "component": "DistilleryUseCase", - "props": { - "init_function": "initialize_kg", - "relations": [ - { - "name": "positively_regulates", - "end": "Compound" - }, - { - "name": "negatively_regulates", - "end": "Compound" - }, - { - "name": "expressed_in" - } - ], - "title": "EnzymeMiner", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/EnzymeMiner.png", - "description": "Select a drug processing enzyme to view drugs that up or down regulate it from LINCS as well as tissues where it is highly expressed based on data from GTEx.", - "endpoint": "/api/knowledge_graph", - "type": "Enzyme", - "options_endpoint": "/api/knowledge_graph/node_search", - "fields": [ - "ENTREZ", - "UNIPROTKB", - "label", - "HGNC" - ], - "default_term": "MAOB", - "filter_text": "Enzyme" - } - }, - { - "endpoint": "/dd_apps/disease2exrna", - "label": "Liquid Biopsy of Condition", - "type": "page", - "component": "DistilleryUseCase", - "props": { - "init_function": "initialize_kg", - "title": "Liquid Biopsy of Condition", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/disease2exrna.png", - "description": "For a given set of genes that are highly expressed in a specific disease, identify extracellular RNAs (exRNAs) that may be detected in human biofluids and thus serve as non-invasive disease biomarkers.", - "endpoint": "/api/distillery/disease2exrna", - "type": "Disease or Phenotype", - "options_endpoint": "/api/distillery/exrnadisease", - "fields": [ - "DOID", - "id", - "label", - "MONDO", - "ORPHANET", - "HP" - ], - "default_term": "leukodystrophy" - } - }, - { - "endpoint": "/dd_apps/drug2exrna", - "label": "Liquid Biopsy of Drug Response", - "type": "page", - "component": "DistilleryUseCase", - "props": { - "init_function": "initialize_kg", - "title": "Liquid Biopsy of Drug Response", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/drug2exrna.png", - "description": "For a given drug term, return (1) up-regulated genes, (2) loci expressed in exRNA that overlap RBP binding regions, (3) the RBP that overlaps the locus, and (4) the biofluid(s) where locus was expressed in exRNA.", - "endpoint": "/api/distillery/drug2exrna", - "type": "Compound", - "options_endpoint": "/api/distillery/exrnadrug", - "fields": [ - "PUBCHEM", - "id", - "label" - ], - "default_term": "STK-674938" - } - } - ] + "src": "https://raw.githubusercontent.com/nialingam/BiomarkerKGDemo/main/biomarker_downloads.json" + } + }, + { + "endpoint": "/tutorials", + "label": "Tutorials", + "type": "markdown", + "component": "Markdown", + "props": { + "src": "https://raw.githubusercontent.com/MaayanLab/BiomarkerKG/main/About6.md" } }, { @@ -2567,201 +426,147 @@ "label": "Use Cases", "type": "group", "component": "DistilleryLanding", - "position": "bottom", "props": { - "title": "Data Distillery Use Case", - "description": "Explore use cases that use distilled data from Common Fund Programs", + "title": "BKG Use Cases", + "description": "Explore use cases that use data from the Biomarker Partnership", "pages": [ { - "endpoint": "/use_cases/tissue2drugs", - "label": "Breast Epithelium Use Case", - "type": "page", - "component": "DistilleryUseCase", - "props": { - "init_function": "initialize_kg", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/use-case1.png", - "title": "Breast Epitheliumn Use Case", - "description": "Find the genes that are highly expressed in breast epithelium as well as drugs that target these genes.", - "endpoint": "/api/distillery/tissue2drugs", - "type": "Anatomy", - "options_endpoint": "/api/distillery/gtex_tissue", - "fields": [ - "UBERON", - "id", - "label" - ], - "default_term": "breast epithelium" - } - }, - { - "endpoint": "/use_cases/mw_diseases", - "label": "Mild Cognitive Impairment Use Case", + "endpoint": "/use_cases/thyroidandskincarcinoma", + "label": "HRAS Variant Risks for Thyroid Cancer and Skin Carcinoma", "type": "page", "component": "DistilleryUseCase", "props": { "init_function": "initialize_kg", - "title": "Mild Cognitive Impairment Use Case", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/use-case2.png", - "width": 130, - "height": 130, - "description": "Find all IDG and GTEx assertions that may be related to mild cognitive impairment and any tissue type.", - "endpoint": "/api/distillery/mw", - "type": "Disease or Phenotype", - "options_endpoint": "/api/distillery/mw_diseases", + "title": "HRAS Variant Risks for Thyroid Cancer and Skin Carcinoma", + "icon": "/icon/thyroidandskin.png", + "description": "Discover the variants in HRAS that indicate common risk for developing both thyroid cancer and skin carcinoma.", + "endpoint": "/api/biomarker/thyroidandskinmelanoma", + "type": "Condition", "fields": [ - "DOID", + "Condition", "id", "label", - "MONDO", - "ORPHANET", - "HP" - ], - "default_term": "mild cognitive impairment" - } - }, - { - "endpoint": "/use_cases/enzyminer", - "label": "CES1 Use Case", - "type": "page", - "component": "DistilleryUseCase", - "props": { - "init_function": "initialize_kg", - "relations": [ - { - "name": "positively_regulates", - "end": "Compound" - }, - { - "name": "negatively_regulates", - "end": "Compound" - }, - { - "name": "expressed_in", - "end": "Anatomy" - } - ], - "title": "CES1 Use Case", - "description": "Display drugs that up or down regulate the gene CES1 from LINCS as well as tissues where it is highly expressed based on assertions from GTEx.", - "endpoint": "/api/knowledge_graph", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/use-case3.png", - "type": "Enzyme", - "options_endpoint": "/api/knowledge_graph/node_search", - "fields": [ - "ENTREZ", - "UNIPROTKB", - "label", - "HGNC" + "Biomarker", + "Condition" ], - "default_term": "CES1" + "default_term": "thyroid cancer" } }, { - "endpoint": "/use_cases/disease2exrna", - "label": "Frontotemporal Dementia Use Case", + "endpoint": "/use_cases/breastcancerdiagnosis", + "label": "Conditions that biomarkers diagnostic for breast cancer can also diagnose", "type": "page", "component": "DistilleryUseCase", "props": { "init_function": "initialize_kg", - "title": "Frontotemporal Dementia Use Case", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/dementiabiopsy.png", - "description": "For genes that are correlated with frontotemporal dementia, identify extracellular RNAs (exRNAs) that may be detected in human biofluids and thus serve as non-invasive disease biomarkers.", - "endpoint": "/api/distillery/disease2exrna", - "type": "Disease or Phenotype", - "options_endpoint": "/api/distillery/exrnadisease", + "title": "Conditions that biomarkers diagnostic for breast cancer can also diagnose", + "icon": "/icon/breast.png", + "description": "Discover which other conditions that biomarkers diagnostic for breast cancer can also diagnose.", + "endpoint": "/api/biomarker/breastcancerdiagnosis", + "type": "Condition", "fields": [ - "DOID", + "Condition", "id", "label", - "MONDO", - "ORPHANET", - "HP" - ], - "default_term": "Frontotemporal dementia" - } - }, - { - "endpoint": "/use_cases/drug2exrna", - "label": "Liquid Biopsy of Dexamethasone Response", - "type": "page", - "component": "DistilleryUseCase", - "props": { - "init_function": "initialize_kg", - "title": "Liquid Biopsy of Dexamethasone Response", - "icon": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/img/apps/dexamethasonebiopsy.png", - "description": "Find genes that are up-regulated by dexamethasone, (2) loci expressed in exRNA that overlap RBP binding regions, (3) the RBP that overlaps the locus, and (4) the biofluid(s) where locus was expressed in exRNA.", - "endpoint": "/api/distillery/drug2exrna", - "type": "Compound", - "options_endpoint": "/api/distillery/exrnadrug", - "fields": [ - "PUBCHEM", - "id", - "label" + "Biomarker", + "Condition" ], - "default_term": "dexamethasone" + "default_term": "breast cancer" } } ] } - }, - { - "endpoint": "https://info.cfde.cloud/", - "label": "CFDE Information Portal", - "type": "link", - "component": "Link", - "position": "top" - }, - { - "endpoint": "https://data.cfde.cloud/", - "label": "CFDE Data Portal", - "type": "link", - "component": "Link", - "position": "top" - }, + } + ], + "subheader": [ { - "endpoint": "/dictionary", - "label": "Data Dictionary", - "type": "html", - "component": "SanitizedHTML", - "position": "bottom", + "label": "Anatomy", + "icon": "/icon/anatomy.png", + "height": 100, + "width": 100, "props": { - "src": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/Dictionary/DataDistilleryDataDictionary0228.html" - } - }, - { - "endpoint": "/downloads", - "label": "Downloads", - "type": "page", - "component": "Download", - "position": "bottom", + "relation": [ + "determined_using_sample_from" + ], + "libraries": [ + "Achilles_fitness_decrease", + "Achilles_fitness_increase" + ] + }, + "href": "https://depmap.org/portal/achilles/" + }, + { + "label": "Compound", + "icon": "/icon/compound.png", + "height": 100, + "width": 100, "props": { - "src": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/downloads.json" - } - }, + "relation": [ + "indicated_by_above_normal_level_of", + "indicated_by_below_normal_level_of", + "indicated_by_presence_of" + ], + "libraries": [ + "Achilles_fitness_decrease", + "Achilles_fitness_increase" + ] + }, + "href": "https://depmap.org/portal/achilles/" + }, { - "endpoint": "/api-doc", - "label": "API", - "type": "page", - "component": "APIDoc", - "position": "top", - "props": { - "spec": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/specs.json" - } + "label": "Condition", + "icon": "/icon/condition.png", + "height": 100, + "width": 100, + "props": { + "relation": [ + "diagnotic_for", + "indicates_risk_of_developing" + ], + "libraries": [ + "Achilles_fitness_decrease", + "Achilles_fitness_increase" + ] + }, + "href": "https://depmap.org/portal/achilles/" }, - { - "endpoint": "/about", - "label": "About", - "type": "markdown", - "component": "Markdown", - "position": "top", + { + "label": "Role", + "icon": "/icon/role.png", + "height": 100, + "width": 100, "props": { - "src": "https://s3.amazonaws.com/maayan-kg/dd-kg/minio/about.md" - } - } + "relation": [ + "has_best_classification" + ], + "libraries": [ + "Achilles_fitness_decrease", + "Achilles_fitness_increase" + ] + }, + "href": "https://depmap.org/portal/achilles/" + }, + { + "label": "Variant", + "icon": "/icon/variant.png", + "height": 100, + "width": 100, + "props": { + "relation": [ + "indicated_by_presence_of" + ], + "libraries": [ + "Achilles_fitness_decrease", + "Achilles_fitness_increase" + ] + }, + "href": "https://depmap.org/portal/achilles/" + } ] }, "footer": { "style": { - "background": "#336699", + "background": "#053c5b", "color": "#FFF" }, "layout": [ @@ -2769,9 +574,9 @@ { "component": "logo", "props": { - "src": "https://s3.amazonaws.com/maayan-kg/cfde-kg/assets/favicon.png", - "alt": "DDKG", - "title": "Data Distillery KG", + "src": "/icon/bkg.png", + "alt": "enrichr-kg", + "title": "Biomarker-KG", "color": "inherit", "size": "small" } @@ -2779,99 +584,41 @@ { "component": "github", "props": { - "code": "https://github.com/MaayanLab/datadistillery-kg", - "issues": "https://github.com/MaayanLab/data-distillery-issues/issues" - } - }, - { - "component": "social", - "props": { - "email": "mailto:contact@cfde.info", - "twitter": "https://twitter.com/CFDEWorkbench", - "youtube": "https://www.youtube.com/channel/UCWucYIvMygAgG5t0xEGEZgg" - } - } - ], - [ - { - "component": "text", - "props": { - "text": "Consortium" - } - }, - { - "component": "link", - "props": { - "text": "Information Portal", - "href": "https://info.cfde.cloud/" - } - }, - { - "component": "link", - "props": { - "text": "Data Portal", - "href": "https://data.cfde.cloud/" + "code": "https://github.com/nialingam/BiomarkerKGDemo", + "issues": "https://github.com/nialingam/BiomarkerKGDemo/issues/new" } } ], [ { - "component": "text", - "props": { - "text": "Data Distillery" - } - }, - { - "component": "link", - "props": { - "text": "Connection Explorer", - "href": "/" - } - }, - { - "component": "link", - "props": { - "text": "Apps", - "href": "/dd_apps" - } - }, - { - "component": "link", + "component": "icon", "props": { - "text": "Use Cases", - "href": "/use_cases" + "type": "icon", + "key": "lab_icon", + "src": "https://minio.dev.maayanlab.cloud/enrichr-kg/maayanlab.png", + "alt": "MaayanLab", + "href": "https://labs.icahn.mssm.edu/maayanlab/", + "height": 60, + "width": 150 } } ], [ { - "component": "text", - "props": { - "text": "Data Access" - } - }, - { - "component": "link", - "props": { - "text": "Data Dictionary", - "href": "/dictionary" - } - }, - { - "component": "link", - "props": { - "text": "Downloads", - "href": "/downloads" - } - }, - { - "component": "link", + "component": "icon", "props": { - "text": "About", - "href": "/about" + "type": "icon", + "key": "center_icon", + "src": "https://minio.dev.maayanlab.cloud/enrichr-kg/bioinformatics.png", + "alt": "COB", + "href": "https://icahn.mssm.edu/research/bioinformatics", + "height": 60, + "width": 150 } } ] - ] - } + ], + "footer_text": "" + }, + "ui_theme": "biomarker_kg_theme" } \ No newline at end of file diff --git a/themes/biomarker-kg.ts b/themes/biomarker-kg.ts new file mode 100644 index 00000000..6d68b4d0 --- /dev/null +++ b/themes/biomarker-kg.ts @@ -0,0 +1,309 @@ +import { createTheme } from "@mui/material" +import { Inter, DM_Sans, Montserrat, Hanken_Grotesk } from 'next/font/google' + +export const dm_sans = DM_Sans({ + weight: ['500', '700'], + subsets: ['latin'], + display: 'swap', +}) + + +export const biomarker_kg_theme = createTheme({ + typography: { + fontFamily: dm_sans.style.fontFamily, + h1: { + fontSize: 40, + fontStyle: "normal", + fontWeight: 500, + }, + h2: { + fontSize: 28, + fontWeight: 500, + fontStyle: "normal", + }, + h3: { + fontSize: 24, + fontStyle: "normal", + fontWeight: 500, + }, + h4: { + fontSize: 22, + fontStyle: "normal", + fontWeight: 500, + }, + h5: { + fontSize: 20, + fontStyle: "normal", + fontWeight: 500, + }, + cfde: { + fontSize: "40px", + fontStyle: "normal", + fontWeight: 500, + textTransform: "uppercase" + }, + cfde_small: { + fontSize: 24, + fontStyle: "normal", + fontWeight: 500, + textTransform: "uppercase" + }, + subtitle1: { + fontSize: 16, + fontWeight: 500, + }, + subtitle2: { + fontSize: 15, + fontWeight: 500, + }, + body1: { + fontFamily: dm_sans.style.fontFamily, + fontSize: 16, + fontWeight: 500, + }, + body2: { + fontFamily: dm_sans.style.fontFamily, + fontSize: 15, + fontWeight: 500, + }, + caption: { + fontSize: 14, + fontStyle: "normal", + fontWeight: 500, + }, + nav: { + fontSize: 16, + fontStyle: "normal", + fontWeight: 600, + textTransform: "uppercase", + color: "#053c5b" + }, + footer: { + fontFamily: dm_sans.style.fontFamily, + fontSize: 16, + fontStyle: "normal", + fontWeight: 400, + }, + stats_h3: { + fontSize: 24, + fontStyle: "normal", + fontWeight: 500, + color: "#9E9E9E" + }, + stats_sub: { + fontSize: 16, + fontStyle: "normal", + fontWeight: 500, + color: "#9E9E9E" + }, + }, + palette: { + primary: { + main: "#053c5b", + light: "#053c5b", + dark: "#84A9AE" + }, + secondary: { + main: "#053c5b", + light: "#053c5b", + dark: "#1F3D5C" + }, + tertiary: { + main: "#FFFFFF", + light: "#EDF0F8", + dark: "#053c5b" + }, + paperGray: { + main: "#FAFAFA", + light: "#fdfdfd", + dark: "#afafaf" + }, + dataGrid: { + main: "#C9D2E9", + contrastText: "#336699" + } + }, + components: { + MuiAppBar: { + styleOverrides: { + // Name of the slot + root: { + // Some CSS + background: "#FFF", + boxShadow: "none", + }, + }, + }, + MuiTableHead: { + styleOverrides: { + root: { + borderRadius: "0px 0px 0px 0px", + background: "#C9D2E9" + } + } + }, + MuiOutlinedInput: { + styleOverrides: { + notchedOutline: { + borderColor: '#336699', + }, + }, + }, + MuiSelect: { + styleOverrides: { + root: { + background: 'white', + }, + }, + }, + MuiCheckbox: { + styleOverrides: { + root: { + color: "#B7C3E2", + '&.Mui-checked': { + color: "#336699", + }, + '& .MuiSvgIcon-root': { + fontSize: 20, + } + } + } + }, + MuiTypography: { + styleOverrides: { + root: ({ ownerState }) => ({ + ...(ownerState.color === 'tertiary' && + { + color: '#7187C3', + }), + }), + } + }, + MuiButton: { + styleOverrides: { + // Name of the slot + root: ({ ownerState }) => ({ + textTransform: "none", + borderRadius: 2, + fontWeight: 600, + padding: "8px 16px", + ...(ownerState.variant === 'contained' && + ownerState.color === 'primary' && { + backgroundColor: '#C3E1E6', + color: '#336699', + }), + ...(ownerState.variant === 'contained' && + ownerState.color === 'tertiary' && { + backgroundColor: '#7187C3', + color: '#FFFFFF', + }), + }), + }, + }, + MuiChip: { + styleOverrides: { + // Name of the slot + root: ({ ownerState }) => ({ + textTransform: "none", + borderRadius: 120, + fontWeight: 600, + padding: "10px 16px", + ...(ownerState.variant === 'filled' && + ownerState.color === 'primary' && { + backgroundColor: '#C3E1E6', + color: '#336699', + }), + ...(ownerState.variant === 'filled' && + ownerState.color === 'tertiary' && { + backgroundColor: '#7187C3', + color: '#FFFFFF', + }), + }), + }, + }, + MuiTablePagination: { + styleOverrides: { + root: { + "& .MuiInputBase-root, & .MuiInputLabel-root, & .MuiTablePagination-selectLabel, & .MuiTablePagination-displayedRows": { + fontSize: "1rem" + }, + }, + }, + }, + MuiPaper: { + variants: [ + { + props: { + variant: 'rounded-top' + }, + style: { + borderTopLeftRadius: '1rem', + borderTopRightRadius: '1rem', + }, + } + ], + }, + } +}) + +declare module '@mui/material/styles' { + interface TypographyVariants { + cfde: React.CSSProperties; + cfde_small: React.CSSProperties; + nav: React.CSSProperties; + footer: React.CSSProperties; + stats_h3: React.CSSProperties; + stats_sub: React.CSSProperties; + } + + // allow configuration using `createTheme` + interface TypographyVariantsOptions { + cfde?: React.CSSProperties; + cfde_small?: React.CSSProperties; + nav?: React.CSSProperties; + footer?: React.CSSProperties; + stats_h3?: React.CSSProperties; + stats_sub?: React.CSSProperties; + } + + interface Palette { + paperGray: Palette['primary']; + dataGrid: Palette['primary']; + tertiary: Palette['primary']; + } + + interface PaletteOptions { + paperGray?: PaletteOptions['primary']; + dataGrid?: PaletteOptions['primary']; + tertiary?: PaletteOptions['primary']; + } + } + + declare module "@mui/material" { + interface ButtonPropsColorOverrides { + tertiary: true; + } + + interface ChipPropsColorOverrides { + tertiary: true; + } + } + + // Update the Typography's variant prop options + declare module '@mui/material/Typography' { + interface TypographyPropsVariantOverrides { + cfde: true; + cfde_small: true; + nav: true; + footer: true; + stats_h3: true; + stats_sub: true; + } + } + + + declare module '@mui/material/Paper' { + interface PaperPropsVariantOverrides { + "rounded-top": true; + } + } diff --git a/utils/helper.ts b/utils/helper.ts index 68ab396c..367a5331 100644 --- a/utils/helper.ts +++ b/utils/helper.ts @@ -328,4 +328,4 @@ export const process_filter = (query: { } } -export const delay = (ms: number) => new Promise(res => setTimeout(res, ms)); +export const delay = (ms: number) => new Promise(res => setTimeout(res, ms)); \ No newline at end of file diff --git a/utils/neo4j.ts b/utils/neo4j.ts index 3a2908ef..1d0aa0a6 100644 --- a/utils/neo4j.ts +++ b/utils/neo4j.ts @@ -7,7 +7,6 @@ const neo4jDriverFunc = () => { NEO4J_URL, neo4j.auth.basic(process.env.NEXT_PUBLIC_NEO4J_USER, process.env.NEXT_PUBLIC_NEO4J_PASSWORD) ) - } export const neo4jDriver = neo4jDriverFunc() // export const neo4jDriver = neo4j.driver(