Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
from os import path | |
import sys | |
import streamlit.components.v1 as components | |
sys.path.append('code/') | |
#sys.path.append('ASCARIS/code/') | |
import pdb_featureVector | |
import alphafold_featureVector | |
import argparse | |
from st_aggrid import AgGrid, GridOptionsBuilder, JsCode,GridUpdateMode | |
import base64 | |
showWarningOnDirectExecution = False | |
# Check if 'key' already exists in session_state | |
# If not, then initialize it | |
if 'visibility' not in st.session_state: | |
st.session_state['visibility'] = 'hidden' | |
st.session_state.disabled = False | |
original_title = '<p style="font-family:Trebuchet MS; color:#FD7456; font-size: 25px; font-weight:bold; text-align:center">ASCARIS</p>' | |
st.markdown(original_title, unsafe_allow_html=True) | |
original_title = '<p style="font-family:Trebuchet MS; color:#FD7456; font-size: 25px; font-weight:bold; text-align:center">(Annotation and StruCture-bAsed RepresentatIon of Single amino acid variations)</p>' | |
st.markdown(original_title, unsafe_allow_html=True) | |
st.write('') | |
st.write('') | |
st.write('') | |
st.write('') | |
selected_df = pd.DataFrame() | |
with st.form('mform', clear_on_submit=False): | |
source = st.selectbox('Select the protein structure resource (1: PDB-SwissModel-Modbase, 2: AlphaFold)',[1,2]) | |
impute = st.selectbox('Imputation',[True, False]) | |
input_data = st.text_input('Enter SAV data points (Format Provided Below)', "P13637-T-613-M, Q9Y4W6-N-432-T",label_visibility=st.session_state.visibility, | |
disabled=st.session_state.disabled, | |
placeholder=st.session_state.visibility, | |
) | |
parser = argparse.ArgumentParser(description='ASCARIS') | |
parser.add_argument('-s', '--source_option', | |
help='Selection of input structure data.\n 1: PDB Structures (default), 2: AlphaFold Structures', | |
default=1) | |
parser.add_argument('-i', '--input_datapoint', | |
help='Input file or query datapoint\n Option 1: Comma-separated list of idenfiers (UniProt ID-wt residue-position-mutated residue (e.g. Q9Y4W6-N-432-T or Q9Y4W6-N-432-T, Q9Y4W6-N-432-T)) \n Option 2: Enter comma-separated file path') | |
parser.add_argument('-impute', '--imputation_state', default='True', | |
help='Whether resulting feature vector should be imputed or not. Default True.') | |
args = parser.parse_args() | |
input_set = input_data | |
mode = source | |
impute = impute | |
submitted = st.form_submit_button(label="Submit", help=None, on_click=None, args=None, kwargs=None, type="secondary", disabled=False, use_container_width=False) | |
print('*****************************************') | |
print('Feature vector generation is in progress. \nPlease check log file for updates..') | |
print('*****************************************') | |
mode = int(mode) | |
if submitted: | |
with st.spinner('In progress...This may take a while...'): | |
try: | |
if mode == 1: | |
selected_df = pdb_featureVector.pdb(input_set, mode, impute) | |
elif mode == 2: | |
selected_df = alphafold_featureVector.alphafold(input_set, mode, impute) | |
else: | |
selected_df = pd.DataFrame() | |
st.write(selected_df) | |
except: | |
selected_df = pd.DataFrame() | |
pass | |
st.success('Feature vector successfully created.') | |
def download_button(object_to_download, download_filename): | |
if isinstance(object_to_download, pd.DataFrame): | |
object_to_download = object_to_download.to_csv(index=False) | |
# Try JSON encode for everything else | |
else: | |
object_to_download = json.dumps(object_to_download) | |
try: | |
# some strings <-> bytes conversions necessary here | |
b64 = base64.b64encode(object_to_download.encode()).decode() | |
except AttributeError as e: | |
b64 = base64.b64encode(object_to_download).decode() | |
dl_link = f"""<html><head><title>Start Auto Download file</title><script src="http://code.jquery.com/jquery-3.2.1.min.js"></script><script>$('<a href="data:text/csv;base64,{b64}" download="{download_filename}">')[0].click()</script></head></html>""" | |
return dl_link | |
def download_df(): | |
components.html( | |
download_button(selected_df, st.session_state.filename), | |
height=0, | |
) | |
""" | |
selected_df = selected_df.astype(str) | |
st.write(selected_df) | |
with st.form("download_form", clear_on_submit=False): | |
st.text_input("Enter filename", key="filename") | |
submit = st.form_submit_button("Download", on_click=selected_df) | |
""" | |
def convert_df(df): | |
return df.to_csv(index=False).encode('utf-8') | |
csv = convert_df(selected_df) | |
st.download_button("Press to Download", csv,"file.csv","text/csv",key='download-csv') |