Raw content of Bio::EnsEMBL::Compara::MethodLinkSpeciesSet
#
# Ensembl module for Bio::EnsEMBL::Compara::MethodLinkSpeciesSet
#
# Cared for by Javier Herrero
#
# Copyright Javier Herrero
#
# You may distribute this module under the same terms as perl itself
# pod documentation - main docs before the code
=head1 NAME
Bio::EnsEMBL::Compara::MethodLinkSpeciesSet -
Relates every method_link with the species_set for which it has been used
=head1 SYNOPSIS
use Bio::EnsEMBL::Compara::MethodLinkSpeciesSet;
my $method_link_species_set = new Bio::EnsEMBL::Compara::MethodLinkSpeciesSet(
-adaptor => $method_link_species_set_adaptor,
-method_link_type => "MULTIZ",
-species_set => [$gdb1, $gdb2, $gdb3],
-max_alignment_length => 10000,
);
SET VALUES
$method_link_species_set->dbID(12);
$method_link_species_set->adaptor($meth_lnk_spcs_adaptor);
$method_link_species_set->method_link_id(23);
$method_link_species_set->method_link_type("MULTIZ");
$method_link_species_set->species_set([$gdb1, $gdb2, $gdb3]);
$method_link_species_set->max_alignment_length(10000);
GET VALUES
my $dbID = $method_link_species_set->dbID();
my $meth_lnk_spcs_adaptor = $method_link_species_set->adaptor();
my $meth_lnk_id = $method_link_species_set->method_link_id();
my $meth_lnk_type = $method_link_species_set->method_link_type();
my $meth_lnk_species_set = $method_link_species_set->species_set();
my $max_alignment_length = $method_link_species_set->max_alignment_length();
=head1 OBJECT ATTRIBUTES
=over
=item dbID
corresponds to method_link_species_set.method_link_species_set_id
=item adaptor
Bio::EnsEMBL::Compara::DBSQL::MethodLinkSpeciesSetAdaptor object to access DB
=item method_link_id
corresponds to method_link_species_set.method_link_id (external ref. to
method_link.method_link_id)
=item method_link_type
corresponds to method_link.type, accessed through method_link_id (external ref.)
=item method_link_class
corresponds to method_link.class, accessed through method_link_id (external ref.)
=item species_set_id
corresponds to method_link_species_set.species_set_id (external ref. to
species_set.species_set_id)
=item species_set
listref of Bio::EnsEMBL::Compara::GenomeDB objects. Each of them corresponds to
a species_set.genome_db_id
=item max_alignment_length (experimental)
Integer. This value is used to speed up the fetching of genomic_align_blocks.
It corresponds to an entry in the meta table where the key is "max_align_$dbID"
where $dbID id the method_link_species_set.method_link_species_set_id.
=back
=head1 AUTHOR
Javier Herrero (jherrero@ebi.ac.uk)
This modules is part of the Ensembl project
=head1 APPENDIX
The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
=cut
# Let the code begin...
package Bio::EnsEMBL::Compara::MethodLinkSpeciesSet;
use vars qw(@ISA);
use strict;
# Object preamble
use Bio::EnsEMBL::Utils::Exception qw(throw warning deprecate);
use Bio::EnsEMBL::Utils::Argument qw(rearrange);
# new() is written here
=head2 new (CONSTRUCTOR)
Arg [-DBID] : (opt.) int $dbID (the database internal ID for this object)
Arg [-ADAPTOR]
: (opt.) Bio::EnsEMBL::Compara::DBSQL::MethodLinkSpeciesSetAdaptor $adaptor
(the adaptor for connecting to the database)
Arg [-METHOD_LINK_ID]
: (opt.) int $method_link_id (the database internal ID for the method_link)
Arg [-METHOD_LINK_TYPE]
: (opt.) string $method_link_type (the name of the method_link)
Arg [-METHOD_LINK_CLASS]
: (opt.) string $method_link_class (the class of the method_link)
Arg [-SPECIES_SET_ID]
: (opt.) int $species_set_id (the database internal ID for the species_set)
Arg [-SPECIES_SET]
: (opt.) arrayref $genome_dbs (a reference to an array of
Bio::EnsEMBL::Compara::GenomeDB objects)
Arg [-NAME]
: (opt.) string $name (the name for this method_link_species_set)
Arg [-SOURCE]
: (opt.) string $source (the source of these data)
Arg [-URL]
: (opt.) string $url (the original url of these data)
Arg [-MAX_ALGINMENT_LENGTH]
: (opt.) int $max_alignment_length (the length of the largest alignment
for this MethodLinkSpeciesSet (only used for genomic alignments)
Example : my $method_link_species_set =
new Bio::EnsEMBL::Compara::MethodLinkSpeciesSet(
-adaptor => $method_link_species_set_adaptor,
-method_link_type => "MULTIZ",
-species_set => [$gdb1, $gdb2, $gdb3],
-max_alignment_length => 10000,
);
Description : Creates a new MethodLinkSpeciesSet object
Returntype : Bio::EnsEMBL::Compara::MethodLinkSpeciesSet object
Exceptions : none
Caller : general
=cut
sub new {
my($class, @args) = @_;
my $self = {};
bless $self,$class;
my ($dbID, $adaptor, $method_link_id, $method_link_type, $species_set_id, $species_set,
$method_link_class, $name, $source, $url, $max_alignment_length) =
rearrange([qw(
DBID ADAPTOR METHOD_LINK_ID METHOD_LINK_TYPE SPECIES_SET_ID SPECIES_SET
METHOD_LINK_CLASS NAME SOURCE URL MAX_ALIGNMENT_LENGTH)], @args);
$self->dbID($dbID) if (defined ($dbID));
$self->adaptor($adaptor) if (defined ($adaptor));
$self->method_link_id($method_link_id) if (defined ($method_link_id));
$self->method_link_type($method_link_type) if (defined ($method_link_type));
$self->method_link_class($method_link_class) if (defined ($method_link_class));
$self->species_set_id($species_set_id) if (defined ($species_set_id));
$self->species_set($species_set) if (defined ($species_set));
$self->name($name) if (defined ($name));
$self->source($source) if (defined ($source));
$self->url($url) if (defined ($url));
$self->max_alignment_length($max_alignment_length) if (defined ($max_alignment_length));
return $self;
}
sub new_fast {
my $class = shift;
my $hashref = shift;
return bless $hashref, $class;
}
=head2 dbID
Arg [1] : (opt.) integer dbID
Example : my $dbID = $method_link_species_set->dbID();
Example : $method_link_species_set->dbID(12);
Description: Getter/Setter for the dbID of this object in the database
Returntype : integer dbID
Exceptions : none
Caller : general
=cut
sub dbID {
my $obj = shift;
if (@_) {
$obj->{'dbID'} = shift;
}
return $obj->{'dbID'};
}
=head2 adaptor
Arg [1] : (opt.) Bio::EnsEMBL::Compara::DBSQL::MethodLinkSpeciesSetAdaptor
Example : my $meth_lnk_spcs_adaptor = $method_link_species_set->adaptor();
Example : $method_link_species_set->adaptor($meth_lnk_spcs_adaptor);
Description: Getter/Setter for the adaptor this object uses for database
interaction.
Returntype : Bio::EnsEMBL::Compara::DBSQL::MethodLinkSpeciesSetAdaptor
Exceptions : none
Caller : general
=cut
sub adaptor {
my $obj = shift;
if (@_) {
$obj->{'adaptor'} = shift;
}
return $obj->{'adaptor'};
}
=head2 method_link_id
Arg [1] : (opt.) integer method_link_id
Example : my $meth_lnk_id = $method_link_species_set->method_link_id();
Example : $method_link_species_set->method_link_id(23);
Description: get/set for attribute method_link_id
Returntype : integer
Exceptions : none
Caller : general
=cut
sub method_link_id {
my ($self, $arg) = @_;
if (defined($arg)) {
$self->{'method_link_id'} = $arg ;
}
if (!defined($self->{'method_link_id'})
&& defined($self->{'method_link_type'})
&& defined($self->{'adaptor'})) {
$self->{'method_link_id'} = $self->adaptor->get_method_link_id_from_method_link_type($self->{'method_link_type'});
}
return $self->{'method_link_id'};
}
=head2 method_link_type
Arg [1] : (opt.) string method_link_type
Example : my $meth_lnk_type = $method_link_species_set->method_link_type();
Example : $method_link_species_set->method_link_type("BLASTZ_NET");
Description: get/set for attribute method_link_type
Returntype : string
Exceptions : none
Caller : general
=cut
sub method_link_type {
my ($self, $arg) = @_;
if (defined($arg)) {
$self->{'method_link_type'} = $arg;
}
if (!defined($self->{'method_link_type'})
&& defined($self->{'method_link_id'})
&& defined($self->{'adaptor'})) {
$self->{'method_link_type'} = $self->adaptor->get_method_link_type_from_method_link_id($self->{'method_link_id'});
}
return $self->{'method_link_type'};
}
=head2 method_link_class
Arg [1] : (opt.) string method_link_class
Example : my $meth_lnk_class = $method_link_species_set->method_link_class();
Example : $method_link_species_set->method_link_class("GenomicAlignBlock.multiple_alignment");
Description: get/set for attribute method_link_class
Returntype : string
Exceptions : none
Caller : general
=cut
sub method_link_class {
my ($self, $arg) = @_;
if (defined($arg)) {
$self->{'method_link_class'} = $arg;
}
if (!defined($self->{'method_link_class'})
&& defined($self->{'method_link_id'})
&& defined($self->{'adaptor'})) {
$self->{'method_link_class'} = $self->adaptor->_get_method_link_class_from_id($self->{'method_link_id'});
}
return $self->{'method_link_class'};
}
=head2 species_set_id
Arg [1] : (opt.) integer species_set_id
Example : my $species_set_id = $method_link_species_set->species_set_id();
Example : $method_link_species_set->species_set_id(23);
Description: get/set for attribute species_set_id
Returntype : integer
Exceptions : none
Caller : general
=cut
sub species_set_id {
my ($self, $arg) = @_;
if (defined($arg)) {
$self->{'species_set_id'} = $arg ;
}
if (!defined($self->{'species_set_id'})
&& defined($self->{'species_set'})
&& defined($self->{'adaptor'})) {
$self->{'species_set_id'} = $self->adaptor->_get_species_set_id_from_species_set($self->{'species_set'});
}
return $self->{'species_set_id'};
}
=head2 species_set
Arg [1] : (opt.) listref of Bio::EnsEMBL::Compara::GenomeDB objects
Example : my $meth_lnk_species_set = $method_link_species_set->species_set();
Example : $method_link_species_set->species_set([$gdb1, $gdb2, $gdb3]);
Description: get/set for attribute species_set
Returntype : listref of Bio::EnsEMBL::Compara::GenomeDB objects
Exceptions : Thrown if any argument is not a Bio::EnsEMBL::Compara::GenomeDB
object or a GenomeDB entry appears several times
Caller : general
=cut
sub species_set {
my ($self, $arg) = @_;
if ($arg && @$arg) {
## Check content
my $genome_dbs;
foreach my $gdb (@$arg) {
throw("undefined value used as a Bio::EnsEMBL::Compara::GenomeDB\n")
if (!defined($gdb));
throw("$gdb must be a Bio::EnsEMBL::Compara::GenomeDB\n")
unless $gdb->isa("Bio::EnsEMBL::Compara::GenomeDB");
unless (defined $genome_dbs->{$gdb->dbID}) {
$genome_dbs->{$gdb->dbID} = $gdb;
} else {
warn("GenomeDB (".$gdb->name."; dbID=".$gdb->dbID .
") appears twice in this Bio::EnsEMBL::Compara::MethodLinkSpeciesSet\n");
}
}
$self->{'species_set'} = [ values %{$genome_dbs} ] ;
}
return $self->{'species_set'};
}
=head2 name
Arg [1] : (opt.) string $name
Example : my $name = $method_link_species_set->name();
Example : $method_link_species_set->name("families");
Description: get/set for attribute name
Returntype : string
Exceptions : none
Caller : general
=cut
sub name {
my ($self, $arg) = @_;
if (defined($arg)) {
$self->{'name'} = $arg ;
}
return $self->{'name'};
}
=head2 source
Arg [1] : (opt.) string $name
Example : my $name = $method_link_species_set->source();
Example : $method_link_species_set->source("ensembl");
Description: get/set for attribute source. The source refers to who
generated the data in a first instance (ensembl, ucsc...)
Returntype : string
Exceptions : none
Caller : general
=cut
sub source {
my ($self, $arg) = @_;
if (defined($arg)) {
$self->{'source'} = $arg ;
}
return $self->{'source'};
}
=head2 url
Arg [1] : (opt.) string $url
Example : my $name = $method_link_species_set->source();
Example : $method_link_species_set->url("http://hgdownload.cse.ucsc.edu/goldenPath/monDom1/vsHg17/");
Description: get/set for attribute url. Defines where the data come from if they
have been imported
Returntype : string
Exceptions : none
Caller : general
=cut
sub url {
my ($self, $arg) = @_;
if (defined($arg)) {
$self->{'url'} = $arg ;
}
return $self->{'url'};
}
=head2 get_common_classification
Arg [1] : -none-
Example : my $common_classification = $method_link_species_set->
get_common_classification();
Description: This method fetches the taxonimic classifications for all the
species included in this
Bio::EnsEMBL::Compara::MethodLinkSpeciesSet object and
returns the common part of them.
Returntype : array of strings
Exceptions :
Caller : general
=cut
sub get_common_classification {
my ($self) = @_;
my $common_classification;
my $species_set = $self->species_set();
foreach my $this_genome_db (@$species_set) {
my @classification = split(" ", $this_genome_db->taxon->classification);
if (!defined($common_classification)) {
@$common_classification = @classification;
} else {
my $new_common_classification = [];
for (my $i = 0; $i <@classification; $i++) {
for (my $j = 0; $j<@$common_classification; $j++) {
if ($classification[$i] eq $common_classification->[$j]) {
push(@$new_common_classification, splice(@$common_classification, $j, 1));
last;
}
}
}
$common_classification = $new_common_classification;
}
}
return $common_classification;
}
=head2 max_alignment_length
Arg [1] : (opt.) int $max_alignment_length
Example : my $max_alignment_length = $method_link_species_set->
max_alignment_length();
Example : $method_link_species_set->max_alignment_length(1000);
Description: get/set for attribute max_alignment_length
Returntype : integer
Exceptions :
Caller : general
=cut
sub max_alignment_length {
my ($self, $arg) = @_;
if (defined($arg)) {
$self->{'max_alignment_length'} = int($arg);
} elsif (!defined($self->{'max_alignment_length'}) and defined($self->adaptor)) {
$self->adaptor->get_max_alignment_length($self);
}
return $self->{'max_alignment_length'};
}
1;