#!/usr/bin/env python
#
# Copyright John Reid 2012
#

"""
Parses a motif file and creates a reStructuredText file with the information and logos.
"""

import logging
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
import os, sys, stempy
from stempy.meme_parse import do_parse_and_extract
from optparse import OptionParser
  
def print_heading(out, heading, underline):
    print >>out, heading
    print >>out, underline * len(heading.strip())
    print >>out

parser = OptionParser()
parser.add_option(
    "-o",
    "--output-dir",
    default='.',
    help="Output results to directory: DIR",
    metavar="DIR"
)
options, args = parser.parse_args()
stempy.ensure_dir_exists(options.output_dir)



motifs_filename = args[0]
extracted = do_parse_and_extract(open(motifs_filename).read())
out_filename = os.path.join(options.output_dir, 'motifs.rst')
with open(out_filename, 'w') as out:
    logging.info('File: %s', motifs_filename)
    print_heading(out, 'Motifs', '-')
    print >>out, 'Filename = %s\n' % motifs_filename
    print >>out, 'Alphabet = %s\n' % extracted.alphabet
    print >>out, 'Background frequencies = %s\n' % extracted.back_freqs
    print >>out, 'Strands = %s\n' % ' '.join(extracted.strands)
    for i, motif in enumerate(extracted.motifs):
        logging.info('Motif %2d: %s', i, motif.name)
        print_heading(out, '%d: %s%s' % (i, motif.name, motif.altname and ' (%s)' % motif.altname or ''), '-')
        
        if motif.letter_probs:
            # print_heading(out, 'Letter probabilities', '~')
            print >>out, 'w = %d; ' % motif.letter_probs.w
            print >>out, '# sites = %d; ' % motif.letter_probs.nsites
            if None != motif.letter_probs.E:
                print >>out, 'E = %f; ' % motif.letter_probs.E
            logo_tag = 'motif-%s' % motif.name
            stempy.logo(motif.letter_probs.values, logo_tag, d=options.output_dir, make_png=True, make_eps=False, write_title=False, show_fineprint=False)
            print >>out, '\n.. image:: logo-%s.png' % logo_tag
            print >>out
        

