Raw content of Bio::EnsEMBL::Compara::Production::DnaFragChunkSet
#
# You may distribute this module under the same terms as perl itself
#
# POD documentation - main docs before the code
=pod
=head1 NAME
Bio::EnsEMBL::Compara::Production::DnaFragChunkSet
=head1 SYNOPSIS
=head1 DESCRIPTION
An object to hold a set or group of DnaFragChunk objects. Used in production to reduce
overhead of feeding sequences into alignment programs like blastz and exonerate.
=head1 CONTACT
Jessica Severin
=head1 APPENDIX
The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
=cut
package Bio::EnsEMBL::Compara::Production::DnaFragChunkSet;
use strict;
use Bio::EnsEMBL::Compara::Production::DnaFragChunk;
use Bio::EnsEMBL::Utils::Exception;
use Bio::EnsEMBL::Utils::Argument;
use Time::HiRes qw(time gettimeofday tv_interval);
sub new {
my ($class, @args) = @_;
my $self = {};
bless $self,$class;
$self->{'_dnafrag_chunk_id_list'} = [];
$self->{'_cached_chunk_list'} = undef;
$self->{'_total_basepairs'} = 0;
if (scalar @args) {
#do this explicitly.
my ($dbid, $description, $adaptor) = rearrange([qw(DBID NAME ADAPTOR)], @args);
$self->dbID($dbid) if($dbid);
$self->description($description) if($description);
$self->adaptor($adaptor) if($adaptor);
}
return $self;
}
=head2 adaptor
Title : adaptor
Usage :
Function: getter/setter of the adaptor for this object
Example :
Returns :
Args :
=cut
sub adaptor {
my $self = shift;
$self->{'_adaptor'} = shift if(@_);
return $self->{'_adaptor'};
}
=head2 dbID
Arg [1] : int $dbID (optional)
Example :
Description:
Returntype :
Exceptions :
Caller :
=cut
sub dbID {
my $self = shift;
$self->{'_dbID'} = shift if(@_);
return $self->{'_dbID'};
}
=head2 description
Arg [1] : string $description (optional)
Example :
Description:
Returntype : string
Exceptions :
Caller :
=cut
sub description {
my $self = shift;
$self->{'_description'} = shift if(@_);
return $self->{'_description'};
}
=head2 dump_loc
Arg [1] : string $dump_loc (optional)
Example :
Description:
Returntype : string
Exceptions :
Caller :
=cut
sub dump_loc {
my $self = shift;
$self->{'_dump_loc'} = shift if(@_);
return $self->{'_dump_loc'};
}
=head2 add_dnafrag_chunk_id
Arg [1] : $chunk_id
Example :
Description:
Returntype :
Exceptions :
Caller :
=cut
sub add_dnafrag_chunk_id {
my $self = shift;
my $count=0;
if(@_) {
my $chunk_id = shift;
$count = push @{$self->{'_dnafrag_chunk_id_list'}}, $chunk_id;
#print("added $count element to list\n");
$self->{'_total_basepairs'}=0; #reset so will be recalculated
if(defined($self->adaptor)) {
$self->adaptor->store_link($self->dbID, $chunk_id);
}
}
return $count
}
sub add_DnaFragChunk {
my ($self, $chunk) = @_;
unless(defined($chunk) and
$chunk->isa('Bio::EnsEMBL::Compara::Production::DnaFragChunk'))
{
$self->throw(
"chunk arg must be a [Bio::EnsEMBL::Compara::Production::DnaFragChunk] ".
"not a [$chunk]");
}
my $count = $self->add_dnafrag_chunk_id($chunk->dbID);
$self->{'_cached_chunk_list'} = []
unless(defined($self->{'_cached_chunk_list'}));
push @{$self->{'_cached_chunk_list'}}, $chunk;
return $count;
}
=head2 get_all_DnaFragChunks
Example : @chunks = @{$chunkSet->get_all_DnaFragChunks};
Description: returns array reference to all the DnaFragChunk objects in this set
will lazy load the set if it was not previously loaded
Returntype : reference to array of Bio::EnsEMBL::Compara::Production::DnaFragChunk objects
Exceptions :
Caller :
=cut
sub get_all_DnaFragChunks {
my $self = shift;
if(!defined($self->{'_cached_chunk_list'}) and
$self->count > 0 and defined($self->adaptor))
{
#lazy load all the DnaFragChunk objects
$self->{'_cached_chunk_list'} =
$self->adaptor->_fetch_all_DnaFragChunk_by_ids($self->dnafrag_chunk_ids);
$self->{'_total_basepairs'}=0; #reset so it's recalculated
}
return $self->{'_cached_chunk_list'};
}
=head2 dnafrag_chunk_ids
Example : @chunk_ids = @{$chunkSet->dnafrag_chunk_ids};
Description:
Returntype : reference to array of dnafrag_chunk_id
Exceptions :
Caller :
=cut
sub dnafrag_chunk_ids {
my $self = shift;
return $self->{'_dnafrag_chunk_id_list'};
}
=head2 count
Example : $count = $chunkSet->count;
Description: returns count of DnaFragChunks in this set
Returntype : int
Exceptions :
Caller :
=cut
sub count {
my $self = shift;
return scalar(@{$self->dnafrag_chunk_ids()});
}
=head2 total_basepairs
Example : $size = $chunkSet->total_basepairs;
Description: returns summed length of all DnaFragChunks in this set
Returntype : int
Exceptions :
Caller :
=cut
sub total_basepairs {
my $self = shift;
unless($self->{'_total_basepairs'}) {
$self->{'_total_basepairs'} =0;
if($self->get_all_DnaFragChunks) {
foreach my $chunk (@{$self->get_all_DnaFragChunks}) {
$self->{'_total_basepairs'} += $chunk->length;
}
}
}
return $self->{'_total_basepairs'};
}
1;