Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/EnsEMBL/MiscFeature.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 =head1 LICENSE | |
2 | |
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and | |
4 Genome Research Limited. All rights reserved. | |
5 | |
6 This software is distributed under a modified Apache license. | |
7 For license details, please see | |
8 | |
9 http://www.ensembl.org/info/about/code_licence.html | |
10 | |
11 =head1 CONTACT | |
12 | |
13 Please email comments or questions to the public Ensembl | |
14 developers list at <dev@ensembl.org>. | |
15 | |
16 Questions may also be sent to the Ensembl help desk at | |
17 <helpdesk@ensembl.org>. | |
18 | |
19 =cut | |
20 | |
21 =head1 NAME | |
22 | |
23 Bio::EnsEMBL::MiscFeature - A miscelaneous feature with arbitrary features and | |
24 associations. | |
25 | |
26 =head1 SYNOPSIS | |
27 | |
28 use Bio::EnsEMBL::MiscFeature; | |
29 use Bio::EnsEMBL::MiscSet; | |
30 use Bio::EnsEMBL::Attribute; | |
31 | |
32 my $mfeat = Bio::EnsEMBL::MiscFeature->new( | |
33 -START => 1200, | |
34 -END => 100_000, | |
35 -STRAND => 1, | |
36 -SLICE => $slice | |
37 ); | |
38 | |
39 # Can add attributes to the misc feature and associate with various | |
40 # sets | |
41 my $clone_set = Bio::EnsEMBL::MiscSet->new( | |
42 -CODE => 'clone', | |
43 -NAME => '1MB clone set', | |
44 -DESCRIPTION => '1MB CloneSet' | |
45 ); | |
46 | |
47 my $tiling_path_set = Bio::EnsEMBL::MiscSet->new( | |
48 -CODE => 'tilingpath', | |
49 -NAME => 'tiling path set' | |
50 ); | |
51 | |
52 my $attrib1 = Bio::EnsEMBL::Attribute->new( | |
53 -VALUE => 'RLX12451', | |
54 -CODE => 'name', | |
55 -NAME => 'name' | |
56 ); | |
57 | |
58 my $attrib2 = Bio::EnsEMBL::Attribute->new( | |
59 -VALUE => '4', | |
60 -CODE => 'version', | |
61 -NAME => 'version' | |
62 ); | |
63 | |
64 my $attrib3 = Bio::EnsEMBL::Attribute->new( | |
65 -VALUE => 'AL42131.4', | |
66 -CODE => 'synonym', | |
67 -NAME => 'synonym' | |
68 ); | |
69 | |
70 # can associate a misc feature with any number of sets | |
71 | |
72 $mfeat->add_MiscSet($clone_set); | |
73 $mfeat->add_MiscSet($tiling_path_set); | |
74 | |
75 # can add arbitrary attributes to a misc feature | |
76 | |
77 $mfeat->add_Attribute($attrib1); | |
78 $mfeat->add_Attribute($attrib2); | |
79 $mfeat->add_Attribute($attrib3); | |
80 | |
81 my ($name_attrib) = @{ $mfeat->get_all_Attributes('name') }; | |
82 my @all_attribs = @{ $mfeat->get_all_Attributes() }; | |
83 | |
84 my @all_sets = @{ $mfeat->get_all_MiscSets() }; | |
85 my ($clone_set) = @{ $mfeat->get_all_CloneSets('clone') }; | |
86 | |
87 | |
88 # Can do normal feature operations as well | |
89 $mfeat = $mfeat->transform('supercontig'); | |
90 print $mfeat->slice->seq_region_name, ' ', $mfeat->start, '-', | |
91 $mfeat->end; | |
92 | |
93 | |
94 =head1 DESCRIPTION | |
95 | |
96 MiscFeatures are extremely general features with a location, and an | |
97 arbitrary group of attributes. They are grouped with other features of | |
98 the same 'type' through the use of MiscSets (see Bio::EnsEMBL::MiscSet). | |
99 Attributes are attached in the fom of Bio::EnsEMBL::Attribute objects. | |
100 See Bio::EnsEMBL::DBSQL::MiscFeatureAdaptor for ways to fetch or store | |
101 MiscFeatures. | |
102 | |
103 =cut | |
104 | |
105 | |
106 package Bio::EnsEMBL::MiscFeature; | |
107 | |
108 use strict; | |
109 use warnings; | |
110 | |
111 use Bio::EnsEMBL::Feature; | |
112 use Bio::EnsEMBL::Utils::Exception qw(throw); | |
113 use Scalar::Util qw(weaken isweak); | |
114 | |
115 use vars qw(@ISA); | |
116 | |
117 @ISA = qw(Bio::EnsEMBL::Feature); | |
118 | |
119 =head2 new | |
120 | |
121 Arg [-SLICE]: Bio::EnsEMBL::SLice - Represents the sequence that this | |
122 feature is on. The coordinates of the created feature are | |
123 relative to the start of the slice. | |
124 Arg [-START]: The start coordinate of this feature relative to the start | |
125 of the slice it is sitting on. Coordinates start at 1 and | |
126 are inclusive. | |
127 Arg [-END] : The end coordinate of this feature relative to the start of | |
128 the slice it is sitting on. Coordinates start at 1 and are | |
129 inclusive. | |
130 Arg [-STRAND]: The orientation of this feature. Valid values are 1,-1,0. | |
131 Arg [-SEQNAME] : A seqname to be used instead of the default name of the | |
132 of the slice. Useful for features that do not have an | |
133 attached slice such as protein features. | |
134 Arg [-dbID] : (optional) internal database id | |
135 Arg [-ADAPTOR]: (optional) Bio::EnsEMBL::DBSQL::BaseAdaptor | |
136 Example : $feature = Bio::EnsEMBL::MiscFeature->new(-start => 1, | |
137 -end => 100, | |
138 -strand => 1, | |
139 -slice => $slice, | |
140 -analysis => $analysis); | |
141 Description: Constructs a new Bio::EnsEMBL::Feature. Generally subclasses | |
142 of this method are instantiated, rather than this class itself. | |
143 Returntype : Bio::EnsEMBL::MiscFeature | |
144 Exceptions : Thrown on invalid -SLICE, -ANALYSIS, -STRAND ,-ADAPTOR arguments | |
145 Caller : general, subclass constructors | |
146 Status : Stable | |
147 | |
148 =cut | |
149 | |
150 | |
151 sub new { | |
152 my $class = shift; | |
153 | |
154 my $self = $class->SUPER::new(@_); | |
155 | |
156 $self->{'attributes'} = []; | |
157 | |
158 return $self; | |
159 } | |
160 | |
161 | |
162 =head2 new_fast | |
163 | |
164 Arg [...] : hashref to bless as new MiscFeature | |
165 Example : $miscfeature = Bio::EnsEMBL::MiscFeature->new_fast(); | |
166 Description: Creates a new Miscfeature. | |
167 Returntype : Bio::EnsEMBL::MiscFeature | |
168 Exceptions : none | |
169 Caller : general | |
170 Status : Stable | |
171 | |
172 =cut | |
173 | |
174 | |
175 sub new_fast { | |
176 my $class = shift; | |
177 my $hashref = shift; | |
178 | |
179 $hashref->{'attributes'} ||= []; | |
180 | |
181 my $self = bless $hashref, $class; | |
182 weaken($self->{adaptor}) if ( ! isweak($self->{adaptor}) ); | |
183 return $self; | |
184 } | |
185 | |
186 | |
187 | |
188 =head2 add_Attribute | |
189 | |
190 Arg [1] : Bio::EnsEMBL::Attribute $attribute | |
191 Example : $misc_feature->add_attribute($attribute); | |
192 Description: Adds an attribute to this misc. feature | |
193 Returntype : none | |
194 Exceptions : throw on wrong argument type | |
195 Caller : general | |
196 Status : Stable | |
197 | |
198 =cut | |
199 | |
200 sub add_Attribute { | |
201 my ($self, $attrib) = @_; | |
202 | |
203 if( ! defined $attrib || ! $attrib->isa( "Bio::EnsEMBL::Attribute" )) { | |
204 throw( "You have to provide a Bio::EnsEMBL::Attribute, not a [$attrib]" ); | |
205 } | |
206 | |
207 $self->{'attributes'} ||= []; | |
208 push @{$self->{'attributes'}}, $attrib | |
209 } | |
210 | |
211 | |
212 | |
213 =head2 add_MiscSet | |
214 | |
215 Arg [1] : Bio::EnsEMBL::MiscSet $set | |
216 The set to add | |
217 Example : $misc_feature->add_MiscSet(Bio::EnsEMBL::MiscSet->new(...)); | |
218 Description: Associates this MiscFeature with a given Set. | |
219 Returntype : none | |
220 Exceptions : throw if the set arg is not provided, | |
221 throw if the set to be added does not have a code | |
222 Caller : general | |
223 Status : Stable | |
224 | |
225 =cut | |
226 | |
227 | |
228 sub add_MiscSet { | |
229 my $self = shift; | |
230 my $miscSet = shift; | |
231 | |
232 if(!$miscSet || !ref($miscSet) || !$miscSet->isa('Bio::EnsEMBL::MiscSet')) { | |
233 throw('Set argument must be a Bio::EnsEMBL::MiscSet'); | |
234 } | |
235 | |
236 $self->{'miscSets'} ||= []; | |
237 | |
238 push( @{$self->{'miscSets'}}, $miscSet ); | |
239 } | |
240 | |
241 | |
242 | |
243 =head2 get_all_MiscSets | |
244 | |
245 Arg [1] : optional string $code | |
246 The code of the set to retrieve | |
247 Example : $set = $misc_feature->get_all_MiscSets($code); | |
248 Description: Retrieves a set that this feature is associated with via its | |
249 code. Can return empty lists. Usually returns about one elements lists. | |
250 Returntype : listref of Bio::EnsEMBL::MiscSet | |
251 Exceptions : throw if the code arg is not provided | |
252 Caller : general | |
253 Status : Stable | |
254 | |
255 =cut | |
256 | |
257 | |
258 sub get_all_MiscSets { | |
259 my $self = shift; | |
260 my $code = shift; | |
261 | |
262 $self->{'miscSets'} ||= []; | |
263 if( defined $code ) { | |
264 my @results = grep { uc($_->code())eq uc( $code ) } @{$self->{'miscSets'}}; | |
265 return \@results; | |
266 } else { | |
267 return $self->{'miscSets'}; | |
268 } | |
269 } | |
270 | |
271 | |
272 =head2 get_all_Attributes | |
273 | |
274 Arg [1] : optional string $code | |
275 The code of the Attribute objects to retrieve | |
276 Example : @attributes = @{ $misc_feature->get_all_Attributes('name') }; | |
277 Description: Retrieves a list of Attribute objects for given code or all | |
278 of the associated Attributes. | |
279 Returntype : listref of Bio::EnsEMBL::Attribute | |
280 Exceptions : | |
281 Caller : general | |
282 Status : Stable | |
283 | |
284 =cut | |
285 | |
286 sub get_all_Attributes { | |
287 my $self = shift; | |
288 my $code = shift; | |
289 | |
290 my @results; | |
291 my $result; | |
292 | |
293 if( defined $code ) { | |
294 @results = grep { uc( $_->code() ) eq uc( $code )} @{$self->{'attributes'}}; | |
295 return \@results; | |
296 } else { | |
297 return $self->{'attributes'}; | |
298 } | |
299 } | |
300 | |
301 =head2 get_all_attribute_values | |
302 | |
303 Arg [1] : string $code | |
304 The code of the Attribute object values to retrieve | |
305 Example : @attributes_vals = @{$misc_feature->get_all_attribute_values('name')}; | |
306 Description: Retrieves a list of Attribute object values for given code or all | |
307 of the associated Attributes. | |
308 Returntype : listref of values | |
309 Exceptions : | |
310 Caller : general | |
311 Status : Stable | |
312 | |
313 =cut | |
314 | |
315 sub get_all_attribute_values { | |
316 my $self = shift; | |
317 my $code = shift; | |
318 my @results = map { uc( $_->code() ) eq uc( $code ) ? $_->value : () } | |
319 @{$self->{'attributes'}}; | |
320 return \@results; | |
321 } | |
322 | |
323 =head2 get_scalar_attribute | |
324 | |
325 Arg [1] : string $code | |
326 The code of the Attribute object values to retrieve | |
327 Example : $vals = $misc_feature->get_scalar_attribute('name'); | |
328 Description: Retrieves a value for given code or all | |
329 of the associated Attributes. | |
330 Returntype : scalar value | |
331 Exceptions : | |
332 Caller : general | |
333 Status : Stable | |
334 | |
335 | |
336 =cut | |
337 | |
338 | |
339 sub get_scalar_attribute { | |
340 my $self = shift; | |
341 my $code = shift; | |
342 my @results = grep { uc( $_->code() ) eq uc( $code )} @{$self->{'attributes'}}; | |
343 return @results ? $results[0]->value() : ''; | |
344 } | |
345 | |
346 sub get_first_scalar_attribute { | |
347 my $self = shift; | |
348 foreach my $code ( @_ ) { | |
349 my @results = grep { uc( $_->code() ) eq uc( $code )} @{$self->{'attributes'}}; | |
350 return $results[0]->value() if @results; | |
351 } | |
352 return ''; | |
353 } | |
354 =head2 display_id | |
355 | |
356 Arg [1] : none | |
357 Example : print $kb->display_id(); | |
358 Description: This method returns a string that is considered to be | |
359 the 'display' identifier. For misc_features this is the first | |
360 name or synonym attribute or '' if neither are defined. | |
361 Returntype : string | |
362 Exceptions : none | |
363 Caller : web drawing code | |
364 Status : Stable | |
365 | |
366 =cut | |
367 | |
368 sub display_id { | |
369 my $self = shift; | |
370 my ($attrib) = @{$self->get_all_Attributes('name')}; | |
371 ($attrib) = @{$self->get_all_Attributes('synonym')} if(!$attrib); | |
372 if( defined $attrib ) { | |
373 return $attrib->value(); | |
374 } else { | |
375 return ''; | |
376 } | |
377 } | |
378 | |
379 | |
380 | |
381 | |
382 1; |