6 def main(cmdline=None):
7 #filename = '/woldlab/castor/home/kfisher/ChIA/AliNodes/DNase4/Wellington/PP_DE_analysis/Consolidated_Wellington_promoters_3xUp_10FPKM.cyteConnected_myocyteFootprints.20rad.MEME2_maxw25/meme.txt'
10 parser = make_parser()
11 args = parser.parse_args(cmdline)
13 if not os.path.isdir(args.output):
16 for filename in args.filenames:
17 with open(filename, 'rt') as instream:
18 version = find_meme_version(instream)
21 for motif in find_meme_letter_probabilities(instream):
23 output_name = 'motif_%d.mot' % (motif_counter,)
24 output_filename = os.path.join(args.output, output_name)
25 with open(output_filename, 'wt') as outstream:
26 save_meme_letter_probabilities(
27 outstream, version, motif_counter, motif)
31 parser = argparse.ArgumentParser('Search through a MEME report for letter-probability matrices')
32 parser.add_argument('-o', '--output', default='.',
33 help="output directory")
34 parser.add_argument('filenames', nargs='*',
35 help="name of MEME output files to search through")
38 def find_meme_version(instream, limit=20):
39 """Read through the first few meme header lines looking for the MEME version
41 version_pattern = re.compile("MEME version (?P<ver>[\d.]+)")
43 for i, line in enumerate(instream):
47 match = version_pattern.match(line)
49 return match.group('ver')
52 def find_meme_letter_probabilities(instream):
53 """Look through a meme output report and find the letter-probability matrix
56 instream (input stream): file-like object to read from
59 list of strings for a MEME letter-probabilities matrix
61 header = "letter-probability matrix: alength=(?P<letters>[ \d]+) w=(?P<bases>[ \d]+)"
62 letter_pattern = re.compile(header)
68 match = letter_pattern.match(line)
73 rows = int(match.group('bases'))
81 def save_meme_letter_probabilities(outstream, version, motif_index, motif):
82 """Write MEME mot formatted contents to outstream
85 outstream (output stream): file-like object to write to
86 version (str): motif version number
87 motif_index (int): what motif number we're on
88 motif (list of strings): motif letter-probabilities from meme
91 report = """MEME version {version}
97 Background etter frequencies (from uniform background):
98 A 0.25000 C 0.25000 G 0.25000 T 0.25000
103 """.format(version=version,
105 matrix=os.linesep.join(motif))
106 outstream.write(report)
109 if __name__ == "__main__":