annotate glimmerHMM/glimmerhmm_tabular_to_sequence.py @ 0:0a15677c6668 default tip

Uploaded
author bjoern-gruening
date Wed, 11 Jan 2012 09:58:35 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
1 #!/usr/bin/env python
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
2 """Convert GlimmerHMM gene predictions into protein sequences.
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
3
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
4 This works with the GlimmerHMM specific output format:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
5
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
6 12 1 + Initial 10748 10762 15
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
7 12 2 + Internal 10940 10971 32
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
8 12 3 + Internal 11035 11039 5
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
9 12 4 + Internal 11072 11110 39
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
10 12 5 + Internal 11146 11221 76
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
11 12 6 + Terminal 11265 11388 124
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
12
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
13 http://www.cbcb.umd.edu/software/GlimmerHMM/
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
14
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
15 Modified version of the converter from Brad Chapman: https://github.com/chapmanb/bcbb/blob/master/biopython/glimmer_to_proteins.py
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
16
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
17 Usage:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
18 glimmer_to_proteins.py <glimmer output> <ref fasta> <output file> <convert to protein ... False|True>
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
19 """
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
20
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
21 import sys
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
22 import os
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
23 import operator
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
24
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
25 from Bio import SeqIO
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
26 from Bio.SeqRecord import SeqRecord
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
27
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
28 def main(glimmer_file, ref_file, out_file, to_protein):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
29 with open(ref_file) as in_handle:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
30 ref_rec = SeqIO.read(in_handle, "fasta")
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
31
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
32 base, ext = os.path.splitext(glimmer_file)
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
33
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
34 with open(out_file, "w") as out_handle:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
35 SeqIO.write(protein_recs(glimmer_file, ref_rec, to_protein), out_handle, "fasta")
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
36
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
37 def protein_recs(glimmer_file, ref_rec, to_protein):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
38 """Generate protein records
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
39 """
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
40 with open(glimmer_file) as in_handle:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
41 for gene_num, exons, strand in glimmer_predictions(in_handle):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
42 seq_exons = []
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
43 for start, end in exons:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
44 seq_exons.append(ref_rec.seq[start:end])
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
45 gene_seq = reduce(operator.add, seq_exons)
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
46 if strand == '-':
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
47 gene_seq = gene_seq.reverse_complement()
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
48 if to_protein:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
49 yield SeqRecord(gene_seq.translate(), gene_num, "", "")
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
50 else:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
51 yield SeqRecord(gene_seq, gene_num, "", "")
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
52
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
53 def glimmer_predictions(in_handle):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
54 """Parse Glimmer output, generating a exons and strand for each prediction.
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
55 """
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
56 # read the header
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
57 while 1:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
58 line = in_handle.readline()
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
59 if line.startswith(" # #"):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
60 break
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
61 in_handle.readline()
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
62 # read gene predictions one at a time
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
63 cur_exons, cur_gene_num, cur_strand = ([], None, None)
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
64 while 1:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
65 line = in_handle.readline()
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
66 if not line:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
67 break
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
68 parts = line.strip().split()
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
69 # new exon
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
70 if len(parts) == 0:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
71 yield cur_gene_num, cur_exons, cur_strand
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
72 cur_exons, cur_gene_num, cur_strand = ([], None, None)
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
73 else:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
74 this_gene_num = parts[0]
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
75 this_strand = parts[2]
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
76 this_start = int(parts[4]) - 1 # 1 based
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
77 this_end = int(parts[5])
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
78 if cur_gene_num is None:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
79 cur_gene_num = this_gene_num
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
80 cur_strand = this_strand
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
81 else:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
82 assert cur_gene_num == this_gene_num
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
83 assert cur_strand == this_strand
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
84 cur_exons.append((this_start, this_end))
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
85 if len(cur_exons) > 0:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
86 yield cur_gene_num, cur_exons, cur_strand
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
87
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
88 if __name__ == "__main__":
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
89 if len(sys.argv) != 5:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
90 print __doc__
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
91 sys.exit()
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
92 main(*sys.argv[1:])