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; |
