Raw content of Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::TranscriptExtended # # Ensembl module for Bio::EnsEMBL::Analysis::Runnable # # Copyright (c) 2006 Ensembl # # written by Jan-Hinnerk Vogel # # =head1 NAME Bio::EnsEMBL::Analysis:Tools::GeneBuildUtils::TranscriptExtended; =head1 SYNOPSIS Creation by re-blessing: for my $t ( @transcripts ) { bless $t,"Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::TranscriptExtended"; $t->ev_set('est') ; } Creation without re-blessing : my $tran = new Bio::EnsEMBL::Transcript(-EXONS => \@exons); =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::TranscriptExtended; use strict; use vars qw(@ISA); use Bio::EnsEMBL::Root; use Bio::EnsEMBL::Feature ; use Bio::EnsEMBL::Transcript ; use Bio::EnsEMBL::Utils::Exception qw(throw warning ); @ISA = qw(Bio::EnsEMBL::Transcript Bio::EnsEMBL::Feature); sub new { my($class) = shift; if( ref $class ) { $class = ref $class; } my $self = $class->SUPER::new(@_); return $self ; $self->{different_est_support} = {} ; } =head Name : ev_set Arg : String Func : getter/setter for the evidence-set Return : 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'}; } =head Name : remove_Exon Arg : Bio::EnsEMBL::Exon Func : removes exon from Bio::EnsEMBL::Transcript Return : none Example : $transcript->remove_Exon($exon) ; =cut sub remove_Exon { my ($self,$ex_to_remove ) = @_; unless ($ex_to_remove){ throw ("you have to supply an Bio::EnsEMBL::Exon object ". "which will be removed from the transcript\n"); } my $clone=[] ; my $ea = $self->{'_trans_exon_array'}; my $nr_before = scalar(@$ea); for my $e (@$ea) { if ($e ne $ex_to_remove ) { push @$clone, $e; } } $self->{'_trans_exon_array'} = $clone; if ($nr_before == scalar(@$clone) ) { warning( "No matching exon found, exon could not be removed\n" ); } return ; } sub has_3prim_support { my ($self,$value) = @_; if (defined($value)) { $self->{'has_3prim_sup'} = $value; } return $self->{'has_3prim_sup'}; } sub has_5prim_support { my ($self,$value) = @_; if (defined($value)) { $self->{'has_5prim_sup'} = $value; } return $self->{'has_5prim_sup'}; } sub extend_3prim_end { my ($self,$value) = @_; if (defined($value)) { $self->{'extend_3prim_end'} = $value; } return $self->{'extend_3prim_end'}; } sub extend_5prim_end { my ($self,$value) = @_; if (defined($value)) { $self->{'extend_5prim_end'} = $value; } return $self->{'extend_5prim_end'}; } sub nr_exons_overlapped_by_est { my ($self,$value) = @_; if (defined($value)) { $self->{'nr_exons_overlapped_est'}+= $value; } return $self->{'nr_exons_overlapped_est'}; } =head Name : different_est_support($transcript) Arg : Bio::EnsEMBL::Transcript Func : checks if $transcript is not overlapping the other transcripts, if there is no overlap between already stored transcripts this transcript is added =cut sub different_est_support { my ($self,$new_tr) = @_; my $overlap ; if ($new_tr) { for my $key ( keys %{ $self->{different_est_support} } ) { my $stored_tr = $self->{different_est_support}{$key} ; if ($stored_tr->seq_region_start <= $new_tr->seq_region_end && $new_tr->seq_region_start <= $stored_tr->seq_region_end ) { # new_tr overlaps stored_tr # check which transcript has more exons my $new_tr_exons = scalar ( @{ $new_tr->get_all_Exons } ) ; my $stored_tr_exons = scalar(@{$self->{different_est_support}{$stored_tr}->get_all_Exons }); if ($new_tr_exons > $stored_tr_exons ) { delete $self->{different_est_support}{$stored_tr} ; if (exists $self->{different_est_support}{$stored_tr}) { throw(" key wasn't delted\n" ) ; }else { warn(" key is deleted\n" ) ; } $self->{different_est_support}{$new_tr} = $new_tr ; } }else { ${$self->{different_est_support}}{$new_tr}=$new_tr ; } } } return $self->{different_est_support} ; } =head Name : exchange_exon Arg[1] : Bio::EnsEMBL::Exon Arg[2] : Bio::EnsEMBL::Exon Func : splices a new exon in a Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::TranscriptExtended-object and cut's ond the old Bio::EnsEMBL::Exon object Returnval : Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::TranscriptExtended() =cut sub exchange_exon { my ($self, $old_exon, $new_exon ) = @_ ; my $biotype = $self->biotype ; my @exons = @{ $self->get_all_Exons } ; my $new_tr = Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils::TranscriptExtended->new(); for my $e (@exons) { if ($e eq $old_exon) { $e = $new_exon ; } $new_tr->add_Exon($e) ; } $new_tr->biotype($biotype) ; return $new_tr ; } =head Name : score Arg[1] : Scalar score Func : Get / Set a score value for the transcript Returnval : Scalar score =cut sub score { my ($self,$value) = @_; if (defined($value)) { $self->{'score'} = $value; } return $self->{'score'}; } =head Name : similarity Arg[1] : Bio::EnsEMBL::Transcript Func : Get / Set a similarity transcript associated with this transcript Returnval : Bio::EnsEMBL::Transcript =cut sub similarity { my ($self,$value) = @_; if (defined($value)) { $self->{'similarity'} = $value; } return $self->{'similarity'}; } 1;