Bio-EnsEMBL
view release on metacpan or search on metacpan
lib/Bio/EnsEMBL/PredictionTranscript.pm view on Meta::CPAN
and is not stored in the database. The translation always
spans the entire transcript (no UTRs; all CDS) and does not
have an associated dbID, stable_id or adaptor.
Returntype : int
Exceptions : none
Caller : general
Status : Stable
=cut
sub translation {
my $self = shift;
#calculate translation on the fly
my $strand = $self->strand();
my $start_exon;
my $end_exon;
my @exons = @{$self->get_all_Exons()};
return undef if(!@exons);
$start_exon = $exons[0];
$end_exon = $exons[-1];
my $pta;
if($self->adaptor()) {
$pta = $self->adaptor()->db()->get_TranslationAdaptor();
} else {
#warning("PredictionTranscript has no adaptor, may not be able to obtain " .
# "translation");
}
my $Xseq = $self->spliced_seq();
my $start_phase = $start_exon->phase;
if( $start_phase > 0 ) {
$Xseq = "N"x$start_phase . $Xseq;
}
my $tmpSeq = new Bio::Seq( -id => $self->display_id,
-seq => $Xseq,
-moltype => 'dna',
-alphabet => 'dna' );
return Bio::EnsEMBL::Translation->new
(-ADAPTOR => $pta,
-START_EXON => $start_exon,
-END_EXON => $end_exon,
-SEQ_START => 1,
-SEQ_END => $end_exon->length(),
-SEQ => $tmpSeq->translate()->seq());
}
=head2 translate
Arg [1] : Boolean, emulate the behavior of old bioperl versions where
an incomplete final codon of 2 characters is padded and guessed
Function : Give a peptide translation of all exons currently in
the PT. Gives empty string when none is in.
Returntype: a Bio::Seq as in transcript->translate()
Exceptions: none
Caller : general
Status : Stable
=cut
sub translate {
my ($self, $complete_codon) = @_;
my $dna = $self->translateable_seq();
my $codon_table_id;
if ( defined( $self->slice() ) ) {
my $attrib;
($attrib) = @{ $self->slice()->get_all_Attributes('codon_table') };
if ( defined($attrib) ) {
$codon_table_id = $attrib->value();
}
}
$codon_table_id ||= 1; #default will be vertebrates
# Remove the final stop codon from the mrna
# sequence produced if it is present, this is so any peptide produced
# won't have a terminal stop codon
# if you want to have a terminal stop codon either comment this line out
# or call translatable seq directly and produce a translation from it
if( CORE::length( $dna ) % 3 == 0 ) {
# $dna =~ s/TAG$|TGA$|TAA$//i;
my $codon_table = Bio::Tools::CodonTable->new( -id => $codon_table_id );
if ( $codon_table->is_ter_codon( substr( $dna, -3, 3 ) ) ) {
substr( $dna, -3, 3, '' );
}
} elsif ( CORE::length($dna) % 3 == 2 ) {
# If we have a partial codon of 2 bp we need to decide if we
# trim it or not to fix some bad behaviour in older bioperl
# versions
if ( $complete_codon ) {
# If we want to do the bad behavior of bioperl 1.6.1 and older
# where we guess the last codon if inomplete, pad an N
# to the mrna sequence
$dna .= 'N';
} else {
# Otherwise trim those last two bp off so the behavior is
# consistent across bioperl versions
substr( $dna, -2, 2, '' );
}
}
my $bioseq = new Bio::Seq( -id => $self->display_id,
-seq => $dna,
-moltype => 'dna',
-alphabet => 'dna' );
my $translation = $bioseq->translate(undef,undef,undef,$codon_table_id);
return $translation;
}
=head2 cdna_coding_start
Arg [1] : none
Example : $relative_coding_start = $transcript->cdna_coding_start();
Description: Retrieves the position of the coding start of this transcript
in cdna coordinates (relative to the start of the 5prime end of
the transcript, excluding introns, including utrs). This is
always 1 for prediction transcripts because they have no UTRs.
Returntype : int
Exceptions : none
Caller : five_prime_utr, get_all_snps, general
Status : Stable
=cut
sub cdna_coding_start { return 1 }
=head2 cdna_coding_end
Arg [1] : none
Example : $relative_coding_start = $transcript->cdna_coding_end();
Description: Retrieves the position of the coding end of this transcript
in cdna coordinates (relative to the start of the 5prime end of
the transcript, excluding introns, including utrs). This is
always te length of the cdna for prediction transcripts because
they have no UTRs.
Returntype : int
Exceptions : none
Caller : five_prime_utr, get_all_snps, general
Status : Stable
=cut
sub cdna_coding_end {
my ($self) = @_;
return length( $self->spliced_seq() );
}
( run in 2.170 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )