Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| import pandas as pd | |
| import streamlit as st | |
| import os, shutil | |
| from tiger import tiger_exhibit, load_transcripts, TARGET_LEN, NUCLEOTIDE_TOKENS | |
| def convert_df(df): | |
| # IMPORTANT: Cache the conversion to prevent computation on every rerun | |
| return df.to_csv().encode('utf-8') | |
| # title and instructions | |
| st.title('TIGER Cas13 Efficacy Prediction') | |
| st.session_state["fasta_seq"] = "" | |
| st.session_state["text_seq"] = "" | |
| status_bar, status_text = None, None | |
| with st.form(key='calc_options'): | |
| c1_names = ['On Target Only', 'On and Off Target'] | |
| option = st.radio('Calculation Options', c1_names, index=0) | |
| submitButton = st.form_submit_button(label='Choose Options') | |
| # UserInput Form from text input | |
| text_form = st.form("text") | |
| text_input = text_form.text_input( | |
| label='Enter a target transcript:', | |
| #value='ATGCAGGACGCGGAGAACGTGGCGGTGCCCGAGGCGGCCGAGGAGCGCGC', | |
| placeholder='Upper or lower case') | |
| if text_input: | |
| # input is too short | |
| if len(text_input) < TARGET_LEN: | |
| transcript_len = len(text_input) | |
| text_form.write('Transcript length ({:d}) must be at least {:d} bases.'.format(transcript_len, TARGET_LEN)) | |
| else: | |
| st.session_state["text_seq"] = text_input | |
| text_calc = text_form.form_submit_button(label="calculate") | |
| #status bar | |
| status_text_textform = text_form.empty() | |
| status_bar_textform = text_form.progress(0) | |
| # UserInput Form from file | |
| fasta_form = st.form("fasta") | |
| fasta = fasta_form.file_uploader(label="upload fasta file") | |
| if fasta: | |
| if os.path.exists("temp"): | |
| shutil.rmtree("temp") | |
| os.makedirs("temp") | |
| fname = fasta.name | |
| st.write(fname) | |
| fpath = os.path.join("temp", fname) | |
| with open(fpath, "w") as f: | |
| f.write(fasta.getvalue().decode("utf-8")) | |
| transcript_tbl = load_transcripts([fpath]) | |
| fasta_form.text("fasta file contents") | |
| fasta_form.write(transcript_tbl) | |
| seq = transcript_tbl['seq'][0] | |
| st.session_state["fasta_seq"] = seq | |
| fasta_calc = fasta_form.form_submit_button(label="calculate") | |
| status_text_fastaform = fasta_form.empty() | |
| status_bar_fastaform = fasta_form.progress(0) | |
| #st.write(text_calc) | |
| #st.write(fasta_calc) | |
| #Calculation | |
| if text_calc: | |
| src_seq = st.session_state["text_seq"] | |
| status_text = status_text_textform | |
| status_bar= status_bar_textform | |
| elif fasta_calc: | |
| src_seq = st.session_state["fasta_seq"] | |
| status_text = status_text_fastaform | |
| status_bar= status_bar_fastaform | |
| else: | |
| src_seq = "" | |
| #st.write(src_seq) | |
| # valid input | |
| if src_seq and all([True if nt.upper() in NUCLEOTIDE_TOKENS.keys() else False for nt in src_seq]): | |
| on_target, off_target = tiger_exhibit(pd.DataFrame(dict(id=['ManualEntry'], seq=[src_seq])), | |
| status_bar, status_text, check_off_targets=option == 'On and Off Target') | |
| on_target.rename(columns={"Guide":"23 nt guide sequence"}, inplace=True) | |
| if len(on_target)>0: | |
| if on_target.iloc[0]["On-target ID"] == 0: | |
| on_target.drop(["On-target ID"], axis=1, inplace=True) | |
| st.write('On-target predictions: ', on_target) | |
| st.download_button(label='Download', data=convert_df(on_target), file_name='on_target.csv', mime='text/csv') | |
| if len(off_target) > 0: | |
| off_target.rename(columns={"Guide":"23 nt guide sequence"}, inplace=True) | |
| st.write('Off-target predictions: ', off_target) | |
| st.download_button(label='Download', data=convert_df(off_target), file_name='off_target.csv', mime='text/csv') | |
| else: | |
| st.write('We did not find any off-target effects!') | |
| # invalid input | |
| #else: | |
| # st.write('Nucleotides other than ACGT detected!') |