Package Bio :: Package Emboss :: Module Primer3
[hide private]
[frames] | no frames]

Source Code for Module Bio.Emboss.Primer3

  1  """Code to interact with the primer3 program. 
  2  """ 
  3   
  4  # --- primer3 
  5   
6 -class Record:
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 """
13 - def __init__(self):
14 self.comments = "" 15 self.primers = []
16
17 -class Primers:
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 """
34 - def __init__(self):
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
47 -def read(handle):
48 """Parse primer3 output into a Primer3Record. 49 """ 50 handle = iter(handle) 51 record = Record() 52 primer = None 53 54 # Skip empty lines at the top of the file 55 for line in handle: 56 if line.strip(): 57 break 58 59 # Read the comment lines 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 # Read the primers 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