Mercurial > repos > mahtabm > ensemb_rep_gvl
diff variant_effect_predictor/Bio/EnsEMBL/DensityFeatureSet.pm @ 0:2bc9b66ada89 draft default tip
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 06:29:17 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/DensityFeatureSet.pm Thu Apr 11 06:29:17 2013 -0400 @@ -0,0 +1,287 @@ +=head1 LICENSE + + Copyright (c) 1999-2012 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 + + http://www.ensembl.org/info/about/code_licence.html + +=head1 CONTACT + + Please email comments or questions to the public Ensembl + developers list at <dev@ensembl.org>. + + Questions may also be sent to the Ensembl help desk at + <helpdesk@ensembl.org>. + +=cut + +=head1 NAME + +Bio::EnsEMBL::DensityFeatureSet - +A feature representing a set of density features + +=head1 SYNOPSIS + + use Bio::EnsEMBL::DensityFeatureSet; + + my $densitySet = Bio::EnsEMBL::DensityFeatureSet->new( + -bin_array = \@out, + -stretch = 1, + ); + +=head1 DESCRIPTION + +A density feature set is a wrap around a array of density features with +additional information about the collective density feature set, such as +max_min_values and scale factors etc. a given region. + +This module is part of the Ensembl project http://www.ensembl.org + +=head1 METHODS + +=cut + + +package Bio::EnsEMBL::DensityFeatureSet; + +use strict; +use warnings; + +use Bio::EnsEMBL::Utils::Argument qw(rearrange); +use Bio::EnsEMBL::Utils::Exception qw(throw); + +=head2 new + + Description: Creates a new density feature set. + Returntype : Bio::EnsEMBL::DensityFeatureSet + Exceptions : throw if invalid density value type is provided + Caller : general + Status : Stable + +=cut + +sub new { + my $class = shift; + + my $max_value = undef; + my $min_value = undef; + + my($dfeats, $stretch, $scale_to_fit) = + rearrange(['FEATURES', 'STRETCH', 'SCALE_TO_FIT'], @_); + foreach (@$dfeats){ + my $value = $_->density_value; + $max_value = $value if (!defined($max_value) || $value > $max_value); + $min_value = $value if (!defined($min_value) || $value < $min_value); + } + + return bless {'bin_array' => $dfeats, + 'stretch' => $stretch, + 'scale_to_fit' => $scale_to_fit, + 'min_value' => $min_value, + 'max_value' => $max_value}, $class; +} + + +=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) + Status : Stable + +=cut + +sub stretch{ + my $self = shift; + $self->{'stretch'} = shift if(@_); + 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) + Status : Stable + + +=cut + +sub scale_to_fit{ + my $self = shift; + $self->{'scale_to_fit'} = shift if (@_); + return $self->{'scale_to_fit'}; + +} + +=head2 colour + + Title : colour + Usage : $obj->colour($newval) + Function: + Returns : value of colour + Args : newvalue (optional) + Status : Stable + + +=cut + + +sub colour{ + my $self = shift; + $self->{'color'} = shift if(@_); + return $self->{'color'}; + +} + +=head2 label + + Title : label + Usage : $obj->label($newval) + Function: + Returns : String containing label + Args : newvalue (optional) + Status : Stable + + +=cut + +sub label{ + my $self = shift; + $self->{'label'} = shift if (@_); + return $self->{'label'}; + +} + + +=head2 label2 + + Title : label2 + Usage : $obj->label2($newval) + Function: + Returns : String containing label2 + Args : newvalue (optional) + Status : Stable + + +=cut + +sub label2{ + my $self = shift; + $self->{'label2'} = shift if (@_); + return $self->{'label2'}; +} + + + +=head2 get_all_binvalues + + Arg [1] : none + Example : @binvalues = @{$dfs->get_all_binvalues}; + Description: Scales all of the contained DensityFeatures by $scalefactor + and returns them. + Returntype : reference to a list of DensityFeatures + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub get_all_binvalues{ + my $self = shift; + my $max_value = $self->max_value(); + my $min_value = $self->min_value(); + + return [] if(!@{$self->{'bin_array'}}); + + my $width = $self->scale_to_fit(); + return [] unless defined($width); + # throw("Cannot scale values - scale_to_fit has not been set"); + + if ($self->stretch && ($max_value-$min_value) ){ + foreach my $bv (@{ $self->{'bin_array'}}){ + my $scaledval = (($bv->density_value - $min_value) / + ($max_value-$min_value) )* $width; + $bv->scaledvalue($scaledval); + } + } elsif($max_value) { + foreach my $bv (@{ $self->{'bin_array'}}){ + my $scaledval = ($bv->density_value / $max_value) * $width; + $bv->scaledvalue($scaledval); + } + } else { + foreach my $bv (@{ $self->{'bin_array'}}){ + $bv->scaledvalue(0); + } + } + + return $self->{'bin_array'}; +} + + +=head2 max_value + + Arg [1] : none + Example : my $max = $dfs->max_value(); + Description: Returns the maximum density feature value from the density + feature set + Returntype : int + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub max_value{ $_[0]->{'max_value'};} + + +=head2 min_value + + Arg [1] : none + Example : my $min = $dfs->min_value(); + Description: Returns the minimum density feature value from the density + feature set. + Returntype : int + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub min_value{ $_[0]->{'min_value'};} + + + +=head2 size + + Arg [1] : none + Example : my $num_features = $dfs->size(); + Description: Returns the number of density features in this density feature + set. + Returntype : int + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub size { + my $self = shift; + return scalar @{$self->{'bin_array'}}; +} + +1; + + +