def delimiter(delim): assert len(delim) == 1, \ "delimiter can only be a single character long, not %s" % repr(delim) assert delim not in "\n\r", "Cannot use %s as a delimiter" % repr(delim) field = Martel.Group("field", Martel.Rep(Martel.AnyBut(delim + "\r\n"))) line = field + Martel.Rep(Martel.Str(delim) + field) + Martel.AnyEol() record = Martel.Group("record", line) format = Martel.ParseRecords("delimited", {}, record, RecordReader.CountLines, (1, )) return format
def test1(): fields = ( ["Andrew", "Dalke", "12"], ["Liz", "Nelson", "22"], ["Mandrake", "Moose", "23"], ["Lisa", "Marie", "91"], ) text = "" for line in fields: text = text + string.join(line, " ") + "\n" format = Martel.Rep1( Martel.Group("line", Martel.Word("name", {"type": "first"}) + \ Martel.Spaces() + \ Martel.Word("name", {"type": "last"}) + \ Martel.Spaces() + \ Martel.Integer("age") + \ Martel.AnyEol() )) iterator = format.make_iterator("line") i = 0 for record in iterator.iterateString(text, LAX.LAX()): assert record["name"] == fields[i][:2], (record["name"], fields[i][:2]) assert record["age"] == fields[i][2:3], (record["age"], fields[i][2:3]) i = i + 1 i = 0 for record in iterator.iterateString(text, LAX.LAXAttrs()): assert [x[0] for x in record["name"]] == fields[i][:2], \ ([x[0] for x in record["name"]], fields[i][:2]) assert [x[0] for x in record["age"]] == fields[i][2:3], \ ([x[0] for x in record["age"]], fields[i][2:3]) assert record["name"][0][1]["type"] == "first" assert record["name"][1][1]["type"] == "last" assert record["age"][0][1].keys() == [] i = i + 1
"""Martel definitions for the output files produced by primer3. """ import Martel any_space = Martel.Re("[ ]+") blank_line = Martel.AnyEol() comment_line = Martel.Str("#") + Martel.ToEol() # comments and blank lines in the file comments = Martel.Group("comments", blank_line + comment_line + blank_line + comment_line) # 1 PRODUCT SIZE: 289 product_size = Martel.Group("product_size", Martel.Re("[\d]+")) start_primer = Martel.Group( "start_primer", any_space + Martel.Re("[\d]+") + Martel.Str(" PRODUCT SIZE: ")) primer_start_line = Martel.Group("primer_start_line", start_primer + product_size + Martel.AnyEol()) # a blank line that signifies a new primer is coming up single_primer_line = Martel.Group("single_primer_line", blank_line) # FORWARD PRIMER 1725 20 59.96 55.00 AGGGAAGGGATGCTAGGTGT primer_space = Martel.Str(" " * 5) any_integer = Martel.Re("[\d]+") any_float = Martel.Re("[\d\.]+") sequence = Martel.Re("[GATCN]+")
def Simple(tag, tag_data): return Martel.Group( tag, Martel.Str(tag + " ") + Martel.Group(tag_data, Martel.Re("[^\R]*")) + Martel.AnyEol())
"(?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 ........ ...... ...... ......................................... # FT 12345678 123456 123456 12345678901234567890123456789012345678901
"""Martel format for primersearch output files, """ import Martel blank_line = Martel.AnyEol() # Primer name D1S2660 primer_name = Martel.Group("primer_name", Martel.ToEol()) primer_name_line = Martel.Str("Primer name ") + primer_name # Amplimer 1 amplifier = Martel.Group("amplifier", Martel.Re("[\d]+")) amplimer_line = Martel.Str("Amplimer ") + amplifier + Martel.AnyEol() # Sequence: AC074298 AC074298 # Telomere associated sequence for Arabidopsis thaliana TEL1N # CCGGTTTCTCTGGTTGAAAA hits forward strand at 114 with 0 mismatches # TCACATTCCCAAATGTAGATCG hits reverse strand at [114] with 0 mismatches seq_indent = Martel.Str("\t") sequence_id = Martel.Group("sequence_id", Martel.ToEol()) sequence_descr = Martel.Group("sequence_descr", Martel.ToEol()) sequence_info = sequence_id + sequence_descr forward_strand_info = Martel.Group("forward_strand_info", Martel.ToEol()) reverse_strand_info = Martel.Group("reverse_strand_info", Martel.ToEol()) amplifier_sequence = Martel.Group( "amplifier_sequence", sequence_info + forward_strand_info + reverse_strand_info) amplifier_sequence_lines = seq_indent + Martel.Str("Sequence: ") + \ amplifier_sequence