Mercurial > repos > crs4 > edena
comparison edena_ovl_wrapper.py @ 1:cd6cc6d76708 draft
Simplify passing repeated params to Python script.
Add more info to help sections.
author | crs4 |
---|---|
date | Fri, 18 Oct 2013 14:09:11 -0400 |
parents | 60609a9cef3b |
children |
comparison
equal
deleted
inserted
replaced
0:60609a9cef3b | 1:cd6cc6d76708 |
---|---|
11 | 11 |
12 def __main__(): | 12 def __main__(): |
13 # load arguments | 13 # load arguments |
14 print 'Parsing Edena (overlapping) input options...' | 14 print 'Parsing Edena (overlapping) input options...' |
15 parser = optparse.OptionParser() | 15 parser = optparse.OptionParser() |
16 parser.add_option('--unpaired_input', dest='unpaired_input', help='') | 16 parser.add_option('--unpaired_input', action='append', dest='unpaired_input', help='') |
17 parser.add_option('--dr_pair_1', dest='dr_pair_1', help='') | 17 parser.add_option('--dr_pair_1', action='append', dest='dr_pair_1', help='') |
18 parser.add_option('--dr_pair_2', dest='dr_pair_2', help='') | 18 parser.add_option('--dr_pair_2', action='append', dest='dr_pair_2', help='') |
19 parser.add_option('--rd_pair_1', dest='rd_pair_1', help='') | 19 parser.add_option('--rd_pair_1', action='append', dest='rd_pair_1', help='') |
20 parser.add_option('--rd_pair_2', dest='rd_pair_2', help='') | 20 parser.add_option('--rd_pair_2', action='append', dest='rd_pair_2', help='') |
21 parser.add_option('--nThreads', dest='nThreads', type='int', help='') | 21 parser.add_option('--nThreads', dest='nThreads', type='int', help='') |
22 parser.add_option('--minOlap', dest='minOlap', type='int', help='') | 22 parser.add_option('--minOlap', dest='minOlap', type='int', help='') |
23 parser.add_option('--readsTruncation', dest='readsTruncation', type='int', help='') | 23 parser.add_option('--readsTruncation', dest='readsTruncation', type='int', help='') |
24 parser.add_option('--output', dest='output', help='') | 24 parser.add_option('--output', dest='output', help='') |
25 parser.add_option('--logfile', dest='logfile', help='') | 25 parser.add_option('--logfile', dest='logfile', help='') |
26 (options, args) = parser.parse_args() | 26 (options, args) = parser.parse_args() |
27 if len(args) > 0: | 27 if len(args) > 0: |
28 parser.error('Wrong number of arguments') | 28 parser.error('Wrong number of arguments') |
29 | 29 |
30 # build Edena (overlapping) command to be executed | 30 # build Edena (overlapping) command to be executed |
31 # unpaired input(s) | 31 # unpaired input(s) |
32 if options.unpaired_input: | 32 if options.unpaired_input: |
33 unpaired_inputs = options.unpaired_input.split('+')[0:-1] | |
34 unpaired_input = '-r' | 33 unpaired_input = '-r' |
35 for item in unpaired_inputs: | 34 for item in options.unpaired_input: |
36 unpaired_input += ' %s' % (item) | 35 unpaired_input += ' %s' % (item) |
37 else: | 36 else: |
38 unpaired_input = '' | 37 unpaired_input = '' |
39 # direct-reverse paired-end files | 38 # direct-reverse paired-end files |
40 if options.dr_pair_1 and options.dr_pair_2: | 39 if options.dr_pair_1 and options.dr_pair_2: |
41 dr_pairs_1 = options.dr_pair_1.split('+')[0:-1] | |
42 dr_pairs_2 = options.dr_pair_2.split('+')[0:-1] | |
43 dr_pairs = '-DRpairs' | 40 dr_pairs = '-DRpairs' |
44 for i in xrange(len(dr_pairs_1)): | 41 for i in range(len(options.dr_pair_1)): |
45 dr_pairs += ' %s %s' % (dr_pairs_1[i], dr_pairs_2[i]) | 42 dr_pairs += ' %s %s' % (options.dr_pair_1[i], options.dr_pair_2[i]) |
46 else: | 43 else: |
47 dr_pairs = '' | 44 dr_pairs = '' |
48 # reverse-direct paired-end files | 45 # reverse-direct paired-end files |
49 if options.rd_pair_1 and options.rd_pair_2: | 46 if options.rd_pair_1 and options.rd_pair_2: |
50 rd_pairs_1 = options.rd_pair_1.split('+')[0:-1] | |
51 rd_pairs_2 = options.rd_pair_2.split('+')[0:-1] | |
52 rd_pairs = '-RDpairs' | 47 rd_pairs = '-RDpairs' |
53 for i in xrange(len(rd_pairs_1)): | 48 for i in range(len(options.rd_pair_1)): |
54 rd_pairs += ' %s %s' % (rd_pairs_1[i], rd_pairs_2[i]) | 49 rd_pairs += ' %s %s' % (options.rd_pair_1[i], options.rd_pair_2[i]) |
55 else: | 50 else: |
56 rd_pairs = '' | 51 rd_pairs = '' |
57 # nThreads | 52 # nThreads |
58 if options.nThreads is not None: | 53 nThreads = '-nThreads %d' % (options.nThreads) if options.nThreads is not None else '' |
59 nThreads = '-nThreads %d' % (options.nThreads) | |
60 else: | |
61 nThreads = '' | |
62 # minimum overlap | 54 # minimum overlap |
63 if options.minOlap is not None: | 55 minOlap = '-M %d' % (options.minOlap) if options.minOlap is not None else '' |
64 minOlap = '-M %d' % (options.minOlap) | |
65 else: | |
66 minOlap = '' | |
67 # 3' end reads truncation | 56 # 3' end reads truncation |
68 if options.readsTruncation is not None: | 57 readsTruncation = '-t %d' % (options.readsTruncation) if options.readsTruncation is not None else '' |
69 readsTruncation = '-t %d' % (options.readsTruncation) | |
70 else: | |
71 readsTruncation = '' | |
72 # output file(s) | 58 # output file(s) |
73 output = options.output | 59 output = options.output |
74 logfile = options.logfile | 60 logfile = options.logfile |
75 | 61 |
76 # Build Edena (overlapping) command | 62 # Build Edena (overlapping) command |
77 cmd = 'edena %s %s %s %s %s %s -p galaxy_output' % (unpaired_input, dr_pairs, rd_pairs, nThreads, minOlap, readsTruncation) | 63 cmd = 'edena %s %s %s %s %s %s -p galaxy_output' % (unpaired_input, dr_pairs, rd_pairs, nThreads, minOlap, readsTruncation) |
78 print '\nEdena (overlapping) command to be executed: \n %s' % ( cmd ) | 64 print '\nEdena (overlapping) command to be executed:\n %s' % (cmd) |
79 | 65 |
80 # Execution of Edena | 66 # Execution of Edena |
81 print 'Executing Edena (overlapping)...' | 67 print 'Executing Edena (overlapping)...' |
82 if logfile: | 68 log = open(logfile, 'w') if logfile else sys.stdout |
83 log = open(logfile, 'w') | |
84 else: | |
85 log = sys.stdout | |
86 try: | 69 try: |
87 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...") | 70 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...") |
88 finally: | 71 finally: |
89 if log != sys.stdout: | 72 if log != sys.stdout: |
90 log.close() | 73 log.close() |
91 print 'Edena (overlapping) executed!' | 74 print 'Edena (overlapping) executed!' |
92 | 75 |
93 shutil.move( "galaxy_output.ovl", output) | 76 shutil.move('galaxy_output.ovl', output) |
94 | 77 |
95 | 78 |
96 if __name__ == "__main__": | 79 if __name__ == "__main__": |
97 __main__() | 80 __main__() |