annotate bismark_wrapper/bismark_wrapper.py @ 0:550ce7d37d4b draft

Uploaded
author bgruening
date Thu, 11 Oct 2012 11:53:20 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
1 #!/usr/bin/env python
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
2
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
3 import argparse, os, shutil, subprocess, sys, tempfile, fileinput
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
4 import fileinput
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
5 from glob import glob
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
6
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
7 def stop_err( msg ):
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
8 sys.stderr.write( "%s\n" % msg )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
9 sys.exit()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
10
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
11 def __main__():
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
12 #Parse Command Line
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
13 parser = argparse.ArgumentParser(description='Wrapper for the bismark bisulfite mapper.')
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
14 parser.add_argument( '-p', '--num-threads', dest='num_threads',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
15 type=int, default=4, help='Use this many threads to align reads. The default is 4.' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
16
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
17 # input options
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
18 parser.add_argument( '--own-file', dest='own_file', help='' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
19 parser.add_argument( '-D', '--indexes-path', dest='index_path', help='Indexes directory; location of .ebwt and .fa files.' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
20 parser.add_argument( '-O', '--output', dest='output' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
21 parser.add_argument( '--output-report-file', dest='output_report_file' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
22 parser.add_argument( '--suppress-header', dest='suppress_header', action="store_true" )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
23
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
24 parser.add_argument( '--mate-paired', dest='mate_paired', action='store_true', help='Reads are mate-paired', default=False)
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
25
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
26
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
27 parser.add_argument( '-1', '--mate1', dest='mate1',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
28 help='The forward reads file in Sanger FASTQ or FASTA format.' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
29 parser.add_argument( '-2', '--mate2', dest='mate2',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
30 help='The reverse reads file in Sanger FASTQ or FASTA format.' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
31
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
32 parser.add_argument( '--output-unmapped-reads', dest='output_unmapped_reads',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
33 help='Additional output file with unmapped reads (single-end).' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
34 parser.add_argument( '--output-unmapped-reads-l', dest='output_unmapped_reads_l',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
35 help='File name for unmapped reads (left, paired-end).' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
36 parser.add_argument( '--output-unmapped-reads-r', dest='output_unmapped_reads_r',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
37 help='File name for unmapped reads (right, paired-end).' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
38
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
39
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
40 parser.add_argument( '--output-suppressed-reads', dest='output_suppressed_reads',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
41 help='Additional output file with suppressed reads (single-end).' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
42 parser.add_argument( '--output-suppressed-reads-l', dest='output_suppressed_reads_l',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
43 help='File name for suppressed reads (left, paired-end).' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
44 parser.add_argument( '--output-suppressed-reads-r', dest='output_suppressed_reads_r',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
45 help='File name for suppressed reads (right, paired-end).' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
46
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
47
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
48 parser.add_argument( '--single-paired', dest='single_paired',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
49 help='The single-end reads file in Sanger FASTQ or FASTA format.' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
50
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
51 parser.add_argument( '--fastq', action='store_true', help='Query filetype is in FASTQ format')
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
52 parser.add_argument( '--fasta', action='store_true', help='Query filetype is in FASTA format')
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
53 parser.add_argument( '--phred64-quals', dest='phred64', action="store_true" )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
54
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
55
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
56 parser.add_argument( '--skip-reads', dest='skip_reads', type=int )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
57 parser.add_argument( '--qupto', type=int)
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
58
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
59
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
60 # paired end options
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
61 parser.add_argument( '-I', '--minins', dest='min_insert' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
62 parser.add_argument( '-X', '--maxins', dest='max_insert' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
63 parser.add_argument( '--no-mixed', dest='no_mixed', action="store_true" )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
64 parser.add_argument( '--no-discordant', dest='no_discordant', action="store_true" )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
65
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
66 #parse general options
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
67 # default 20
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
68 parser.add_argument( '--seed-len', dest='seed_len', type=int)
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
69 # default 15
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
70 parser.add_argument( '--seed-extention-attempts', dest='seed_extention_attempts', type=int )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
71 # default 0
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
72 parser.add_argument( '--seed-mismatches', dest='seed_mismatches', type=int )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
73 # default 2
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
74 parser.add_argument( '--max-reseed', dest='max_reseed', type=int )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
75 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
76 # default 70
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
77 parser.add_argument( '--maqerr', dest='maqerr', type=int )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
78 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
79
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
80 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
81 The number of megabytes of memory a given thread is given to store path
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
82 descriptors in --best mode. Best-first search must keep track of many paths
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
83 at once to ensure it is always extending the path with the lowest cumulative
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
84 cost. Bowtie tries to minimize the memory impact of the descriptors, but
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
85 they can still grow very large in some cases. If you receive an error message
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
86 saying that chunk memory has been exhausted in --best mode, try adjusting
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
87 this parameter up to dedicate more memory to the descriptors. Default: 512.
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
88 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
89 parser.add_argument( '--chunkmbs', type=int, default=512 )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
90
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
91 args = parser.parse_args()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
92
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
93 # Create bismark index if necessary.
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
94 index_dir = ""
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
95 if args.own_file:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
96 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
97 Create a temporary index with the offered files from the user.
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
98 Utilizing the script: bismark_genome_preparation
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
99 bismark_genome_preparation --bowtie2 hg19/
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
100 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
101 tmp_index_dir = tempfile.mkdtemp()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
102 index_path = os.path.join( tmp_index_dir, '.'.join( os.path.split( args.own_file )[1].split( '.' )[:-1] ) )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
103 try:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
104 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
105 Create a hard link pointing to args.own_file named 'index_path'.fa.
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
106 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
107 os.symlink( args.own_file, index_path + '.fa' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
108 except Exception, e:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
109 if os.path.exists( tmp_index_dir ):
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
110 shutil.rmtree( tmp_index_dir )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
111 stop_err( 'Error in linking the reference database.\n' + str( e ) )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
112 # bismark_genome_preparation needs the complete path to the folder in which the database is stored
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
113 cmd_index = 'bismark_genome_preparation --bowtie2 %s ' % ( tmp_index_dir )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
114 try:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
115 tmp = tempfile.NamedTemporaryFile( dir=tmp_index_dir ).name
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
116 tmp_stderr = open( tmp, 'wb' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
117 proc = subprocess.Popen( args=cmd_index, shell=True, cwd=tmp_index_dir, stdout=open(os.devnull, 'wb'), stderr=tmp_stderr.fileno() )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
118 returncode = proc.wait()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
119 tmp_stderr.close()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
120 # get stderr, allowing for case where it's very large
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
121 tmp_stderr = open( tmp, 'rb' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
122 stderr = ''
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
123 buffsize = 1048576
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
124 try:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
125 while True:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
126 stderr += tmp_stderr.read( buffsize )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
127 if not stderr or len( stderr ) % buffsize != 0:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
128 break
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
129 except OverflowError:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
130 pass
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
131 tmp_stderr.close()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
132 if returncode != 0:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
133 raise Exception, stderr
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
134 except Exception, e:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
135 if os.path.exists( tmp_index_dir ):
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
136 shutil.rmtree( tmp_index_dir )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
137 stop_err( 'Error indexing reference sequence\n' + str( e ) )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
138 index_dir = tmp_index_dir
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
139 else:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
140 index_dir = args.index_path
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
141
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
142 # Build bismark command
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
143 tmp_bismark_dir = tempfile.mkdtemp()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
144 output_dir = os.path.join( tmp_bismark_dir, 'results')
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
145 cmd = 'bismark -p %(num_threads)s %(args)s --temp_dir %(tmp_bismark_dir)s -o %(output_dir)s --quiet --bowtie2 %(genome_folder)s %(reads)s'
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
146
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
147 arguments = {
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
148 'genome_folder': index_dir,
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
149 'num_threads': args.num_threads,
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
150 'args': '',
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
151 'tmp_bismark_dir': tmp_bismark_dir,
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
152 'output_dir': output_dir,
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
153 }
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
154
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
155 additional_opts = ''
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
156 # Set up the reads
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
157 if args.mate_paired:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
158 # paired-end reads library
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
159 reads = '-1 %s ' % ( args.mate1 )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
160 reads += ' -2 %s ' % ( args.mate2 )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
161 additional_opts += ' -I %s -X %s ' % (args.min_insert, args.max_insert)
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
162 else:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
163 # single paired reads library
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
164 reads = ' %s ' % ( args.single_paired )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
165
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
166 # alignment options
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
167 if args.seed_mismatches:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
168 additional_opts += ' -N %s ' % args.seed_mismatches
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
169 if args.seed_len:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
170 additional_opts += ' -L %s ' % args.seed_len
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
171 if args.seed_extention_attempts:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
172 additional_opts += ' -D %s ' % args.seed_extention_attempts
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
173 if args.max_reseed:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
174 additional_opts += ' -R %s ' % args.max_reseed
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
175 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
176 if args.maqerr:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
177 additional_opts += ' --maqerr %s ' % args.maqerr
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
178 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
179 if args.no_discordant:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
180 additional_opts += ' --no-discordant '
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
181 if args.no_mixed:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
182 additional_opts += ' --no-mixed '
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
183 if args.skip_reads:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
184 additional_opts += ' --skip %s ' % args.skip_reads
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
185 if args.qupto:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
186 additional_opts += ' --qupto %s ' % args.qupto
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
187 if args.phred64:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
188 additional_opts += ' --phred64-quals '
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
189 if args.suppress_header:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
190 additional_opts += ' --sam-no-hd '
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
191 if args.output_unmapped_reads or ( args.output_unmapped_reads_l and args.output_unmapped_reads_r):
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
192 additional_opts += ' --un '
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
193 if args.output_suppressed_reads or ( args.output_suppressed_reads_l and args.output_suppressed_reads_r):
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
194 additional_opts += ' --ambiguous '
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
195
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
196 arguments.update( {'args': additional_opts, 'reads': reads} )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
197
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
198 # Final command:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
199 cmd = cmd % arguments
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
200
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
201 # Run
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
202 try:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
203 tmp_out = tempfile.NamedTemporaryFile().name
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
204 tmp_stdout = open( tmp_out, 'wb' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
205 tmp_err = tempfile.NamedTemporaryFile().name
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
206 tmp_stderr = open( tmp_err, 'wb' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
207 proc = subprocess.Popen( args=cmd, shell=True, cwd=".", stdout=tmp_stdout, stderr=tmp_stderr )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
208 returncode = proc.wait()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
209 tmp_stderr.close()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
210 # get stderr, allowing for case where it's very large
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
211 tmp_stderr = open( tmp_err, 'rb' )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
212 stderr = ''
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
213 buffsize = 1048576
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
214 try:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
215 while True:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
216 stderr += tmp_stderr.read( buffsize )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
217 if not stderr or len( stderr ) % buffsize != 0:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
218 break
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
219 except OverflowError:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
220 pass
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
221 tmp_stdout.close()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
222 tmp_stderr.close()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
223 if returncode != 0:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
224 raise Exception, stderr
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
225
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
226 # TODO: look for errors in program output.
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
227 except Exception, e:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
228 stop_err( 'Error in bismark:\n' + str( e ) )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
229
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
230
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
231 # collect and copy output files
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
232 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
233 if args.output_report_file:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
234 output_report_file = open(args.output_report_file, 'w+')
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
235 for line in fileinput.input(glob( os.path.join( output_dir, '*.txt') )):
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
236 output_report_file.write(line)
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
237 output_report_file.close()
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
238 """
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
239
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
240 if args.output_suppressed_reads:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
241 shutil.move( glob(os.path.join( output_dir, '*ambiguous_reads.txt'))[0], args.output_suppressed_reads )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
242 if args.output_suppressed_reads_l:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
243 shutil.move( glob(os.path.join( output_dir, '*ambiguous_reads_1.txt'))[0], args.output_suppressed_reads_l )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
244 if args.output_suppressed_reads_r:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
245 shutil.move( glob(os.path.join( output_dir, '*ambiguous_reads_2.txt'))[0], args.output_suppressed_reads_r )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
246
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
247 if args.output_unmapped_reads:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
248 shutil.move( glob(os.path.join( output_dir, '*unmapped_reads.txt'))[0], args.output_unmapped_reads )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
249 if args.output_unmapped_reads_l:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
250 shutil.move( glob(os.path.join( output_dir, '*unmapped_reads_1.txt'))[0], args.output_unmapped_reads_l )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
251 if args.output_unmapped_reads_r:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
252 shutil.move( glob(os.path.join( output_dir, '*unmapped_reads_2.txt'))[0], args.output_unmapped_reads_r )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
253
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
254 shutil.move( glob( os.path.join( output_dir, '*.sam'))[0] , args.output)
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
255
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
256 # Clean up temp dirs
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
257 if args.own_file:
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
258 if os.path.exists( tmp_index_dir ):
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
259 shutil.rmtree( tmp_index_dir )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
260 if os.path.exists( tmp_bismark_dir ):
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
261 shutil.rmtree( tmp_bismark_dir )
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
262
550ce7d37d4b Uploaded
bgruening
parents:
diff changeset
263 if __name__=="__main__": __main__()