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
11 comments = Martel.Group("comments",
12 blank_line +
13 comment_line +
14 blank_line +
15 comment_line)
16
17
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
28 single_primer_line = Martel.Group("single_primer_line",
29 blank_line)
30
31
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
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
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
95 record = Martel.Group("primer3_record",
96 comments + \
97 Martel.Alt(
98
99 Martel.Str("\n" * 3) +
100 Martel.Opt(Martel.Str("\n" * 4)),
101
102 Martel.Rep(
103
104 Martel.Alt(blank_line + primer_start_line,
105
106 single_primer_line) +
107
108 Martel.Alt(forward_line + blank_line +
109 reverse_line + blank_line,
110
111 reverse_line + blank_line,
112
113 forward_line + blank_line,
114
115 internal_line + blank_line)) +
116 blank_line + blank_line + Martel.Rep(blank_line)))
117