Raw content of Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::ExonExtended
#
# Ensembl module for Bio::EnsEMBL::Analysis::Runnable
#
# Copyright (c) 2006 Ensembl
#
# written by Jan-Hinnerk Vogel
#
#
=head1 NAME
Bio::EnsEMBL::Analysis:Tools::GeneBuildUtils::ExonExtended;
=head1 SYNOPSIS
Creation by re-blessing:
for my $t ( @transcripts ) {
bless $t,"Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::ExonExtended";
$t->ev_set('est') ;
}
Creation without re-blessing :
my $tran = new Bio::EnsEMBL::Transcript(-EXONS => \@exons);
=head1 SYNOPSIS
Creation by re-blessing:
for my $t ( @transcripts ) {
bless $t,"Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::ExonExtended";
$t->ev_set('est') ;
}
Creation without re-blessing :
my $exon= new Bio::EnsEMBL::Exon(
-START => 100 ,
-END => 300,
-STRAND => '-1',
-SLICE => $slice,
-ANALYSIS => $analysis,
);
=head1 DESCRIPTION
This module extends a Bio::EnsEMBL::Transcript with smoe other
methods. You have to re-bless your Bio::EnsEMBL::Transcript objects
to use it.
=head1 CONTACT
Post questions to the Ensembl development list: ensembl-dev@ebi.ac.uk
=cut
package Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::ExonExtended;
use strict;
use vars qw(@ISA);
use Bio::EnsEMBL::Root;
use Bio::EnsEMBL::Feature ;
use Bio::EnsEMBL::Exon ;
use Bio::EnsEMBL::Utils::Exception qw(throw warning );
@ISA = qw(Bio::EnsEMBL::Exon Bio::EnsEMBL::Feature);
sub new {
my($class) = shift;
if( ref $class ) {
$class = ref $class;
}
my $self = $class->SUPER::new(@_);
return $self ;
}
=head2 biotype
Name : biotype
Arg : String
Func : getter/setter for the biotype to which this Exon belongs to
Returntype : String describing biotype
=cut
sub biotype {
my ($self,$value) = @_;
if (defined($value)) {
$self->{'type'} = $value;
}
return $self->{'type'};
}
=head2 ev_set
Name : ev_set
Arg : String
Func : getter/setter for the evidence-set
Returntype : String describing ev_set (defined in GeneBuild/TrancriptCoalescer.pm)
=cut
sub ev_set {
my ($self,$value) = @_;
if (defined($value)) {
$self->{'set'} = $value;
}
return $self->{'set'};
}
=head2 transcript
Name : transcript
Arg : Bio::EnsEMBL::Transcript
Func : getter/setter for the Bio::EnsEMBL::Transcript the Exon belongs to
Returntype : Bio::EnsEMBL::Transcript
=cut
sub transcript {
my ($self,$value) = @_;
if (defined($value)) {
$self->{'transcript'} = $value;
}
return $self->{'transcript'};
}
=head1
Name : number_exons
Arg : int
Func : getter/setter number of exons in Transcript
Returntype : int
=cut
sub number_exons {
my ($self) = @_ ;
if (defined($self->transcript)){
return scalar( @{ $self->transcript->get_all_Exons} ) ;
}else {
warning("Exon has no Bio::EnsEMBL::Transript-object attached - can't get number of exons\n" ) ;
}
return undef ;
}
=head2 prev_exon
Name : prev_exon
Arg : Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::ExonExtended;
Func : points to previous exon (5'prim)
Returntype : Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::ExonExtended;
=cut
sub prev_exon {
my ($self,$value) = @_;
if (defined($value)) {
$self->{'prev_exon'} = $value;
}
return $self->{'prev_exon'};
}
=head2 next_exon
Name : next_exon
Arg : Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::ExonExtended;
Func : points to next exon (3'prim)
Returntype : Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::ExonExtended;
=cut
sub next_exon {
my ($self,$value) = @_;
if (defined($value)) {
$self->{'next_exon'} = $value;
}
return $self->{'next_exon'};
}
=head2 is_terminal_exon
Name : is_terminal_exon
Arg : none
Func : returns 1 if exon is terminal and 0 othewise
Returntype : int (0 || 1)
=cut
sub is_terminal_exon {
my ($self) = @_;
if ($self->next_exon && $self->prev_exon) {
return 0 ;
}
return 1 ;
}
=head2 is_3prim_exon
Name : is_3prim_exon
Arg : none
Func : returns 1 if exon is at 3prim end of transcript
Returntype : int (0 || 1)
=cut
sub is_3prim_exon {
my ($self) = @_;
return 1 if ($self->prev_exon && !$self->next_exon) ;
return 0 ;
}
=head2 is_5prim_exon
Name : is_5prim_exon
Arg : none
Func : returns 1 if exon is at 5prim end of transcript
Returntype : int (0 || 1)
=cut
sub is_5prim_exon {
my ($self) = @_;
return 1 if ($self->next_exon && !$self->prev_exon) ;
return 0 ;
}
=head2 cluster
Name : cluster
Arg : Bio::EnsEMBL::Transcript
Func : getter/setter for the Bio::EnsEMBL::Transcript the Exon belongs to
Returntype : Bio::EnsEMBL::Transcript
=cut
sub cluster {
my ($self,$value) = @_;
if (defined($value)) {
$self->{'cluster'} = $value;
}
return $self->{'cluster'};
}
=head2 visited ( $val )
Function : marks if exon has been visited in recursion procedure or not
Arg : integer (true / false )
Returntype : integer (true || false )
Caller : recursion procedure in Condense_EST.pm
=cut
sub visited {
my ($self,$value) = @_;
if (defined($value)) {
$self->{'visited'} = $value;
}
return $self->{'visited'};
}
=head2 get_percentage_exon_conversation_in_exon_cluster()
Example : $self->get_percentage_exon_conversation_in_exon_cluster
Arg : none
Function : returns the precentage of other Exons in the same cluster which
share the same Exon-boundaries.
Returntype : float
=cut
sub get_percentage_exon_conversation_in_exon_cluster {
my ( $self ) = @_ ;
my @ex_clust = @{ $self->cluster->get_all_Exons_in_ExonCluster } ;
# uniquify exon acc. to their hashkey
my %uniq_exons ;
for (@ex_clust) {
unless ($_->is_terminal_exon) {
$uniq_exons { $_->hashkey }++ ;
}
}
# get maximum value (most consered boundaries) out of hash
my @tmp = reverse sort (values %uniq_exons ) ;
my $max_cons = -1;
if (scalar(@tmp) > 0) {
$max_cons = shift @tmp ;
}
my $percentage_exon_conservation = 0 ;
if ($max_cons > 0 ) {
if ($uniq_exons{$self->hashkey} ){
$percentage_exon_conservation = $uniq_exons{$self->hashkey} / $max_cons ;
}
} else {
$percentage_exon_conservation = 0 ;
}
return $percentage_exon_conservation ;
}