annotate glimmerHMM/glimmerhmm_gff_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 GFF3 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 GFF3 output format:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
5
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
6 ##gff-version 3
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
7 ##sequence-region Contig5.15 1 47390
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
8 Contig5.15 GlimmerHMM mRNA 323 325 . + . ID=Contig5.15.path1.gene1;Name=Contig5.15.path1.gene1
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
9 Contig5.15 GlimmerHMM CDS 323 325 . + 0 ID=Contig5.15.cds1.1;Parent=Contig5.15.path1.gene1;Name=Contig5.15.path1.gene1;Note=final-exon
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
10
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
11 http://www.cbcb.umd.edu/software/GlimmerHMM/
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
12
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
13 Modified version of the converter from Brad Chapman: https://github.com/chapmanb/bcbb/blob/master/biopython/glimmergff_to_proteins.py
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
14
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
15 Usage:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
16 glimmer_to_proteins.py <glimmer output> <ref fasta> <output file> <convert to protein ... False|True>
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
17 """
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
18 import sys
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
19 import os
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
20 import operator
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
21
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
22 from Bio import SeqIO
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
23 from Bio.SeqRecord import SeqRecord
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
24
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
25 from BCBio import GFF
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
26
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
27 def main(glimmer_file, ref_file, out_file, to_protein):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
28 with open(ref_file) as in_handle:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
29 ref_recs = SeqIO.to_dict(SeqIO.parse(in_handle, "fasta"))
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
30
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
31 base, ext = os.path.splitext(glimmer_file)
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
32
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
33 with open(out_file, "w") as out_handle:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
34 SeqIO.write(protein_recs(glimmer_file, ref_recs, to_protein), out_handle, "fasta")
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
35
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
36 def protein_recs(glimmer_file, ref_recs, to_protein):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
37 """Generate protein records from GlimmerHMM gene predictions.
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
38 """
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
39 with open(glimmer_file) as in_handle:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
40 for rec in glimmer_predictions(in_handle, ref_recs):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
41 for feature in rec.features:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
42 seq_exons = []
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
43 for cds in feature.sub_features:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
44 seq_exons.append(rec.seq[
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
45 cds.location.nofuzzy_start:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
46 cds.location.nofuzzy_end])
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
47 gene_seq = reduce(operator.add, seq_exons)
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
48 if feature.strand == -1:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
49 gene_seq = gene_seq.reverse_complement()
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
50
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
51 if to_protein:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
52 yield SeqRecord(gene_seq.translate(), feature.qualifiers["ID"][0], "", "")
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
53 else:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
54 yield SeqRecord(gene_seq, feature.qualifiers["ID"][0], "", "")
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
55
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
56 def glimmer_predictions(in_handle, ref_recs):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
57 """Parse Glimmer output, generating SeqRecord and SeqFeatures for predictions
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
58 """
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
59 for rec in GFF.parse(in_handle, target_lines=1000, base_dict=ref_recs):
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
60 yield rec
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
61
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
62 if __name__ == "__main__":
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
63 if len(sys.argv) != 3:
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
64 print __doc__
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
65 sys.exit()
0a15677c6668 Uploaded
bjoern-gruening
parents:
diff changeset
66 main(*sys.argv[1:])