Bio::LiveSeq
Translation
Summary
Bio::LiveSeq::Translation - Translation class for LiveSeq
Package variables
No package variables defined.
Included modules
Inherit
Synopsis
Description
This stores informations about aminoacids translations of transcripts.
The implementation is that a Translation object is the translation of
a Transcript object, with different possibilities of manipulation,
different coordinate system and eventually its own ranges (protein domains).
Methods
Methods description
Title : new
Usage : $protein = Bio::LiveSeq::Translation->new(-transcript => $transcr);
Function: generates a new Bio::LiveSeq::Translation
Returns : reference to a new object of class Translation
Errorcode -1
Args : reference to an object of class Transcript |
Title : valid
Usage : $transcript = $obj->get_Transcript()
Function: retrieves the reference to the object of class Transcript (if any)
attached to a LiveSeq object
Returns : object reference
Args : none |
Title : aa_ranges
Usage : @proteinfeatures = $translation->aa_ranges()
Function: to retrieve all the LiveSeq AARange objects attached to a
Translation, usually created out of a SwissProt database entry
crossreferenced from an EMBL CDS feature.
Returns : an array
Args : none |
Methods code
sub new
{ my ($thing, %args) = @_;
my $class = ref($thing) || $thing;
my ($obj,%translation);
my $transcript=$args{-transcript};
$obj =\% translation;
$obj = bless $obj, $class;
unless ($transcript) {
$obj->throw("$class not initialised because no -transcript given");
}
unless (ref($transcript) eq "Bio::LiveSeq::Transcript") {
$obj->throw("$class not initialised because no object of class Transcript given");
}
my $strand = $transcript->strand;
my $seq = $transcript->{'seq'};
$obj->{'strand'}=$strand;
$obj->{'seq'}=$seq;
$obj->{'transcript'}=$transcript;
$obj->{'alphabet'}="protein";
$transcript->{'translation'}=$obj; return $obj;} |
sub get_Transcript
{ my $self=shift;
return ($self->{'transcript'});} |
sub change
{ my ($self)=@_;
$self->warn("Cannot change a Translation object!\nChanges have to be issued at the nucleotide level!");
return (-1);} |
sub positionchange
{ my ($self)=@_;
$self->warn("Cannot change a Translation object!\nChanges have to be issued at the nucleotide level!");
return (-1);} |
sub labelchange
{ my ($self)=@_;
$self->warn("Cannot change a Translation object!\nChanges have to be issued at the nucleotide level!");
return (-1);} |
sub transl_seq
{ my $self=shift;
my $transcript=$self->get_Transcript;
my $translation=$transcript->translate(undef, undef, undef,
$self->translation_table)->seq;
return $translation; } |
sub seq
{ my $self=shift;
my $proteinseq;
my $transcript=$self->get_Transcript;
my $translation=$transcript->translate(undef, undef, undef,
$self->translation_table)->seq;
my $stop_pos=index($translation,"*");
if ($stop_pos == -1) { my $downstreamseq=$transcript->downstream_seq();
my $cdnaseq=$transcript->seq();
my $extendedseq = new Bio::PrimarySeq(-seq => "$cdnaseq$downstreamseq",
-alphabet => 'dna'
);
$translation=$extendedseq->translate(undef, undef, undef,
$self->translation_table)->seq;
$stop_pos=index($translation,"*");
if ($stop_pos == -1) { $self->warn("Warning: no stop codon found in the retrieved sequence downstream of Transcript ",1);
undef $stop_pos;
$proteinseq=$translation;
} else {
$proteinseq=substr($translation,0,$stop_pos+1);
}
} else {
$proteinseq=substr($translation,0,$stop_pos+1);
}
return $proteinseq;} |
sub length
{ my $self=shift;
my $seq=$self->seq;
my $length=length($seq);
return $length; } |
sub all_labels
{ my $self=shift;
return $self->get_Transcript->all_labels; } |
sub valid
{ my ($self,$label)=@_;
my $i;
my @labels=$self->get_Transcript->all_labels;
my $length=$#labels;
while ($i <= $length) {
if ($label == $labels[$i]) {
return (1); }
$i=$i+3;
}
return (0);
} |
sub label
{ my ($self,$position)=@_;
my $firstlabel=$self->coordinate_start; if ($position > 0) {
$position=$position*3-2;
} else { $position=$position*3;
}
return $self->get_Transcript->label($position,$firstlabel);
} |
sub position
{ my ($self,$label)=@_;
my $firstlabel=$self->coordinate_start; my $position=$self->get_Transcript->position($label,$firstlabel);
use integer;
my $modulus=$position % 3;
if ($position == 0) {
return (0);
} elsif ($position > 0) {
if ($modulus != 1) {
$self->warn("Attention! Label $label is not in frame ".
"(1st position of triplet) with protein",1) if $self->verbose > 0; if ($modulus == 2) {
return ($position / 3 + 1); } else { return ($position / 3); }
}
return ($position / 3 + 1); } else { if ($modulus != 0) {
$self->warn("Attention! Label $label is not in frame ".
"(1st position of triplet) with protein",1) if $self->verbose > 0; return ($position / 3 - 1); # ok for both other positions } return ($position / 3);
}
$self->throw( "WEIRD: execution shouldn't have reached here");
return (0);
} |
sub start
{ my $self=shift;
return ($self->{'transcript'}->start);} |
sub end
{ my $self=shift;
return ($self->{'transcript'}->end);} |
sub aa_ranges
{ my $self=shift;
return ($self->{'aa_ranges'});} |
sub translation_table
{ my $self=shift;
$self->get_Transcript->translation_table(@_); } |
sub labelsubseq
{ my ($self,$start,$length,$end)=@_;
my ($pos1,$pos2);
my $transcript=$self->get_Transcript;
if ($start) {
unless ($transcript->valid($start)) {
$self->warn("Start label not valid"); return (-1);
}
$pos1=$self->position($start);
}
if ($end) {
if ($end == $start) {
$length=1;
} else {
unless ($transcript->valid($end)) {
$self->warn("End label not valid"); return (-1);
}
unless ($transcript->follows($start,$end) == 1) {
$self->warn("End label does not follow Start label!"); return (-1);
}
$pos2=$self->position($end);
$length=$pos2-$pos1+1;
}
}
my $sequence=$self->seq;
return (substr($sequence,$pos1-1,$length));} |
sub offset
{ my $self=shift;
return ($self->{'offset'});} |
General documentation
| AUTHOR - Joseph A.L. Insana | Top |
Email:
Insana@ebi.ac.uk,
jinsana@gmx.netAddress:
EMBL Outstation, European Bioinformatics Institute
Wellcome Trust Genome Campus, Hinxton
Cambs. CB10 1SD, United Kingdom
The rest of the documentation details each of the object
methods. Internal methods are usually preceded with a _