Mercurial > repos > crs4 > edena
diff edena_ass_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_ass_wrapper.py Mon Sep 09 05:44:31 2013 -0400 @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +""" +Edena (assembling) +version 0.2.1 (andrea.pinna@crs4.it) +""" + +import optparse +import shutil +import subprocess +import sys + +def __main__(): + # load arguments + print 'Parsing Edena (assembling) input options...' + parser = optparse.OptionParser(description='Edena assembly') + parser.add_option('--ovl_input', dest='ovl_input', help='') + parser.add_option('--overlapCutoff', dest='overlapCutoff', type='int', help='') + parser.add_option('--cc', action="store_true", dest='cc', help='') + parser.add_option('--discardNonUsable', action="store_true", dest='discardNonUsable', help='') + parser.add_option('--minContigSize', dest='minContigSize', type='int', help='') + parser.add_option('--minCoverage', dest='minCoverage', type='float', help='') + parser.add_option('--trim', dest='trim', type='int', help='') + parser.add_option('--peHorizon', dest='peHorizon', type='int', help='') + parser.add_option('--covStats', dest='covStats', help='') + parser.add_option('--out_contigs_cov', dest='out_contigs_cov', help='') + parser.add_option('--out_contigs_fasta', dest='out_contigs_fasta', help='') + parser.add_option('--out_contigs_lay', dest='out_contigs_lay', help='') + parser.add_option('--out_log_txt', dest='out_log_txt', help='') + parser.add_option('--out_nodesInfo', dest='out_nodesInfo', help='') + parser.add_option('--out_nodesPosition', dest='out_nodesPosition', help='') + parser.add_option('--logfile', dest='logfile', help='logfile') + (options, args) = parser.parse_args() + if len(args) > 0: + parser.error('Wrong number of arguments') + + # build Edena (assembling) command to be executed + ovl_input = '-e %s' % (options.ovl_input) + if options.overlapCutoff is not None: + overlapCutoff = '-m %d' % (options.overlapCutoff) + else: + overlapCutoff = '' + if options.cc: + cc = '-cc yes' + else: + cc = '-cc no' + if options.discardNonUsable: + discardNonUsable = '-discardNonUsable yes' + else: + discardNonUsable = '-discardNonUsable no' + if options.minContigSize is not None: + minContigSize = '-c %d' % (options.minContigSize) + else: + minContigSize = '' + if options.minCoverage is not None: + minCoverage = '-minCoverage %s' % (options.minCoverage) + else: + minCoverage = '' + if options.trim is not None: + trim = '-trim %d' % (options.trim) + else: + trim = '' + if options.peHorizon is not None: + peHorizon = '-peHorizon %d' % (options.peHorizon) + else: + peHorizon = '' + covStats = options.covStats + out_contigs_cov = options.out_contigs_cov + out_contigs_fasta = options.out_contigs_fasta + out_contigs_lay = options.out_contigs_lay + out_log_txt = options.out_log_txt + out_nodesInfo = options.out_nodesInfo + out_nodesPosition = options.out_nodesPosition + logfile = options.logfile + + # Build Edena (assembling) command + cmd1 = '%s %s %s %s %s %s %s %s' % (ovl_input, overlapCutoff, cc, discardNonUsable, minContigSize, minCoverage, trim, peHorizon) + cmd2 = 'edena %s' % ( cmd1 ) + print '\nEdena (assembling) command to be executed: \n %s' % ( cmd2 ) + + # Execution of Edena + print 'Executing Edena (assembling)...' + if logfile: + log = open(logfile, 'w') + else: + log = sys.stdout + try: + subprocess.check_call(cmd2, stdout=log, stderr=subprocess.STDOUT, shell=True) # need to redirect stderr because edena writes some logging info there (e.g. "Condensing overlaps graph...") + finally: + if log != sys.stdout: + log.close() + print 'Edena (assembling) executed!' + + shutil.move("covStats", covStats) + shutil.move("out_contigs.cov", out_contigs_cov) + shutil.move("out_contigs.fasta", out_contigs_fasta) + shutil.move("out_contigs.lay", out_contigs_lay) + shutil.move("out_log.txt", out_log_txt) + shutil.move("out_nodesInfo", out_nodesInfo) + shutil.move("out_nodesPosition", out_nodesPosition) + + +if __name__ == "__main__": + __main__()