Mercurial > repos > crs4 > edena
diff edena_ovl_wrapper.py @ 0:60609a9cef3b draft
Uploaded
author | crs4 |
---|---|
date | Mon, 09 Sep 2013 05:44:31 -0400 |
parents | |
children | cd6cc6d76708 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/edena_ovl_wrapper.py Mon Sep 09 05:44:31 2013 -0400 @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +""" +Edena (overlapping) +version 0.2.1 (andrea.pinna@crs4.it) +""" + +import optparse +import shutil +import subprocess +import sys + +def __main__(): + # load arguments + print 'Parsing Edena (overlapping) input options...' + parser = optparse.OptionParser() + parser.add_option('--unpaired_input', dest='unpaired_input', help='') + parser.add_option('--dr_pair_1', dest='dr_pair_1', help='') + parser.add_option('--dr_pair_2', dest='dr_pair_2', help='') + parser.add_option('--rd_pair_1', dest='rd_pair_1', help='') + parser.add_option('--rd_pair_2', dest='rd_pair_2', help='') + parser.add_option('--nThreads', dest='nThreads', type='int', help='') + parser.add_option('--minOlap', dest='minOlap', type='int', help='') + parser.add_option('--readsTruncation', dest='readsTruncation', type='int', help='') + parser.add_option('--output', dest='output', help='') + parser.add_option('--logfile', dest='logfile', help='') + (options, args) = parser.parse_args() + if len(args) > 0: + parser.error('Wrong number of arguments') + + # build Edena (overlapping) command to be executed + # unpaired input(s) + if options.unpaired_input: + unpaired_inputs = options.unpaired_input.split('+')[0:-1] + unpaired_input = '-r' + for item in unpaired_inputs: + unpaired_input += ' %s' % (item) + else: + unpaired_input = '' + # direct-reverse paired-end files + if options.dr_pair_1 and options.dr_pair_2: + dr_pairs_1 = options.dr_pair_1.split('+')[0:-1] + dr_pairs_2 = options.dr_pair_2.split('+')[0:-1] + dr_pairs = '-DRpairs' + for i in xrange(len(dr_pairs_1)): + dr_pairs += ' %s %s' % (dr_pairs_1[i], dr_pairs_2[i]) + else: + dr_pairs = '' + # reverse-direct paired-end files + if options.rd_pair_1 and options.rd_pair_2: + rd_pairs_1 = options.rd_pair_1.split('+')[0:-1] + rd_pairs_2 = options.rd_pair_2.split('+')[0:-1] + rd_pairs = '-RDpairs' + for i in xrange(len(rd_pairs_1)): + rd_pairs += ' %s %s' % (rd_pairs_1[i], rd_pairs_2[i]) + else: + rd_pairs = '' + # nThreads + if options.nThreads is not None: + nThreads = '-nThreads %d' % (options.nThreads) + else: + nThreads = '' + # minimum overlap + if options.minOlap is not None: + minOlap = '-M %d' % (options.minOlap) + else: + minOlap = '' + # 3' end reads truncation + if options.readsTruncation is not None: + readsTruncation = '-t %d' % (options.readsTruncation) + else: + readsTruncation = '' + # output file(s) + output = options.output + logfile = options.logfile + + # Build Edena (overlapping) command + cmd = 'edena %s %s %s %s %s %s -p galaxy_output' % (unpaired_input, dr_pairs, rd_pairs, nThreads, minOlap, readsTruncation) + print '\nEdena (overlapping) command to be executed: \n %s' % ( cmd ) + + # Execution of Edena + print 'Executing Edena (overlapping)...' + if logfile: + log = open(logfile, 'w') + else: + log = sys.stdout + try: + subprocess.check_call(cmd, stdout=log, stderr=subprocess.STDOUT, shell=True) # need to redirect stderr because edena writes some logging info there (e.g. "Computing overlaps >=30...") + finally: + if log != sys.stdout: + log.close() + print 'Edena (overlapping) executed!' + + shutil.move( "galaxy_output.ovl", output) + + +if __name__ == "__main__": + __main__()