diff --git a/.gitignore b/.gitignore index 22ad3a9..3d50c62 100644 --- a/.gitignore +++ b/.gitignore @@ -897,3 +897,6 @@ FodyWeavers.xsd # PyPi file .pypirc +*.json +*.csv +*.ipynb \ No newline at end of file diff --git a/Main.py b/Main.py index ff7c15b..efb3a60 100644 --- a/Main.py +++ b/Main.py @@ -5,6 +5,7 @@ import streamlit as st import base64 from streamlit_card import card +from st_social_media_links import SocialMediaIcons st.set_page_config( layout="wide", @@ -28,6 +29,7 @@ padding-right: 5rem; } .stTabs [data-baseweb="tab-list"] button [data-testid="stMarkdownContainer"] p {font-size:1.3rem;} + [data-testid="stExpander"] details:hover summary{background-color: #d0e9e2;} """, unsafe_allow_html=True, @@ -49,6 +51,13 @@ def load_logo(filepath): return data +def img_to_html(img_path): + img_html = "".format( + load_logo(img_path) + ) + return img_html + + tab1, tab2, tab3, tab4 = st.tabs(["About", "Tools", "Publications", "Team"]) with tab1: @@ -103,8 +112,8 @@ def load_logo(filepath): Project overview: - Start year: 2021 - - End year: 2024 - - Grant agreement ID: 03ZU1109KB + - End year: 2027 (including 2nd phase) + - Grant agreement ID: 03ZU1109KB (InnoDATA) - Funding: 14M€ - Funding source: Federal Ministry of Education and Research (BMBF) """ @@ -148,21 +157,22 @@ def load_logo(filepath): # tools tab with tab2: - st.markdown("### Knowledge Graph") - with st.expander(label="Graph based tools"): + st.markdown("### Explore our tools and workflows") + with st.expander(label=r"$\textsf{\Large Dashboards and Databases}$"): col1, col2, col3 = st.columns(3) with col1: hasClicked = card( title="R4A Expertise Dashboard", text="Dashboard for the the REMEDi4ALL expertise knowledge graph", - image=load_logo("images/r4a_logo.png"), + image=load_logo("images/app_logos/r4a_logo.png"), url="https://r4a-expertise-dashboard.serve.scilifelab.se/", styles={ "card": { "border-radius": "10px", - "box-shadow": "0 0 10px rgba(0,0,0,0.5)", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", } }, ) @@ -171,113 +181,191 @@ def load_logo(filepath): hasClicked = card( title="KGG", text="Automated workflow for disease-specific KGs", - image=load_logo("images/kg_2.png"), - url="/KGGapp", + image=load_logo("images/app_logos/kgg.png"), + url="/KG_Generator", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) with col3: hasClicked = card( title="AntiMicrobial KG", text="Data warehouse of experimentally validated antibacterial chemicals", - image=load_logo("images/antimicrobial.webp"), + image=load_logo("images/app_logos/antimicrobial.webp"), url="https://antimicrobial-kg.serve.scilifelab.se/", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, + ) + + col4, col5, col6 = st.columns(3) + + with col4: + hasClicked = card( + title="PROTACKB", + text="A comprehensive knowledgebase of PROTACs, molecular glues and degraders", + image=load_logo("images/app_logos/ar_demo.png"), + url="/PROTAC-KB", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) - st.markdown("### Machine learning models") + with col5: + hasClicked = card( + title="PROXIDRUGS", + text="Dashboard for sub-projects in PROXIDRUGS", + image=load_logo("images/app_logos/proxidrugs.PNG"), + url="/Proxidrugs", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, + ) - with st.expander(label="ML models"): + with st.expander(label=r"$\textsf{\Large Machine learning models}$"): col1, col2, col3 = st.columns(3) with col1: hasClicked = card( title="AntiMicrobial Model", text="Model for predicting antimicorbial activity of small molecules", - image=load_logo("images/antimicrobial.webp"), + image=load_logo("images/app_logos/antimicrobial.webp"), url="https://antimicrobial-kg.serve.scilifelab.se/Model_Prediction", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) with col2: hasClicked = card( title="E3 Ligase Model", - text="Model for predicting speicificity of E3 ligase binders", - image=load_logo("images/protac.webp"), + text="Model for predicting specificity of E3 ligase binders", + image=load_logo("images/app_logos/protac.webp"), url="https://github.com/Fraunhofer-ITMP/E3_binder_Model", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) - st.markdown("### Screening data preprocessing") - - with st.expander("Preprocessing tools"): + with st.expander(label=r"$\textsf{\Large Screening data preprocessing tools}$"): col1, col2, col3 = st.columns(3) with col1: card( title="Dose-Response Analyses", text="Fit dose-response curves from normalised biochemical assay data", - image=load_logo("images/drc.png"), + image=load_logo("images/app_logos/drc.png"), url="https://hub.knime.com/fraunhoferitmp/spaces/Public/Dose_Response_Biochemical/DRCfit_biochemical_ECBD~6NLZB5Jkgn6j5a6Y/current-state", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) with col2: hasClicked = card( title="Chemical annotator", text="Annotation of chemicals with biochemical and pharmaceutical information retrieved from ChEMBL", - image=load_logo("images/workflow.png"), + image=load_logo("images/app_logos/workflow.png"), url="https://hub.knime.com/fraunhoferitmp/spaces/Public/Remedi4All/R4A_AnnotationTool_v1~RPNHTYMP7vUEoUwD/current-state", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) with col3: hasClicked = card( - title="Annotator Dashboard", - text="Dashboard of biochemical and pharmaceutical information retrieved from ChEMBL", - image=load_logo("images/workflow.png"), - url="https://hub.knime.com/fraunhoferitmp/spaces/Public/Remedi4All/ChemblAssays~yQeFQzSCx6DSlZPd/current-state", - ) - - col1, col2, col3 = st.columns(3) - - with col1: - hasClicked = card( - title="Pareto Hit Analysis App", - text="Some description", - image=load_logo("images/pareto_front.png"), - url="/Paretoapp", - ) - - with col2: - hasClicked = card( - title="ENSEMBL Gene Annotator App", - text="Some description", - image=load_logo("images/gene_icon.png"), - url="/Ensemblapp", + title="CBDREGNum Generator", + text="Prepare data for submission in PROXIDRUGSDB", + image=load_logo("images/app_logos/cbdr.png"), + url="/CBDReg_Generator", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) - st.markdown("### Programming tools and workflows") - - with st.expander("Program tools"): + with st.expander(label=r"$\textsf{\Large Tools and workflows}$"): col1, col2, col3 = st.columns(3) with col1: card( title="Patent Enrichment Tool PEMT", text="Python package for extracting patent for genes and compounds", - image=load_logo("images/pemt.jpg"), + image=load_logo("images/app_logos/pemt.jpg"), url="https://github.com/Fraunhofer-ITMP/PEMT", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) with col2: card( title="rSASC", text="R tool for Synthetic cohorts generator for longitudinal observational patient cohorts", - image=load_logo("images/sasc.webp"), + image=load_logo("images/app_logos/sasc.webp"), url="https://github.com/Fraunhofer-ITMP/SASC", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) with col3: card( title="ALISTER", text="Application for lipid stability evaluation", - image=load_logo("images/alister.png"), + image=load_logo("images/app_logos/alister.png"), url="https://itmp.shinyapps.io/alister/", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) col1, col2, col3 = st.columns(3) @@ -286,33 +374,63 @@ def load_logo(filepath): card( title="PySASC", text="Python tool for Synthetic cohorts generator for longitudinal observational patient cohorts", - image=load_logo("images/sasc.webp"), + image=load_logo("images/app_logos/sasc.webp"), url="https://github.com/Fraunhofer-ITMP/PySASC", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) - # with col3: - # card( - # title="ALISTER", - # text="Application for lipid stability evaluation", - # image=load_logo("images/alister.png"), - # url="https://itmp.shinyapps.io/alister/", - # ) + with col2: + hasClicked = card( + title="Data Processor", + text="Small toolkit for processing proteins", + image=load_logo("images/pages/pareto_front.png"), + url="/Small_helper_apps", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, + ) - st.markdown("### Findable, Accessible, Reusable, Interoperable (FAIR) data tools") + with col3: + hasClicked = card( + title="Chemical space visualizer", + text="Chemical space visualizer through t-SNE and UMAP", + image=load_logo("images/app_logos/umap.png"), + url="/Compound_space_visualizer", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, + ) - with st.expander(label="Endorsed FAIR tools"): + with st.expander( + label=r"$\textsf{\Large Findable, Accessible, Reusable, Interoperable (FAIR) endorsed tools}$" + ): col1, col2, col3 = st.columns(3) with col1: card( title="FAIR Cookbook", - text="Resource for the Life Sciences with recipes that help you to make and keep data FAIR", - image=load_logo("images/faircookbook.png"), + text="Resource for the life sciences recipes that help you to make and keep data FAIR", + image=load_logo("images/app_logos/faircookbook.png"), url="https://faircookbook.elixir-europe.org/", styles={ "card": { "border-radius": "10px", - "box-shadow": "0 0 10px rgba(0,0,0,0.5)", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", } }, ) @@ -321,18 +439,60 @@ def load_logo(filepath): card( title="FAIRplus DSM", text="Tool to assess the FAIRness level of datasests", - image=load_logo("images/fairplus_dsm.png"), + image=load_logo("images/app_logos/fairplus_dsm.png"), url="https://fairdsm.biospeak.solutions/", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) with col3: card( title="FAIRSharing.org", text="Resource on data and metadata standards, inter-related to databases and data policies", - image=load_logo("images/fairsharing.jpg"), + image=load_logo("images/app_logos/fairsharing.jpg"), url="https://fairsharing.org/", + styles={ + "card": { + "border-radius": "10px", + "box-shadow": "0 0 4px rgba(0,0,0,0.5)", + "margin": "0px", + } + }, ) + col1, col2, col3, col4, col5, col6, col7, col8 = st.columns(8) + + col1.markdown("Find us on:") + + col2.markdown( + f"""**LinkedIn**""", + unsafe_allow_html=True, + ) + + col3.markdown( + f"""**GitHub**""", + unsafe_allow_html=True, + ) + + col4.markdown( + f"""**X**""", + unsafe_allow_html=True, + ) + + col5.markdown( + f"""**Zenodo**""", + unsafe_allow_html=True, + ) + + col6.markdown( + f"""**KINMEHub**""", + unsafe_allow_html=True, + ) # publications tab with tab3: @@ -358,10 +518,32 @@ def load_logo(filepath): ) member_df = pd.read_csv("data/members.csv") + active_members = member_df[member_df["alumni"] == "no"] + alumni_members = member_df[member_df["alumni"] == "yes"] + + member_chunk_df1 = [ + active_members[i : i + 3] for i in range(0, len(active_members), 3) + ] + member_chunk_df2 = [ + alumni_members[i : i + 3] for i in range(0, len(alumni_members), 3) + ] + + # Current members + st.header("Current members", divider="grey") + for sub_df in member_chunk_df1: + sub_df.reset_index(drop=True, inplace=True) + columns = st.columns(3) + for i, row in sub_df.iterrows(): + with columns[i]: + st.write(f"### {row['member_name']}") + st.markdown( + f"**Email**: {row['member_email']}
**ORCID**: https://orcid.org/{row['member_orcid']}", + unsafe_allow_html=True, + ) - member_chunk_df = [member_df[i : i + 3] for i in range(0, len(member_df), 3)] - - for sub_df in member_chunk_df: + # Alumni members + st.header(":orange[Alumni members]", divider="grey") + for sub_df in member_chunk_df2: sub_df.reset_index(drop=True, inplace=True) columns = st.columns(3) for i, row in sub_df.iterrows(): @@ -372,6 +554,8 @@ def load_logo(filepath): unsafe_allow_html=True, ) + st.image("./images/clinical_ds.png", use_column_width=True) + # footer with text and green background st.markdown( "