Mercurial > repos > slegras > fimo_4_10_1_4
changeset 2:7f0722c87b04 draft default tip
Uploaded
| author | slegras |
|---|---|
| date | Mon, 27 Jul 2015 05:34:34 -0400 |
| parents | 17fe887fed40 |
| children | |
| files | fimo.xml fimo_wrapper.py |
| diffstat | 2 files changed, 74 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/fimo.xml Mon Jul 27 03:34:57 2015 -0400 +++ b/fimo.xml Mon Jul 27 05:34:34 2015 -0400 @@ -1,4 +1,4 @@ -<tool id="meme_fimo" name="FIMO"> +<tool id="meme_fimo" name="FIMO" version="4.10.1.4"> <requirements><requirement type="package" version="4.10.1.4">meme</requirement></requirements> <description>- Find Individual Motif Occurrences</description> <command interpreter="python">fimo_wrapper.py 'fimo --o "${$html_outfile.files_path}" --verbosity "1"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fimo_wrapper.py Mon Jul 27 05:34:34 2015 -0400 @@ -0,0 +1,73 @@ +#!/usr/bin/env python +#Dan Blankenberg + +""" +Read text output from FIMO and create an interval file. +""" +import sys, tempfile, subprocess, shutil, os +from galaxy_utils.sequence.transform import DNA_reverse_complement + +buffsize = 1048576 + +def stop_err( msg ): + sys.stderr.write( msg ) + sys.exit() + +def main(): + assert len( sys.argv ) == 8, "Wrong number of arguments" + sys.argv.pop(0) + fimo_cmd = sys.argv.pop(0) + html_path = sys.argv.pop(0) + html_out = sys.argv.pop(0) + interval_out = sys.argv.pop(0) + txt_out = sys.argv.pop(0) + xml_out = sys.argv.pop(0) + gff_out = sys.argv.pop(0) + + #run fimo + try: + tmp_stderr = tempfile.NamedTemporaryFile() + #tmp_stderr = open( tmp_filename, 'wb' ) + proc = subprocess.Popen( args=fimo_cmd, shell=True, stderr=tmp_stderr ) + returncode = proc.wait() + #tmp_stderr.close() + # get stderr, allowing for case where it's very large + #tmp_stderr = open( tmp, 'rb' ) + tmp_stderr.seek(0) + stderr = '' + try: + while True: + stderr += tmp_stderr.read( buffsize ) + if not stderr or len( stderr ) % buffsize != 0: + break + except OverflowError: + pass + + if returncode != 0: + raise Exception, stderr + except Exception, e: + raise Exception, 'Error running FIMO:\n' + str( e ) + + shutil.move( os.path.join( html_path, 'fimo.txt' ), txt_out ) + shutil.move( os.path.join( html_path, 'fimo.gff' ), gff_out ) + shutil.move( os.path.join( html_path, 'fimo.xml' ), xml_out ) + shutil.move( os.path.join( html_path, 'fimo.html' ), html_out ) + + out_file = open( interval_out, 'wb' ) + out_file.write( "#%s\n" % "\t".join( ( "chr", "start", "end", "pattern name", "score", "strand", "matched sequence", "p-value", "q-value" ) ) ) + for line in open( txt_out ): + if line.startswith( '#' ): continue + fields = line.rstrip( "\n\r" ).split( "\t" ) + start, end = int( fields[2] ), int( fields[3] ) + sequence = fields[7] + if start > end: + start, end = end, start #flip start and end, and set strand + strand = "-" + sequence = DNA_reverse_complement( sequence ) #we want sequences relative to strand; FIMO always provides + stranded sequence + else: + strand = "+" + start -= 1 #make 0-based start position + out_file.write( "%s\n" % "\t".join( [ fields[1], str( start ), str( end ), fields[0], fields[4], strand, sequence, fields[5], fields[6] ] ) ) + out_file.close() + +if __name__ == "__main__": main()
