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

Source Code for Module Bio.Emboss.primer3_format

  1  """Martel definitions for the output files produced by primer3. 
  2  """ 
  3  import Martel 
  4   
  5  any_space = Martel.Re("[ ]+") 
  6  blank_line = Martel.AnyEol() 
  7   
  8  comment_line = Martel.Str("#") + Martel.ToEol() 
  9   
 10  # comments and blank lines in the file 
 11  comments = Martel.Group("comments", 
 12                          blank_line + 
 13                          comment_line + 
 14                          blank_line + 
 15                          comment_line) 
 16   
 17  #   1 PRODUCT SIZE: 289 
 18  product_size = Martel.Group("product_size", 
 19                   Martel.Re("[\d]+")) 
 20  start_primer = Martel.Group("start_primer", 
 21                              any_space + Martel.Re("[\d]+") + 
 22                              Martel.Str(" PRODUCT SIZE: ")) 
 23  primer_start_line = Martel.Group("primer_start_line", 
 24                        start_primer + 
 25                        product_size + Martel.AnyEol()) 
 26   
 27  # a blank line that signifies a new primer is coming up 
 28  single_primer_line = Martel.Group("single_primer_line", 
 29                                    blank_line) 
 30                           
 31  #      FORWARD PRIMER    1725   20  59.96  55.00  AGGGAAGGGATGCTAGGTGT 
 32  primer_space = Martel.Str(" " * 5) 
 33   
 34  any_integer = Martel.Re("[\d]+") 
 35  any_float = Martel.Re("[\d\.]+") 
 36  sequence = Martel.Re("[GATCN]+") 
 37   
 38  forward_primer_start = Martel.Group("forward_start", 
 39                                     any_integer) 
 40  forward_primer_length = Martel.Group("forward_length", 
 41                                       any_integer) 
 42  forward_primer_tm = Martel.Group("forward_tm", 
 43                                   any_float) 
 44  forward_primer_gc = Martel.Group("forward_gc", 
 45                                   any_float) 
 46  forward_primer_seq = Martel.Group("forward_seq", 
 47                                    sequence) 
 48   
 49  forward_line = Martel.Group("forward_line",  
 50                   primer_space + Martel.Str("FORWARD PRIMER") + 
 51                   any_space + forward_primer_start + any_space + 
 52                   forward_primer_length + any_space + forward_primer_tm + 
 53                   any_space + forward_primer_gc + any_space +  
 54                   forward_primer_seq + Martel.AnyEol()) 
 55   
 56  #      REVERSE PRIMER    1994   20  59.99  55.00  AGAAGCACACCTCTCCCTGA 
 57  reverse_primer_start = Martel.Group("reverse_start", 
 58                                     any_integer) 
 59  reverse_primer_length = Martel.Group("reverse_length", 
 60                                       any_integer) 
 61  reverse_primer_tm = Martel.Group("reverse_tm", 
 62                                   any_float) 
 63  reverse_primer_gc = Martel.Group("reverse_gc", 
 64                                   any_float) 
 65  reverse_primer_seq = Martel.Group("reverse_seq", 
 66                                    sequence) 
 67  reverse_line = Martel.Group("reverse_line",  
 68                   primer_space + Martel.Str("REVERSE PRIMER") + 
 69                   any_space + reverse_primer_start + any_space + 
 70                   reverse_primer_length + any_space + reverse_primer_tm + 
 71                   any_space + reverse_primer_gc + any_space +  
 72                   reverse_primer_seq + Martel.AnyEol()) 
 73   
 74  #     INTERNAL OLIGO     197   20  59.96  40.00  AATTGCACATAACGGATGCA 
 75   
 76  internal_oligo_start = Martel.Group("internal_start", 
 77                                     any_integer) 
 78  internal_oligo_length = Martel.Group("internal_length", 
 79                                       any_integer) 
 80  internal_oligo_tm = Martel.Group("internal_tm", 
 81                                   any_float) 
 82  internal_oligo_gc = Martel.Group("internal_gc", 
 83                                   any_float) 
 84  internal_oligo_seq = Martel.Group("internal_seq", 
 85                                    sequence) 
 86  internal_line = Martel.Group("internal_line",  
 87                   primer_space + Martel.Str("INTERNAL OLIGO") + 
 88                   any_space + internal_oligo_start + any_space + 
 89                   internal_oligo_length + any_space + internal_oligo_tm + 
 90                   any_space + internal_oligo_gc + any_space +  
 91                   internal_oligo_seq + Martel.AnyEol()) 
 92   
 93   
 94  # XXX This record definition is ugly. But it works :-) 
 95  record = Martel.Group("primer3_record", 
 96                        comments + \ 
 97                          Martel.Alt( 
 98                           # case 1. primer file with nothing 
 99                           Martel.Str("\n" * 3) + 
100                           Martel.Opt(Martel.Str("\n" * 4)), 
101                           # case 2. some primers have been picked 
102                           Martel.Rep( 
103                             # case 2a. we are designing a primer pair  
104                             Martel.Alt(blank_line + primer_start_line, 
105                             # case 2b. we are designing a single primer 
106                                        single_primer_line) + 
107                             # case 2a. both primer pairs 
108                             Martel.Alt(forward_line + blank_line +  
109                                        reverse_line + blank_line, 
110                             # case 2b1. Reverse primer 
111                                        reverse_line + blank_line, 
112                             # case 2b2, Forward primer 
113                                        forward_line + blank_line, 
114                             # case 2b3, Internal oligo  
115                                        internal_line + blank_line)) + 
116                             blank_line + blank_line + Martel.Rep(blank_line))) 
117