Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 3,594 Bytes
89ffb34 89be9f9 9f169cd d3204b1 89be9f9 f606ed7 cf3bd3a d3204b1 99a0d01 d3204b1 592b51c d3204b1 592b51c d3204b1 89ee386 d3204b1 9f169cd d3204b1 9f169cd d3204b1 9f169cd d3204b1 78951dd d3204b1 a2591b6 27992d2 d41b7db 350befe 27992d2 350befe 78951dd d3204b1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import pandas as pd
import streamlit as st
import os, shutil
from tiger import tiger_exhibit, load_transcripts, TARGET_LEN, NUCLEOTIDE_TOKENS
@st.cache
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!') |