Raw content of Bio::EnsEMBL::Compara::DnaFrag
#
# Ensembl module for Bio::EnsEMBL::Compara::DnaFrag.pm
#
# Cared for by Ewan Birney
#
# Copyright Ewan Birney
#
# You may distribute this module under the same terms as perl itself
# POD documentation - main docs before the code
=head1 NAME
Bio::EnsEMBL::Compara::DnaFrag - Defines the DNA sequences used in the database.
=head1 SYNOPSIS
use Bio::EnsEMBL::Compara::DnaFrag;
my $dnafrag = new Bio::EnsEMBL::Compara::DnaFrag(
-dbID => 1,
-adaptor => $dnafrag_adaptor,
-length => 256,
-name => "19",
-genome_db => $genome_db,
-coord_system_name => "chromosome"
);
SET VALUES
$dnafrag->dbID(1);
$dnafrag->adaptor($dnafrag_adaptor);
$dnafrag->length(256);
$dnafrag->genome_db($genome_db);
$dnafrag->genome_db_id(123);
$dnafrag->coord_system_name("chromosome");
$dnafrag->name("19");
GET VALUES
$dbID = $dnafrag->dbID;
$dnafrag_adaptor = $dnafrag->adaptor;
$length = $dnafrag->length;
$genome_db = $dnafrag->genome_db;
$genome_db_id = $dnafrag->genome_db_id;
$coord_system_name = $dnafrag->coord_system_name;
$name = $dnafrag->name;
=head1 DESCRIPTION
The DnaFrag object stores information on the toplevel sequences such as the name, coordinate system, length and species.
=head1 OBJECT ATTRIBUTES
=over
=item dbID
corresponds to dnafrag.dnafrag_id
=item adaptor
Bio::EnsEMBL::Compara::DBSQL::DnaFragAdaptor object to access DB
=item length
corresponds to dnafrag.length
=item genome_db_id
corresponds to dnafrag.genome_db_id
=item genome_db
Bio::EnsEMBL::Compara::GenomeDB object corresponding to genome_db_id
=item coord_system_name
corresponds to dnafrag.coord_system_name
=item name
corresponds to dnafrag.name
=back
=head1 AUTHOR
Javier Herrero (jherrero@ebi.ac.uk)
=head1 CONTACT
This modules is part of the EnsEMBL project ()
Questions can be posted to the ensembl-dev mailing list:
ensembl-dev@ebi.ac.uk
=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::DnaFrag;
use strict;
use Bio::EnsEMBL::Utils::Exception qw(deprecate throw);
use Bio::EnsEMBL::Utils::Argument;
=head2 new
Arg [-DBID] : (opt.) int $dbID (the database internal ID for this object)
Arg [-ADAPTOR]
: (opt.) Bio::EnsEMBL::Compara::DBSQL::DnaFragAdaptor $adaptor
(the adaptor for connecting to the database)
Arg [-LENGTH]:(opt.) int $length (the length of this dnafrag)
Arg [-NAME]: (opt.) string $name (the name of this dnafrag)
Arg [-GENOME_DB]
:(opt.) Bio::EnsEMBL::Compara::GenomeDB $genome_db (the
genome_db object representing the species of this dnafrag)
Arg [-GENOME_DB_ID]
:(opt.) int $genome_db_id (the database internal for the
genome_db)
Arg [-COORD_SYSTEM_NAME]
:(opt.) string $coord_system_name (the name of the toplevel
coordinate system of the dnafrag eg 'chromosome', 'scaffold')
Example : my $dnafrag = new Bio::EnsEMBL::Compara::DnaFrag(
-length 247249719,
-name "1",
-genome_db $genome_db,
-coord_system_name "chromosome");
Example : my $dnafrag = new Bio::EnsEMBL::Compara::DnaFrag(
-length 247249719,
-name "1",
-genome_db_id 22,
-coord_system_name "chromosome");
Description: Creates a new DnaFrag object
Returntype : Bio::EnsEMBL::Compara::DnaFrag
Exceptions : none
Caller : general
Status : Stable
=cut
sub new {
my($class,@args) = @_;
my $self = {};
bless $self,$class;
# my ($name,$contig,$genomedb,$type,$adaptor,$dbID) =
# rearrange([qw(NAME CONTIG GENOMEDB TYPE ADAPTOR DBID)],@args);
# if ( defined $contig) {
# $self->contig($contig);
# }
my ($dbID, $adaptor, $length, $name, $genome_db, $genome_db_id, $coord_system_name,
$start, $end, $genomedb, $type
) =
rearrange([qw(DBID ADAPTOR LENGTH NAME GENOME_DB GENOME_DB_ID COORD_SYSTEM_NAME
START END GENOMEDB TYPE
)],@args);
$self->dbID($dbID) if (defined($dbID));
$self->adaptor($adaptor) if (defined($adaptor));
$self->length($length) if (defined($length));
$self->name($name) if (defined($name));
$self->genome_db($genome_db) if (defined($genome_db));
$self->genome_db_id($genome_db_id) if (defined($genome_db_id));
$self->coord_system_name($coord_system_name) if (defined($coord_system_name));
###################################################################
## Support for backwards compatibility
$self->start($start) if (defined($start));
$self->end($end) if (defined($end));
$self->genomedb($genomedb) if (defined($genomedb));
$self->type($type) if (defined($type));
##
###################################################################
return $self;
}
=head2 new_fast
Arg [1] : hash reference $hashref
Example : none
Description: This is an ultra fast constructor which requires knowledge of
the objects internals to be used.
Returntype :
Exceptions : none
Caller :
Status : Stable
=cut
sub new_fast {
my $class = shift;
my $hashref = shift;
return bless $hashref, $class;
}
=head2 dbID
Arg [1] : int $dbID
Example : $dbID = $dnafrag->dbID()
Example : $dnafrag->dbID(1)
Function : get/set dbID attribute.
Returns : integer
Exeption : none
Caller : $object->dbID
Status : Stable
=cut
sub dbID {
my ($self, $dbID) = @_;
if (defined($dbID)) {
$self->{'dbID'} = $dbID;
}
return $self->{'dbID'};
}
=head2 adpator
Arg [1] : Bio::EnsEMBL::Compara::DBSQL::DnaFragAdaptor $dnafrag_adaptor
Example : $dnafrag_adaptor = $dnafrag->adaptor()
Example : $dnafrag->adaptor($dnafrag_adaptor)
Function : get/set adaptor attribute.
Returns : Bio::EnsEMBL::Compara::DBSQL::DnaFragAdaptor object
Exeption : thrown if argument is not a Bio::EnsEMBL::Compara::DBSQL::DnaFragAdaptor
object
Caller : $object->adaptor
Status : Stable
=cut
sub adaptor {
my ($self, $adaptor) = @_;
if (defined($adaptor)) {
throw("[$adaptor] must be a Bio::EnsEMBL::Compara::DBSQL::DnaFragAdaptor object")
unless ($adaptor->isa("Bio::EnsEMBL::Compara::DBSQL::DnaFragAdaptor"));
$self->{'adaptor'} = $adaptor;
}
return $self->{'adaptor'};
}
=head2 length
Arg [1] : int $length
Example : $length = $dnafrag->length()
Example : $dnafrag->length(256)
Function : get/set length attribute. Use 0 as argument to reset this attribute.
Returns : integer
Exeption : none
Caller : $object->length
Status : Stable
=cut
sub length {
my ($self, $length) = @_;
if (defined($length)) {
$self->{'length'} = ($length or undef);
}
return $self->{'length'};
}
=head2 name
Arg [1] : string $name
Example : $name = $dnafrag->name()
Example : $dnafrag->name("19")
Function : get/set name attribute. Use "" as argument to reset this attribute.
Returns : string
Exeption : none
Caller : $object->name
Status : Stable
=cut
sub name {
my ($self, $name) = @_;
if (defined($name)) {
$self->{'name'} = ($name or undef);
}
return $self->{'name'};
}
=head2 genome_db
Arg [1] : Bio::EnsEMBL::Compara::GenomeDB $genome_db
Example : $genome_db = $dnafrag->genome_db()
Example : $dnafrag->genome_db($genome_db)
Function : get/set genome_db attribute. If no argument is given and the genome_db
is not defined, it tries to get the data from other sources like the
database using the genome_db_id.
Returns : Bio::EnsEMBL::Compara::GenomeDB object
Exeption : thrown if argument is not a Bio::EnsEMBL::Compara::GenomeDB
object
Caller : $object->genome_db
Status : Stable
=cut
sub genome_db {
my ($self, $genome_db) = @_;
if (defined($genome_db)) {
throw("[$genome_db] must be a Bio::EnsEMBL::Compara::GenomeDB object")
unless ($genome_db and $genome_db->isa("Bio::EnsEMBL::Compara::GenomeDB"));
if ($genome_db->dbID and defined($self->genome_db_id)) {
throw("dbID of genome_db object does not match previously defined".
" genome_db_id. If you want to override this".
" Bio::EnsEMBL::Compara::GenomeDB object, you can reset the ".
"genome_db_id using \$dnafrag->genome_db_id(0)")
unless ($genome_db->dbID == $self->genome_db_id);
}
$self->{'genome_db'} = $genome_db;
} elsif (!defined($self->{'genome_db'})) {
# Try to get data from other sources
if (defined($self->{'genome_db_id'}) and defined($self->{'adaptor'})) {
$self->{'genome_db'} =
$self->{'adaptor'}->db->get_GenomeDBAdaptor->fetch_by_dbID($self->{'genome_db_id'});
}
}
return $self->{'genome_db'};
}
=head2 genome_db_id
Arg [1] : int $genome_db_id
Example : $genome_db_id = $dnafrag->genome_db_id()
Example : $dnafrag->genome_db_id(123)
Function : get/set genome_db_id attribute. If no argument is given and the genome_db_id
is not defined, it tries to get the data from other sources like the
corresponding Bio::EnsEMBL::Compara::GenomeDB object. Use 0 as argument to
clear this attribute.
Returns : integer
Exeption : none
Caller : $object->genome_db_id
Status : Stable
=cut
sub genome_db_id {
my ($self, $genome_db_id) = @_;
if (defined($genome_db_id)) {
if (defined($self->genome_db) and $genome_db_id) {
if (defined($self->genome_db->dbID)) {
throw("genome_db_id does not match previously defined".
" dbID of genome_db object.")
unless ($genome_db_id == $self->genome_db->dbID);
} else {
$self->genome_db->dbID($genome_db_id);
}
}
$self->{'genome_db_id'} = ($genome_db_id or undef);
} elsif (!defined($self->{'genome_db_id'})) {
# Try to get data from other sources
if (defined($self->{'genome_db'})) {
# From the dbID of the corresponding Bio::EnsEMBL::Compara::GenomeDB object
$self->{'genome_db_id'} = $self->{'genome_db'}->dbID;
}
}
return $self->{'genome_db_id'};
}
=head2 coord_system_name
Arg [1] : string $coord_system_name
Example : $coord_system_name = $dnafrag->coord_system_name()
Example : $dnafrag->coord_system_name("chromosome")
Function : get/set coord_system_name attribute. Use "" or 0 as argument to
clear this attribute.
Returns : string
Exeption : none
Caller : $object->coord_system_name
Status : Stable
=cut
sub coord_system_name {
my ($self, $coord_system_name) = @_;
if (defined($coord_system_name)) {
$self->{'coord_system_name'} = ($coord_system_name or undef);
}
return $self->{'coord_system_name'};
}
=head2 slice
Arg 1 : -none-
Example : $slice = $dnafrag->slice;
Description: Returns the Bio::EnsEMBL::Slice object corresponding to this
Bio::EnsEMBL::Compara::DnaFrag object.
Returntype : Bio::EnsEMBL::Slice object
Exceptions : warns when the corresponding Bio::EnsEMBL::Compara::GenomeDB,
coord_system_name, name or Bio::EnsEMBL::DBSQL::DBAdaptor
cannot be retrieved and returns undef.
Caller : $object->methodname
Status : Stable
=cut
sub slice {
my ($self) = @_;
unless (defined $self->{'_slice'}) {
if (!defined($self->genome_db)) {
warn "Cannot get the Bio::EnsEMBL::Compara::GenomeDB object corresponding to [".$self."]";
return undef;
}
if (!defined($self->coord_system_name)) {
warn "Cannot get the coord_system_name corresponding to [".$self."]";
return undef;
}
if (!defined($self->name)) {
warn "Cannot get the name corresponding to [".$self."]";
return undef;
}
my $dba = $self->genome_db->db_adaptor;
if (!defined($dba)) {
warn "Cannot get the Bio::EnsEMBL::DBSQL::DBAdaptor corresponding to [".$self->genome_db->name."]";
return undef;
}
$self->{'_slice'} = $dba->get_SliceAdaptor->fetch_by_region($self->coord_system_name, $self->name);
}
return $self->{'_slice'};
}
=head2 display_id
Args : none
Example : my $id = $dnafrag->display_id;
Description: returns string describing this chunk which can be used
as display_id of a Bio::Seq object or in a fasta file.
Uses dnafrag information in addition to start and end.
Returntype : string
Exceptions : none
Caller : general
Status : Stable
=cut
sub display_id {
my $self = shift;
return "" unless($self->genome_db);
my $id = $self->genome_db->taxon_id. ".".
$self->genome_db->dbID. ":".
$self->coord_system_name.":".
$self->name;
return $id;
}
#####################################################################
#####################################################################
=head1 DEPRECATED METHODS
Bio::EnsEMBL::Compara::DnaFrag::start and Bio::EnsEMBL::Compara::DnaFrag::end
methods are no longer used. All Bio::EnsEMBL::Compara::DnaFrag objects start
in 1. Start and end coordinates have been replaced by length attribute. Please,
use Bio::EnsEMBL::Compara::DnaFrag::length method to access it.
Bio::EnsEMBL::Compara::DnaFrag::genomedb has been renamed
Bio::EnsEMBL::Compara::DnaFrag::genome_db.
Bio::EnsEMBL::Compara::DnaFrag::type has been renamed
Bio::EnsEMBL::Compara::DnaFrag::coord_system_name.
=cut
#####################################################################
#####################################################################
=head2 start [DEPRECATED]
DEPRECATED! All Bio::EnsEMBL::Compara::DnaFrag objects start in 1
Arg [1] : int
Example : $dnafrag->start(1);
Description: Getter/Setter for the start attribute
Returntype : int
Exceptions : thrown when trying to set a starting position different from 1
Caller : general
=cut
sub start {
my ($self,$value) = @_;
deprecate("All Bio::EnsEMBL::Compara::DnaFrag objects start in 1");
if (defined($value) and ($value != 1)) {
throw("Trying to set a start value different from 1!\n".
"All Bio::EnsEMBL::Compara::DnaFrag objects start in 1");
}
return 1;
}
=head2 end [DEPRECATED]
DEPRECATED! Use Bio::EnsEMBL::Compara::DnaFrag->length() method instead
Arg [1] : int $end
Example : $dnafrag->end(42);
Description: Getter/Setter for the start attribute
Returntype : int
Exceptions : none
Caller : general
=cut
sub end {
my ($self, $end) = @_;
deprecate("Use Bio::EnsEMBL::Compara::DnaFrag->length() method instead");
return $self->length($end);
}
=head2 genomedb [DEPRECATED]
DEPRECATD! Use Bio::EnsEMBL::Compara::DnaFrag->genome_db() method instead
Title : genomedb
Usage : $obj->genomedb($newval)
Function:
Example :
Returns : value of genomedb
Args : newvalue (optional)
=cut
sub genomedb {
my ($self, @args) = @_;
deprecate("Calling Bio::EnsEMBL::Compara::DnaFrag::genome_db method instead");
return $self->genome_db(@args);
}
=head2 type [DEPRECATED]
DEPRECATED! Use Bio::EnsEMBL::Compara::DnaFrag->coord_system_name() method instead
Title : type
Usage : $obj->type($newval)
Function:
Example :
Returns : value of coord_system_name (former type)
Args : newvalue (optional)
=cut
sub type {
my ($self, @args) = @_;
deprecate("Calling Bio::EnsEMBL::Compara::DnaFrag::coord_system_name method instead");
return $self->coord_system_name(@args);
}
=head2 contig [DEPRECATED]
DEPRECATED! Use Bio::EnsEMBL::Compara::DnaFrag->slice() method instead
=cut
sub contig {
my ($self, @args) = @_;
deprecated("Calling Bio::EnsEMBL::Compara::DnaFrag::slice method instead");
return $self->slice(@args);
}
1;