view release on metacpan or search on metacpan
lib/Bio/Graphics/Glyph.pm view on Meta::CPAN
'A synonym for -bgcolor.'],
tkcolor => [
'color',
undef,
'Rarely-used option to flood-fill entire glyph with a single color',
'prior to rendering it.'],
opacity => [
'float',
'1.0',
'Default opacity to apply to glyph background and foreground colors.',
'This is a value between 0.0 (completely transparent) to 1.0 (completely opaque.',
'If the color contains an explicit opacity (alpha) value, the default value',
'will be ignored'],
linewidth => [
'integer',
1,
'Thickness of line used to draw the glyph\'s outline.'],
strand_arrow => [
'boolean',
undef,
"Whether to indicate the feature's strandedness. If equal to 'ends'",
lib/Bio/Graphics/Glyph.pm view on Meta::CPAN
sub translate_color {
my $self = shift;
my $color = shift;
return $self->_translate_color($color);
}
sub _translate_color {
my $self = shift;
my $color = shift;
my $opacity = $self->default_opacity;
return $opacity < 1 ? $self->factory->transparent_color($opacity,$color)
: $self->factory->translate_color($color);
}
# return value:
# 0 no bumping
# +1 bump down
# -1 bump up
# +2 simple bump down
# -2 simple bump up
# +3 optimized (fast) bumping
lib/Bio/Graphics/Glyph/Factory.pm view on Meta::CPAN
override if desired.
=cut
sub translate_color {
my $self = shift;
my $color_name = shift;
$self->panel->translate_color($color_name);
}
=head2 transparent_color
Title : transparent_color
Usage : $index = $f->transparent_color($opacity,$color_name)
Function : translate symbolic color names into GD indexes, with
an opacity value taken into account
Returns : an integer
Args : an opacity value from 0-1.0, plus a color name in format "green" or "#00FF00"
Status : Internal to Bio::Graphics
The real work is done by the panel, but factory subclasses can
override if desired.
=cut
sub transparent_color {
my $self = shift;
$self->panel->transparent_color(@_);
}
=head2 make_glyph
Title : make_glyph
Usage : @glyphs = $f->glyph($level,[$type,]$feature1,$feature2...)
Function : transform features into glyphs.
Returns : a list of Bio::Graphics::Glyph objects
Args : a feature "level", followed by a list of FeatureI objects.
Status : Internal to Bio::Graphics
lib/Bio/Graphics/Glyph/decorated_gene.pm view on Meta::CPAN
my @subparts;
if ($class->option('sub_part')) {
@subparts = $feature->get_SeqFeatures($class->option('sub_part'));
}
else {
@subparts = $feature->get_SeqFeatures(qw(CDS five_prime_UTR three_prime_UTR UTR));
}
# The CDS and UTRs may be represented as a single feature with subparts or as several features
# that have different IDs. We handle both cases transparently.
my @result;
foreach (@subparts) {
if ($_->primary_tag =~ /CDS|UTR/i) {
my @cds_seg = $_->get_SeqFeatures;
if (@cds_seg > 0) { push @result,@cds_seg } else { push @result,$_ }
} else {
push @result,$_;
}
}
return @result;
lib/Bio/Graphics/Glyph/decorated_transcript.pm view on Meta::CPAN
'boolean',
'false',
'Specifies whether decorations should be visible or not. For selective display of individual',
'decorations, specify a callback function and return 1 or 0 after inspecting the active',
'decoration of the glyph. '],
decoration_color => [
'color',
undef,
'Decoration background color. If no color is specified, colors are assigned automatically',
'by decoration type and name, whereas decorations of identical type and name are assigned',
'the same color. A special color \'transparent\' can be used here in combination with',
'the option \'decoration_border\' to draw decorations as outlines.'],
decoration_border => [
['none', 'solid', 'dashed'],
'none',
'Decoration border style. By default, decorations are drawn without border (\'none\' or',
'0). Other valid options here include \'solid\' or \'dashed\'.'],
decoration_border_color => [
'color',
'black',
'Color of decoration boder.'],
lib/Bio/Graphics/Glyph/decorated_transcript.pm view on Meta::CPAN
decoration_label_position => [
['inside', 'above', 'below'],
undef,
'Position of decoration label. Labels can be drawn \'inside\' decorations (default)',
'or \'above\' and \'below\' decorations.'],
decoration_label_color => [
'color',
'undef',
'Decoration label color. If not specified, this color is complementary to',
'decoration_color (e.g., yellow text on blue background, white on black, etc.). If the',
'decoration background color is transparent and no decoration label color is specified,',
'the foreground color of the underlying transcript glyph is used as default.'],
additional_decorations => [
'string',
undef,
'Additional decorations to those specified in the GFF file. Expected is a string',
'in the same format as described above for GFF files. This parameter is intended',
'to be used as callback function, which inspects the currently processed transcript',
'feature (first parameter to callback) and returns additional protein decorations',
'that should be drawn.'],
decoration_height => [
lib/Bio/Graphics/Glyph/decorated_transcript.pm view on Meta::CPAN
return $decoration_label_color
if ( defined $decoration_label_color
and $decoration_label_color ne 'auto'
and $decoration_label_color ne '' );
my $decoration_color = $self->decoration_color($decoration);
return $self->fgcolor
if ((!$decoration_label_color or $decoration_label_color eq 'auto')
and $decoration_color eq "transparent");
# assign color complementary to decoration color
my ( $red, $green, $blue ) =
Bio::Graphics::Panel->color_name_to_rgb($decoration_color);
$decoration_label_color =
sprintf( "#%02X%02X%02X", 255 - $red, 255 - $green, 255 - $blue ); # background complement
return $decoration_label_color;
}
lib/Bio/Graphics/Glyph/decorated_transcript.pm view on Meta::CPAN
# my ($h_top, $h_bottom) = ($dy + $self->top + $self->pad_top, $dy + $self->bottom - $self->pad_bottom);
my $h_top = $dy + $self->decoration_top($mh);
my $h_bottom = $dy + $self->decoration_bottom($mh);
my $color = $self->decoration_color($mh);
# don't draw over borders; not supported by SVG
$gd->clip( $left + 1, $h_top, $right - 1, $h_bottom )
if ( !$gd->isa("GD::SVG::Image") );
if ($color ne 'transparent')
{
warn "filledRectangle: left=$h_left,top=$h_top,right=$h_right,bottom=$h_bottom\n"
if (DEBUG == 2);
$gd->filledRectangle( $h_left, $h_top, $h_right, $h_bottom,
$self->factory->translate_color($color) );
}
if ($self->decoration_border($mh))
{
my ($b_left, $b_top, $b_right, $b_bottom) = ($h_left, $h_top, $h_right, $h_bottom);
lib/Bio/Graphics/Glyph/decorated_transcript.pm view on Meta::CPAN
decorations, specify a callback function and
return 1 or 0 after inspecting the active decoration
of the glyph.
-decoration_color
Decoration background color. If no color is <auto>
specified, colors are assigned automatically by
decoration type and name, whereas decorations of
identical type and name are assigned the same color.
A special color 'transparent' can be used here in
combination with the option 'decoration_border' to
draw decorations as outlines.
-decoration_border
Decoration border style. By default, decorations are 0 (none)
drawn without border ('none' or 0). Other valid
options here include 'solid' or 'dashed'.
-decoration_border_color
lib/Bio/Graphics/Glyph/decorated_transcript.pm view on Meta::CPAN
Position of decoration label. Labels can be drawn inside
'inside' decorations (default) or 'above' and 'below'
decorations.
-decoration_label_color
Decoration label color. If not specified, this color
is complementary to decoration_color (e.g., yellow text
on blue background, white on black, etc.). If the
decoration background color is transparent and no
decoration label color is specified, the foreground color
of the underlying transcript glyph is used as default.
-additional_decorations
Additional decorations to those specified in the GFF undefined
file. Expected is a string in the same format as
described above for GFF files.
This parameter is intended to be used as callback
function, which inspects the currently processed
lib/Bio/Graphics/Glyph/gene.pm view on Meta::CPAN
@subparts = $feature->get_SeqFeatures(qw(CDS exon five_prime_UTR three_prime_UTR UTR));
} else {
@subparts = $feature->get_SeqFeatures(qw(CDS five_prime_UTR three_prime_UTR UTR));
}
}
else {
@subparts = $feature->get_SeqFeatures('exon');
}
# The CDS and UTRs may be represented as a single feature with subparts or as several features
# that have different IDs. We handle both cases transparently.
my @result;
foreach (@subparts) {
if ($_->primary_tag =~ /CDS|UTR/i) {
my @cds_seg = $_->get_SeqFeatures;
if (@cds_seg > 0) { push @result,@cds_seg } else { push @result,$_ }
} else {
push @result,$_;
}
}
# fall back to drawing a solid box if no subparts and level 0
lib/Bio/Graphics/Glyph/processed_transcript.pm view on Meta::CPAN
sub _subfeat {
my $self = shift;
return $self->SUPER::_subfeat(@_) unless ref($self) && $self->{level} == 0 && $self->option('one_cds');
my $feature = shift;
my @subparts = $feature->get_SeqFeatures(qw(CDS five_prime_UTR three_prime_UTR UTR));
# The CDS and UTRs may be represented as a single feature with subparts or as several features
# that have different IDs. We handle both cases transparently.
my @result;
foreach (@subparts) {
if ($_->primary_tag =~ /CDS|UTR/i) {
my @cds_seg = $_->get_SeqFeatures;
if (@cds_seg > 0) { push @result,@cds_seg } else { push @result,$_ }
} else {
push @result,$_;
}
}
return @result;
lib/Bio/Graphics/Glyph/rainbow_gene.pm view on Meta::CPAN
@subparts = $feature->get_SeqFeatures($class->option('sub_part'));
}
elsif ($feature->primary_tag =~ /^mRNA/i) {
@subparts = $feature->get_SeqFeatures(qw(CDS five_prime_UTR three_prime_UTR UTR));
}
else {
@subparts = $feature->get_SeqFeatures('exon');
}
# The CDS and UTRs may be represented as a single feature with subparts or as several features
# that have different IDs. We handle both cases transparently.
my @result;
foreach (@subparts) {
if ($_->primary_tag =~ /CDS|UTR/i) {
my @cds_seg = $_->get_SeqFeatures;
if (@cds_seg > 0) { push @result,@cds_seg } else { push @result,$_ }
} else {
push @result,$_;
}
}
# fall back to drawing a solid box if no subparts and level 0
lib/Bio/Graphics/Glyph/topoview.pm view on Meta::CPAN
$alpha ||= $self->option('fill opacity') || 1.0;
if ($alpha && $alpha > 1) {
die "Alpha must be between zero and 1";
}
# make it hex if it looks like hex
if ((length $color == 6) && $color =~ /^[0-9A-F]+$/) {
$color = '#'.$color;
}
my $bgcolor = $self->factory->transparent_color($alpha,$color);
my $fgcolor = $self->translate_color($color);
$self->{bgcolor}->{$subset} = $bgcolor;
# We will re-use this array later
$_ = $subset;
}
}
shift(@subsets) if $subsets[0] eq 'MAX';
warn("subsets: @subsets\n") if DEBUG;
lib/Bio/Graphics/Glyph/wiggle_density.pm view on Meta::CPAN
$rgb = $scaled_max > $scaled_min ? ([$self->panel->rgb($positive)] || [$self->panel->rgb($self->bgcolor)])
: ([$self->panel->rgb($negative)] || [$self->panel->rgb($self->bgcolor)]);
}
my %color_cache;
my $flip = $self->{flip};
$self->panel->startGroup($gd);
foreach (@$parts) {
my ($start,$end,$score) = @$_;
next unless defined $score; # undefined (absent) score transparent
$score = ($score-$mean)/$stdev if $rescale;
$score = $scaled_min if $scaled_min > $score;
$score = $scaled_max if $scaled_max < $score;
my $x1 = $left + ($start - $f_start) * $x_scale;
my $x2 = $left + ($end - $f_start) * $x_scale;
if ($flip) {
$x1 = $right - ($x1-$left);
$x2 = $right - ($x2-$left);
($x1,$x2) = ($x2,$x1);
lib/Bio/Graphics/Glyph/wiggle_xyplot.pm view on Meta::CPAN
{
basedir => [
'string',
undef,
'If a relative path is used for "wigfile", then this option provides',
'the base directory on which to resolve the path.'
],
variance_band => [
'boolean',
0,
'If true, draw a semi-transparent band across the image that indicates',
'the mean and standard deviation of the data set. Only of use when a wig',
'file is provided.'
],
z_score_bounds => [
'integer',
4,
'When using z_score autoscaling, this option controls how many standard deviations',
'above and below the mean to show.'
],
autoscale => [
lib/Bio/Graphics/Glyph/xyplot.pm view on Meta::CPAN
return $r*$l if int($r) == $r;
return $l*int($a/$l);
}
sub _draw_boxes {
my $self = shift;
my ($gd,$left,$top,$y_origin) = @_;
my @parts = $self->parts;
my $lw = $self->linewidth;
# Make the boxes transparent
my $positive = $self->pos_color + 1073741824;
my $negative = $self->neg_color + 1073741824;
my $height = $self->height;
my $midpoint = $self->midpoint ? $self->score2position($self->midpoint)
: $y_origin;
my $partcolor = $self->code_option('part_color');
my $factory = $self->factory;
lib/Bio/Graphics/Panel.pm view on Meta::CPAN
}
# reverse of translate(); given index, return rgb triplet
sub rgb {
my $self = shift;
my $idx = shift;
my $gd = $self->{gd} or return;
return $gd->rgb($idx);
}
sub transparent_color {
my $self = shift;
my ($opacity,@colors) = @_;
return $self->_translate_color($opacity,@colors);
}
sub translate_color {
my $self = shift;
my @colors = @_;
return $self->_translate_color(1.0,@colors);
}
lib/Bio/Graphics/Panel.pm view on Meta::CPAN
my $alpha = $self->adjust_alpha($4);
my (@rgb) = map {/(\d+)%/ ? int(255 * $1 / 100) : $_} ($1,$2,$3);
$index = $gd->colorAllocateAlpha(@rgb,$4);
}
elsif ($colors[0] =~ /^(\d+),(\d+),(\d+)$/i ||
$colors[0] =~ /^rgb\((\d+),(\d+),(\d+)\)$/i
) {
my (@rgb) = map {/(\d+)%/ ? int(255 * $1 / 100) : $_} ($1,$2,$3);
$index = $gd->colorAllocateAlpha(@rgb,$default_alpha);
}
elsif ($colors[0] eq 'transparent') {
$index = $gd->colorAllocateAlpha(255,255,255,127);
}
elsif ($colors[0] =~ /^(\w+):([\d.]+)/) { # color:alpha
my @rgb = $self->color_name_to_rgb($1);
@rgb = (0,0,0) unless @rgb;
my $alpha = $self->adjust_alpha($2);
$index = $gd->colorAllocateAlpha(@rgb,$alpha);
}
elsif ($default_alpha < 127) {
my @rgb = $self->color_name_to_rgb($colors[0]);
lib/Bio/Graphics/Panel.pm view on Meta::CPAN
-filter Select which features to
display. Must be a CODE reference.
B<Specifying colors:> Colors can be expressed in either of two ways:
as symbolic names such as "cyan", as HTML-style #RRGGBB triples, and
r,g,b comma-separated numbers. The symbolic names are the 140 colors
defined in the Netscape/Internet Explorer color cube, and can be
retrieved using the Bio::Graphics::Panel-E<gt>color_names() method.
Transparent and semi-transparent colors can be specified using the
following syntax:
#RRGGBBAA - red, green, blue and alpha
r,g,b,a - red, green, blue, alpha
blue:alpha - symbolic name and alpha
rgb(r,g,b) - CSS style rgb values
rgba(r,g,b,a) - CSS style rgba values
Alpha values can be specified as GD style integers ranging from 0
(opaque) to 127 (transparent), or as CSS-style floating point numbers
ranging from 0.0 (transparent) through 1.0 (opaque). As a special
case, a completely transparent color can be specified using the color
named "transparent". In the rgb() and rgba() forms, red, green, blue
values can be specified as percentages, as in rgb(100%,0%,50%);
otherwise, the values are integers from 0 to 255.
In addition, the -fgcolor and -bgcolor options accept the special
color names "featureScore" and "featureRGB". In the first case,
Bio::Graphics will examine each feature in the track for a defined
"score" tag (or the presence of a score() method) with a numeric value
ranging from 0-1000. It will draw a grayscale color ranging from
lightest (0) to darkest (1000). If the color is named "featureRGB",
then Bio::Graphics will look for a tag named "RGB" and will use that
t/decorated_transcript_t1.pl view on Meta::CPAN
return 'white' if ($glyph->active_decoration->name eq "VTS");
},
-additional_decorations => sub {
my $feature = shift;
my ($id) = $feature->get_tag_values('load_id');
my %add_h = ( "rna_PFA0680c-1" => "test:callback:100:130:0" );
return $add_h{$id};
}
);
# decoration outside transcript boundaries, transparent background
my ($gene2) = $store->features(-name => 'test1');
{
$panel->add_track
(
$gene2,
-glyph => 'decorated_gene',
-description => sub { "Gene label and description do not bump with extended decoration boundaries" },
-label => 1,
-label_position => 'top',
-height => 12,
-decoration_visible => 1,
-decoration_border => "dashed",
-decoration_color => "transparent",
-decoration_label_position => "above",
-decoration_label => 1,
-decoration_height => 17,
-decoration_border_color => "blue"
);
}
# use of decorated_transcript glyph directly, with mRNA feature
{
my ($rna2) = $gene2->get_SeqFeatures('mRNA');