Spaces:
Sleeping
Sleeping
import datasets | |
import streamlit as st | |
from st_aggrid import AgGrid, GridOptionsBuilder, JsCode | |
st.set_page_config(layout='wide') | |
# parse out gene_ids from URL query args to it's possible to link to this page | |
query_params = st.query_params | |
if "gene_id" in query_params.keys(): | |
gene_id = query_params["gene_id"] | |
else: | |
gene_id = "B9J08_001120" | |
st.markdown(""" | |
# Druggable Candida auris Genome | |
**DrAG** is a database of candidate compounds for targeting Candida auris, the emerging fungal pathogen | |
For each C. auris gene we have a number of compound linked in ChEMBL and IUPHAR. | |
* Full network and dataset: https://huggingface.co/datasets/julietanku/DrAG | |
## Look up compounds for a C.auris gene: | |
Put in the ``B9J08_######`` gene_id for a gene and expand the table to get the predicted compounds""") | |
DrAG_hits_ChEMBL = datasets.load_dataset( | |
path = "julietanku/DrAG", | |
data_files = {"DrAG_hits_ChEMBL": "cau_targets_to_chembl_cpds_20240131.parquet"}) | |
DrAG_hits_ChEMBL = DrAG_hits_ChEMBL["DrAG_hits_ChEMBL"].to_pandas() | |
DrAG_hits_IUPHAR = datasets.load_dataset( | |
path = "julietanku/DrAG", | |
data_files = {"DrAG_hits_IUPHAR": "Cau_vs_IUPHAR_cpds_imp.parquet"}) | |
DrAG_hits_IUPHAR = DrAG_hits_IUPHAR["DrAG_hits_IUPHAR"].to_pandas() | |
col1, col2, col3 = st.columns(spec = [0.3, 0.2, 0.5]) | |
with col1: | |
gene_ids= st.text_area( | |
label = "Gene IDs", | |
value = f"{gene_id}", | |
max_chars = None, | |
height = None, | |
help = "B9J08 Gene ID e.g. B9J08_004214, B9J08_001120") | |
gene_ids= gene_ids.split("\n") | |
gene_ids=[gene_id.strip() for gene_id in gene_ids] ### Striping the blank space/character in the query box before searching### | |
###radio buttons### | |
with col2: | |
database_name=st.radio( | |
label='select the database to search', | |
options=['ChEMBL','IUPHAR'], | |
captions=['ChEMBL drug list','IUPHAR drug list'] ) | |
if database_name=="ChEMBL": | |
DrAG_hits = DrAG_hits_ChEMBL[DrAG_hits_ChEMBL['feature_name'].isin(gene_ids)] | |
elif database_name=="IUPHAR": | |
DrAG_hits = DrAG_hits_IUPHAR[DrAG_hits_IUPHAR['feature_name_1.y'].isin(gene_ids)] | |
else: | |
raise Exception('Database was not recognised') | |
DrAG_hits.reset_index() | |
with col3: | |
st.text('') # help alignment with input box | |
st.download_button( | |
label = "Download data as TSV", | |
data = DrAG_hits.to_csv(sep ='\t').encode('utf-8'), | |
file_name = f"DrAG_hits_{gene_id}.tsv", | |
mime = "text/csv") | |
# third column is padding only | |
######### Table ######### | |
CGD_link_renderer = JsCode(""" | |
class UrlCellRenderer { | |
init(params) { | |
this.eGui = document.createElement('a'); | |
this.eGui.innerText = params.value; | |
this.eGui.setAttribute('href', "http://candidagenome.org/cgi-bin/locus.pl?locus="+params.value); | |
this.eGui.setAttribute('style', "text-decoration:none"); | |
this.eGui.setAttribute('target', "_blank"); | |
} | |
getGui() { | |
return this.eGui; | |
} | |
} | |
""") | |
ChEMBL_link_renderer = JsCode(""" | |
class UrlCellRenderer { | |
init(params) { | |
this.eGui = document.createElement('a'); | |
this.eGui.innerText = params.value; | |
this.eGui.setAttribute('href', "http://ebi.ac.uk/chembl/compound_report_card/"+params.value); | |
this.eGui.setAttribute('style', "text-decoration:none"); | |
this.eGui.setAttribute('target', "_blank"); | |
} | |
getGui() { | |
return this.eGui; | |
} | |
} | |
""") | |
IUPHAR_link_renderer = JsCode(""" | |
class UrlCellRenderer { | |
init(params) { | |
this.eGui = document.createElement('a'); | |
this.eGui.innerText = params.value; | |
this.eGui.setAttribute('href', "https://www.guidetopharmacology.org/GRAC/LigandDisplayForward?ligandId="+params.value); | |
this.eGui.setAttribute('style', "text-decoration:none"); | |
this.eGui.setAttribute('target', "_blank"); | |
} | |
getGui() { | |
return this.eGui; | |
} | |
} | |
""") | |
if database_name=="ChEMBL": | |
grid_option_builder = GridOptionsBuilder() | |
grid_option_builder.configure_auto_height() | |
grid_option_builder.configure_default_column( | |
filterable=False, | |
groupable=False, | |
editable=False, | |
wrapText=True, | |
autoHeight=True) | |
grid_option_builder.configure_column("feature_name", header_name="feature_name", pinned="left", cellRenderer=CGD_link_renderer, width=550) | |
grid_option_builder.configure_column("sac_ortholog", header_name="sac_ortholog", pinned="left", width=500) | |
grid_option_builder.configure_column("description", header_name="description", width=1650) | |
grid_option_builder.configure_column("uniprot_accn", header_name="uniprot_accn", width=500) | |
grid_option_builder.configure_column("EValue", header_name="EValue", pinned="left", width=500) | |
grid_option_builder.configure_column("chembl_id", header_name="chembl_id", pinned="left", cellRenderer=ChEMBL_link_renderer, width=550) | |
grid_option_builder.configure_selection(selection_mode=False, use_checkbox=False) | |
elif database_name=="IUPHAR": | |
grid_option_builder = GridOptionsBuilder() | |
grid_option_builder.configure_auto_height() | |
grid_option_builder.configure_default_column( | |
filterable=False, | |
groupable=False, | |
editable=False, | |
wrapText=True, | |
autoHeight=True) | |
grid_option_builder.configure_column("feature_name", header_name="feature_name_1.y", pinned="left", cellRenderer=CGD_link_renderer, width=550) | |
grid_option_builder.configure_column("Ligand", header_name="Compound", pinned="left", width=500) | |
grid_option_builder.configure_column("Ligand ID", header_name="Compound ID", cellRenderer=IUPHAR_link_renderer, width=550) | |
grid_option_builder.configure_column("Target UniProt ID", header_name="uniprot_accn", width=500) | |
grid_option_builder.configure_column("EValue.y", header_name="EValue", pinned="left", width=500) | |
grid_option_builder.configure_column("SMILES", header_name="Compound SMILES", pinned="left", width=1650) | |
grid_option_builder.configure_selection(selection_mode=False, use_checkbox=False) | |
else: | |
raise Exception('Database was not recognised') | |
AgGrid( | |
data = DrAG_hits, | |
gridOptions = grid_option_builder.build(), | |
fit_columns_on_grid_load=True, | |
theme="streamlit", | |
allow_unsafe_jscode=True) | |