Mercurial > repos > sjung > bdds
changeset 3:43e4ba4796c1 draft
Uploaded
author | sjung |
---|---|
date | Wed, 24 May 2017 00:35:42 -0400 |
parents | 0ea254c514b7 |
children | 20bbc86eae21 |
files | hint_wrapper.py |
diffstat | 1 files changed, 72 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hint_wrapper.py Wed May 24 00:35:42 2017 -0400 @@ -0,0 +1,72 @@ +#!/usr/bin/python + +import optparse, os, shutil, sys, tempfile, glob, shlex, vcf, pysam, tarfile +from subprocess import * +import subprocess + +CHUNK_SIZE = 2**20 #1mb + +def cleanup_before_exit( tmp_dir ): + if tmp_dir and os.path.exists( tmp_dir ): + shutil.rmtree( tmp_dir ) + +def __main__(): + parser = optparse.OptionParser() + parser.add_option('','--input', dest="inputF", action='store', type="string", default=None, help='') + parser.add_option('','--region', dest="regionF", action='store', type="string", default=None, help='') + parser.add_option( '', '--output', dest='outputF', action='store', type="string", default=None, help='') + parser.add_option( '', '--out-dir', dest='output_dir', action='store', type="string", default=None, help='If specified, the output directory for extra files.' ) + + (options, args) = parser.parse_args() + + if not os.path.exists(options.output_dir): + os.mkdir(options.output_dir) + input_dir = "%s/input" % options.output_dir + output_dir = "%s/output" % options.output_dir + config_dir = "%s/config" % options.output_dir + + if not os.path.exists(output_dir): + os.mkdir(input_dir) + os.mkdir(output_dir) + os.mkdir(config_dir) + # region input file + linked_bed_name = "%s/regions.bed" % input_dir + os.symlink(options.regionF, linked_bed_name) + linked_bam_name="%s/sample.bam" % input_dir + os.symlink(options.inputF, linked_bam_name) + pysam.index(linked_bam_name) + + input_config = open("%s/input.txt" % config_dir, 'w') + input_config.write("name\ttype\tfile\tdata\tgroup\n") + input_config.write("HS2\tregions\t%s\tHS\tDU_K562_HINT\n" % linked_bed_name) + input_config.write("DNase\treads\t%s\tDNASE\tDU_K562_HINT\n" % linked_bam_name) + input_config.close() + + hint_cmd = "rgt-hint --output-location %s/ %s/input.txt" % (output_dir, config_dir) + print "hint cmd:%s" % hint_cmd + stdout = tempfile.NamedTemporaryFile( prefix="hint-stdout-", dir=options.output_dir) + stderr = tempfile.NamedTemporaryFile( prefix="hint-stderr-", dir=options.output_dir) + proc = subprocess.Popen( args=hint_cmd, stdout=stdout, stderr=stderr, shell=True, cwd=options.output_dir ) + return_code = proc.wait() + + if return_code: + stderr_target = sys.stderr + else: + stderr_target = sys.stdout + stderr.flush() + stderr.seek(0) + while True: + chunk = stderr.read( CHUNK_SIZE ) + if chunk: + stderr_target.write( chunk ) + else: + break + stderr.close() + stdout.close() + + # copy files to final output locations + shutil.copy('%s/DU_K562_HINT.bed' % output_dir, options.outputF) + cleanup_before_exit( options.output_dir ) + +if __name__=="__main__": __main__() +