yashm commited on
Commit
b0f8787
·
verified ·
1 Parent(s): b3c8001

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -0
app.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import primer3
3
+ from Bio.Seq import Seq
4
+
5
+ # Streamlit app layout
6
+ st.title('PCR Primer Design Tool')
7
+ st.write('Enter your DNA sequence and target region to design PCR primers.')
8
+
9
+ # User input for DNA sequence and target region
10
+ user_sequence = st.text_area("Enter DNA sequence:", height=150)
11
+ target_start = st.number_input("Target start position:", min_value=0, value=0, step=1)
12
+ target_length = st.number_input("Target length:", min_value=1, value=20, step=1)
13
+
14
+ if st.button('Design Primers'):
15
+ if user_sequence:
16
+ # Convert user input into the format expected by Primer3
17
+ target = [(target_start, target_length)]
18
+ sequence = str(Seq(user_sequence).upper()) # Ensure uppercase sequence
19
+
20
+ # Set basic primer design parameters (customize as needed)
21
+ primer_params = {
22
+ 'SEQUENCE_TEMPLATE': sequence,
23
+ 'SEQUENCE_TARGET': target,
24
+ 'PRIMER_OPT_SIZE': 20,
25
+ 'PRIMER_MIN_SIZE': 18,
26
+ 'PRIMER_MAX_SIZE': 25,
27
+ 'PRIMER_OPT_TM': 60.0,
28
+ 'PRIMER_MIN_TM': 57.0,
29
+ 'PRIMER_MAX_TM': 63.0,
30
+ 'PRIMER_MIN_GC': 20.0,
31
+ 'PRIMER_MAX_GC': 80.0,
32
+ }
33
+
34
+ # Design primers
35
+ primers = primer3.bindings.designPrimers(
36
+ {
37
+ 'SEQUENCE_TEMPLATE': primer_params['SEQUENCE_TEMPLATE'],
38
+ 'SEQUENCE_TARGET': primer_params['SEQUENCE_TARGET'],
39
+ },
40
+ {
41
+ 'PRIMER_OPT_SIZE': primer_params['PRIMER_OPT_SIZE'],
42
+ 'PRIMER_MIN_SIZE': primer_params['PRIMER_MIN_SIZE'],
43
+ 'PRIMER_MAX_SIZE': primer_params['PRIMER_MAX_SIZE'],
44
+ 'PRIMER_OPT_TM': primer_params['PRIMER_OPT_TM'],
45
+ 'PRIMER_MIN_TM': primer_params['PRIMER_MIN_TM'],
46
+ 'PRIMER_MAX_TM': primer_params['PRIMER_MAX_TM'],
47
+ 'PRIMER_MIN_GC': primer_params['PRIMER_MIN_GC'],
48
+ 'PRIMER_MAX_GC': primer_params['PRIMER_MAX_GC'],
49
+ }
50
+ )
51
+
52
+ # Display the results
53
+ st.subheader('Designed Primers:')
54
+ st.write(f"Left Primer (5'-3'): {primers.get('PRIMER_LEFT_0_SEQUENCE', 'Not available')}")
55
+ st.write(f"Right Primer (5'-3'): {primers.get('PRIMER_RIGHT_0_SEQUENCE', 'Not available')}")
56
+ st.write(f"Left Primer Tm: {primers.get('PRIMER_LEFT_0_TM', 'Not available')}")
57
+ st.write(f"Right Primer Tm: {primers.get('PRIMER_RIGHT_0_TM', 'Not available')}")
58
+ else:
59
+ st.error('Please input a valid DNA sequence.')