Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/SeqIO/game/seqHandler.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1f6dce3d34e0 |
---|---|
1 # $Id: seqHandler.pm,v 1.15 2002/06/24 04:29:31 jason Exp $ | |
2 # | |
3 # BioPerl module for Bio::SeqIO::game::seqHandler | |
4 # | |
5 # Cared for by Brad Marshall <bradmars@yahoo.com> | |
6 # | |
7 # Copyright Brad Marshall | |
8 # | |
9 # You may distribute this module under the same terms as perl itself | |
10 # _history | |
11 # June 25, 2000 written by Brad Marshall | |
12 # | |
13 # POD documentation - main docs before the code | |
14 | |
15 =head1 NAME | |
16 | |
17 Bio::SeqIO::game::seqHandler - GAME helper via PerlSAX helper. | |
18 | |
19 =head1 SYNOPSIS | |
20 | |
21 GAME helper for parsing new Sequence objects from GAME XML. Do not use directly | |
22 | |
23 =head1 FEEDBACK | |
24 | |
25 =head2 Mailing Lists | |
26 | |
27 User feedback is an integral part of the evolution of this and | |
28 other Bioperl modules. Send your comments and suggestions preferably | |
29 to one of the Bioperl mailing lists. Your participation is much appreciated. | |
30 | |
31 bioperl-l@bioperl.org - Bioperl list | |
32 bioxml-dev@bioxml.org - Technical discussion - Moderate volume | |
33 bioxml-announce@bioxml.org - General Announcements - Pretty dead | |
34 http://www.bioxml.org/MailingLists/ - About the mailing lists | |
35 | |
36 =head1 AUTHOR - Brad Marshall | |
37 | |
38 Email: bradmars@yahoo.com | |
39 | |
40 =head1 APPENDIX | |
41 | |
42 The rest of the documentation details each of the object | |
43 methods. Internal methods are usually preceded with a _ | |
44 | |
45 =cut | |
46 | |
47 # This template file is in the Public Domain. | |
48 # You may do anything you want with this file. | |
49 # | |
50 | |
51 package Bio::SeqIO::game::seqHandler; | |
52 use vars qw{ $AUTOLOAD @ISA }; | |
53 | |
54 use XML::Handler::Subs; | |
55 use Bio::Root::Root; | |
56 use Bio::Seq::SeqFactory; | |
57 | |
58 @ISA = qw(Bio::Root::Root XML::Handler::Subs); | |
59 | |
60 sub new { | |
61 my ($class,@args) = @_; | |
62 my $self = $class->SUPER::new(@args); | |
63 my ($seq,$sb) = $self->_rearrange([qw(SEQ SEQBUILDER)], @args); | |
64 $self->{'string'} = ''; | |
65 $self->{'seq'} = $seq; | |
66 $self->sequence_factory($sb || new Bio::Seq::SeqFactory(-type => 'Bio::Seq')); | |
67 return $self; | |
68 } | |
69 | |
70 =head2 sequence_factory | |
71 | |
72 Title : sequence_factory | |
73 Usage : $seqio->sequence_factory($builder) | |
74 Function: Get/Set the Bio::Factory::SequenceFactoryI | |
75 Returns : Bio::Factory::SequenceFactoryI | |
76 Args : [optional] Bio::Factory::SequenceFactoryI | |
77 | |
78 | |
79 =cut | |
80 | |
81 sub sequence_factory{ | |
82 my ($self,$obj) = @_; | |
83 if( defined $obj ) { | |
84 if( ! ref($obj) || ! $obj->isa('Bio::Factory::SequenceFactoryI') ) { | |
85 $self->throw("Must provide a valid Bio::Factory::SequenceFactoryI object to ".ref($self)." sequence_factory()"); | |
86 } | |
87 $self->{'_seqio_seqfactory'} = $obj; | |
88 } | |
89 if( ! defined $self->{'_seqio_seqfactory'} ) { | |
90 $self->throw("No SequenceBuilder defined for SeqIO::game::seqHandler object"); | |
91 } | |
92 | |
93 return $self->{'_seqio_seqfactory'}; | |
94 } | |
95 | |
96 =head2 start_document | |
97 | |
98 Title : start_document | |
99 Usage : $obj->start_document | |
100 Function: PerlSAX method called when a new document is initialized | |
101 Returns : nothing | |
102 Args : document name | |
103 | |
104 =cut | |
105 | |
106 # Basic PerlSAX | |
107 sub start_document { | |
108 my ($self, $document) = @_; | |
109 $self->{'in_current_seq'} = 'false'; | |
110 $self->{'Names'} = []; | |
111 $self->{'string'} = ''; | |
112 } | |
113 | |
114 =head2 end_document | |
115 | |
116 Title : end_document | |
117 Usage : $obj->end_document | |
118 Function: PerlSAX method called when a document is finished for cleaning up | |
119 Returns : list of sequences seen | |
120 Args : document name | |
121 | |
122 =cut | |
123 | |
124 sub end_document { | |
125 my ($self, $document) = @_; | |
126 delete $self->{'Names'}; | |
127 return $self->sequence_factory->create | |
128 ( -seq => $self->{'residues'}, | |
129 -alphabet => $self->{'alphabet'}, | |
130 -id => $self->{'seq'}, | |
131 -accession => $self->{'accession'}, | |
132 -desc => $self->{'desc'}, | |
133 -length => $self->{'length'}, | |
134 ); | |
135 } | |
136 | |
137 | |
138 =head2 start_element | |
139 | |
140 Title : start_element | |
141 Usage : $obj->start_element | |
142 Function: PerlSAX method called when a new element is reached | |
143 Returns : nothing | |
144 Args : element object | |
145 | |
146 =cut | |
147 | |
148 sub start_element { | |
149 my ($self, $element) = @_; | |
150 | |
151 push @{$self->{'Names'}}, $element->{'Name'}; | |
152 $self->{'string'} = ''; | |
153 | |
154 if ($element->{'Name'} eq 'bx-seq:seq') { | |
155 if ($element->{'Attributes'}->{'bx-seq:id'} eq $self->{'seq'}) { | |
156 $self->{'in_current_seq'} = 'true'; | |
157 $self->{'alphabet'} = $element->{'Attributes'}->{'bx-seq:type'}; | |
158 $self->{'length'} = $element->{'Attributes'}->{'bx-seq:length'}; | |
159 } else { | |
160 #This is not the sequence we want to import, but that's ok | |
161 } | |
162 } | |
163 return 0; | |
164 } | |
165 | |
166 =head2 end_element | |
167 | |
168 Title : end_element | |
169 Usage : $obj->end_element | |
170 Function: PerlSAX method called when an element is finished | |
171 Returns : nothing | |
172 Args : element object | |
173 | |
174 =cut | |
175 | |
176 sub end_element { | |
177 my ($self, $element) = @_; | |
178 | |
179 if ($self->{'in_current_seq'} eq 'true') { | |
180 if ($self->in_element('bx-seq:residues')) { | |
181 while ($self->{'string'} =~ s/\s+//) {}; | |
182 $self->{'residues'} = $self->{'string'}; | |
183 } | |
184 | |
185 | |
186 if ($self->in_element('bx-seq:name')) { | |
187 $self->{'string'} =~ s/^\s+//g; | |
188 $self->{'string'} =~ s/\s+$//; | |
189 $self->{'string'} =~ s/\n//g; | |
190 $self->{'name'} = $self->{'string'}; | |
191 } | |
192 | |
193 | |
194 if ($self->in_element('bx-link:id') && $self->within_element('bx-link:dbxref')) { | |
195 $self->{'string'} =~ s/^\s+//g; | |
196 $self->{'string'} =~ s/\s+$//; | |
197 $self->{'string'} =~ s/\n//g; | |
198 $self->{'accession'} = $self->{'string'}; | |
199 } | |
200 | |
201 if ($self->in_element('bx-seq:description')) { | |
202 $self->{'desc'} = $self->{'string'}; | |
203 } | |
204 | |
205 if ($self->in_element('bx-seq:seq')) { | |
206 $self->{'in_current_seq'} = 'false'; | |
207 } | |
208 } | |
209 | |
210 pop @{$self->{'Names'}}; | |
211 | |
212 } | |
213 | |
214 =head2 characters | |
215 | |
216 Title : characters | |
217 Usage : $obj->end_element | |
218 Function: PerlSAX method called when text between XML tags is reached | |
219 Returns : nothing | |
220 Args : text | |
221 | |
222 =cut | |
223 | |
224 sub characters { | |
225 my ($self, $text) = @_; | |
226 $self->{'string'} .= $text->{'Data'}; | |
227 } | |
228 | |
229 =head2 in_element | |
230 | |
231 Title : in_element | |
232 Usage : $obj->in_element | |
233 Function: PerlSAX method called to test if state is in a specific element | |
234 Returns : boolean | |
235 Args : name of element | |
236 | |
237 =cut | |
238 | |
239 sub in_element { | |
240 my ($self, $name) = @_; | |
241 | |
242 return ($self->{'Names'}[-1] eq $name); | |
243 } | |
244 | |
245 =head2 within_element | |
246 | |
247 Title : within_element | |
248 Usage : $obj->within_element | |
249 Function: PerlSAX method called to list depth within specific element | |
250 Returns : boolean | |
251 Args : name of element | |
252 | |
253 =cut | |
254 | |
255 sub within_element { | |
256 my ($self, $name) = @_; | |
257 | |
258 my $count = 0; | |
259 foreach my $el_name (@{$self->{'Names'}}) { | |
260 $count ++ if ($el_name eq $name); | |
261 } | |
262 | |
263 return $count; | |
264 } | |
265 | |
266 =head2 AUTOLOAD | |
267 | |
268 Title : AUTOLOAD | |
269 Usage : do not use directly | |
270 Function: autoload handling of missing DESTROY method | |
271 Returns : nothing | |
272 Args : text | |
273 | |
274 =cut | |
275 | |
276 # Others | |
277 sub AUTOLOAD { | |
278 my $self = shift; | |
279 | |
280 my $method = $AUTOLOAD; | |
281 $method =~ s/.*:://; | |
282 return if $method eq 'DESTROY'; | |
283 | |
284 print "UNRECOGNIZED $method\n"; | |
285 } | |
286 | |
287 1; | |
288 | |
289 __END__ |