diff variant_effect_predictor/Bio/Graphics/Glyph/graded_segments.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/variant_effect_predictor/Bio/Graphics/Glyph/graded_segments.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,218 @@
+package Bio::Graphics::Glyph::graded_segments;
+#$Id: graded_segments.pm,v 1.12.2.1 2003/07/05 00:32:04 lstein Exp $
+
+use strict;
+use Bio::Graphics::Glyph::segments;
+use vars '@ISA';
+@ISA = 'Bio::Graphics::Glyph::segments';
+
+# override draw method to calculate the min and max values for the components
+sub draw {
+  my $self = shift;
+
+  # bail out if this isn't the right kind of feature
+  # handle both das-style and Bio::SeqFeatureI style,
+  # which use different names for subparts.
+  my @parts = $self->parts;
+  @parts    = $self if !@parts && $self->level == 0;
+  return $self->SUPER::draw(@_) unless @parts;
+
+  # figure out the colors
+  my $max_score = $self->option('max_score');
+  my $min_score = $self->option('min_score');
+  unless (defined $max_score && defined $min_score) {
+    for my $part (@parts) {
+      my $s = eval { $part->feature->score };
+      next unless defined $s;
+      $max_score = $s if !defined $max_score or $s > $max_score;
+      $min_score = $s if !defined $min_score or $s < $min_score;
+    }
+  }
+
+  return $self->SUPER::draw(@_)
+    unless defined($max_score) && defined($min_score)
+      && $min_score < $max_score;
+
+  my $span = $max_score - $min_score;
+
+  # allocate colors
+  my $fill   = $self->bgcolor;
+  my ($red,$green,$blue) = $self->panel->rgb($fill);
+
+  foreach my $part (@parts) {
+    my $s = eval { $part->feature->score };
+    unless (defined $s) {
+      $part->{partcolor} = $fill;
+      next;
+    }
+    my ($r,$g,$b) = $self->calculate_color($s,[$red,$green,$blue],$min_score,$span);
+    my $idx      = $self->panel->translate_color($r,$g,$b);
+    $part->{partcolor} = $idx;
+  }
+  $self->SUPER::draw(@_);
+}
+
+sub calculate_color {
+  my $self = shift;
+  my ($s,$rgb,$min_score,$span) = @_;
+  return map { 255 - (255-$_) * min(max( ($s-$min_score)/$span, 0), 1) } @$rgb;
+}
+
+sub min { $_[0] < $_[1] ? $_[0] : $_[1] }
+sub max { $_[0] > $_[1] ? $_[0] : $_[1] }
+
+sub subseq {
+  my $class = shift;
+  my $feature = shift;
+  return $feature->segments        if $feature->can('segments');
+  return $feature->sub_SeqFeature  if $feature->can('sub_SeqFeature');
+  return;
+}
+
+# synthesize a key glyph
+sub keyglyph {
+  my $self = shift;
+
+  my $scale = 1/$self->scale;  # base pairs/pixel
+
+  # two segments, at pixels 0->50, 60->80
+  my $offset = $self->panel->offset;
+
+  my $feature =
+    Bio::Graphics::Feature->new(
+				-segments=>[ [ 0*$scale +$offset,20*$scale+$offset],
+					     [ 30*$scale +$offset,50*$scale+$offset],
+					     [60*$scale+$offset, 80*$scale+$offset]
+					   ],
+				-name => $self->option('key'),
+				-strand => '+1');
+  ($feature->segments)[0]->score(10);
+  ($feature->segments)[1]->score(50);
+  ($feature->segments)[2]->score(100);
+  my $factory = $self->factory->clone;
+  $factory->set_option(label => 1);
+  $factory->set_option(bump  => 0);
+  $factory->set_option(connector  => 'solid');
+  return $factory->make_glyph($feature);
+}
+
+# component draws a shaded box
+sub bgcolor { 
+  my $self = shift;
+  return $self->{partcolor} || $self->SUPER::bgcolor;
+}
+sub fgcolor { 
+  my $self = shift;
+  return $self->{partcolor} || $self->SUPER::fgcolor;
+}
+
+1;
+
+=head1 NAME
+
+Bio::Graphics::Glyph::graded_segments - The "graded_segments" glyph
+
+=head1 SYNOPSIS
+
+  See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.
+
+=head1 DESCRIPTION
+
+This is identical to the "alignment" glyph, and is used for
+drawing features that consist of discontinuous segments.  The
+color intensity of each segment is proportionate to the score.
+
+=head2 OPTIONS
+
+The following options are standard among all Glyphs.  See
+L<Bio::Graphics::Glyph> for a full explanation.
+
+  Option      Description                      Default
+  ------      -----------                      -------
+
+  -fgcolor      Foreground color	       black
+
+  -outlinecolor	Synonym for -fgcolor
+
+  -bgcolor      Background color               turquoise
+
+  -fillcolor    Synonym for -bgcolor
+
+  -linewidth    Line width                     1
+
+  -height       Height of glyph		       10
+
+  -font         Glyph font		       gdSmallFont
+
+  -connector    Connector type                 0 (false)
+
+  -connector_color
+                Connector color                black
+
+  -label        Whether to draw a label	       0 (false)
+
+  -description  Whether to draw a description  0 (false)
+
+In addition, the alignment glyph recognizes the following
+glyph-specific options:
+
+  Option      Description                  Default
+  ------      -----------                  -------
+
+  -max_score  Maximum value of the	   Calculated
+              feature's "score" attribute
+
+  -min_score  Minimum value of the         Calculated
+              feature's "score" attribute
+
+If max_score and min_score are not specified, then the glyph will
+calculate the local maximum and minimum scores at run time.
+
+
+=head1 BUGS
+
+Please report them.
+
+=head1 SEE ALSO
+
+L<Bio::Graphics::Panel>,
+L<Bio::Graphics::Glyph>,
+L<Bio::Graphics::Glyph::arrow>,
+L<Bio::Graphics::Glyph::cds>,
+L<Bio::Graphics::Glyph::crossbox>,
+L<Bio::Graphics::Glyph::diamond>,
+L<Bio::Graphics::Glyph::dna>,
+L<Bio::Graphics::Glyph::dot>,
+L<Bio::Graphics::Glyph::ellipse>,
+L<Bio::Graphics::Glyph::extending_arrow>,
+L<Bio::Graphics::Glyph::generic>,
+L<Bio::Graphics::Glyph::graded_segments>,
+L<Bio::Graphics::Glyph::heterogeneous_segments>,
+L<Bio::Graphics::Glyph::line>,
+L<Bio::Graphics::Glyph::pinsertion>,
+L<Bio::Graphics::Glyph::primers>,
+L<Bio::Graphics::Glyph::rndrect>,
+L<Bio::Graphics::Glyph::segments>,
+L<Bio::Graphics::Glyph::ruler_arrow>,
+L<Bio::Graphics::Glyph::toomany>,
+L<Bio::Graphics::Glyph::transcript>,
+L<Bio::Graphics::Glyph::transcript2>,
+L<Bio::Graphics::Glyph::translation>,
+L<Bio::Graphics::Glyph::triangle>,
+L<Bio::DB::GFF>,
+L<Bio::SeqI>,
+L<Bio::SeqFeatureI>,
+L<Bio::Das>,
+L<GD>
+
+=head1 AUTHOR
+
+Lincoln Stein E<lt>lstein@cshl.orgE<gt>
+
+Copyright (c) 2001 Cold Spring Harbor Laboratory
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.  See DISCLAIMER.txt for
+disclaimers of warranty.
+
+=cut