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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -41
app.py CHANGED
@@ -7,53 +7,58 @@ 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.')
 
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).upper() # Ensure sequence is uppercase
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 and target_length > 0:
16
+ # Remove non-sequence characters (e.g., spaces, line breaks)
17
+ clean_sequence = ''.join(user_sequence.split())
 
18
 
19
+ # Validate DNA sequence
20
+ if not all(nucleotide in 'ATCG' for nucleotide in clean_sequence):
21
+ st.error('Invalid DNA sequence: please ensure it contains only A, T, C, and G.')
22
+ else:
23
+ # Define target region based on user input
24
+ target = [(target_start, target_length)]
 
 
 
 
 
 
 
25
 
26
+ # Set basic primer design parameters (customize as needed)
27
+ primer_params = {
28
+ 'SEQUENCE_TEMPLATE': clean_sequence,
29
+ 'SEQUENCE_TARGET': target,
30
+ 'PRIMER_OPT_SIZE': 20, # Optimum primer size, change as needed
31
+ 'PRIMER_MIN_SIZE': 18,
32
+ 'PRIMER_MAX_SIZE': 25,
33
+ 'PRIMER_OPT_TM': 60.0,
34
+ 'PRIMER_MIN_TM': 57.0,
35
+ 'PRIMER_MAX_TM': 63.0,
36
+ 'PRIMER_MIN_GC': 20.0,
37
+ 'PRIMER_MAX_GC': 80.0,
 
 
 
38
  }
 
39
 
40
+ # Design primers using Primer3
41
+ try:
42
+ primers = primer3.bindings.designPrimers(
43
+ {'SEQUENCE_TEMPLATE': primer_params['SEQUENCE_TEMPLATE'],
44
+ 'SEQUENCE_TARGET': primer_params['SEQUENCE_TARGET']},
45
+ {'PRIMER_OPT_SIZE': primer_params['PRIMER_OPT_SIZE'],
46
+ 'PRIMER_MIN_SIZE': primer_params['PRIMER_MIN_SIZE'],
47
+ 'PRIMER_MAX_SIZE': primer_params['PRIMER_MAX_SIZE'],
48
+ 'PRIMER_OPT_TM': primer_params['PRIMER_OPT_TM'],
49
+ 'PRIMER_MIN_TM': primer_params['PRIMER_MIN_TM'],
50
+ 'PRIMER_MAX_TM': primer_params['PRIMER_MAX_TM'],
51
+ 'PRIMER_MIN_GC': primer_params['PRIMER_MIN_GC'],
52
+ 'PRIMER_MAX_GC': primer_params['PRIMER_MAX_GC']}
53
+ )
54
+
55
+ # Display the results
56
+ st.subheader('Designed Primers:')
57
+ st.write(f"Left Primer (5'-3'): {primers.get('PRIMER_LEFT_0_SEQUENCE', 'Not available')}")
58
+ st.write(f"Right Primer (5'-3'): {primers.get('PRIMER_RIGHT_0_SEQUENCE', 'Not available')}")
59
+ st.write(f"Left Primer Tm: {primers.get('PRIMER_LEFT_0_TM', 'Not available')}")
60
+ st.write(f"Right Primer Tm: {primers.get('PRIMER_RIGHT_0_TM', 'Not available')}")
61
+ except Exception as e:
62
+ st.error(f"An error occurred while designing primers: {e}")
63
  else:
64
+ st.error('Please input a valid DNA sequence and specify a target region.')