import streamlit as st from difflib import SequenceMatcher # Function to calculate DNA sequence similarity def calculate_similarity(seq1, seq2): # Calculate similarity ratio using SequenceMatcher seq_matcher = SequenceMatcher(None, seq1, seq2) return seq_matcher.ratio() * 100 # Function to display DNA sequence matching results def display_results(seq1, seq2, similarity): st.subheader("Results") st.write(f"DNA Sequence 1: {seq1}") st.write(f"DNA Sequence 2: {seq2}") if similarity == 100: st.success("The DNA sequences are an exact match!") elif similarity > 0: st.warning(f"The sequences are {similarity:.2f}% similar.") else: st.error("The sequences do not match.") # Title of the app st.title("DNA Sequence Matching App") # User input for DNA Sequences st.subheader("Enter two DNA sequences to match:") seq1 = st.text_area("DNA Sequence 1 (e.g., ATCGGCTA)", height=150) seq2 = st.text_area("DNA Sequence 2 (e.g., ATCGGCTA)", height=150) if st.button("Match Sequences"): # Remove any spaces or newline characters from the sequences seq1 = seq1.replace(" ", "").replace("\n", "").upper() seq2 = seq2.replace(" ", "").replace("\n", "").upper() # Check if the sequences are non-empty if seq1 and seq2: similarity = calculate_similarity(seq1, seq2) display_results(seq1, seq2, similarity) else: st.error("Both DNA sequences must be entered.") # Optional: DNA Sequence Upload (CSV or Text file input) st.sidebar.subheader("Upload DNA Sequences") uploaded_file = st.sidebar.file_uploader("Upload file with DNA sequences", type=["txt", "csv"]) if uploaded_file is not None: # Read the uploaded file and assume it's a text file with sequences content = uploaded_file.read().decode("utf-8").strip().splitlines() if len(content) >= 2: seq1 = content[0] seq2 = content[1] similarity = calculate_similarity(seq1, seq2) display_results(seq1, seq2, similarity) else: st.sidebar.error("The uploaded file must contain at least two DNA sequences.")