Skip to content
Snippets Groups Projects
Commit 8bacd756 authored by Alistair Rust's avatar Alistair Rust
Browse files

Changes to the way in which external_name and external_db calls are made.

 - These method calls in Gene.pm are delegated to Transcript.pm
 - The calls are species specific, removing the need to query the priority
   column the external_db table.
parent cdbb2c8f
No related branches found
No related tags found
No related merge requests found
......@@ -380,12 +380,14 @@ sub dbID {
Arg [1] : string $external_name
Example : none
Description: get/set for attribute external_name. It could be calculated
from dblinks in a species dependent way. Well introduce
that later.
Description: get/set for attribute external_name. It initially calculates
the longest transcript for the gene in question and then
delegates the call to the external_name method on Transcript.
Species dependant searching is handled by this method on
Transcript.
Returntype : string
Exceptions : none
Caller : Lite::GeneAdaptor knows how to set it correct
Caller : general
=cut
......@@ -395,36 +397,92 @@ sub external_name {
if( defined $arg ) {
$self->{'_external_name'} = $arg;
}
else {
# find the transcript with the longest length which is
# attached to this gene. Use the longest length as the
# determining factor when having to select between transcripts
# and their external references
my $transcript = $self->_get_longest_Transcript;
$self->{'_external_name'} = $transcript->external_name;
}
return $self->{'_external_name'};
return $self->{'_external_name'};
}
=head2 external_db
Arg [1] : string $external_db
Example : none
Description: get/set for attribute external_db. The db is the one that
belongs to the external_name
belongs to the external_name. It initially calculates
the longest transcript for the gene in question and then
delegates the call to the external_db method on Transcript.
Species dependant searching is handled by this method on
Transcript.
Returntype : string
Exceptions : none
Caller : general
=cut
sub external_db {
my ($self, $arg ) = @_;
if( defined $arg ) {
$self->{'_external_db'} = $arg;
}
else {
# find the transcript with the longest length which is
# attached to this gene. Use the longest length as the
# determining factor when having to select between transcripts
# and their external references
my $transcript = $self->_get_longest_Transcript;
$self->{'_external_db'} = $transcript->external_db;
}
return $self->{'_external_db'};
}
=head2 _get_longest_Transcript
Args : none
Example : none
Description: An INTERNAL method which determines the longest transcript
for the given gene.get/set for attribute external_db. The db is the one that
belongs to the external_name. It initially calculates
the longest transcript for the gene in question and then
delegates the call to the external_db method on Transcript.
Species dependant searching is handled by this method on
Transcript.
Returntype : a single Bio::EnsEMBL::Transcript
Exceptions : none
Caller : external_name and external_db methods on Gene.pm
=cut
sub _get_longest_Transcript {
my $self = shift;
my $transcripts = $self->get_all_Transcripts;
my $longest_index = 0;
my $longest_length = 0;
my $tran_count = 0;
foreach my $trans ( @{$transcripts} ) {
if ( $trans->length > $longest_length ) {
$longest_length = $trans->length;
$longest_index = $tran_count;
}
$tran_count++;
}
return $transcripts->[$longest_index];
}
=head2 description
......@@ -883,7 +941,7 @@ sub temporary_id {
Description: You can set the species for this gene if you want to use species
specific behaviour. Otherwise species is retrieved from attached
database.
Returntype : Bio::EnsEMBL::Species
Returntype : Bio::Species
Exceptions : none
Caller : external_name, external_db, general for setting
......
......@@ -167,6 +167,9 @@ sub external_db {
if( defined $arg ) {
$self->{'_external_db'} = $arg;
}
else {
$self->{'_external_db'} = $self->_get_external_info("db");
}
return $self->{'_external_db'};
}
......@@ -184,16 +187,108 @@ sub external_db {
=cut
sub external_name {
my ($self, $arg ) = @_;
my ($self, $arg) = @_;
if( defined $arg ) {
$self->{'_external_name'} = $arg;
}
else {
$self->{'_external_name'} = $self->_get_external_info("name");
}
return $self->{'_external_name'};
}
=head2 _get_external_info
Title : _get_external_info
Usage : $ext_name = $obj->_get_external_info();
Function: external_name if available
Example :
Returns : the external name of this transcript
Args : string. Switch on whether to return a name or dbname.
=cut
sub _get_external_info {
my ($self, $required) = @_;
# find out from which species this translation comes from
my $species = $self->species->species;
# go and grab the list of DBLinks
my $dblinks = $self->get_all_DBLinks;
# set the priority of the order in which the external dbs are searched
# based on the species
# the actual order of dbs was determined by the deprecated priority column
# in the external_db table
my @priority_order = [];
# the kind of case statment switching is performed on the first records
# from the meta table of the relevant species.
# human
if ( $species eq 'sapiens' ) {
@priority_order = qw{ HUGO SWISSPROT SPTREMBL RefSeq LocusLink };
}
# anopheles
elsif ( $species eq 'gambiae' ) {
@priority_order = qw{ ANOSUB SWISSPROT SPTREMBL };
}
# zebra fish
elsif ( $species eq 'rerio' ) {
@priority_order = qw{ SWISSPROT SPTREMBL };
}
# fugu
elsif ( $species eq 'rubripes' ) {
@priority_order = qw{ SWISSPROT SPTREMBL RefSeq LocusLink HUGO };
}
# mouse
elsif ( $species eq 'musculus' ) {
@priority_order = qw{ MarkerSymbol SWISSPROT RefSeq LocusLink };
}
# default list if species is not set
else {
$self->warn("Transcript::external_name - No species set. Using default DB order.");
@priority_order = qw{ HUGO SWISSPROT SPTREMBL RefSeq LocusLink };
}
# find a match (first one) for the db with the highest available priority
my $name = undef;
my $db = undef;
# we would hope that each transcript has only a single DBLink per db but
# implement as a loop just in case, taking the first relevant record found
foreach my $curr_db ( @priority_order ) {
foreach my $dbl ( @{$dblinks} ) {
if ( $curr_db eq $dbl->dbname ) {
$name = $dbl->primary_id;
$db = $dbl->dbname;
last;
}
}
if ( defined $name ) {
last;
}
}
if ( $required eq 'name' ) {
return $name;
}
elsif ( $required eq 'db' ) {
return $db;
}
else {
$self->warn("Transcript::_get_external_info - no xref data could be retrieved.");
return undef;
}
}
sub is_known {
my $self = shift;
if( defined $self->external_name() && $self->external_name() ne '' ) {
......@@ -1467,6 +1562,36 @@ sub species {
=head2 species
Arg [1] : optional Bio::Species $species
Example : none
Description: You can set the species for this gene if you want to use species
specific behaviour. Otherwise species is retrieved from attached
database.
Returntype : Bio::Species
Exceptions : none
Caller : external_name, external_db, general for setting
=cut
sub species {
my ( $self, $species ) = @_;
if( defined $species ) {
$self->{species} = $species;
} else {
if( ! exists $self->{species} ) {
if( defined $self->adaptor() ) {
$self->{species} = $self->adaptor()->db->get_MetaContainer()
->get_Species();
}
}
}
return $self->{species};
}
##########################################################
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment