annotate GFFOutput.py @ 17:4c201a3d4755 draft

planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
author fubar
date Sun, 28 Jan 2024 06:48:52 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
1 """Output Biopython SeqRecords and SeqFeatures to GFF3 format.
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
2
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
3 The target format is GFF3, the current GFF standard:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
4 http://www.sequenceontology.org/gff3.shtml
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
5 """
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
6 from six.moves import urllib
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
7
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
8 from Bio import SeqIO
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
9
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
10
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
11 class _IdHandler:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
12 """Generate IDs for GFF3 Parent/Child
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
13 relationships where they don't exist."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
14
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
15 def __init__(self):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
16 self._prefix = "biopygen"
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
17 self._counter = 1
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
18 self._seen_ids = []
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
19
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
20 def _generate_id(self, quals):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
21 """Generate a unique ID not present in our existing IDs."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
22 gen_id = self._get_standard_id(quals)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
23 if gen_id is None:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
24 while 1:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
25 gen_id = "%s%s" % (self._prefix, self._counter)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
26 if gen_id not in self._seen_ids:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
27 break
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
28 self._counter += 1
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
29 return gen_id
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
30
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
31 def _get_standard_id(self, quals):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
32 """Retrieve standardized IDs from other sources like NCBI GenBank.
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
33
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
34 This tries to find IDs from known key/values when stored differently
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
35 than GFF3 specifications.
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
36 """
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
37 possible_keys = ["transcript_id", "protein_id"]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
38 for test_key in possible_keys:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
39 if test_key in quals:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
40 cur_id = quals[test_key]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
41 if isinstance(cur_id, tuple) or isinstance(cur_id, list):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
42 return cur_id[0]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
43 else:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
44 return cur_id
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
45 return None
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
46
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
47 def update_quals(self, quals, has_children):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
48 """Update a set of qualifiers, adding an ID if necessary."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
49 cur_id = quals.get("ID", None)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
50 # if we have an ID, record it
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
51 if cur_id:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
52 if not isinstance(cur_id, list) and not isinstance(cur_id, tuple):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
53 cur_id = [cur_id]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
54 for add_id in cur_id:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
55 self._seen_ids.append(add_id)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
56 # if we need one and don't have it, create a new one
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
57 elif has_children:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
58 new_id = self._generate_id(quals)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
59 self._seen_ids.append(new_id)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
60 quals["ID"] = [new_id]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
61 return quals
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
62
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
63
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
64 class GFF3Writer:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
65 """Write GFF3 files starting with standard Biopython objects."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
66
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
67 def __init__(self):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
68 pass
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
69
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
70 def write(self, recs, out_handle, include_fasta=False):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
71 """Write the provided records to the given handle in GFF3 format."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
72 id_handler = _IdHandler()
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
73 self._write_header(out_handle)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
74 fasta_recs = []
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
75 try:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
76 recs = iter(recs)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
77 except TypeError:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
78 recs = [recs]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
79 for rec in recs:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
80 self._write_rec(rec, out_handle)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
81 self._write_annotations(rec.annotations, rec.id, len(rec.seq), out_handle)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
82 for sf in rec.features:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
83 sf = self._clean_feature(sf)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
84 id_handler = self._write_feature(sf, rec.id, out_handle, id_handler)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
85 if include_fasta and len(rec.seq) > 0:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
86 fasta_recs.append(rec)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
87 if len(fasta_recs) > 0:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
88 self._write_fasta(fasta_recs, out_handle)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
89
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
90 def _clean_feature(self, feature):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
91 quals = {}
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
92 for key, val in feature.qualifiers.items():
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
93 if not isinstance(val, (list, tuple)):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
94 val = [val]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
95 val = [str(x) for x in val]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
96 quals[key] = val
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
97 feature.qualifiers = quals
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
98 # Support for Biopython 1.68 and above, which removed sub_features
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
99 if not hasattr(feature, "sub_features"):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
100 feature.sub_features = []
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
101 clean_sub = [self._clean_feature(f) for f in feature.sub_features]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
102 feature.sub_features = clean_sub
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
103 return feature
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
104
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
105 def _write_rec(self, rec, out_handle):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
106 # if we have a SeqRecord, write out optional directive
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
107 if len(rec.seq) > 0:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
108 out_handle.write("##sequence-region %s 1 %s\n" % (rec.id, len(rec.seq)))
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
109
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
110 def _get_phase(self, feature):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
111 if "phase" in feature.qualifiers:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
112 phase = feature.qualifiers["phase"][0]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
113 elif feature.type == "CDS":
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
114 phase = int(feature.qualifiers.get("codon_start", [1])[0]) - 1
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
115 else:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
116 phase = "."
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
117 return str(phase)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
118
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
119 def _write_feature(self, feature, rec_id, out_handle, id_handler, parent_id=None):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
120 """Write a feature with location information."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
121 if feature.location.strand == 1:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
122 strand = "+"
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
123 elif feature.location.strand == -1:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
124 strand = "-"
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
125 else:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
126 strand = "."
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
127 # remove any standard features from the qualifiers
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
128 quals = feature.qualifiers.copy()
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
129 for std_qual in ["source", "score", "phase"]:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
130 if std_qual in quals and len(quals[std_qual]) == 1:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
131 del quals[std_qual]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
132 # add a link to a parent identifier if it exists
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
133 if parent_id:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
134 if "Parent" not in quals:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
135 quals["Parent"] = []
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
136 quals["Parent"].append(parent_id)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
137 quals = id_handler.update_quals(quals, len(feature.sub_features) > 0)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
138 if feature.type:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
139 ftype = feature.type
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
140 else:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
141 ftype = "sequence_feature"
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
142 parts = [
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
143 str(rec_id),
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
144 feature.qualifiers.get("source", ["feature"])[0],
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
145 ftype,
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
146 str(feature.location.start + 1), # 1-based indexing
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
147 str(feature.location.end),
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
148 feature.qualifiers.get("score", ["."])[0],
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
149 strand,
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
150 self._get_phase(feature),
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
151 self._format_keyvals(quals),
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
152 ]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
153 out_handle.write("\t".join(parts) + "\n")
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
154 for sub_feature in feature.sub_features:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
155 id_handler = self._write_feature(
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
156 sub_feature,
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
157 rec_id,
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
158 out_handle,
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
159 id_handler,
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
160 quals["ID"][0],
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
161 )
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
162 return id_handler
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
163
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
164 def _format_keyvals(self, keyvals):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
165 format_kvs = []
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
166 for key in sorted(keyvals.keys()):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
167 values = keyvals[key]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
168 key = key.strip()
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
169 format_vals = []
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
170 if not isinstance(values, list) or isinstance(values, tuple):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
171 values = [values]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
172 for val in values:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
173 val = urllib.parse.quote(str(val).strip(), safe=":/ ")
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
174 if (key and val) and val not in format_vals:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
175 format_vals.append(val)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
176 format_kvs.append("%s=%s" % (key, ",".join(format_vals)))
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
177 return ";".join(format_kvs)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
178
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
179 def _write_annotations(self, anns, rec_id, size, out_handle):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
180 """Add annotations which refer to an entire sequence."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
181 format_anns = self._format_keyvals(anns)
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
182 if format_anns:
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
183 parts = [
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
184 rec_id,
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
185 "annotation",
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
186 "remark",
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
187 "1",
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
188 str(size if size > 1 else 1),
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
189 ".",
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
190 ".",
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
191 ".",
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
192 format_anns,
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
193 ]
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
194 out_handle.write("\t".join(parts) + "\n")
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
195
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
196 def _write_header(self, out_handle):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
197 """Write out standard header directives."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
198 out_handle.write("##gff-version 3\n")
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
199
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
200 def _write_fasta(self, recs, out_handle):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
201 """Write sequence records using the ##FASTA directive."""
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
202 out_handle.write("##FASTA\n")
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
203 SeqIO.write(recs, out_handle, "fasta")
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
204
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
205
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
206 def write(recs, out_handle, include_fasta=False):
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
207 """High level interface to write GFF3 files from SeqRecords and SeqFeatures.
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
208
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
209 If include_fasta is True, the GFF3 file will include sequence information
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
210 using the ##FASTA directive.
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
211 """
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
212 writer = GFF3Writer()
4c201a3d4755 planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
fubar
parents:
diff changeset
213 return writer.write(recs, out_handle, include_fasta)