annotate extract_genomic_dna.py @ 8:32c6057529a4 draft

Uploaded
author greg
date Fri, 15 Jan 2016 08:43:41 -0500
parents ee00b3c68801
children 8cc00c5cf33e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
1 #!/usr/bin/env python
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
2 import argparse
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
3 import os
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
4 import subprocess
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
5 import sys
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
6 import tempfile
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
7
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
8 import bx.seq.nib
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
9 import bx.seq.twobit
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
10 from bx.intervals.io import Header, Comment
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
11 from galaxy.datatypes.util import gff_util
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
12 from galaxy.tools.util.galaxyops import parse_cols_arg
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
13
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
14
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
15 def convert_to_twobit(reference_genome):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
16 """
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
17 Create 2bit file history fasta dataset.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
18 """
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
19 try:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
20 seq_path = tempfile.NamedTemporaryFile(dir=".").name
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
21 cmd = "faToTwoBit %s %s" % (reference_genome, seq_path)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
22 tmp_name = tempfile.NamedTemporaryFile(dir=".").name
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
23 tmp_stderr = open(tmp_name, 'wb')
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
24 proc = subprocess.Popen(args=cmd, shell=True, stderr=tmp_stderr.fileno())
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
25 returncode = proc.wait()
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
26 tmp_stderr.close()
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
27 if returncode != 0:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
28 # Get stderr, allowing for case where it's very large.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
29 tmp_stderr = open(tmp_name, 'rb')
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
30 stderr = ''
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
31 buffsize = 1048576
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
32 try:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
33 while True:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
34 stderr += tmp_stderr.read(buffsize)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
35 if not stderr or len(stderr) % buffsize != 0:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
36 break
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
37 except OverflowError:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
38 pass
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
39 tmp_stderr.close()
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
40 os.remove(tmp_name)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
41 stop_err(stderr)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
42 return seq_path
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
43 except Exception, e:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
44 stop_err('Error running faToTwoBit. ' + str(e))
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
45
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
46
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
47 def get_lines(feature):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
48 # Get feature's line(s).
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
49 if isinstance(feature, gff_util.GFFFeature):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
50 return feature.lines()
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
51 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
52 return [feature.rstrip('\r\n')]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
53
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
54
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
55 def reverse_complement(s):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
56 complement_dna = {"A": "T", "T": "A", "C": "G", "G": "C", "a": "t", "t": "a", "c": "g", "g": "c", "N": "N", "n": "n"}
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
57 reversed_s = []
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
58 for i in s:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
59 reversed_s.append(complement_dna[i])
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
60 reversed_s.reverse()
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
61 return "".join(reversed_s)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
62
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
63
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
64 def stop_err(msg):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
65 sys.stderr.write(msg)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
66 sys.exit(1)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
67
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
68 parser = argparse.ArgumentParser()
3
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
69 parser.add_argument('--input_format', dest='input_format', help="Input dataset format")
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
70 parser.add_argument('--input', dest='input', help="Input dataset")
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
71 parser.add_argument('--genome', dest='genome', help="Input dataset genome build")
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
72 parser.add_argument('--interpret_features', dest='interpret_features', default=None, help="Interpret features if input format is gff")
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
73 parser.add_argument('--columns', dest='columns', help="Columns to use in input file")
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
74 parser.add_argument('--reference_genome_source', dest='reference_genome_source', help="Source of reference genome file")
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
75 parser.add_argument('--reference_genome', dest='reference_genome', help="Reference genome file")
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
76 parser.add_argument('--output_format', dest='output_format', help="Output format")
c46db4f7c869 Uploaded
greg
parents: 1
diff changeset
77 parser.add_argument('--output', dest='output', help="Output dataset")
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
78 args = parser.parse_args()
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
79
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
80 input_is_gff = args.input_format == 'gff'
1
311febbd33d6 Uploaded
greg
parents: 0
diff changeset
81 interpret_features = input_is_gff and args.interpret_features == "yes"
4
6333e08869fc Uploaded
greg
parents: 3
diff changeset
82 if len(args.columns.split(',')) == 5:
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
83 # Bed file.
4
6333e08869fc Uploaded
greg
parents: 3
diff changeset
84 chrom_col, start_col, end_col, strand_col, name_col = parse_cols_arg(args.columns)
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
85 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
86 # Gff file.
4
6333e08869fc Uploaded
greg
parents: 3
diff changeset
87 chrom_col, start_col, end_col, strand_col = parse_cols_arg(args.columns)
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
88 name_col = False
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
89
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
90 if args.reference_genome_source == "history":
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
91 seq_path = convert_to_twobit(args.reference_genome)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
92 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
93 seq_path = args.reference_genome
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
94 seq_dir = os.path.split(seq_path)[0]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
95
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
96 includes_strand_col = strand_col >= 0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
97 strand = None
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
98 nibs = {}
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
99 skipped_lines = 0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
100 first_invalid_line = 0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
101 invalid_lines = []
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
102 warnings = []
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
103 warning = ''
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
104 twobitfile = None
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
105 line_count = 1
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
106 file_iterator = open(args.input)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
107 if interpret_features:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
108 file_iterator = gff_util.GFFReaderWrapper(file_iterator, fix_strand=False)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
109 out = open(args.output, 'wt')
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
110
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
111 for feature in file_iterator:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
112 # Ignore comments, headers.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
113 if isinstance(feature, (Header, Comment)):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
114 line_count += 1
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
115 continue
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
116 name = ""
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
117 if interpret_features:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
118 # Processing features.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
119 gff_util.convert_gff_coords_to_bed(feature)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
120 chrom = feature.chrom
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
121 start = feature.start
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
122 end = feature.end
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
123 strand = feature.strand
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
124 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
125 # Processing lines, either interval or GFF format.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
126 line = feature.rstrip('\r\n')
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
127 if line and not line.startswith("#"):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
128 fields = line.split('\t')
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
129 try:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
130 chrom = fields[chrom_col]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
131 start = int(fields[start_col])
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
132 end = int(fields[end_col])
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
133 if name_col:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
134 name = fields[name_col]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
135 if input_is_gff:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
136 start, end = gff_util.convert_gff_coords_to_bed([start, end])
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
137 if includes_strand_col:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
138 strand = fields[strand_col]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
139 except:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
140 warning = "Invalid chrom, start or end column values. "
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
141 warnings.append(warning)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
142 if not invalid_lines:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
143 invalid_lines = get_lines(feature)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
144 first_invalid_line = line_count
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
145 skipped_lines += len(invalid_lines)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
146 continue
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
147 if start > end:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
148 warning = "Invalid interval, start '%d' > end '%d'. " % (start, end)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
149 warnings.append(warning)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
150 if not invalid_lines:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
151 invalid_lines = get_lines(feature)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
152 first_invalid_line = line_count
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
153 skipped_lines += len(invalid_lines)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
154 continue
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
155 if strand not in ['+', '-']:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
156 strand = '+'
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
157 sequence = ''
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
158 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
159 continue
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
160 # Open sequence file and get sequence for feature/interval.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
161 if os.path.exists("%s/%s.nib" % (seq_dir, chrom)):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
162 if chrom in nibs:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
163 nib = nibs[chrom]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
164 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
165 nibs[chrom] = nib = bx.seq.nib.NibFile(file("%s/%s.nib" % (seq_path, chrom)))
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
166 try:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
167 sequence = nib.get(start, end - start)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
168 except Exception, e:
1
311febbd33d6 Uploaded
greg
parents: 0
diff changeset
169 warning = "Unable to fetch the sequence from '%d' to '%d' for build '%s'. " % (start, end - start, args.genome)
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
170 warnings.append(warning)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
171 if not invalid_lines:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
172 invalid_lines = get_lines(feature)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
173 first_invalid_line = line_count
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
174 skipped_lines += len(invalid_lines)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
175 continue
5
ee00b3c68801 Uploaded
greg
parents: 4
diff changeset
176 elif os.path.isfile(seq_path):
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
177 if not(twobitfile):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
178 twobitfile = bx.seq.twobit.TwoBitFile(file(seq_path))
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
179 try:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
180 if interpret_features:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
181 # Create sequence from intervals within a feature.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
182 sequence = ''
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
183 for interval in feature.intervals:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
184 sequence += twobitfile[interval.chrom][interval.start:interval.end]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
185 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
186 sequence = twobitfile[chrom][start:end]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
187 except:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
188 warning = "Unable to fetch the sequence from '%d' to '%d' for chrom '%s'. " % (start, end - start, chrom)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
189 warnings.append(warning)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
190 if not invalid_lines:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
191 invalid_lines = get_lines(feature)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
192 first_invalid_line = line_count
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
193 skipped_lines += len(invalid_lines)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
194 continue
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
195 else:
1
311febbd33d6 Uploaded
greg
parents: 0
diff changeset
196 warning = "Chromosome by name '%s' was not found for build '%s'. " % (chrom, args.genome)
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
197 warnings.append(warning)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
198 if not invalid_lines:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
199 invalid_lines = get_lines(feature)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
200 first_invalid_line = line_count
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
201 skipped_lines += len(invalid_lines)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
202 continue
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
203 if sequence == '':
1
311febbd33d6 Uploaded
greg
parents: 0
diff changeset
204 warning = "Chrom: '%s', start: '%d', end: '%d' is either invalid or not present in build '%s'. " % (chrom, start, end, args.genome)
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
205 warnings.append(warning)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
206 if not invalid_lines:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
207 invalid_lines = get_lines(feature)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
208 first_invalid_line = line_count
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
209 skipped_lines += len(invalid_lines)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
210 continue
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
211 if includes_strand_col and strand == "-":
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
212 sequence = reverse_complement(sequence)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
213 if args.output_format == "fasta":
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
214 l = len(sequence)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
215 c = 0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
216 if input_is_gff:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
217 start, end = gff_util.convert_bed_coords_to_gff([start, end])
1
311febbd33d6 Uploaded
greg
parents: 0
diff changeset
218 fields = [args.genome, str(chrom), str(start), str(end), strand]
0
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
219 meta_data = "_".join(fields)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
220 if name.strip():
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
221 out.write(">%s %s\n" % (meta_data, name))
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
222 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
223 out.write(">%s\n" % meta_data)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
224 while c < l:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
225 b = min(c + 50, l)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
226 out.write("%s\n" % str(sequence[c:b]))
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
227 c = b
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
228 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
229 # output_format == "interval".
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
230 if interpret_features:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
231 meta_data = "\t".join([feature.chrom,
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
232 "galaxy_extract_genomic_dna",
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
233 "interval",
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
234 str(feature.start),
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
235 str(feature.end),
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
236 feature.score,
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
237 feature.strand,
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
238 ".",
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
239 gff_util.gff_attributes_to_str(feature.attributes, "GTF")])
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
240 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
241 # Where is fields being set here?
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
242 meta_data = "\t".join(fields)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
243 if input_is_gff:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
244 format_str = "%s seq \"%s\";\n"
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
245 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
246 format_str = "%s\t%s\n"
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
247 out.write(format_str % (meta_data, str(sequence)))
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
248 # Update line count.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
249 if isinstance(feature, gff_util.GFFFeature):
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
250 line_count += len(feature.intervals)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
251 else:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
252 line_count += 1
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
253 out.close()
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
254
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
255 if warnings:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
256 warn_msg = "%d warnings, 1st is: " % len(warnings)
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
257 warn_msg += warnings[0]
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
258 print warn_msg
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
259 if skipped_lines:
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
260 # Error message includes up to the first 10 skipped lines.
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
261 print 'Skipped %d invalid lines, 1st is #%d, "%s"' % (skipped_lines, first_invalid_line, '\n'.join(invalid_lines[:10]))
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
262
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
263 if args.reference_genome_source == "history":
cff5b7c9be55 Uploaded
greg
parents:
diff changeset
264 os.remove(seq_path)