annotate variant_effect_predictor/Bio/SeqIO/game/featureHandler.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: featureHandler.pm,v 1.9 2002/06/04 02:54:48 jason Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # BioPerl module for Bio::SeqIO::game::featureHandler
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Brad Marshall <bradmars@yahoo.com>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Brad Marshall
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10 # _history
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # June 25, 2000 written by Brad Marshall
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 Bio::SeqIO::game::featureHandler - GAME helper via PerlSAX helper.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 GAME helper for parsing new Feature objects from GAME XML. Do not use directly.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 User feedback is an integral part of the evolution of this and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 other Bioperl modules. Send your comments and suggestions preferably
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 to one of the Bioperl mailing lists. Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 bioperl-l@bioperl.org - Bioperl list
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 bioxml-dev@bioxml.org - Technical discussion - Moderate volume
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 bioxml-announce@bioxml.org - General Announcements - Pretty dead
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 http://www.bioxml.org/MailingLists/ - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 =head1 AUTHOR - Brad Marshall
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 Email: bradmars@yahoo.com
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 # This template file is in the Public Domain.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 # You may do anything you want with this file.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 package Bio::SeqIO::game::featureHandler;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 use Bio::SeqFeature::Generic;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 use XML::Handler::Subs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 use vars qw{ $AUTOLOAD @ISA };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 @ISA = qw(XML::Handler::Subs);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 my ($caller,$seq,$length,$type) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 my $class = ref($caller) || $caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 my $self = bless ({
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 seq => $seq,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 type => $type,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 length => $length,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 string => '',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 feat => {},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 feats => [],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 comp_id => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 }, $class);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 =head2 start_document
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 Title : start_document
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 Usage : $obj->start_document
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 Function: PerlSAX method called when a new document is initialized
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 Returns : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 Args : document name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 # Basic PerlSAX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 sub start_document {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 my ($self, $document) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 $self->{'Names'} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 $self->{'Nodes'} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 $self->{'feats'} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 =head2 end_document
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 Title : end_document
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 Usage : $obj->end_document
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 Function: PerlSAX method called when a document is finished for cleaning up
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 Returns : list of features seen
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 Args : document name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 sub end_document {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 my ($self, $document) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 delete $self->{'Names'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 return $self->{'feats'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 =head2 start_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 Title : start_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 Usage : $obj->start_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 Function: PerlSAX method called when a new element is reached
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 Returns : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 Args : element object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 sub start_element {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 my ($self, $element) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 push @{$self->{'Names'}}, $element->{'Name'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 $self->{'string'} = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 if ($self->in_element('bx-feature:seq_relationship')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 if (defined $element->{'Attributes'}->{'bx-feature:seq'} &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 defined $self->{'seq'} &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 $element->{'Attributes'}->{'bx-feature:seq'} eq $self->{'seq'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $self->{'in_current_seq'} = 'true';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 if ($self->in_element('bx-computation:computation')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 $self->{'feat'} = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 if (defined $element->{'Attributes'}->{'bx-computation:id'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 $self->{'feat'}->{'computation_id'} = $element->{'Attributes'}->{'bx-computation:id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 $self->{'feat'}->{'computation_id'} = $self->{'comp_id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 $self->{'comp_id'}++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 if ($self->in_element('bx-feature:feature')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 if (defined $element->{'Attributes'}->{'bx-feature:id'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 $self->{'feat'}->{'id'} = $element->{'Attributes'}->{'bx-feature:id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 if ($self->in_element('bx-annotation:annotation')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 $self->{'feat'} = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 $self->{'feat'}->{'annotation_id'} = $element->{'Attributes'}->{'bx-annotation:id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 $self->{'feat'}->{'annotation_name'} = $element->{'Attributes'}->{'bx-annotation:name'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 =head2 end_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Title : end_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 Usage : $obj->end_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Function: PerlSAX method called when an element is finished
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 Returns : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 Args : element object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 sub end_element {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 my ($self, $element) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 if ($self->in_element('bx-computation:program')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 $self->{'string'} =~ s/^\s+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 $self->{'string'} =~ s/\s+$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 $self->{'string'} =~ s/\n//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 $self->{'feat'}->{'source_tag'} = $self->{'string'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 if ($self->in_element('bx-annotation:author')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 $self->{'string'} =~ s/^\s+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 $self->{'string'} =~ s/\s+$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 $self->{'string'} =~ s/\n//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 $self->{'feat'}->{'source_tag'} = "Annotated by $self->{'string'}.";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 if ($self->in_element('bx-feature:type')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 $self->{'string'} =~ s/^\s+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 $self->{'string'} =~ s/\s+$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 $self->{'string'} =~ s/\n//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 $self->{'feat'}->{'primary_tag'} = $self->{'string'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 if ($self->in_element('bx-feature:start')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 $self->{'string'} =~ s/^\s+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 $self->{'string'} =~ s/\s+$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 $self->{'string'} =~ s/\n//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 $self->{'feat'}->{'start'} = $self->{'string'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 if ($self->in_element('bx-feature:end')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 $self->{'string'} =~ s/^\s+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 $self->{'string'} =~ s/\s+$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 $self->{'string'} =~ s/\n//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 $self->{'feat'}->{'end'} = $self->{'string'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 if ($self->in_element('bx-computation:score')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 $self->{'string'} =~ s/^\s+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 $self->{'string'} =~ s/\s+$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 $self->{'string'} =~ s/\n//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 $self->{'feat'}->{'score'} = $self->{'string'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 if ($self->in_element('bx-feature:seq_relationship')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 if ($self->{'feat'}->{'start'} > $self->{'feat'}->{'end'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 my $new_start = $self->{'feat'}->{'end'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 $self->{'feat'}->{'end'} = $self->{'feat'}->{'start'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 $self->{'feat'}->{'start'} = $new_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 $self->{'feat'}->{'strand'} = -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 $self->{'feat'}->{'strand'} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 my $new_feat = new Bio::SeqFeature::Generic
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 -start => $self->{'feat'}->{'start'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 -end => $self->{'feat'}->{'end'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 -strand => $self->{'feat'}->{'strand'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 -source => $self->{'feat'}->{'source_tag'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 -primary => $self->{'feat'}->{'primary_tag'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 -score => $self->{'feat'}->{'score'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 if (defined $self->{'feat'}->{'computation_id'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 $new_feat->add_tag_value('computation_id',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 $self->{'feat'}->{'computation_id'} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 } elsif (defined $self->{'feat'}->{'annotation_id'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 $new_feat->add_tag_value('annotation_id',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 $self->{'feat'}->{'annotation_id'} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 if (defined $self->{'feat'}->{'id'}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 $new_feat->add_tag_value('id', $self->{'feat'}->{'id'} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 push @{$self->{'feats'}}, $new_feat;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 $self->{'feat'} = {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 seqid => $self->{'feat'}->{'curr_seqid'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 primary_tag => $self->{'feat'}->{'primary_tag'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 source_tag => $self->{'feat'}->{'source_tag'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 computation_id => $self->{'feat'}->{'computation_id'},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 annotation_id => $self->{'feat'}->{'annotation_id'}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 pop @{$self->{'Names'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 pop @{$self->{'Nodes'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 =head2 characters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 Title : characters
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 Usage : $obj->end_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 Function: PerlSAX method called when text between XML tags is reached
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 Returns : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 Args : text
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 sub characters {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 my ($self, $text) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 $self->{'string'} .= $text->{'Data'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 =head2 in_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 Title : in_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Usage : $obj->in_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 Function: PerlSAX method called to test if state is in a specific element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 Returns : boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 Args : name of element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 sub in_element {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 my ($self, $name) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 return (defined $self->{'Names'}[-1] &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 $self->{'Names'}[-1] eq $name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 =head2 within_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 Title : within_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 Usage : $obj->within_element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 Function: PerlSAX method called to list depth within specific element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 Returns : boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 Args : name of element
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 sub within_element {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 my ($self, $name) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 my $count = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 foreach my $el_name (@{$self->{'Names'}}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 $count ++ if ($el_name eq $name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 return $count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 =head2 AUTOLOAD
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 Title : AUTOLOAD
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 Usage : do not use directly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 Function: autoload handling of missing DESTROY method
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 Returns : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 Args : text
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 # Others
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 sub AUTOLOAD {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 my $method = $AUTOLOAD;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 $method =~ s/.*:://;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 return if $method eq 'DESTROY';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 print "UNRECOGNIZED $method\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 __END__