1 """Code to interact with the primer3 program.
2 """
3
4
5
7 """Represent information from a primer3 run finding primers.
8
9 Members:
10
11 primers A list of primers that are generated (usually 5)
12 """
14 self.comments = ""
15 self.primers = []
16
18 """A primer set designed by Primer3.
19
20 Members:
21
22 size
23 forward_seq
24 forward_start
25 forward_length
26 forward_tm
27 forward_gc
28 reverse_seq
29 reverse_start
30 reverse_length
31 reverse_tm
32 reverse_gc
33 """
35 self.size = 0
36 self.forward_seq = ""
37 self.forward_start = 0
38 self.forward_length = 0
39 self.forward_tm = 0.0
40 self.forward_gc = 0.0
41 self.reverse_seq = ""
42 self.reverse_start = 0
43 self.reverse_length = 0
44 self.reverse_tm = 0.0
45 self.reverse_gc = 0.0
46
48 """Parse primer3 output into a Primer3Record.
49 """
50 handle = iter(handle)
51 record = Record()
52 primer = None
53
54
55 for line in handle:
56 if line.strip():
57 break
58
59
60 while True:
61 if line.strip() and not line[0]=='#':
62 break
63 record.comments += line
64 try:
65 line = handle.next()
66 except StopIteration:
67 return record
68
69
70 while True:
71 if not line.strip():
72 pass
73 elif line[5:19]=="PRODUCT SIZE: ":
74 primer = Primers()
75 primer.size = int(line[19:])
76 record.primers.append(primer)
77 elif line[5:19]=="FORWARD PRIMER":
78 words = line.split()
79 if not primer or primer.size==0:
80 primer = Primers()
81 record.primers.append(primer)
82 primer.forward_start = int(words[2])
83 primer.forward_length = int(words[3])
84 primer.forward_tm = float(words[4])
85 primer.forward_gc = float(words[5])
86 primer.forward_seq = words[6]
87 elif line[5:19]=="REVERSE PRIMER":
88 words = line.split()
89 if not primer or primer.size==0:
90 primer = Primers()
91 record.primers.append(primer)
92 primer.reverse_start = int(words[2])
93 primer.reverse_length = int(words[3])
94 primer.reverse_tm = float(words[4])
95 primer.reverse_gc = float(words[5])
96 primer.reverse_seq = words[6]
97 elif line[5:19]=="INTERNAL OLIGO":
98 words = line.split()
99 if not primer or primer.size==0:
100 primer = Primers()
101 record.primers.append(primer)
102 primer.internal_start = int(words[2])
103 primer.internal_length = int(words[3])
104 primer.internal_tm = float(words[4])
105 primer.internal_gc = float(words[5])
106 primer.internal_seq = words[6]
107 try:
108 line = handle.next()
109 except StopIteration:
110 break
111
112 return record
113