Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/MiscFeature.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/MiscFeature.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,382 @@ +=head1 LICENSE + + Copyright (c) 1999-2012 The European Bioinformatics Institute and + Genome Research Limited. All rights reserved. + + This software is distributed under a modified Apache license. + For license details, please see + + http://www.ensembl.org/info/about/code_licence.html + +=head1 CONTACT + + Please email comments or questions to the public Ensembl + developers list at <dev@ensembl.org>. + + Questions may also be sent to the Ensembl help desk at + <helpdesk@ensembl.org>. + +=cut + +=head1 NAME + +Bio::EnsEMBL::MiscFeature - A miscelaneous feature with arbitrary features and +associations. + +=head1 SYNOPSIS + + use Bio::EnsEMBL::MiscFeature; + use Bio::EnsEMBL::MiscSet; + use Bio::EnsEMBL::Attribute; + + my $mfeat = Bio::EnsEMBL::MiscFeature->new( + -START => 1200, + -END => 100_000, + -STRAND => 1, + -SLICE => $slice + ); + + # Can add attributes to the misc feature and associate with various + # sets + my $clone_set = Bio::EnsEMBL::MiscSet->new( + -CODE => 'clone', + -NAME => '1MB clone set', + -DESCRIPTION => '1MB CloneSet' + ); + + my $tiling_path_set = Bio::EnsEMBL::MiscSet->new( + -CODE => 'tilingpath', + -NAME => 'tiling path set' + ); + + my $attrib1 = Bio::EnsEMBL::Attribute->new( + -VALUE => 'RLX12451', + -CODE => 'name', + -NAME => 'name' + ); + + my $attrib2 = Bio::EnsEMBL::Attribute->new( + -VALUE => '4', + -CODE => 'version', + -NAME => 'version' + ); + + my $attrib3 = Bio::EnsEMBL::Attribute->new( + -VALUE => 'AL42131.4', + -CODE => 'synonym', + -NAME => 'synonym' + ); + + # can associate a misc feature with any number of sets + + $mfeat->add_MiscSet($clone_set); + $mfeat->add_MiscSet($tiling_path_set); + + # can add arbitrary attributes to a misc feature + + $mfeat->add_Attribute($attrib1); + $mfeat->add_Attribute($attrib2); + $mfeat->add_Attribute($attrib3); + + my ($name_attrib) = @{ $mfeat->get_all_Attributes('name') }; + my @all_attribs = @{ $mfeat->get_all_Attributes() }; + + my @all_sets = @{ $mfeat->get_all_MiscSets() }; + my ($clone_set) = @{ $mfeat->get_all_CloneSets('clone') }; + + + # Can do normal feature operations as well + $mfeat = $mfeat->transform('supercontig'); + print $mfeat->slice->seq_region_name, ' ', $mfeat->start, '-', + $mfeat->end; + + +=head1 DESCRIPTION + +MiscFeatures are extremely general features with a location, and an +arbitrary group of attributes. They are grouped with other features of +the same 'type' through the use of MiscSets (see Bio::EnsEMBL::MiscSet). +Attributes are attached in the fom of Bio::EnsEMBL::Attribute objects. +See Bio::EnsEMBL::DBSQL::MiscFeatureAdaptor for ways to fetch or store +MiscFeatures. + +=cut + + +package Bio::EnsEMBL::MiscFeature; + +use strict; +use warnings; + +use Bio::EnsEMBL::Feature; +use Bio::EnsEMBL::Utils::Exception qw(throw); +use Scalar::Util qw(weaken isweak); + +use vars qw(@ISA); + +@ISA = qw(Bio::EnsEMBL::Feature); + +=head2 new + + Arg [-SLICE]: Bio::EnsEMBL::SLice - Represents the sequence that this + feature is on. The coordinates of the created feature are + relative to the start of the slice. + Arg [-START]: The start coordinate of this feature relative to the start + of the slice it is sitting on. Coordinates start at 1 and + are inclusive. + Arg [-END] : The end coordinate of this feature relative to the start of + the slice it is sitting on. Coordinates start at 1 and are + inclusive. + Arg [-STRAND]: The orientation of this feature. Valid values are 1,-1,0. + Arg [-SEQNAME] : A seqname to be used instead of the default name of the + of the slice. Useful for features that do not have an + attached slice such as protein features. + Arg [-dbID] : (optional) internal database id + Arg [-ADAPTOR]: (optional) Bio::EnsEMBL::DBSQL::BaseAdaptor + Example : $feature = Bio::EnsEMBL::MiscFeature->new(-start => 1, + -end => 100, + -strand => 1, + -slice => $slice, + -analysis => $analysis); + Description: Constructs a new Bio::EnsEMBL::Feature. Generally subclasses + of this method are instantiated, rather than this class itself. + Returntype : Bio::EnsEMBL::MiscFeature + Exceptions : Thrown on invalid -SLICE, -ANALYSIS, -STRAND ,-ADAPTOR arguments + Caller : general, subclass constructors + Status : Stable + +=cut + + +sub new { + my $class = shift; + + my $self = $class->SUPER::new(@_); + + $self->{'attributes'} = []; + + return $self; +} + + +=head2 new_fast + + Arg [...] : hashref to bless as new MiscFeature + Example : $miscfeature = Bio::EnsEMBL::MiscFeature->new_fast(); + Description: Creates a new Miscfeature. + Returntype : Bio::EnsEMBL::MiscFeature + Exceptions : none + Caller : general + Status : Stable + +=cut + + +sub new_fast { + my $class = shift; + my $hashref = shift; + + $hashref->{'attributes'} ||= []; + + my $self = bless $hashref, $class; + weaken($self->{adaptor}) if ( ! isweak($self->{adaptor}) ); + return $self; +} + + + +=head2 add_Attribute + + Arg [1] : Bio::EnsEMBL::Attribute $attribute + Example : $misc_feature->add_attribute($attribute); + Description: Adds an attribute to this misc. feature + Returntype : none + Exceptions : throw on wrong argument type + Caller : general + Status : Stable + +=cut + +sub add_Attribute { + my ($self, $attrib) = @_; + + if( ! defined $attrib || ! $attrib->isa( "Bio::EnsEMBL::Attribute" )) { + throw( "You have to provide a Bio::EnsEMBL::Attribute, not a [$attrib]" ); + } + + $self->{'attributes'} ||= []; + push @{$self->{'attributes'}}, $attrib +} + + + +=head2 add_MiscSet + + Arg [1] : Bio::EnsEMBL::MiscSet $set + The set to add + Example : $misc_feature->add_MiscSet(Bio::EnsEMBL::MiscSet->new(...)); + Description: Associates this MiscFeature with a given Set. + Returntype : none + Exceptions : throw if the set arg is not provided, + throw if the set to be added does not have a code + Caller : general + Status : Stable + +=cut + + +sub add_MiscSet { + my $self = shift; + my $miscSet = shift; + + if(!$miscSet || !ref($miscSet) || !$miscSet->isa('Bio::EnsEMBL::MiscSet')) { + throw('Set argument must be a Bio::EnsEMBL::MiscSet'); + } + + $self->{'miscSets'} ||= []; + + push( @{$self->{'miscSets'}}, $miscSet ); +} + + + +=head2 get_all_MiscSets + + Arg [1] : optional string $code + The code of the set to retrieve + Example : $set = $misc_feature->get_all_MiscSets($code); + Description: Retrieves a set that this feature is associated with via its + code. Can return empty lists. Usually returns about one elements lists. + Returntype : listref of Bio::EnsEMBL::MiscSet + Exceptions : throw if the code arg is not provided + Caller : general + Status : Stable + +=cut + + +sub get_all_MiscSets { + my $self = shift; + my $code = shift; + + $self->{'miscSets'} ||= []; + if( defined $code ) { + my @results = grep { uc($_->code())eq uc( $code ) } @{$self->{'miscSets'}}; + return \@results; + } else { + return $self->{'miscSets'}; + } +} + + +=head2 get_all_Attributes + + Arg [1] : optional string $code + The code of the Attribute objects to retrieve + Example : @attributes = @{ $misc_feature->get_all_Attributes('name') }; + Description: Retrieves a list of Attribute objects for given code or all + of the associated Attributes. + Returntype : listref of Bio::EnsEMBL::Attribute + Exceptions : + Caller : general + Status : Stable + +=cut + +sub get_all_Attributes { + my $self = shift; + my $code = shift; + + my @results; + my $result; + + if( defined $code ) { + @results = grep { uc( $_->code() ) eq uc( $code )} @{$self->{'attributes'}}; + return \@results; + } else { + return $self->{'attributes'}; + } +} + +=head2 get_all_attribute_values + + Arg [1] : string $code + The code of the Attribute object values to retrieve + Example : @attributes_vals = @{$misc_feature->get_all_attribute_values('name')}; + Description: Retrieves a list of Attribute object values for given code or all + of the associated Attributes. + Returntype : listref of values + Exceptions : + Caller : general + Status : Stable + +=cut + +sub get_all_attribute_values { + my $self = shift; + my $code = shift; + my @results = map { uc( $_->code() ) eq uc( $code ) ? $_->value : () } + @{$self->{'attributes'}}; + return \@results; +} + +=head2 get_scalar_attribute + + Arg [1] : string $code + The code of the Attribute object values to retrieve + Example : $vals = $misc_feature->get_scalar_attribute('name'); + Description: Retrieves a value for given code or all + of the associated Attributes. + Returntype : scalar value + Exceptions : + Caller : general + Status : Stable + + +=cut + + +sub get_scalar_attribute { + my $self = shift; + my $code = shift; + my @results = grep { uc( $_->code() ) eq uc( $code )} @{$self->{'attributes'}}; + return @results ? $results[0]->value() : ''; +} + +sub get_first_scalar_attribute { + my $self = shift; + foreach my $code ( @_ ) { + my @results = grep { uc( $_->code() ) eq uc( $code )} @{$self->{'attributes'}}; + return $results[0]->value() if @results; + } + return ''; +} +=head2 display_id + + Arg [1] : none + Example : print $kb->display_id(); + Description: This method returns a string that is considered to be + the 'display' identifier. For misc_features this is the first + name or synonym attribute or '' if neither are defined. + Returntype : string + Exceptions : none + Caller : web drawing code + Status : Stable + +=cut + +sub display_id { + my $self = shift; + my ($attrib) = @{$self->get_all_Attributes('name')}; + ($attrib) = @{$self->get_all_Attributes('synonym')} if(!$attrib); + if( defined $attrib ) { + return $attrib->value(); + } else { + return ''; + } +} + + + + +1;