internal_oligo_seq = Martel.Group("internal_seq", sequence) internal_line = Martel.Group( "internal_line", primer_space + Martel.Str("INTERNAL OLIGO") + any_space + internal_oligo_start + any_space + internal_oligo_length + any_space + internal_oligo_tm + any_space + internal_oligo_gc + any_space + internal_oligo_seq + Martel.AnyEol()) # XXX This record definition is ugly. But it works :-) record = Martel.Group("primer3_record", comments + \ Martel.Alt( # case 1. primer file with nothing Martel.Str("\n" * 3) + Martel.Opt(Martel.Str("\n" * 4)), # case 2. some primers have been picked Martel.Rep( # case 2a. we are designing a primer pair Martel.Alt(blank_line + primer_start_line, # case 2b. we are designing a single primer single_primer_line) + # case 2a. both primer pairs Martel.Alt(forward_line + blank_line + reverse_line + blank_line, # case 2b1. Reverse primer reverse_line + blank_line, # case 2b2, Forward primer forward_line + blank_line, # case 2b3, Internal oligo internal_line + blank_line)) + blank_line + blank_line + Martel.Rep(blank_line)))
"(?P<primary_identifier>[^;]+); " \ "(?P<secondary_identifier>([^.\R]|(?!.\R)\.)+)") DR_prosite = Martel.Re("(?P<database_identifier>(PROSITE|PFAM)); " \ "(?P<primary_identifier>[^;]+); " \ "(?P<secondary_identifier>[^;]+); " \ "(?P<status_identifier>[^.]+)") DR_embl = Martel.Re("(?P<database_identifier>EMBL); " \ "(?P<primary_identifier>[^;]+); " \ "(?P<secondary_identifier>[^;]+); " \ "(?P<status_identifier>[^.]+)") DR = Martel.Group("DR", Martel.Str("DR ") + \ Martel.Group("database_reference", Martel.Alt(DR_embl, DR_prosite, DR_general)) + \ Martel.Str(".") + Martel.AnyEol()) DR_block = Martel.Group("DR_block", Martel.Rep1(DR)) #--- KW KW = Simple("KW", "keyword") KW_block = Martel.Group("KW_block", Martel.Rep1(KW)) #--- FT # FT DOMAIN 77 88 ASP/GLU-RICH (ACIDIC). # 123456789012345678901234567890123456789012345678901234567890123456789012345 # 1 2 3 4 5 6 7 # FT ........ ...... ...... .........................................