annotate variant_effect_predictor/Bio/Graphics/Glyph/ruler_arrow.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 package Bio::Graphics::Glyph::ruler_arrow;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 # package to use for drawing an arrow as ruler (5' and 3' are marked as label)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 use vars '@ISA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 use Bio::Graphics::Glyph::generic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 @ISA = 'Bio::Graphics::Glyph::generic';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 my %UNITS = (K => 1000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 M => 1_000_000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 G => 1_000_000_000);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 sub pad_bottom {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 my $val = $self->SUPER::pad_bottom(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 $val += $self->font->height if $self->option('tick');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 $val;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 # override draw method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 sub draw {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 my $parallel = $self->option('parallel');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 $parallel = 1 unless defined $parallel;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 $self->draw_parallel(@_) if $parallel;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 $self->draw_perpendicular(@_) unless $parallel;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 $self->draw_label(@_) if ($self->option('label'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 sub draw_perpendicular {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 my $gd = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 my ($dx,$dy) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my ($x1,$y1,$x2,$y2) = $self->bounds(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 my $ne = $self->option('northeast');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 my $sw = $self->option('southwest');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $ne = $sw = 1 unless defined($ne) || defined($sw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 # draw a perpendicular arrow at position indicated by $x1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 my $fg = $self->set_pen;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 my $a2 = ($y2-$y1)/4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 my @positions = $x1 == $x2 ? ($x1) : ($x1,$x2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 for my $x (@positions) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 if ($ne) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 $gd->line($x,$y1,$x,$y2,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 $gd->line($x-$a2,$y1+$a2,$x,$y1,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 $gd->line($x+$a2,$y1+$a2,$x,$y1,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 if ($sw) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 $gd->line($x,$y1,$x,$y2,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 $gd->line($x-$a2,$y2-$a2,$x,$y2,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 $gd->line($x+$a2,$y2-$a2,$x,$y2,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 # add a label if requested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # $self->draw_label($gd,$dx,$dy) if ($self->option('label') && !$self->option('ruler'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # this draws the label aligned to the left
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 sub draw_parallel {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 my $gd = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 my ($dx,$dy) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 my ($x1,$y1,$x2,$y2) = $self->bounds(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 my $fg = $self->set_pen;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 my $a2 = ($self->height)/2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 my $center = $y1+$a2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 $x1 = $self->panel->left if $x1 < $self->panel->left;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 $x2 = $self->panel->right if $x2 > $self->panel->right;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 my ($sw,$ne,$base_w,$base_e) = $self->arrowheads;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 $gd->line($x1,$center,$x2,$center,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 $self->arrowhead($gd,$x1,$center,$a2,-1) if $sw; # west arrow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 $self->arrowhead($gd,$x2,$center,$a2,+1) if $ne; # east arrow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 $gd->line($x2,$center-$a2,$x2,$center+$a2,$fg) if $base_e; #east base
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 $gd->line($x1,$center-$a2,$x1,$center+$a2,$fg) if $base_w; #west base
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 # turn on ticks
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 if ($self->option('tick')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 local $^W = 0; # dumb uninitialized variable warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my $font = $self->font;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 my $width = $font->width;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 my $font_color = $self->fontcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 my $height = $self->height;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 my $relative = $self->option('relative_coords');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 my $start = $relative ? 1 : $self->feature->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 my $stop = $start + $self->feature->length - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 my $offset = $relative ? $self->feature->start-1 : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 my $reversed = $self->feature->strand < 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 my $units = $self->option('units') || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 my $divisor = $UNITS{$units} || 1 if $units;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 my ($major_ticks,$minor_ticks) = $self->panel->ticks($start,$stop,$font,$divisor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 ## Does the user want to override the internal scale?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 my $scale = $self->option('scale');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 my $left = $sw ? $x1+$height : $x1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 my $right = $ne ? $x2-$height : $x2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 my $format = ($major_ticks->[1]-$major_ticks->[0])/($divisor||1) < 1 ? "%.1f$units" : "%d$units";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 for my $i (@$major_ticks) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 my $tickpos = $dx + ($reversed ? $self->map_pt($stop - $i + $offset)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 : $self->map_pt($i + $offset));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 next if $tickpos < $left or $tickpos > $right;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 $gd->line($tickpos,$center-$a2,$tickpos,$center+$a2,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my $label = $scale ? $i / $scale : $i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 if ($units) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 my $scaled = $label/$divisor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 $label = sprintf($format,$scaled);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 my $middle = $tickpos - (length($label) * $width)/2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $gd->string($font,$middle,$center+$a2-1,$label,$font_color)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 unless ($self->option('no_tick_label'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 if ($self->option('tick') >= 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 my $a4 = $self->height/4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 for my $i (@$minor_ticks) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 my $tickpos = $dx + ($reversed ? $self->map_pt($stop - $i + $offset)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 : $self->map_pt($i + $offset));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 next if $tickpos < $left or $tickpos > $right;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 $gd->line($tickpos,$center-$a4,$tickpos,$center+$a4,$fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 # add a label if requested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 # $self->draw_label($gd,$dx,$dy) if ($self->option('label');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 # $self->draw_description($gd,$dx,$dy) if $self->option('description');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 sub arrowheads {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 my ($ne,$sw,$base_e,$base_w);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 if ($self->option('double')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 $ne = $sw = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 $ne = $self->option('northeast') || $self->option('east');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 $sw = $self->option('southwest') || $self->option('west');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 # otherwise use strandedness to define the arrow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 unless (defined($ne) || defined($sw)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 # turn on both if neither specified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 $ne = 1 if $self->feature->strand > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 $sw = 1 if $self->feature->strand < 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 return ($sw,$ne,0,0) unless $self->option('base');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 return ($sw,$ne,!$sw,!$ne);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 sub draw_label {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 my ($gd,$left,$top) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my $label5 = "5'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 my $label3 = "3'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my $relative = $self->option('relative_coords');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my $start = $relative ? 1 : $self->feature->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 my $stop = $start + $self->feature->length - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 my $offset = $relative ? $self->feature->start-1 : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 my $reversed = $self->feature->strand < 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 my $units = $self->option('units') || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 my $divisor = $UNITS{$units} || 1 if $units;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 my ($major_ticks,$minor_ticks) = $self->panel->ticks($start,$stop,$self->font,$divisor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 my $tick_scale = " ($major_ticks bp/";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $tick_scale .= ($self->option('tick') >= 2)?"major tick)":"tick)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 my $top_left_label = $label5;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $top_left_label .= $tick_scale if ($self->option('no_tick_label') && $self->option('tick'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 #-1 direction mean lower end is 3' (minus strand on top)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 ($label5, $label3) = ($label3, $label5) if ($self->option('direction') == -1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 my $x = $self->left + $left;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $x = $self->panel->left + 1 if $x <= $self->panel->left;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 my $font = $self->option('labelfont') || $self->font;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $gd->string($font,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $x,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 $self->top + $top,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 $top_left_label,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $self->fontcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my $x1 = $left + $self->panel->right - $font->width*length($label3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 $gd->string($font,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 $x1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $self->top + $top,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 $label3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 $self->fontcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 if ($self->option('both')) {#minus strand as well
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 $gd->string($font,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 $x,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 $self->bottom - $self->pad_bottom + $top,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 $label3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 $self->fontcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my $x1 = $left + $self->panel->right - $font->width*length($label5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 $gd->string($font,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $x1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 $self->bottom - $self->pad_bottom + $top,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $label5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $self->fontcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 __END__
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Bio::Graphics::Glyph::arrow - The "ruler_arrow" glyph
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 This glyph draws arrows. Label, if requested, will be 5' and 3' at both ends
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 and tick scale is printed if no_tick_label option is set and tick option set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 Depending on options, the arrows can be labeled, be oriented vertically
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 or horizontally, or can contain major and minor ticks suitable for use as a scale.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 =head2 OPTIONS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 In addition to the common options, the following glyph-specific
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 options are recognized:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Option Description Default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 ------ ----------- -------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 -tick Whether to draw major 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 and minor ticks.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 0 = no ticks
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 1 = major ticks
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 2 = minor ticks
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 -label 5' at start, 3' at end 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 above arrow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 -both 5', 3' above, 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 and 3', 5' below arrow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 -direction 0 = ruler is plus strand 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 -1 = ruler is minus strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 -parallel Whether to draw the arrow true
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 parallel to the sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 or perpendicular to it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 -northeast Force a north or east true
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 arrowhead(depending
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 on orientation)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 -east synonym of above
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 -southwest Force a south or west true
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 arrowhead(depending
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 on orientation)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 -west synonym of above
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 -double force-doubleheaded arrow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 -base Draw a vertical base at the false
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 non-arrowhead side
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 -scale Reset the labels on the arrow false
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 to reflect an externally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 established scale.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 Set -parallel to false to display a point-like feature such as a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 polymorphism, or to indicate an important location. If the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 start == end, then the glyph will draw a single arrow at the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 designated location:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 ^
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 |
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Otherwise, there will be two arrows at the start and end:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 ^ ^
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 | |
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 Scale: Pass in a externally established scale to reset the labels on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 the arrow. This is particularly useful for manually constructed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 images where the founding parameters of the panel are not 1-based.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 For example, a genetic map interval ranging from 0.1 - 0.3 can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 constructed by first multiplying every value by 100. Passing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 arrow(-scale=>100);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 will draw tick marks labelled appropriately to your external scale.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 =head1 BUGS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 Please report them.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 L<Bio::Graphics::Panel>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 L<Bio::Graphics::Glyph>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 L<Bio::Graphics::Glyph::arrow>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 L<Bio::Graphics::Glyph::cds>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 L<Bio::Graphics::Glyph::crossbox>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 L<Bio::Graphics::Glyph::diamond>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 L<Bio::Graphics::Glyph::dna>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 L<Bio::Graphics::Glyph::dot>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 L<Bio::Graphics::Glyph::ellipse>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 L<Bio::Graphics::Glyph::extending_arrow>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 L<Bio::Graphics::Glyph::generic>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 L<Bio::Graphics::Glyph::graded_segments>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 L<Bio::Graphics::Glyph::heterogeneous_segments>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 L<Bio::Graphics::Glyph::line>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 L<Bio::Graphics::Glyph::pinsertion>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 L<Bio::Graphics::Glyph::primers>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 L<Bio::Graphics::Glyph::rndrect>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 L<Bio::Graphics::Glyph::segments>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 L<Bio::Graphics::Glyph::ruler_arrow>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 L<Bio::Graphics::Glyph::toomany>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 L<Bio::Graphics::Glyph::transcript>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 L<Bio::Graphics::Glyph::transcript2>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 L<Bio::Graphics::Glyph::translation>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 L<Bio::Graphics::Glyph::triangle>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 L<Bio::DB::GFF>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 L<Bio::SeqI>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 L<Bio::SeqFeatureI>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 L<Bio::Das>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 L<GD>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Shengqiang Shu E<lt>sshu@bdgp.lbl.govE<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Lincoln Stein E<lt>lstein@cshl.orgE<gt>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Copyright (c) 2001 BDGP, Cold Spring Harbor Laboratory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 This library is free software; you can redistribute it and/or modify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 it under the same terms as Perl itself. See DISCLAIMER.txt for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 disclaimers of warranty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 =cut