Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/EnsEMBL/DensityFeatureSet.pm @ 0:1f6dce3d34e0
Uploaded
| author | mahtabm |
|---|---|
| date | Thu, 11 Apr 2013 02:01:53 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1f6dce3d34e0 |
|---|---|
| 1 =head1 LICENSE | |
| 2 | |
| 3 Copyright (c) 1999-2012 The European Bioinformatics Institute and | |
| 4 Genome Research Limited. All rights reserved. | |
| 5 | |
| 6 This software is distributed under a modified Apache license. | |
| 7 For license details, please see | |
| 8 | |
| 9 http://www.ensembl.org/info/about/code_licence.html | |
| 10 | |
| 11 =head1 CONTACT | |
| 12 | |
| 13 Please email comments or questions to the public Ensembl | |
| 14 developers list at <dev@ensembl.org>. | |
| 15 | |
| 16 Questions may also be sent to the Ensembl help desk at | |
| 17 <helpdesk@ensembl.org>. | |
| 18 | |
| 19 =cut | |
| 20 | |
| 21 =head1 NAME | |
| 22 | |
| 23 Bio::EnsEMBL::DensityFeatureSet - | |
| 24 A feature representing a set of density features | |
| 25 | |
| 26 =head1 SYNOPSIS | |
| 27 | |
| 28 use Bio::EnsEMBL::DensityFeatureSet; | |
| 29 | |
| 30 my $densitySet = Bio::EnsEMBL::DensityFeatureSet->new( | |
| 31 -bin_array = \@out, | |
| 32 -stretch = 1, | |
| 33 ); | |
| 34 | |
| 35 =head1 DESCRIPTION | |
| 36 | |
| 37 A density feature set is a wrap around a array of density features with | |
| 38 additional information about the collective density feature set, such as | |
| 39 max_min_values and scale factors etc. a given region. | |
| 40 | |
| 41 This module is part of the Ensembl project http://www.ensembl.org | |
| 42 | |
| 43 =head1 METHODS | |
| 44 | |
| 45 =cut | |
| 46 | |
| 47 | |
| 48 package Bio::EnsEMBL::DensityFeatureSet; | |
| 49 | |
| 50 use strict; | |
| 51 use warnings; | |
| 52 | |
| 53 use Bio::EnsEMBL::Utils::Argument qw(rearrange); | |
| 54 use Bio::EnsEMBL::Utils::Exception qw(throw); | |
| 55 | |
| 56 =head2 new | |
| 57 | |
| 58 Description: Creates a new density feature set. | |
| 59 Returntype : Bio::EnsEMBL::DensityFeatureSet | |
| 60 Exceptions : throw if invalid density value type is provided | |
| 61 Caller : general | |
| 62 Status : Stable | |
| 63 | |
| 64 =cut | |
| 65 | |
| 66 sub new { | |
| 67 my $class = shift; | |
| 68 | |
| 69 my $max_value = undef; | |
| 70 my $min_value = undef; | |
| 71 | |
| 72 my($dfeats, $stretch, $scale_to_fit) = | |
| 73 rearrange(['FEATURES', 'STRETCH', 'SCALE_TO_FIT'], @_); | |
| 74 foreach (@$dfeats){ | |
| 75 my $value = $_->density_value; | |
| 76 $max_value = $value if (!defined($max_value) || $value > $max_value); | |
| 77 $min_value = $value if (!defined($min_value) || $value < $min_value); | |
| 78 } | |
| 79 | |
| 80 return bless {'bin_array' => $dfeats, | |
| 81 'stretch' => $stretch, | |
| 82 'scale_to_fit' => $scale_to_fit, | |
| 83 'min_value' => $min_value, | |
| 84 'max_value' => $max_value}, $class; | |
| 85 } | |
| 86 | |
| 87 | |
| 88 =head2 stretch | |
| 89 | |
| 90 Title : stretch | |
| 91 Usage : $obj->stretch($newval) | |
| 92 Function: gets/sets a boolean for whether we should stretch the data over the | |
| 93 range (i.e. from min to max rather than absolute numbers). | |
| 94 Returns : value of _stretch | |
| 95 Args : newvalue (optional) | |
| 96 Status : Stable | |
| 97 | |
| 98 =cut | |
| 99 | |
| 100 sub stretch{ | |
| 101 my $self = shift; | |
| 102 $self->{'stretch'} = shift if(@_); | |
| 103 return $self->{'stretch'}; | |
| 104 } | |
| 105 | |
| 106 | |
| 107 =head2 scale_to_fit | |
| 108 | |
| 109 Title : scale_to_fit | |
| 110 Usage : $obj->scale_to_fit($newval) | |
| 111 Function: gets/sets the number that the BinValues are to be scaled against - | |
| 112 i.e. the greatest BinValue->value will be scaled to this number, and the rest | |
| 113 scaled in proportion. | |
| 114 Returns : scale_to_fit value | |
| 115 Args : newvalue (optional) | |
| 116 Status : Stable | |
| 117 | |
| 118 | |
| 119 =cut | |
| 120 | |
| 121 sub scale_to_fit{ | |
| 122 my $self = shift; | |
| 123 $self->{'scale_to_fit'} = shift if (@_); | |
| 124 return $self->{'scale_to_fit'}; | |
| 125 | |
| 126 } | |
| 127 | |
| 128 =head2 colour | |
| 129 | |
| 130 Title : colour | |
| 131 Usage : $obj->colour($newval) | |
| 132 Function: | |
| 133 Returns : value of colour | |
| 134 Args : newvalue (optional) | |
| 135 Status : Stable | |
| 136 | |
| 137 | |
| 138 =cut | |
| 139 | |
| 140 | |
| 141 sub colour{ | |
| 142 my $self = shift; | |
| 143 $self->{'color'} = shift if(@_); | |
| 144 return $self->{'color'}; | |
| 145 | |
| 146 } | |
| 147 | |
| 148 =head2 label | |
| 149 | |
| 150 Title : label | |
| 151 Usage : $obj->label($newval) | |
| 152 Function: | |
| 153 Returns : String containing label | |
| 154 Args : newvalue (optional) | |
| 155 Status : Stable | |
| 156 | |
| 157 | |
| 158 =cut | |
| 159 | |
| 160 sub label{ | |
| 161 my $self = shift; | |
| 162 $self->{'label'} = shift if (@_); | |
| 163 return $self->{'label'}; | |
| 164 | |
| 165 } | |
| 166 | |
| 167 | |
| 168 =head2 label2 | |
| 169 | |
| 170 Title : label2 | |
| 171 Usage : $obj->label2($newval) | |
| 172 Function: | |
| 173 Returns : String containing label2 | |
| 174 Args : newvalue (optional) | |
| 175 Status : Stable | |
| 176 | |
| 177 | |
| 178 =cut | |
| 179 | |
| 180 sub label2{ | |
| 181 my $self = shift; | |
| 182 $self->{'label2'} = shift if (@_); | |
| 183 return $self->{'label2'}; | |
| 184 } | |
| 185 | |
| 186 | |
| 187 | |
| 188 =head2 get_all_binvalues | |
| 189 | |
| 190 Arg [1] : none | |
| 191 Example : @binvalues = @{$dfs->get_all_binvalues}; | |
| 192 Description: Scales all of the contained DensityFeatures by $scalefactor | |
| 193 and returns them. | |
| 194 Returntype : reference to a list of DensityFeatures | |
| 195 Exceptions : none | |
| 196 Caller : general | |
| 197 Status : Stable | |
| 198 | |
| 199 =cut | |
| 200 | |
| 201 sub get_all_binvalues{ | |
| 202 my $self = shift; | |
| 203 my $max_value = $self->max_value(); | |
| 204 my $min_value = $self->min_value(); | |
| 205 | |
| 206 return [] if(!@{$self->{'bin_array'}}); | |
| 207 | |
| 208 my $width = $self->scale_to_fit(); | |
| 209 return [] unless defined($width); | |
| 210 # throw("Cannot scale values - scale_to_fit has not been set"); | |
| 211 | |
| 212 if ($self->stretch && ($max_value-$min_value) ){ | |
| 213 foreach my $bv (@{ $self->{'bin_array'}}){ | |
| 214 my $scaledval = (($bv->density_value - $min_value) / | |
| 215 ($max_value-$min_value) )* $width; | |
| 216 $bv->scaledvalue($scaledval); | |
| 217 } | |
| 218 } elsif($max_value) { | |
| 219 foreach my $bv (@{ $self->{'bin_array'}}){ | |
| 220 my $scaledval = ($bv->density_value / $max_value) * $width; | |
| 221 $bv->scaledvalue($scaledval); | |
| 222 } | |
| 223 } else { | |
| 224 foreach my $bv (@{ $self->{'bin_array'}}){ | |
| 225 $bv->scaledvalue(0); | |
| 226 } | |
| 227 } | |
| 228 | |
| 229 return $self->{'bin_array'}; | |
| 230 } | |
| 231 | |
| 232 | |
| 233 =head2 max_value | |
| 234 | |
| 235 Arg [1] : none | |
| 236 Example : my $max = $dfs->max_value(); | |
| 237 Description: Returns the maximum density feature value from the density | |
| 238 feature set | |
| 239 Returntype : int | |
| 240 Exceptions : none | |
| 241 Caller : general | |
| 242 Status : Stable | |
| 243 | |
| 244 =cut | |
| 245 | |
| 246 sub max_value{ $_[0]->{'max_value'};} | |
| 247 | |
| 248 | |
| 249 =head2 min_value | |
| 250 | |
| 251 Arg [1] : none | |
| 252 Example : my $min = $dfs->min_value(); | |
| 253 Description: Returns the minimum density feature value from the density | |
| 254 feature set. | |
| 255 Returntype : int | |
| 256 Exceptions : none | |
| 257 Caller : general | |
| 258 Status : Stable | |
| 259 | |
| 260 =cut | |
| 261 | |
| 262 sub min_value{ $_[0]->{'min_value'};} | |
| 263 | |
| 264 | |
| 265 | |
| 266 =head2 size | |
| 267 | |
| 268 Arg [1] : none | |
| 269 Example : my $num_features = $dfs->size(); | |
| 270 Description: Returns the number of density features in this density feature | |
| 271 set. | |
| 272 Returntype : int | |
| 273 Exceptions : none | |
| 274 Caller : general | |
| 275 Status : Stable | |
| 276 | |
| 277 =cut | |
| 278 | |
| 279 sub size { | |
| 280 my $self = shift; | |
| 281 return scalar @{$self->{'bin_array'}}; | |
| 282 } | |
| 283 | |
| 284 1; | |
| 285 | |
| 286 | |
| 287 |
