Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/IdentityXref.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/IdentityXref.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,522 @@ +=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::IdentityXref + +=head1 SYNOPSIS + + my $xref = Bio::EnsEMBL::IdentityXref->new( + -XREF_IDENTITY => 80.4, + -ENSEMBL_IDENTITY => 90.1, + -SCORE => 90, + -EVALUE => 12, + -CIGAR_LINE => '23MD3M2I40M', + -XREF_START => 1, + -XREF_END => 68, + -ENSEMBL_START => 10, + -ENSEMBL_END => 77, + -ADAPTOR => $adaptor, + -PRIMARY_ID => $primary_id, + -DBNAME => 'SwissProt' + ); + +=head1 METHODS + +=cut + +package Bio::EnsEMBL::IdentityXref; +use vars qw(@ISA $AUTOLOAD); +use strict; +use Bio::EnsEMBL::Utils::Argument qw( rearrange ); +use Bio::EnsEMBL::Utils::Exception qw( deprecate ); + +@ISA = qw( Bio::EnsEMBL::DBEntry ); + + +=head2 new + + Arg [...] : XREF_IDENTITY ENSEMBL_IDENTITY SCORE EVALUE CIGAR_LINE + : XREF_START XREF_END ENSEMBL_START ENSEMBL_END + : ANALYSIS pairs + Example : see synopsis + Description: Create a new Bio::EnsEMBL::IdentityXref object + Returntype : Bio::EnsEMBL::IdentityXref + Exceptions : none + Caller : general + Status : Stable + +=cut + +my $error_shown = 0; + +sub new { + my ($class, @args) = @_; + my $self = $class->SUPER::new(@args); + my ($query_identity, $target_identity, $score, $evalue, + $cigar_line, $query_start, $query_end, $translation_start, + $translation_end, $analysis, $xref_identity, $ensembl_identity, + $xref_start, $xref_end, $ensembl_start, $ensembl_end) = rearrange( + [qw(QUERY_IDENTITY TARGET_IDENTITY SCORE EVALUE CIGAR_LINE + QUERY_START QUERY_END TRANSLATION_START TRANSLATION_END + ANALYSIS XREF_IDENTITY ENSEMBL_IDENTITY XREF_START XREF_END ENSEMBL_START ENSEMBL_END)], @args); + + if((defined($query_identity) or defined($target_identity) or defined($query_start) or defined ($query_end) or + defined($translation_start) or defined($translation_end)) and !$error_shown){ + print STDERR "Arguments have now been changed to stop confusion so please replace the following\n"; + print STDERR "\tQUERY_IDENTITY\t->\tXREF_IDENTITY\n"; + print STDERR "\tTARGET_IDENTITY\t->\tENSEMBL_IDENTITY\n"; + print STDERR "\tQUERY_START\t->\tXREF_START\n"; + print STDERR "\tQUERY_END\t->\tXREF_END\n"; + print STDERR "\tTRANSLATION_START\t->\tENSEMBL_START\n"; + print STDERR "\tTRANSLATION_END\t->\tENSEMBL_END\n"; + print STDERR "The old arguments will be removed in a futute release so please change your code to the new names\n"; + $error_shown = 1; + } + $self->{'xref_identity'} = $query_identity || $xref_identity; + $self->{'ensembl_identity'} = $target_identity || $ensembl_identity; + $self->{'score'} = $score; + $self->{'evalue'} = $evalue; + $self->{'cigar_line'} = $cigar_line; + $self->{'xref_start'} = $query_start || $xref_start; + $self->{'xref_end'} = $query_end || $xref_start; + $self->{'ensembl_start'} = $translation_start || $ensembl_start; + $self->{'ensembl_end'} = $translation_end || $ensembl_end; + $self->{'analysis'} = $analysis; + + return $self; +} + +=head2 xref_identity + + Arg [1] : (optional) string $value + Example : $xref_identity = $id_xref->xref_identity; + Description: Getter/Setter for xref identity + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub xref_identity{ + my $obj = shift; + if( @_ ) { + my $value = shift; + $obj->{'xref_identity'} = $value; + } + return $obj->{'xref_identity'}; + +} + + +=head2 ensembl_identity + + Arg [1] : (optional) string $value + Example : $ensembl_identity = $id_xref->ensembl_identity; + Description: Getter/Setter for ensembl identity + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub ensembl_identity{ + my $obj = shift; + if( @_ ) { + my $value = shift; + $obj->{'ensembl_identity'} = $value; + } + return $obj->{'ensembl_identity'}; + +} + + + +=head2 cigar_line + + Arg [1] : string $cigar_line + Example : none + Description: get/set for attribute cigar_line + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub cigar_line { + my $self = shift; + $self->{'cigar_line'} = shift if( @_ ); + return $self->{'cigar_line'}; +} + + +=head2 ensembl_start + + Arg [1] : string $ensembl_start + Example : none + Description: get/set for attribute ensembl_start + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub ensembl_start { + my $self = shift; + $self->{'ensembl_start'} = shift if( @_ ); + return $self->{'ensembl_start'}; +} + + +=head2 ensembl_end + + Arg [1] : string $ensembl_end + Example : none + Description: get/set for attribute ensembl_end + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub ensembl_end { + my $self = shift; + $self->{'ensembl_end'} = shift if( @_ ); + return $self->{'ensembl_end'}; +} + + +=head2 xref_start + + Arg [1] : string $xref_start + Example : none + Description: get/set for attribute xref_start + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub xref_start { + my $self = shift; + $self->{'xref_start'} = shift if( @_ ); + return $self->{'xref_start'}; +} + + +=head2 xref_end + + Arg [1] : string $xref_end + Example : none + Description: get/set for attribute xref_end + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub xref_end { + my $self = shift; + $self->{'xref_end'} = shift if( @_ ); + return $self->{'xref_end'}; +} + + +=head2 score + + Arg [1] : string $score + Example : none + Description: get/set for attribute score + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub score { + my $self = shift; + $self->{'score'} = shift if( @_ ); + return $self->{'score'}; +} + + +=head2 evalue + + Arg [1] : string $evalue + Example : none + Description: get/set for attribute evalue + Returntype : string + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub evalue { + my $self = shift; + $self->{'evalue'} = shift if( @_ ); + return $self->{'evalue'}; +} + + + + +=head2 get_mapper + + Args : none + Example : none + Description: produces a mapper object that takes coordinates from one side + of the alignment to the other side. "ensembl" and "external" + are the two coordinate systems contained. + Returntype : Bio::EnsEMBL::Mapper + Exceptions : none + Caller : general, ProteinDAS subsystem + Status : Stable + +=cut + + +sub get_mapper { + my ( $self ) = @_; + # parse the cigar_line and create a mapper ... + if( exists $self->{'_cached_mapper'} ) { + return $self->{'_cached_mapper'}; + } + + my ( @lens, @chars ); + + # if there is no cigar line, nothing is going to be loaded + if( $self->cigar_line() ) { + my @pre_lens = split( '[DMI]', $self->cigar_line() ); + @lens = map { if( ! $_ ) { 1 } else { $_ }} @pre_lens; + @chars = grep { /[DMI]/ } split( //, $self->cigar_line() ); + } + my $translation_start = $self->ensembl_start(); + my $translation_end = $self->ensembl_end(); + my $query_start = $self->xref_start(); + my $query_end = $self->xref_end(); + + # my $hit_id = $self->display_id(); + my $ensembl_id = "ensembl_id"; + my $external_id = "external_id"; + # now build the mapper + my $mapper = Bio::EnsEMBL::Mapper->new( "external", "ensembl" ); + + + for( my $i=0; $i<=$#lens; $i++ ) { + my $length = $lens[$i]; + my $char = $chars[$i]; + if( $char eq "M" ) { + $mapper->add_map_coordinates( $external_id, $query_start, + $query_start + $length - 1, 1, + $ensembl_id, $translation_start, + $translation_start + $length - 1); + $query_start += $length; + $translation_start += $length; + + } elsif( $char eq "D" ) { + $translation_start += $length; + } elsif( $char eq "I" ) { + $query_start += $length; + } + } + + $self->{'_cached_mapper'} = $mapper; + + return $mapper; +} + + + +=head2 transform_feature + + Arg [1] : a feature type with start and end $feature + This doesnt need to be a Bio::EnsEMBL::Feature as it doesnt + need an attached slice. We may have to introduce an appropriate + object type. + Example : my $ens_prot_feature_list = + $ident_xref->transform_feature( $swiss_prot_feature ); + Description: a list of potential partial features which represent all + mappable places + of the original feature in ensembl translation coordinates. + Returntype : listref of whatever was put in + Exceptions : none + Caller : general, ProteinDAS subsystem + Status : Stable + +=cut + + +sub transform_feature { + my $self= shift; + my $feature = shift; + + my $fstart = $feature->start(); + my $fend = $feature->end(); + + my $mapper = $self->get_mapper(); + my @result; + + my @coords = $mapper->map_coordinates( "external_id", $fstart, $fend, + 1, "external" ); + + for my $coord ( @coords ) { + if( $coord->isa( "Bio::EnsEMBL::Mapper::Coordinate" )) { + my $new_feature; + %{$new_feature} = %$feature; + bless $new_feature, ref( $feature ); + $new_feature->start( $coord->start() ); + $new_feature->end( $coord->end() ); + + push( @result, $new_feature ); + } + } + + return \@result; +} + + + +=head2 map_feature + + Arg [1] : a start,end capable feature object + Example : none + Description: + Returntype : list of Coordinates/Gaps which represents the mapping + Exceptions : none + Caller : another way of doing ProteinDAS + Status : Stable + +=cut + +sub map_feature { + my $self = shift; + my $feature = shift; + + + my $fstart = $feature->start(); + my $fend = $feature->end(); + + my $mapper = $self->get_mapper(); + my @coords = $mapper->map_coordinates( "external_id", $fstart, $fend, 1, + "external" ); + + return @coords; +} + + +########################### +# DEPRECATED METHODS FOLLOW +########################### + +=head2 query_identity + + Description: DEPRECATED. Use xref_identity() instead. + Status : At Risk + +=cut + +sub query_identity{ + deprecate("Use xref_identity instead"); + xref_identity(@_); +} + + +=head2 target_identity + + Description: DEPRECATED. Use ensembl_identity() instead. + Status : At Risk + +=cut + +sub target_identity{ + deprecate("Use ensembl_identity instead"); + ensembl_identity(@_); +} + + + +=head2 translation_start + + Description: DEPRECATED. Use ensembl_start() instead. + Status : At Risk + +=cut + +sub translation_start { + deprecate("Use ensembl_start instead"); + ensembl_start(@_); + +} + + +=head2 translation_end + + Description: DEPRECATED. Use ensembl_end() instead. + Status : At Risk + +=cut + +sub translation_end { + deprecate("Use ensembl_end instead"); + ensembl_end(@_); +} + + + +=head2 query_start + + Description: DEPRECATED. Use xref_start() instead. + Status : At Risk + +=cut + +sub query_start { + deprecate("Use xref_start instead"); + xref_start(@_); + +} + + + +=head2 query_end + + Description: DEPRECATED. Use xref_end() instead. + Status : At Risk + +=cut + +sub query_end { + deprecate("Use xref_end instead"); + xref_end(@_); + +} + + +1;