annotate variant_effect_predictor/Bio/SeqIO/game.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: game.pm,v 1.26.2.1 2003/06/28 22:23:15 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::SeqIO::game
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Brad Marshall <bradmars@yahoo.com>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Ewan Birney & Lincoln Stein & Brad Marshall
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 # _history
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # June 25, 2000 written by Brad Marshall
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 Bio::SeqIO::game - Parses GAME XML 0.1 and higher into and out of Bio::Seq objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 To use this module you need XML::Parser, XML::Parser::PerlSAX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 and XML::Writer.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 Do not use this module directly. Use it via the Bio::SeqIO class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 This object can transform Bio::Seq objects to and from bioxml seq,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 computation, feature and annotation dtds,versions 0.1 and higher.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 These can be found at http://www.bioxml.org/dtds/current. It does
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 this using the idHandler, seqHandler and featureHandler modules you
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 should have gotten with this one.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 The idea is that any bioxml features can be turned into bioperl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 annotations. When Annotations and computations are parsed in, they
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 gain additional info in the bioperl SeqFeature tag attribute. These
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 can be used to reconstitute a computation or annotation by the bioxml
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 with the bx-handler module when write_seq is called.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 If you use this to write SeqFeatures that were not generated from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 computations or annotations, it will output a list of bioxml features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 Some data may be lost in this step, since bioxml features just have a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 span, type and description - nothing about the anlysis performed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 User feedback is an integral part of the evolution of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 and other Bioperl modules. Send your comments and suggestions preferably
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 to one of the Bioperl mailing lists.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 bioperl-l@bioperl.org - Technical bioperl discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 bioxml-dev@bioxml.org - Technical discussion - Moderate volume
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 bioxml-announce@bioxml.org - General Announcements - Pretty dead
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 http://www.bioxml.org/MailingLists/ - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 =head1 AUTHOR - Brad Marshall & Ewan Birney & Lincoln Stein
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 Email: bradmars@yahoo.com
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 birney@sanger.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 lstein@cshl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Jason Stajich E<lt>jason@bioperl.orgE<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 package Bio::SeqIO::game;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 # Object preamble - inherits from Bio::Root::Object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 use Bio::SeqIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 use Bio::SeqIO::game::seqHandler;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 use Bio::SeqIO::game::featureHandler;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 use Bio::SeqIO::game::idHandler;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 use XML::Parser::PerlSAX;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 use Bio::SeqFeature::Generic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 use XML::Writer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 use Bio::Seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 @ISA = qw(Bio::SeqIO);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 sub _initialize {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 my($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 $self->SUPER::_initialize(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 my $xmlfile = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 $self->{'counter'} = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 $self->{'id_counter'} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 $self->{'leftovers'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 $self->{'header'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $self->{'chunkable'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 $self->{'xmldoc'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 $self->_export_subfeatures(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 $self->_group_subfeatures(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 $self->_subfeature_types('exons', 'promoters','poly_A_sites',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 'utrs','introns','sub_SeqFeature');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 # filehandle is stored by superclass _initialize
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 =head2 _export_subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Title : _export_subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Usage : $obj->_export_subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Function: export all subfeatures (also in the geneprediction structure)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Returns : value of _export_subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 sub _export_subfeatures{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 my $obj = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 if( @_ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 my $value = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 $obj->{'_export_subfeatures'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 return $obj->{'_export_subfeatures'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 =head2 _group_subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Title : _group_subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Usage : $obj->_group_subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Function: Groups all subfeatures in separate feature_sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Returns : value of _group_subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 sub _group_subfeatures{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my $obj = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 if( @_ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $value = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 $obj->{'_group_subfeatures'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 return $obj->{'_group_subfeatures'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 =head2 _subfeature_types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Title : _subfeature_types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Usage : $obj->_subfeature_types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 Function: array of all possible subfeatures, it should be a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 name of a function which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 : returns an arrau of sub_seqfeatures when called:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 @array = $feature->subfeaturetype()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 Returns : array of _subfeature_types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 Args : array of subfeature types (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 sub _subfeature_types{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 my $obj = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 if( @_ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 my @values = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $obj->{'_subfeature_types'} = \@values;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 return @{$obj->{'_subfeature_types'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 =head2 _add_subfeature_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 Title : _add_subfeature_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 Usage : $obj->_add_subfeature_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 Function: add one possible subfeature, it should be a name of a function which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 : returns an arrau of sub_seqfeatures when called: @array = $feature->subfeaturetyp()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Returns : 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Args : one subfeature type (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 sub _add_subfeature_type{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my $obj = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 if( @_ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my @values = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 push @{$obj->{'_subfeature_types'}}, @values;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 =head2 next_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 Title : next_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Usage : $seq = $stream->next_seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 Function: returns the next sequence in the stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 Returns : Bio::Seq object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Args : NONE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 sub next_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 # The header is the top level stuff in the XML file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 # IE before the first <bx-seq:seq> tag.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 # If you don't include this in each 'chunk', the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 # parser will barf.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $header;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 unless ($self->{'header'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 while (my $next_line = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 if($next_line=~/<bx-seq:seq?/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $header .= $`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 $self->{'header'}=$header;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $self->{'leftovers'} .= "<bx-seq:seq".$';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 $header .= $next_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 if ($self->{'header'}=~m|<bx-game:flavor>.*chunkable.*</bx-game:flavor>|) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $self->{'chunkable'}=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 my $not_top_level;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 my $xmldoc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 my $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 # If chunkable, we read in the document until the next
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 # TOP LEVEL sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 if ($self->{'chunkable'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 $xmldoc = $self->{'header'}.$self->{'leftovers'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 while (my $next_line = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 # Maintain depth of computations and annotations.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 # We only want TOP LEVEL seqs if chunkable.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 while ($next_line=~ m|<bx-computation:computation|g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 $not_top_level++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 while ($next_line=~ m|<bx-annotation:annotation|g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $not_top_level++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 while ($next_line=~ m|</bx-computation:computation|g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 $not_top_level--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 while ($next_line=~ m|</bx-annotation:annotation|g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $not_top_level--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 if($next_line=~/<bx-seq:seq?/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 if (!$not_top_level) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 $xmldoc .= $`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $self->{'leftovers'} .= "<bx-seq:seq".$';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $xmldoc .= $next_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 # Make sure the 'doc chunk' has a closing tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 # to make the parser happy.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 if (!$xmldoc=~m|</bx-game:game>|){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 $xmldoc .= "</bx-game:game>";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 # Grab the TOP LEVEL seq..
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 if ($xmldoc =~ m|</bx-seq:seq|) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $handler = Bio::SeqIO::game::idHandler->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my $options = {Handler=>$handler};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 my $parser = XML::Parser::PerlSAX->new($options);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $self->{'seqs'} = $parser->parse(Source => { String => $xmldoc });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 } else { # No sequences.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 # Get the seq out of the array.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $seq = @{$self->{'seqs'}}[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 # If not chunkable,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 # only read document into memory once!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 } elsif (!$self->{'xmldoc'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $self->{'xmldoc'}=$self->{'header'}.$self->{'leftovers'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 while (my $next_line = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $self->{'xmldoc'} .= $next_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $xmldoc=$self->{'xmldoc'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 # Get the seq id index.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 if ($xmldoc =~ m|</bx-seq:seq|) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 my $handler = Bio::SeqIO::game::idHandler->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 my $options = {Handler=>$handler};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my $parser = XML::Parser::PerlSAX->new($options);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $self->{'seqs'} = $parser->parse(Source => { String => $xmldoc });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $seq = shift @{$self->{'seqs'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 } else { # No sequences.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 my $seq = @{$self->{'seqs'}}[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 # if we already have the doc in memory,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 # just get the doc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 } elsif ($self->{'xmldoc'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $xmldoc=$self->{'xmldoc'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $seq = shift @{$self->{'seqs'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 # If there's more sequences:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 if ($seq) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 # Get the next seq.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 my $handler = Bio::SeqIO::game::seqHandler->new(-seq => $seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 my $options = {Handler=>$handler};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 my $parser = XML::Parser::PerlSAX->new($options);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 my $pseq = $parser->parse(Source => { String => $xmldoc });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 # get the features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 my $fhandler = Bio::SeqIO::game::featureHandler->new($pseq->id(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 $pseq->length(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $pseq->alphabet());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $options = {Handler=>$fhandler};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 $parser = XML::Parser::PerlSAX->new($options);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 my $features = $parser->parse(Source => { String => $xmldoc });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 my $seq = Bio::Seq->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 # Build the Bioperl Seq and return it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 foreach my $feature (@{$features}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 $seq->add_SeqFeature($feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 $seq->primary_seq($pseq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 return $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 =head2 next_primary_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Title : next_primary_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 Usage : $seq = $stream->next_primary_seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Function: returns the next primary sequence (ie no seq_features) in the stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Returns : Bio::PrimarySeq object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Args : NONE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 sub next_primary_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 my $self=shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 # The header is the top level stuff in the XML file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 # IE before the first <bx-seq:seq> tag.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 # If you don't include this in each 'chunk', the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 # parser will barf.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 my $header;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 unless ($self->{'header'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 while (my $next_line = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 if($next_line=~/<bx-seq:seq?/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 $header .= $`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 $self->{'header'}=$header;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 $self->{'leftovers'} .= "<bx-seq:seq".$';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 $header .= $next_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 if ($self->{'header'}=~m|<bx-game:flavor>.*chunkable.*</bx-game:flavor>|) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 $self->{'chunkable'}=1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 my $not_top_level = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 my $xmldoc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 my $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 # If chunkable, we read in the document until the next
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 # TOP LEVEL sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 if ($self->{'chunkable'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 $xmldoc = $self->{'header'}.$self->{'leftovers'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 while (my $next_line = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 # Maintain depth of computations and annotations.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 # We only want TOP LEVEL seqs if chunkable.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 while ($next_line=~ m|<bx-computation:computation|g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 $not_top_level++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 while ($next_line=~ m|<bx-annotation:annotationn|g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 $not_top_level++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 while ($next_line=~ m|</bx-computation:computation|g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 $not_top_level--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 while ($next_line=~ m|</bx-annotation:annotationn|g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 $not_top_level--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 if($next_line=~/<bx-seq:seq?/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 if (!$not_top_level) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $xmldoc .= $`;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $self->{'leftovers'} .= "<bx-seq:seq".$';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 $xmldoc .= $next_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 # Make sure the 'doc chunk' has a closing tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 # to make the parser happy.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 if (!$xmldoc=~m|</bx-game:game>|){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 $xmldoc .= "</bx-game:game>";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 # Grab the TOP LEVEL seq..
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 if ($xmldoc =~ m|</bx-seq:seq|) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my $handler = Bio::SeqIO::game::idHandler->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 my $options = {Handler=>$handler};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 my $parser = XML::Parser::PerlSAX->new($options);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 $self->{'seqs'} = $parser->parse(Source => { String => $xmldoc });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 } else { # No sequences.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 $seq = @{$self->{'seqs'}}[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 # If not chunkable,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 # only read document into memory once!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 } elsif (!$self->{'xmldoc'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 $self->{'xmldoc'}=$self->{'header'}.$self->{'leftovers'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 while (my $next_line = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $self->{'xmldoc'} .= $next_line;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $xmldoc=$self->{'xmldoc'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 # Get the seq id index.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 if ($xmldoc =~ m|</bx-seq:seq|) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 my $handler = Bio::SeqIO::game::idHandler->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 my $options = {Handler=>$handler};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 my $parser = XML::Parser::PerlSAX->new($options);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 $self->{'seqs'} = $parser->parse(Source => { String => $xmldoc });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 $seq = shift @{$self->{'seqs'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 } else { # No sequences.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 my $seq = @{$self->{'seqs'}}[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 # if we already have the doc in memory,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 # just get the doc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 } elsif ($self->{'xmldoc'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 $xmldoc=$self->{'xmldoc'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 $seq = shift @{$self->{'seqs'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 #print $xmldoc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 if ($seq) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 # Get the next seq.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 my $handler = Bio::SeqIO::game::seqHandler->new(-seq => $seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 my $options = {Handler=>$handler};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 my $parser = XML::Parser::PerlSAX->new($options);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 my $pseq = $parser->parse(Source => { String => $xmldoc });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 return $pseq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 =head2 write_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 Title : write_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 Usage : Not Yet Implemented! $stream->write_seq(@seq)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 Function: writes the $seq object into the stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 Returns : 1 for success and 0 for error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 Args : Bio::Seq object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 sub write_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 my ($self,@seqs) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 my $bxfeat = "http://www.bioxml.org/dtds/current/feature.dtd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 my $bxann = "http://www.bioxml.org/dtds/current/annotation.dtd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 my $bxcomp = "http://www.bioxml.org/dtds/current/computation.dtd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 my $bxgame = "http://www.bioxml.org/dtds/current/game.dtd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 my $bxlink = "http://www.bioxml.org/dtds/current/link.dtd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 my $bxseq = "http://www.bioxml.org/dtds/current/seq.dtd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 my $writer = new XML::Writer(OUTPUT => $self->_fh || \*STDOUT,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 NAMESPACES => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 DATA_MODE => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 DATA_INDENT => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 PREFIX_MAP => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 '' => '', # to keep undef warnings away in XML::Writer, fill in with something as a default prefix later?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 $bxfeat => 'bx-feature',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 $bxann => 'bx-annotation',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 $bxcomp => 'bx-computation',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 $bxgame => 'bx-game',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 $bxlink => 'bx-link',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 $bxseq => 'bx-seq'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $writer->xmlDecl("UTF-8");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 $writer->doctype("bx-game:game", 'game', $bxgame);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 $writer ->startTag ([$bxgame, 'game']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 $writer->startTag ([$bxgame, 'flavor']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $writer->characters('chunkable');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 $writer->endTag ([$bxgame, 'flavor']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 foreach my $seq (@seqs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 $writer->startTag([$bxseq, 'seq'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 [$bxseq, 'id'] => $seq->display_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 [$bxseq, 'length'] => $seq->length,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 [$bxseq, 'type'] => $seq->alphabet);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 if ($seq->length > 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $writer->startTag([$bxseq, 'residues']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 $writer->characters($seq->seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 $writer->endTag([$bxseq, 'residues']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 $writer->endTag([$bxseq, 'seq']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 my @feats = $seq->all_SeqFeatures;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 my $features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 foreach my $feature (@feats) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 if ($feature->has_tag('annotation_id')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 my @ann_id = $feature->each_tag_value('annotation_id');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 push (@{$features->{'annotations'}->{$ann_id[0]}}, $feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 } elsif ($feature->has_tag('computation_id')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 my @comp_id = $feature->each_tag_value('computation_id');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 push (@{$features->{'computations'}->{$comp_id[0]}}, $feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 push (@{$features->{'everybody_else'}}, $feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 foreach my $key (keys %{$features->{'annotations'}}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 $writer->startTag([$bxann, 'annotation'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 [$bxann, 'id']=>$key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 $writer->startTag([$bxann, 'seq_link']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 $writer->startTag([$bxlink, 'link']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 $writer->emptyTag([$bxlink, 'ref_link'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 [$bxlink, 'ref'] => $seq->display_id());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 $writer->endTag([$bxlink, 'link']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 $writer->endTag([$bxann, 'seq_link']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 $self->__draw_feature_set($writer, $seq, $bxann, "", @{$features->{'annotations'}->{$key}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 $writer->endTag([$bxann, 'annotation']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 foreach my $key (keys %{$features->{'computations'}}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 $writer->startTag([$bxcomp, 'computation'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 [$bxcomp, 'id']=>$key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 $writer->startTag([$bxcomp, 'seq_link']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 $writer->startTag([$bxlink, 'link']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 $writer->emptyTag([$bxlink, 'ref_link'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 [$bxlink, 'ref'] => $seq->display_id());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 $writer->endTag([$bxlink, 'link']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 $writer->endTag([$bxcomp, 'seq_link']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 $self->__draw_feature_set($writer, $seq, $bxcomp, "", @{$features->{'computations'}->{$key}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 $writer->endTag([$bxcomp, 'computation']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 foreach my $feature (@{$features->{'everybody_else'}}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 $self->__draw_feature($writer, $feature, $seq, "",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 $self->_export_subfeatures());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 $writer->endTag([$bxgame, 'game']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 $self->flush if $self->_flush_on_write && defined $self->_fh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 #these two subroutines are very specific!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 sub __draw_feature_set {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 my ($self, $writer, $seq, $namespace, $parent, @features) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 my ($feature_set_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 my $bxfeat = "http://www.bioxml.org/dtds/current/feature.dtd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 if ($self->_export_subfeatures() && $self->_group_subfeatures()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 $feature_set_id = $self->{'id_counter'}; $self->{'id_counter'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 $writer->startTag([$namespace, 'feature_set'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 [$namespace, 'id'] => $feature_set_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 foreach my $feature (@features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 $self->__draw_feature($writer, $feature, $seq, $parent , 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 $writer->endTag([$namespace, 'feature_set']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 foreach my $feature (@features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 foreach my $subset ($self->_subfeature_types()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 if (my @subfeatures = eval ( '$feature->' . $subset . '()' )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 my @id = $feature->each_tag_value('id');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 $self->__draw_feature_set($writer, $seq, $namespace, $id[0], @subfeatures);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 $feature_set_id = $self->{'id_counter'}; $self->{'id_counter'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 $writer->startTag([$namespace, 'feature_set'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 [$namespace, 'id'] => $feature_set_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 foreach my $feature (@features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 $self->__draw_feature($writer, $feature, $seq, "" , $self->_export_subfeatures());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 $writer->endTag([$namespace, 'feature_set']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 sub __draw_feature {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 my ($self, $writer, $feature, $seq, $parent, $recursive) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 my ($subfeature, $subset, @subfeatures, $score, $score_val, $score_no);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 my $bxfeat = "http://www.bioxml.org/dtds/current/feature.dtd";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 if (!$feature->has_tag('id')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 $feature->add_tag_value('id', $self->{'id_counter'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 $self->{'id_counter'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 my @id = $feature->each_tag_value('id');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 if ($parent) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 $writer->startTag([$bxfeat, 'feature'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 [$bxfeat, 'id'] => $id[0]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 $writer->startTag([$bxfeat, 'feature'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 [$bxfeat, 'id'] => $id[0],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 [$bxfeat, 'parent'] => $parent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 $writer->startTag([$bxfeat, 'type']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 $writer->characters($feature->primary_tag());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 $writer->endTag([$bxfeat, 'type']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 foreach $score ($feature->all_tags()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 next if ($score eq 'id');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 $writer->startTag([$bxfeat, 'score'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 [$bxfeat, 'type'] => $score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 $score_no = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 foreach $score_val ($feature->each_tag_value($score)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 next unless defined $score_val;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 $writer->characters(' ') if ($score_no > 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 $writer->characters($score_val);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 $score_no++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 $writer->endTag([$bxfeat, 'score']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 $writer->startTag([$bxfeat, 'seq_relationship'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 [$bxfeat, 'seq'] => $seq->display_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 [$bxfeat, 'type'] => 'query'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 $writer->startTag([$bxfeat, 'span']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 $writer->startTag([$bxfeat, 'start']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 $writer->characters($feature->start());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 $writer->endTag([$bxfeat, 'start']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 $writer->startTag([$bxfeat, 'end']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 $writer->characters($feature->end());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 $writer->endTag([$bxfeat, 'end']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 $writer->endTag([$bxfeat, 'span']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 $writer->endTag([$bxfeat, 'seq_relationship']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 $writer->endTag([$bxfeat, 'feature']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 #proces subseqfeature's, exons, introns, promotors, whatever...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 if ($recursive) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 foreach $subset ($self->_subfeature_types()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 #determine if it exists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 if (@subfeatures = eval ( '$feature->' . $subset . '()' )) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 foreach $subfeature (@subfeatures) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 $self->__draw_feature ($writer, $subfeature, $seq, $id[0], 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672