Raw content of Bio::EnsEMBL::DensityPlot::BinValueSet
=head1 LICENSE
Copyright (c) 1999-2009 The European Bioinformatics Institute and
Genome Research Limited. All rights reserved.
This software is distributed under a modified Apache license.
For license details, please see
/info/about/code_licence.html
=head1 CONTACT
Please email comments or questions to the public Ensembl
developers list at .
Questions may also be sent to the Ensembl help desk at
.
=cut
=head1 NAME
Bio::EnsEMBL::DensityPlot::BinValueSet
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 METHODS
=cut
package Bio::EnsEMBL::DensityPlot::BinValueSet;
use vars qw($AUTOLOAD @ISA);
use strict;
use Bio::EnsEMBL::DensityPlot::BinValue;
# Object preamble - inheriets from Bio::Root::Object
use Bio::EnsEMBL::Root;
@ISA = qw(Bio::EnsEMBL::Root Exporter);
#@EXPORT_OK = qw();
# new() is inherited from Bio::Root::Object
# _initialize is where the heavy stuff will happen when new is called
sub new {
my ($class,@args) = @_;
my $self = {};
bless $self,$class;
$self->{'_bin_array'} = [];
return $self;
}
=head2 add_binvalue
Title : add_binValue
Usage :
Function:
Example :
Returns :
Args :
=cut
sub add_binvalue{
my ($self,$value) = @_;
defined ($value->chromosomestart) || $self->throw( "Bin Value object does not contain a ChromosomeStart method" );
defined ($value->chromosomeend) || $self->throw( "Bin Value object does not contain a ChromosomeEnd method" );
defined ($value->value) || $self->throw( "Bin Value object does not contain a Value method" );
$self->_store_biggest($value->value);
$self->_store_smallest($value->value);
push(@{$self->{'_bin_array'}},$value);
}
=head2 get_binvalues
Title : get_binvalues
Usage : my @binvalue_objects = $BVSet->get_binvalues
Function: scales all the binvalues by the scale_factor and returns them.
Example :
Returns : array of BinValue objects
Args : none
=cut
sub get_binvalues{
my $self = shift;
my $biggest_value = $self->{'_biggest_value'} || 0;
my $smallest_value = $self->{'_smallest_value'} || 0;
if (!defined ($biggest_value)||!defined($smallest_value)){
$self->throw("Cannot scale - no values to scale against");
}
my $width = $self->scale_to_fit();
if ($self->stretch && ($biggest_value-$smallest_value) ){
foreach my $bv (@{ $self->{'_bin_array'}}){
my $scaledval = (($bv->value - $smallest_value) / ($biggest_value-$smallest_value) )* $width;
$bv->scaledvalue($scaledval);
}
} elsif($biggest_value) {
foreach my $bv (@{ $self->{'_bin_array'}}){
my $scaledval = ($bv->value / $biggest_value) * $width;
$bv->scaledvalue($scaledval);
}
} else {
foreach my $bv (@{ $self->{'_bin_array'}}){
$bv->scaledvalue(0);
}
}
return ( @{ $self->{'_bin_array'}} );
}
sub size {
my $self = shift;
return scalar @{$self->{'_bin_array'}};
}
=head2 position
Title : position
Usage : $obj->position($newval)
Function:
Returns : value of position
Args : newvalue (optional)
=cut
sub position{
my $self = shift;
if( @_ ) {
my $value = shift;
$self->{'position'} = $value;
}
return $self->{'position'};
}
=head2 label
Title : label
Usage : $obj->label($newval)
Function:
Returns : value of label
Args : newvalue (optional)
=cut
sub label{
my $self = shift;
if( @_ ) {
my $value = shift;
$self->{'label'} = $value;
}
return $self->{'label'};
}
=head2 label2
Title : label2
Usage : $obj->label2($newval)
Function:
Returns : value of label2
Args : newvalue (optional)
=cut
sub label2{
my $self = shift;
if( @_ ) {
my $value = shift;
$self->{'label2'} = $value;
}
return $self->{'label2'};
}
=head2 color
Title : color
Usage : $obj->color($newval)
Function:
Returns : value of color
Args : newvalue (optional)
=cut
sub color{
my $self = shift;
if( @_ ) {
my $value = shift;
$self->{'color'} = $value;
}
return $self->{'color'};
}
=head2 shape
Title : shape
Usage : $obj->shape($newval)
Function:
Returns : value of shape
Args : newvalue (optional)
=cut
sub shape{
my $self = shift;
if( @_ ) {
my $value = shift;
$self->{'shape'} = $value;
}
return $self->{'shape'};
}
=head2 stretch
Title : stretch
Usage : $obj->stretch($newval)
Function: gets/sets a boolean for whether we should stretch the data over the
range (i.e. from min to max rather than absolute numbers).
Returns : value of _stretch
Args : newvalue (optional)
=cut
sub stretch{
my ($self,$value) = @_;
if( defined $value ) {
$self->{'_stretch'} = $value;
}
return $self->{'_stretch'};
}
=head2 scale_to_fit
Title : scale_to_fit
Usage : $obj->scale_to_fit($newval)
Function: gets/sets the number that the BinValues are to be scaled against -
i.e. the greatest BinValue->value will be scaled to this number, and the rest
scaled in proportion.
Returns : scale_to_fit value
Args : newvalue (optional)
=cut
sub scale_to_fit{
my $self = shift;
if( @_ ) {
my $value = shift;
$self->{'_scale_to_fit'} = $value;
}
return $self->{'_scale_to_fit'};
}
=head2 _store_biggest
Title : _store_biggest
Usage : $self->_store_biggest($newval)
Function: internal method for storing the largest BinValue->value in this set.
Returns : biggest value seen so far
Args : value
=cut
sub _store_biggest {
my ($self,$val) = @_;
if (!defined $self->{'_biggest_value'} ||
$val > $self->{'_biggest_value'}){
$self->{'_biggest_value'}=$val;
}
return $self->{'_biggest_value'};
}
=head2 _store_smallest
Title : _store_smallest
Usage : $self->_store_smallest($newval)
Function: internal method for storing the smallest BinValue->value in this set.
Returns : smallest value seen so far
Args : value
=cut
sub _store_smallest {
my ($self,$val) = @_;
if (!defined($self->{'_smallest_value'})){
$self->{'_smallest_value'}=$val;
}
if (!defined($self->{'_smallest_value'}) ||
$val < $self->{'_smallest_value'}){
$self->{'_smallest_value'}=$val;
}
return $self->{'_smallest_value'};
}
1;