annotate variant_effect_predictor/Bio/Graphics/Panel.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 package Bio::Graphics::Panel;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 use Bio::Graphics::Glyph::Factory;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5 use Bio::Graphics::Feature;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 use GD;;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 use constant KEYLABELFONT => gdMediumBoldFont;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10 use constant KEYSPACING => 5; # extra space between key columns
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 use constant KEYPADTOP => 5; # extra padding before the key starts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12 use constant KEYCOLOR => 'wheat';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 use constant KEYSTYLE => 'bottom';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14 use constant KEYALIGN => 'left';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15 use constant GRIDCOLOR => 'lightcyan';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16 use constant MISSING_TRACK_COLOR =>'gray';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18 my %COLORS; # translation table for symbolic color names to RGB triple
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20 # Create a new panel of a given width and height, and add lists of features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21 # one by one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22 sub new {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23 my $class = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24 my %options = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26 $class->read_colors() unless %COLORS;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28 my $length = $options{-length} || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 my $offset = $options{-offset} || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30 my $spacing = $options{-spacing} || 5;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31 my $bgcolor = $options{-bgcolor} || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32 my $keyfont = $options{-key_font} || KEYLABELFONT;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 my $keycolor = $options{-key_color} || KEYCOLOR;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34 my $keyspacing = $options{-key_spacing} || KEYSPACING;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35 my $keystyle = $options{-key_style} || KEYSTYLE;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36 my $keyalign = $options{-key_align} || KEYALIGN;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 my $allcallbacks = $options{-all_callbacks} || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38 my $gridcolor = $options{-gridcolor} || GRIDCOLOR;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39 my $grid = $options{-grid} || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 my $flip = $options{-flip} || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41 my $empty_track_style = $options{-empty_tracks} || 'key';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42 my $truecolor = $options{-truecolor} || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44 if (my $seg = $options{-segment}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45 $offset = eval {$seg->start-1} || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46 $length = $seg->length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 $offset ||= $options{-start}-1 if defined $options{-start};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50 $length ||= $options{-stop}-$options{-start}+1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51 if defined $options{-start} && defined $options{-stop};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53 return bless {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54 tracks => [],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55 width => $options{-width} || 600,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56 pad_top => $options{-pad_top}||0,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57 pad_bottom => $options{-pad_bottom}||0,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58 pad_left => $options{-pad_left}||0,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59 pad_right => $options{-pad_right}||0,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60 length => $length,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61 offset => $offset,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 gridcolor => $gridcolor,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63 grid => $grid,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64 bgcolor => $bgcolor,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65 height => 0, # AUTO
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66 spacing => $spacing,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 key_font => $keyfont,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68 key_color => $keycolor,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69 key_spacing => $keyspacing,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70 key_style => $keystyle,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 key_align => $keyalign,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72 all_callbacks => $allcallbacks,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73 truecolor => $truecolor,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74 flip => $flip,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75 empty_track_style => $empty_track_style,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76 },$class;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79 sub pad_left {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81 my $g = $self->{pad_left};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82 $self->{pad_left} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83 $g;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85 sub pad_right {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87 my $g = $self->{pad_right};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88 $self->{pad_right} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 $g;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91 sub pad_top {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 my $g = $self->{pad_top};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94 $self->{pad_top} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 $g;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 sub pad_bottom {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 my $g = $self->{pad_bottom};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 $self->{pad_bottom} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 $g;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 sub flip {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 my $g = $self->{flip};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107 $self->{flip} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 $g;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111 # values of empty_track_style are:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112 # "suppress" -- suppress empty tracks entirely (default)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113 # "key" -- show just the key in "between" mode
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 # "line" -- draw a thin grey line
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115 # "dashed" -- draw a dashed line
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116 sub empty_track_style {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 my $g = $self->{empty_track_style};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 $self->{empty_track_style} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120 $g;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 sub key_style {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 my $g = $self->{key_style};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126 $self->{key_style} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 $g;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 # public routine for mapping from a base pair
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131 # location to pixel coordinates
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 sub location2pixel {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 my $end = $self->end + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135 my @coords = $self->{flip} ? map { $end-$_ } @_ : @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136 $self->map_pt(@coords);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 # numerous direct calls into array used here for performance considerations
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140 sub map_pt {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 my $offset = $self->{offset};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143 my $scale = $self->{scale} || $self->scale;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 my $pl = $self->{pad_left};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145 my $pr = $self->{width} - $self->{pad_right};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 my $flip = $self->{flip};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147 my $length = $self->{length};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 my @result;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149 foreach (@_) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 my $val = $flip ? int (0.5 + $pr - ($length - ($_- 1)) * $scale) : int (0.5 + $pl + ($_-$offset-1) * $scale);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151 $val = $pl-1 if $val < $pl;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152 $val = $pr+1 if $val > $pr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 push @result,$val;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155 @result;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158 sub map_no_trunc {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160 my $offset = $self->{offset};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 my $scale = $self->scale;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162 my $pl = $self->{pad_left};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163 my $pr = $self->{width} - $self->{pad_right};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164 my $flip = $self->{flip};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165 my $length = $self->{length};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166 my $end = $offset+$length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167 my @result;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 foreach (@_) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 my $val = $flip ? int (0.5 + $pl + ($end - ($_- 1)) * $scale) : int (0.5 + $pl + ($_-$offset-1) * $scale);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 push @result,$val;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 @result;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175 sub scale {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177 $self->{scale} ||= ($self->{width}-$self->pad_left-$self->pad_right)/($self->length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 sub start { shift->{offset}+1}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 sub end { $_[0]->start + $_[0]->{length}-1}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 sub offset { shift->{offset} }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184 sub width {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186 my $d = $self->{width};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187 $self->{width} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 $d;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189 # $d + $self->pad_left + $self->pad_right;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192 sub left {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 $self->pad_left;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196 sub right {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198 $self->width - $self->pad_right;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201 sub spacing {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 my $d = $self->{spacing};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204 $self->{spacing} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205 $d;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208 sub key_spacing {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 my $d = $self->{key_spacing};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211 $self->{key_spacing} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212 $d;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 sub length {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 my $d = $self->{length};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218 if (@_) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 my $l = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 $l = $l->length if ref($l) && $l->can('length');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221 $self->{length} = $l;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223 $d;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226 sub gridcolor {shift->{gridcolor}}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228 sub all_callbacks { shift->{all_callbacks} }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230 sub add_track {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232 $self->_do_add_track(scalar(@{$self->{tracks}}),@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235 sub unshift_track {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237 $self->_do_add_track(0,@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240 sub insert_track {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 my $position = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 $self->_do_add_track($position,@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 # create a feature and factory pair
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 # see Factory.pm for the format of the options
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249 # The thing returned is actually a generic Glyph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250 sub _do_add_track {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252 my $position = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254 # due to indecision, we accept features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255 # and/or glyph types in the first two arguments
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256 my ($features,$glyph_name) = ([],undef);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 while ( @_ && $_[0] !~ /^-/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258 my $arg = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 $features = $arg and next if ref($arg);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260 $glyph_name = $arg and next unless ref($arg);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 my %args = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264 my ($map,$ss,%options);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266 foreach (keys %args) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267 (my $canonical = lc $_) =~ s/^-//;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268 if ($canonical eq 'glyph') {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269 $map = $args{$_};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 delete $args{$_};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271 } elsif ($canonical eq 'stylesheet') {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 $ss = $args{$_};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 delete $args{$_};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275 $options{$canonical} = $args{$_};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279 $glyph_name = $map if defined $map;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280 $glyph_name ||= 'generic';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282 local $^W = 0; # uninitialized variable warnings under 5.00503
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284 my $panel_map =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285 ref($map) eq 'CODE' ? sub {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286 my $feature = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287 return 'track' if eval { defined $feature->primary_tag && $feature->primary_tag eq 'track' };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288 return 'group' if eval { defined $feature->primary_tag && $feature->primary_tag eq 'group' };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289 return $map->($feature);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291 : ref($map) eq 'HASH' ? sub {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292 my $feature = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 return 'track' if eval { defined $feature->primary_tag && $feature->primary_tag eq 'track' };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294 return 'group' if eval { defined $feature->primary_tag && $feature->primary_tag eq 'group' };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295 return eval {$map->{$feature->primary_tag}} || 'generic';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297 : sub {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298 my $feature = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 return 'track' if eval { defined $feature->primary_tag && $feature->primary_tag eq 'track' };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300 return 'group' if eval { defined $feature->primary_tag && $feature->primary_tag eq 'group' };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301 return $glyph_name;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304 $self->_add_track($position,$features,-map=>$panel_map,-stylesheet=>$ss,-options=>\%options);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307 sub _add_track {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309 my ($position,$features,@options) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311 # build the list of features into a Bio::Graphics::Feature object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 $features = [$features] unless ref $features eq 'ARRAY';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314 # optional middle-level glyph is the group
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315 foreach my $f (grep {ref $_ eq 'ARRAY'} @$features) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316 next unless ref $f eq 'ARRAY';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 $f = Bio::Graphics::Feature->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318 -segments=>$f,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319 -type => 'group'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323 # top-level glyph is the track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324 my $feature = Bio::Graphics::Feature->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325 -segments=>$features,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326 -start => $self->offset+1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327 -stop => $self->offset+$self->length,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 -type => 'track'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331 my $factory = Bio::Graphics::Glyph::Factory->new($self,@options);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332 my $track = $factory->make_glyph(-1,$feature);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334 splice(@{$self->{tracks}},$position,0,$track);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335 return $track;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338 sub height {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340 my $spacing = $self->spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341 my $key_height = $self->format_key;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342 my $empty_track_style = $self->empty_track_style;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 my $key_style = $self->key_style;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344 my $bottom_key = $key_style eq 'bottom';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 my $between_key = $key_style eq 'between';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 my $draw_empty = $empty_track_style =~ /^(line|dashed)$/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 my $keyheight = $self->{key_font}->height;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 my $height = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 for my $track (@{$self->{tracks}}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350 my $draw_between = $between_key && $track->option('key');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351 my $has_parts = $track->parts;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352 next if !$has_parts && ($empty_track_style eq 'suppress'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 or $empty_track_style eq 'key' && $bottom_key);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354 $height += $keyheight if $draw_between;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355 $height += $self->spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356 $height += $track->layout_height;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359 # get rid of spacing under last track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360 $height -= $self->spacing unless $bottom_key;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361 return $height + $key_height + $self->pad_top + $self->pad_bottom;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 sub gd {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366 my $existing_gd = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368 local $^W = 0; # can't track down the uninitialized variable warning
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370 return $self->{gd} if $self->{gd};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372 my $width = $self->width;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373 my $height = $self->height;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375 my $gd = $existing_gd || GD::Image->new($width,$height,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376 ($self->{truecolor} && GD::Image->can('isTrueColor') ? 1 : ())
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379 my %translation_table;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 for my $name ('white','black',keys %COLORS) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381 my $idx = $gd->colorAllocate(@{$COLORS{$name}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382 $translation_table{$name} = $idx;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 $self->{translations} = \%translation_table;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 $self->{gd} = $gd;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387 if ($self->bgcolor) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388 $gd->fill(0,0,$self->bgcolor);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389 } elsif (eval {$gd->isTrueColor}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390 $gd->fill(0,0,$translation_table{'white'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393 my $pl = $self->pad_left;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394 my $pt = $self->pad_top;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395 my $offset = $pt;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 my $keyheight = $self->{key_font}->height;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397 my $bottom_key = $self->{key_style} eq 'bottom';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398 my $between_key = $self->{key_style} eq 'between';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399 my $left_key = $self->{key_style} eq 'left';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400 my $right_key = $self->{key_style} eq 'right';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401 my $empty_track_style = $self->empty_track_style;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402 my $spacing = $self->spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404 # we draw in two steps, once for background of tracks, and once for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405 # the contents. This allows the grid to sit on top of the track background.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406 for my $track (@{$self->{tracks}}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 my $draw_between = $between_key && $track->option('key');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408 next if !$track->parts && ($empty_track_style eq 'suppress'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409 or $empty_track_style eq 'key' && $bottom_key);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410 $gd->filledRectangle($pl,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411 $offset,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412 $width-$self->pad_right,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413 $offset+$track->layout_height
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414 + ($between_key ? $self->{key_font}->height : 0),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415 $track->tkcolor)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416 if defined $track->tkcolor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417 $offset += $keyheight if $draw_between;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 $offset += $track->layout_height + $spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 $self->draw_grid($gd) if $self->{grid};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423 $offset = $pt;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424 for my $track (@{$self->{tracks}}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425 my $draw_between = $between_key && $track->option('key');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426 my $has_parts = $track->parts;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427 next if !$has_parts && ($empty_track_style eq 'suppress'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
428 or $empty_track_style eq 'key' && $bottom_key);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
429
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
430 if ($draw_between) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
431 $offset += $self->draw_between_key($gd,$track,$offset);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
432 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
433
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
434 elsif ($self->{key_style} =~ /^(left|right)$/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
435 $self->draw_side_key($gd,$track,$offset,$self->{key_style});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
436 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
437
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
438 $self->draw_empty($gd,$offset,$empty_track_style)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
439 if !$has_parts && $empty_track_style=~/^(line|dashed)$/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
440
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
441 $track->draw($gd,0,$offset,0,1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
442 $self->track_position($track,$offset);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
443 $offset += $track->layout_height + $spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
444 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
445
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
446
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
447 $self->draw_bottom_key($gd,$pl,$offset) if $self->{key_style} eq 'bottom';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
448
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
449 return $self->{gd} = $gd;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
450 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
451
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
452 sub boxes {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
453 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
454 my @boxes;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
455 my $offset = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
456
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
457 my $pl = $self->pad_left;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
458 my $pt = $self->pad_top;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
459 my $between_key = $self->{key_style} eq 'between';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
460 my $bottom_key = $self->{key_style} eq 'bottom';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
461 my $empty_track_style = $self->empty_track_style;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
462 my $keyheight = $self->{key_font}->height;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
463 my $spacing = $self->spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
464
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
465 for my $track (@{$self->{tracks}}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
466 my $draw_between = $between_key && $track->option('key');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
467 next if !$track->parts && ($empty_track_style eq 'suppress'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
468 or $empty_track_style eq 'key' && $bottom_key);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
469 $offset += $keyheight if $draw_between;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
470 my $boxes = $track->boxes(0,$offset+$pt);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
471 $self->track_position($track,$offset);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
472 push @boxes,@$boxes;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
473 $offset += $track->layout_height + $self->spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
474 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
475 return wantarray ? @boxes : \@boxes;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
476 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
477
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
478 sub track_position {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
479 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
480 my $track = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
481 my $d = $self->{_track_position}{$track};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
482 $self->{_track_position}{$track} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
483 $d;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
484 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
485
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
486 # draw the keys -- between
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
487 sub draw_between_key {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
488 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
489 my ($gd,$track,$offset) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
490 my $key = $track->option('key') or return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
491 my $x = $self->{key_align} eq 'center' ? $self->width - (CORE::length($key) * $self->{key_font}->width)/2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
492 : $self->{key_align} eq 'right' ? $self->width - CORE::length($key)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
493 : $self->pad_left;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
494 $gd->string($self->{key_font},$x,$offset,$key,1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
495 return $self->{key_font}->height;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
496 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
497
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
498 # draw the keys -- left or right side
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
499 sub draw_side_key {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
500 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
501 my ($gd,$track,$offset,$side) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
502 my $key = $track->option('key') or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
503 my $pos = $side eq 'left' ? $self->pad_left - $self->{key_font}->width * CORE::length($key)-3
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
504 : $self->width - $self->pad_right+3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
505 $gd->string($self->{key_font},$pos,$offset,$key,1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
506 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
507
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
508 # draw the keys -- bottom
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
509 sub draw_bottom_key {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
510 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
511 my ($gd,$left,$top) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
512 my $key_glyphs = $self->{key_glyphs} or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
513
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
514 my $color = $self->translate_color($self->{key_color});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
515 $gd->filledRectangle($left,$top,$self->width - $self->pad_right,$self->height-$self->pad_bottom,$color);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
516 $gd->string($self->{key_font},$left,KEYPADTOP+$top,"KEY:",1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
517 $top += $self->{key_font}->height + KEYPADTOP;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
518
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
519 $_->draw($gd,$left,$top) foreach @$key_glyphs;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
520 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
521
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
522 # Format the key section, and return its height
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
523 sub format_key {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
524 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
525 return 0 unless $self->key_style eq 'bottom';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
526
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
527 return $self->{key_height} if defined $self->{key_height};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
528
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
529 my $suppress = $self->{empty_track_style} eq 'suppress';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
530 my $between = $self->{key_style} eq 'between';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
531
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
532 if ($between) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
533 my @key_tracks = $suppress
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
534 ? grep {$_->option('key') && $_->parts} @{$self->{tracks}}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
535 : grep {$_->option('key')} @{$self->{tracks}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
536 return $self->{key_height} = @key_tracks * $self->{key_font}->height;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
537 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
538
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
539 elsif ($self->{key_style} eq 'bottom') {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
540
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
541 my ($height,$width) = (0,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
542 my %tracks;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
543 my @glyphs;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
544
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
545 # determine how many glyphs become part of the key
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
546 # and their max size
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
547 for my $track (@{$self->{tracks}}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
548
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
549 next unless $track->option('key');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
550 next if $suppress && !$track->parts;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
551
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
552 my $glyph;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
553 if (my @parts = $track->parts) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
554 $glyph = $parts[0]->keyglyph;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
555 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
556 my $t = Bio::Graphics::Feature->new(-segments=>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
557 [Bio::Graphics::Feature->new(-start => $self->offset,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
558 -stop => $self->offset+$self->length)]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
559 my $g = $track->factory->make_glyph(0,$t);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
560 $glyph = $g->keyglyph;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
561 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
562 next unless $glyph;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
563
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
564
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
565 $tracks{$track} = $glyph;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
566 my ($h,$w) = ($glyph->layout_height,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
567 $glyph->layout_width);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
568 $height = $h if $h > $height;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
569 $width = $w if $w > $width;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
570 push @glyphs,$glyph;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
571
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
572 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
573
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
574 $width += $self->key_spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
575
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
576 # no key glyphs, no key
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
577 return $self->{key_height} = 0 unless @glyphs;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
578
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
579 # now height and width hold the largest glyph, and $glyph_count
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
580 # contains the number of glyphs. We will format them into a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
581 # box that is roughly 3 height/4 width (golden mean)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
582 my $rows = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
583 my $cols = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
584 my $maxwidth = $self->width - $self->pad_left - $self->pad_right;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
585 while (++$rows) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
586 $cols = @glyphs / $rows;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
587 $cols = int ($cols+1) if $cols =~ /\./; # round upward for fractions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
588 my $total_width = $cols * $width;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
589 my $total_height = $rows * $width;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
590 last if $total_width < $maxwidth;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
591 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
592
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
593 # move glyphs into row-major format
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
594 my $spacing = $self->key_spacing;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
595 my $i = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
596 for (my $c = 0; $c < $cols; $c++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
597 for (my $r = 0; $r < $rows; $r++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
598 my $x = $c * ($width + $spacing);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
599 my $y = $r * ($height + $spacing);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
600 next unless defined $glyphs[$i];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
601 $glyphs[$i]->move($x,$y);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
602 $i++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
603 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
604 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
605
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
606 $self->{key_glyphs} = \@glyphs; # remember our key glyphs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
607 # remember our key height
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
608 return $self->{key_height} =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
609 ($height+$spacing) * $rows + $self->{key_font}->height +KEYPADTOP;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
610 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
611
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
612 else { # no known key style, neither "between" nor "bottom"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
613 return $self->{key_height} = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
614 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
615 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
616
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
617 sub draw_empty {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
618 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
619 my ($gd,$offset,$style) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
620 $offset += $self->spacing/2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
621 my $left = $self->pad_left;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
622 my $right = $self->width-$self->pad_right;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
623 my $color = $self->translate_color(MISSING_TRACK_COLOR);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
624 if ($style eq 'dashed') {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
625 $gd->setStyle($color,$color,gdTransparent,gdTransparent);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
626 $gd->line($left,$offset,$right,$offset,gdStyled);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
627 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
628 $gd->line($left,$offset,$right,$offset,$color);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
629 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
630 $offset;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
631 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
632
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
633 # draw a grid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
634 sub draw_grid {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
635 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
636 my $gd = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
637
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
638 my $gridcolor = $self->translate_color($self->{gridcolor});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
639 my @positions;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
640 if (ref $self->{grid} eq 'ARRAY') {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
641 @positions = @{$self->{grid}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
642 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
643 my ($major,$minor) = $self->ticks;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
644 my $first_tick = $minor * int(0.5 + $self->start/$minor);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
645 for (my $i = $first_tick; $i < $self->end; $i += $minor) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
646 push @positions,$i;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
647 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
648 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
649 my $pl = $self->pad_left;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
650 my $pt = $self->pad_top;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
651 my $pb = $self->height - $self->pad_bottom;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
652 local $self->{flip} = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
653 for my $tick (@positions) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
654 my ($pos) = $self->map_pt($tick);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
655 $gd->line($pos,$pt,$pos,$pb,$gridcolor);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
656 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
657 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
658
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
659 # calculate major and minor ticks, given a start position
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
660 sub ticks {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
661 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
662 my ($length,$minwidth) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
663
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
664 $length = $self->{length} unless defined $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
665 $minwidth = gdSmallFont->width*7 unless defined $minwidth;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
666
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
667 my ($major,$minor);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
668
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
669 # figure out tick mark scale
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
670 # we want no more than 1 major tick mark every 40 pixels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
671 # and enough room for the labels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
672 my $scale = $self->scale;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
673
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
674 my $interval = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
675
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
676 while (1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
677 my $pixels = $interval * $scale;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
678 last if $pixels >= $minwidth;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
679 $interval *= 10;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
680 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
681
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
682 # to make sure a major tick shows up somewhere in the first half
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
683 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
684 $interval *= .5 if ($interval > 0.5*$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
685
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
686 return ($interval,$interval/10);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
687 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
688
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
689 # reverse of translate(); given index, return rgb triplet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
690 sub rgb {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
691 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
692 my $idx = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
693 my $gd = $self->{gd} or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
694 return $gd->rgb($idx);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
695 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
696
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
697 sub translate_color {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
698 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
699 my @colors = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
700 if (@colors == 3) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
701 my $gd = $self->gd or return 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
702 return $self->colorClosest($gd,@colors);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
703 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
704 elsif ($colors[0] =~ /^\#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
705 my $gd = $self->gd or return 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
706 my ($r,$g,$b) = (hex($1),hex($2),hex($3));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
707 return $self->colorClosest($gd,$r,$g,$b);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
708 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
709 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
710 my $color = $colors[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
711 my $table = $self->{translations} or return 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
712 return defined $table->{$color} ? $table->{$color} : 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
713 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
714 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
715
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
716 # workaround for bad GD
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
717 sub colorClosest {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
718 my ($self,$gd,@c) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
719 return $self->{closestcache}{"@c"} if exists $self->{closestcache}{"@c"};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
720 return $self->{closestcache}{"@c"} = $gd->colorClosest(@c) if $GD::VERSION < 2.04;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
721 my ($value,$index);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
722 for (keys %COLORS) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
723 my ($r,$g,$b) = @{$COLORS{$_}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
724 my $dist = ($r-$c[0])**2 + ($g-$c[1])**2 + ($b-$c[2])**2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
725 ($value,$index) = ($dist,$_) if !defined($value) || $dist < $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
726 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
727 return $self->{closestcache}{"@c"} = $self->{translations}{$index};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
728 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
729
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
730 sub bgcolor {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
731 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
732 return unless $self->{bgcolor};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
733 $self->translate_color($self->{bgcolor});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
734 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
735
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
736 sub set_pen {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
737 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
738 my ($linewidth,$color) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
739 return $self->{pens}{$linewidth,$color} if $self->{pens}{$linewidth,$color};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
740
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
741 my $pen = $self->{pens}{$linewidth} = GD::Image->new($linewidth,$linewidth);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
742 my @rgb = $self->rgb($color);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
743 my $bg = $pen->colorAllocate(255,255,255);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
744 my $fg = $pen->colorAllocate(@rgb);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
745 $pen->fill(0,0,$fg);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
746 $self->{gd}->setBrush($pen);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
747 return gdBrushed;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
748 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
749
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
750 sub png {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
751 my $gd = shift->gd;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
752 $gd->png;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
753 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
754
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
755 sub read_colors {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
756 my $class = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
757 while (<DATA>) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
758 chomp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
759 last if /^__END__/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
760 my ($name,$r,$g,$b) = split /\s+/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
761 $COLORS{$name} = [hex $r,hex $g,hex $b];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
762 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
763 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
764
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
765 sub color_name_to_rgb {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
766 my $class = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
767 my $color_name = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
768 $class->read_colors() unless %COLORS;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
769 return unless $COLORS{$color_name};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
770 return wantarray ? @{$COLORS{$color_name}}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
771 : $COLORS{$color_name};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
772 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
773
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
774 sub color_names {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
775 my $class = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
776 $class->read_colors unless %COLORS;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
777 return wantarray ? keys %COLORS : [keys %COLORS];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
778 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
779
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
780 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
781
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
782 __DATA__
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
783 white FF FF FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
784 black 00 00 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
785 aliceblue F0 F8 FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
786 antiquewhite FA EB D7
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
787 aqua 00 FF FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
788 aquamarine 7F FF D4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
789 azure F0 FF FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
790 beige F5 F5 DC
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
791 bisque FF E4 C4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
792 blanchedalmond FF EB CD
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
793 blue 00 00 FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
794 blueviolet 8A 2B E2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
795 brown A5 2A 2A
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
796 burlywood DE B8 87
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
797 cadetblue 5F 9E A0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
798 chartreuse 7F FF 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
799 chocolate D2 69 1E
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
800 coral FF 7F 50
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
801 cornflowerblue 64 95 ED
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
802 cornsilk FF F8 DC
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
803 crimson DC 14 3C
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
804 cyan 00 FF FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
805 darkblue 00 00 8B
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
806 darkcyan 00 8B 8B
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
807 darkgoldenrod B8 86 0B
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
808 darkgray A9 A9 A9
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
809 darkgreen 00 64 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
810 darkkhaki BD B7 6B
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
811 darkmagenta 8B 00 8B
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
812 darkolivegreen 55 6B 2F
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
813 darkorange FF 8C 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
814 darkorchid 99 32 CC
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
815 darkred 8B 00 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
816 darksalmon E9 96 7A
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
817 darkseagreen 8F BC 8F
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
818 darkslateblue 48 3D 8B
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
819 darkslategray 2F 4F 4F
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
820 darkturquoise 00 CE D1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
821 darkviolet 94 00 D3
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
822 deeppink FF 14 100
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
823 deepskyblue 00 BF FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
824 dimgray 69 69 69
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
825 dodgerblue 1E 90 FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
826 firebrick B2 22 22
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
827 floralwhite FF FA F0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
828 forestgreen 22 8B 22
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
829 fuchsia FF 00 FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
830 gainsboro DC DC DC
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
831 ghostwhite F8 F8 FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
832 gold FF D7 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
833 goldenrod DA A5 20
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
834 gray 80 80 80
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
835 green 00 80 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
836 greenyellow AD FF 2F
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
837 honeydew F0 FF F0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
838 hotpink FF 69 B4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
839 indianred CD 5C 5C
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
840 indigo 4B 00 82
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
841 ivory FF FF F0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
842 khaki F0 E6 8C
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
843 lavender E6 E6 FA
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
844 lavenderblush FF F0 F5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
845 lawngreen 7C FC 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
846 lemonchiffon FF FA CD
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
847 lightblue AD D8 E6
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
848 lightcoral F0 80 80
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
849 lightcyan E0 FF FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
850 lightgoldenrodyellow FA FA D2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
851 lightgreen 90 EE 90
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
852 lightgrey D3 D3 D3
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
853 lightpink FF B6 C1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
854 lightsalmon FF A0 7A
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
855 lightseagreen 20 B2 AA
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
856 lightskyblue 87 CE FA
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
857 lightslategray 77 88 99
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
858 lightsteelblue B0 C4 DE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
859 lightyellow FF FF E0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
860 lime 00 FF 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
861 limegreen 32 CD 32
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
862 linen FA F0 E6
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
863 magenta FF 00 FF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
864 maroon 80 00 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
865 mediumaquamarine 66 CD AA
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
866 mediumblue 00 00 CD
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
867 mediumorchid BA 55 D3
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
868 mediumpurple 100 70 DB
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
869 mediumseagreen 3C B3 71
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
870 mediumslateblue 7B 68 EE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
871 mediumspringgreen 00 FA 9A
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
872 mediumturquoise 48 D1 CC
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
873 mediumvioletred C7 15 85
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
874 midnightblue 19 19 70
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
875 mintcream F5 FF FA
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
876 mistyrose FF E4 E1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
877 moccasin FF E4 B5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
878 navajowhite FF DE AD
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
879 navy 00 00 80
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
880 oldlace FD F5 E6
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
881 olive 80 80 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
882 olivedrab 6B 8E 23
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
883 orange FF A5 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
884 orangered FF 45 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
885 orchid DA 70 D6
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
886 palegoldenrod EE E8 AA
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
887 palegreen 98 FB 98
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
888 paleturquoise AF EE EE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
889 palevioletred DB 70 100
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
890 papayawhip FF EF D5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
891 peachpuff FF DA B9
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
892 peru CD 85 3F
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
893 pink FF C0 CB
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
894 plum DD A0 DD
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
895 powderblue B0 E0 E6
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
896 purple 80 00 80
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
897 red FF 00 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
898 rosybrown BC 8F 8F
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
899 royalblue 41 69 E1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
900 saddlebrown 8B 45 13
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
901 salmon FA 80 72
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
902 sandybrown F4 A4 60
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
903 seagreen 2E 8B 57
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
904 seashell FF F5 EE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
905 sienna A0 52 2D
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
906 silver C0 C0 C0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
907 skyblue 87 CE EB
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
908 slateblue 6A 5A CD
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
909 slategray 70 80 90
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
910 snow FF FA FA
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
911 springgreen 00 FF 7F
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
912 steelblue 46 82 B4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
913 tan D2 B4 8C
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
914 teal 00 80 80
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
915 thistle D8 BF D8
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
916 tomato FF 63 47
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
917 turquoise 40 E0 D0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
918 violet EE 82 EE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
919 wheat F5 DE B3
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
920 whitesmoke F5 F5 F5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
921 yellow FF FF 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
922 yellowgreen 9A CD 32
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
923 gradient1 00 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
924 gradient2 0a ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
925 gradient3 14 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
926 gradient4 1e ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
927 gradient5 28 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
928 gradient6 32 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
929 gradient7 3d ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
930 gradient8 47 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
931 gradient9 51 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
932 gradient10 5b ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
933 gradient11 65 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
934 gradient12 70 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
935 gradient13 7a ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
936 gradient14 84 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
937 gradient15 8e ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
938 gradient16 99 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
939 gradient17 a3 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
940 gradient18 ad ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
941 gradient19 b7 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
942 gradient20 c1 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
943 gradient21 cc ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
944 gradient22 d6 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
945 gradient23 e0 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
946 gradient24 ea ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
947 gradient25 f4 ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
948 gradient26 ff ff 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
949 gradient27 ff f4 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
950 gradient28 ff ea 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
951 gradient29 ff e0 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
952 gradient30 ff d6 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
953 gradient31 ff cc 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
954 gradient32 ff c1 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
955 gradient33 ff b7 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
956 gradient34 ff ad 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
957 gradient35 ff a3 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
958 gradient36 ff 99 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
959 gradient37 ff 8e 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
960 gradient38 ff 84 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
961 gradient39 ff 7a 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
962 gradient40 ff 70 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
963 gradient41 ff 65 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
964 gradient42 ff 5b 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
965 gradient43 ff 51 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
966 gradient44 ff 47 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
967 gradient45 ff 3d 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
968 gradient46 ff 32 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
969 gradient47 ff 28 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
970 gradient48 ff 1e 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
971 gradient49 ff 14 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
972 gradient50 ff 0a 00
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
973 __END__
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
974
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
975 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
976
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
977 Bio::Graphics::Panel - Generate GD images of Bio::Seq objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
978
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
979 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
980
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
981 # This script parses a GenBank or EMBL file named on the command
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
982 # line and produces a PNG rendering of it. Call it like this:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
983 # render.pl my_file.embl | display -
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
984
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
985 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
986 use Bio::Graphics;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
987 use Bio::SeqIO;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
988
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
989 my $file = shift or die "provide a sequence file as the argument";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
990 my $io = Bio::SeqIO->new(-file=>$file) or die "could not create Bio::SeqIO";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
991 my $seq = $io->next_seq or die "could not find a sequence in the file";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
992
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
993 my @features = $seq->all_SeqFeatures;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
994
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
995 # sort features by their primary tags
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
996 my %sorted_features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
997 for my $f (@features) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
998 my $tag = $f->primary_tag;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
999 push @{$sorted_features{$tag}},$f;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1000 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1001
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1002 my $panel = Bio::Graphics::Panel->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1003 -length => $seq->length,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1004 -key_style => 'between',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1005 -width => 800,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1006 -pad_left => 10,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1007 -pad_right => 10,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1008 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1009 $panel->add_track( arrow => Bio::SeqFeature::Generic->new(-start=>1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1010 -end=>$seq->length),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1011 -bump => 0,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1012 -double=>1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1013 -tick => 2);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1014 $panel->add_track(generic => Bio::SeqFeature::Generic->new(-start=>1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1015 -end=>$seq->length),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1016 -glyph => 'generic',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1017 -bgcolor => 'blue',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1018 -label => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1019 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1020
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1021 # general case
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1022 my @colors = qw(cyan orange blue purple green chartreuse magenta yellow aqua);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1023 my $idx = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1024 for my $tag (sort keys %sorted_features) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1025 my $features = $sorted_features{$tag};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1026 $panel->add_track($features,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1027 -glyph => 'generic',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1028 -bgcolor => $colors[$idx++ % @colors],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1029 -fgcolor => 'black',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1030 -font2color => 'red',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1031 -key => "${tag}s",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1032 -bump => +1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1033 -height => 8,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1034 -label => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1035 -description => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1036 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1037 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1038
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1039 print $panel->png;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1040 exit 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1041
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1042 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1043
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1044 The Bio::Graphics::Panel class provides drawing and formatting
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1045 services for any object that implements the Bio::SeqFeatureI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1046 interface, including Ace::Sequence::Feature and Das::Segment::Feature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1047 objects. It can be used to draw sequence annotations, physical
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1048 (contig) maps, or any other type of map in which a set of discrete
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1049 ranges need to be laid out on the number line.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1050
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1051 The module supports a drawing style in which each type of feature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1052 occupies a discrete "track" that spans the width of the display. Each
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1053 track will have its own distinctive "glyph", a configurable graphical
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1054 representation of the feature.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1055
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1056 The module also supports a more flexible style in which several
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1057 different feature types and their associated glyphs can occupy the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1058 same track. The choice of glyph is under run-time control.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1059
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1060 Semantic zooming (for instance, changing the type of glyph depending
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1061 on the density of features) is supported by a callback system for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1062 configuration variables. The module has built-in support for Bio::Das
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1063 stylesheets, and stylesheet-driven configuration can be intermixed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1064 with semantic zooming, if desired.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1065
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1066 You can add a key to the generated image using either of two key
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1067 styles. One style places the key captions at the top of each track.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1068 The other style generates a graphical key at the bottom of the image.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1069
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1070 Note that this modules depends on GD.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1071
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1072 =head1 METHODS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1073
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1074 This section describes the class and object methods for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1075 Bio::Graphics::Panel.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1076
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1077 Typically you will begin by creating a new Bio::Graphics::Panel
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1078 object, passing it the desired width of the image to generate and an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1079 origin and length describing the coordinate range to display. The
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1080 Bio::Graphics::Panel-E<gt>new() method has may configuration variables
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1081 that allow you to control the appearance of the image.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1082
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1083 You will then call add_track() one or more times to add sets of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1084 related features to the picture. add_track() places a new horizontal
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1085 track on the image, and is likewise highly configurable. When you
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1086 have added all the features you desire, you may call png() to convert
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1087 the image into a PNG-format image, or boxes() to return coordinate
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1088 information that can be used to create an imagemap.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1089
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1090 =head2 CONSTRUCTORS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1091
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1092 new() is the constructor for Bio::Graphics::Panel:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1093
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1094 =over 4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1095
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1096 =item $panel = Bio::Graphics::Panel-E<gt>new(@options)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1097
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1098 The new() method creates a new panel object. The options are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1099 a set of tag/value pairs as follows:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1100
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1101 Option Value Default
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1102 ------ ----- -------
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1103
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1104 -offset Base pair to place at extreme left none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1105 of image, in zero-based coordinates
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1106
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1107 -length Length of sequence segment, in bp none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1108
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1109 -start Start of range, in 1-based none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1110 coordinates.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1111
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1112 -stop Stop of range, in 1-based none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1113 coordinates.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1114
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1115 -segment A Bio::SeqI or Das::Segment none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1116 object, used to derive sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1117 range if not otherwise specified.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1118
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1119 -width Desired width of image, in pixels 600
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1120
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1121 -spacing Spacing between tracks, in pixels 5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1122
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1123 -pad_top Additional whitespace between top 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1124 of image and contents, in pixels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1125
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1126 -pad_bottom Additional whitespace between top 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1127 of image and bottom, in pixels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1128
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1129 -pad_left Additional whitespace between left 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1130 of image and contents, in pixels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1131
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1132 -pad_right Additional whitespace between right 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1133 of image and bottom, in pixels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1134
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1135 -bgcolor Background color for the panel as a white
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1136 whole
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1137
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1138 -key_color Background color for the key printed wheat
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1139 at bottom of panel (if any)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1140
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1141 -key_spacing Spacing between key glyphs in the 10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1142 key printed at bottom of panel
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1143 (if any)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1144
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1145 -key_font Font to use in printed key gdMediumBoldFont
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1146 captions.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1147
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1148 -key_style Whether to print key at bottom of none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1149 panel ("bottom"), between each
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1150 track ("between"), to the left of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1151 each track ("left"), to the right
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1152 of each track ("right") or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1153 not at all ("none").
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1154
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1155 -empty_tracks What to do when a track is empty. suppress
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1156 Options are to suppress the track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1157 completely ("suppress"), to show just
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1158 the key in "between" mode ("key"),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1159 to draw a thin grey line ("line"),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1160 or to draw a dashed line ("dashed").
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1161
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1162 -flip flip the drawing coordinates left false
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1163 to right, so that lower coordinates
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1164 are to the right. This can be
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1165 useful for drawing (-) strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1166 features.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1167
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1168 -all_callbacks Whether to invoke callbacks on false
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1169 the automatic "track" and "group"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1170 glyphs.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1171
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1172 -grid Whether to draw a vertical grid in false
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1173 the background. Pass a scalar true
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1174 value to have a grid drawn at
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1175 regular intervals (corresponding
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1176 to the minor ticks of the arrow
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1177 glyph). Pass an array reference
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1178 to draw the grid at the specified
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1179 positions.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1180
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1181 -gridcolor Color of the grid lightcyan
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1182
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1183
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1184 Typically you will pass new() an object that implements the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1185 Bio::RangeI interface, providing a length() method, from which the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1186 panel will derive its scale.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1187
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1188 $panel = Bio::Graphics::Panel->new(-segment => $sequence,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1189 -width => 800);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1190
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1191 new() will return undef in case of an error.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1192
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1193 Note that if you use the "left" or "right" key styles, you are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1194 responsible for allocating sufficient -pad_left or -pad_right room for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1195 the labels to appear. The necessary width is the number of characters
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1196 in the longest key times the font width (gdMediumBoldFont by default)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1197 plus 3 pixels of internal padding. The simplest way to calculate this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1198 is to iterate over the possible track labels, find the largest one,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1199 and then to compute its width using the formula:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1200
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1201 $width = gdMediumBoldFont->width * length($longest_key) +3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1202
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1203 =back
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1204
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1205 =head2 OBJECT METHODS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1206
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1207 =over 4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1208
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1209 =item $track = $panel-E<gt>add_track($glyph,$features,@options)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1210
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1211 The add_track() method adds a new track to the image.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1212
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1213 Tracks are horizontal bands which span the entire width of the panel.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1214 Each track contains a number of graphical elements called "glyphs",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1215 corresponding to a sequence feature.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1216
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1217 There are a large number of glyph types. By default, each track will
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1218 be homogeneous on a single glyph type, but you can mix several glyph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1219 types on the same track by providing a code reference to the -glyph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1220 argument. Other options passed to add_track() control the color and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1221 size of the glyphs, whether they are allowed to overlap, and other
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1222 formatting attributes. The height of a track is determined from its
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1223 contents and cannot be directly influenced.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1224
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1225 The first two arguments are the glyph name and an array reference
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1226 containing the list of features to display. The order of the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1227 arguments is irrelevant, allowing either of these idioms:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1228
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1229 $panel->add_track(arrow => \@features);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1230 $panel->add_track(\@features => 'arrow');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1231
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1232
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1233 The glyph name indicates how each feature is to be rendered. A
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1234 variety of glyphs are available, and the number is growing. You may
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1235 omit the glyph name entirely by providing a B<-glyph> argument among
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1236 @options, as described below.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1237
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1238 Currently, the following glyphs are available:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1239
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1240 Name Description
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1241 ---- -----------
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1242
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1243 anchored_arrow
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1244 a span with vertical bases |---------|. If one or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1245 the other end of the feature is off-screen, the base
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1246 will be replaced by an arrow.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1247
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1248 arrow An arrow; can be unidirectional or bidirectional.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1249 It is also capable of displaying a scale with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1250 major and minor tickmarks, and can be oriented
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1251 horizontally or vertically.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1252
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1253 cds Draws CDS features, using the phase information to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1254 show the reading frame usage. At high magnifications
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1255 draws the protein translation.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1256
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1257 crossbox A box with a big "X" inside it.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1258
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1259 diamond A diamond, useful for point features like SNPs.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1260
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1261 dna At high magnification draws the DNA sequence. At
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1262 low magnifications draws the GC content.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1263
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1264 dot A circle, useful for point features like SNPs, stop
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1265 codons, or promoter elements.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1266
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1267 ellipse An oval.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1268
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1269 extending_arrow
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1270 Similar to arrow, but a dotted line indicates when the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1271 feature extends beyond the end of the canvas.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1272
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1273 generic A filled rectangle, nondirectional.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1274
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1275 graded_segments
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1276 Similar to segments, but the intensity of the color
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1277 is proportional to the score of the feature. This
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1278 is used for showing the intensity of blast hits or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1279 other alignment features.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1280
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1281 group A group of related features connected by a dashed line.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1282 This is used internally by Panel.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1283
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1284 heterogeneous_segments
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1285 Like segments, but you can use the source field of the feature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1286 to change the color of each segment.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1287
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1288 line A simple line.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1289
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1290 pinsertion A triangle designed to look like an insertion location
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1291 (e.g. a transposon insertion).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1292
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1293 processed_transcript multi-purpose representation of a spliced mRNA, including
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1294 positions of UTRs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1295
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1296 primers Two inward pointing arrows connected by a line.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1297 Used for STSs.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1298
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1299 redgreen_box A box that changes from green->yellow->red as the score
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1300 of the feature increases from 0.0 to 1.0. Useful for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1301 representing microarray results.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1302
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1303 rndrect A round-cornered rectangle.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1304
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1305 segments A set of filled rectangles connected by solid lines.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1306 Used for interrupted features, such as gapped
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1307 alignments.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1308
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1309 ruler_arrow An arrow with major and minor tick marks and interval
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1310 labels.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1311
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1312 toomany Tries to show many features as a cloud. Not very successful.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1313
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1314 track A group of related features not connected by a line.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1315 This is used internally by Panel.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1316
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1317 transcript Similar to segments, but the connecting line is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1318 a "hat" shape, and the direction of transcription
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1319 is indicated by a small arrow.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1320
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1321 transcript2 Similar to transcript, but the direction of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1322 transcription is indicated by a terminal exon
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1323 in the shape of an arrow.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1324
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1325 translation 1, 2 and 3-frame translations. At low magnifications,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1326 can be configured to show start and stop codon locations.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1327 At high magnifications, shows the multi-frame protein
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1328 translation.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1329
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1330 triangle A triangle whose width and orientation can be altered.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1331
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1332 xyplot Histograms and other graphs plotted against the genome.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1333
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1334 If the glyph name is omitted from add_track(), the "generic" glyph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1335 will be used by default. To get more information about a glyph, run
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1336 perldoc on "Bio::Graphics::Glyph::glyphname", replacing "glyphname"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1337 with the name of the glyph you are interested in.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1338
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1339 The @options array is a list of name/value pairs that control the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1340 attributes of the track. Some options are interpretered directly by
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1341 the track. Others are passed down to the individual glyphs (see
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1342 L<"GLYPH OPTIONS">). The following options are track-specific:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1343
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1344 Option Description Default
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1345 ------ ----------- -------
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1346
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1347 -tkcolor Track color white
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1348
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1349 -glyph Glyph class to use. "generic"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1350
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1351 -stylesheet Bio::Das::Stylesheet to none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1352 use to generate glyph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1353 classes and options.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1354
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1355 B<-tkcolor> controls the background color of the track as a whole.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1356
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1357 B<-glyph> controls the glyph type. If present, it supersedes the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1358 glyph name given in the first or second argument to add_track(). The
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1359 value of B<-glyph> may be a constant string, a hash reference, or a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1360 code reference. In the case of a constant string, that string will be
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1361 used as the class name for all generated glyphs. If a hash reference
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1362 is passed, then the feature's primary_tag() will be used as the key to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1363 the hash, and the value, if any, used to generate the glyph type. If
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1364 a code reference is passed, then this callback will be passed each
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1365 feature in turn as its single argument. The callback is expected to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1366 examine the feature and return a glyph name as its single result.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1367
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1368 Example:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1369
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1370 $panel->add_track(\@exons,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1371 -glyph => sub { my $feature = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1372 $feature->source_tag eq 'curated'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1373 ? 'ellipse' : 'generic'; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1374 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1375
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1376 The B<-stylesheet> argument is used to pass a Bio::Das stylesheet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1377 object to the panel. This stylesheet will be called to determine both
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1378 the glyph and the glyph options. If both a stylesheet and direct
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1379 options are provided, the latter take precedence.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1380
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1381 If successful, add_track() returns an Bio::Graphics::Glyph object.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1382 You can use this object to add additional features or to control the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1383 appearance of the track with greater detail, or just ignore it.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1384 Tracks are added in order from the top of the image to the bottom. To
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1385 add tracks to the top of the image, use unshift_track().
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1386
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1387 B<Adding groups of features:> It is not uncommon to add a group of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1388 features which are logically connected, such as the 5' and 3' ends of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1389 EST reads. To group features into sets that remain on the same
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1390 horizontal position and bump together, pass the sets as an anonymous
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1391 array. For example:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1392
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1393 $panel->add_track(segments => [[$abc_5,$abc_3],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1394 [$xxx_5,$xxx_3],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1395 [$yyy_5,$yyy_3]]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1396 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1397
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1398 Typical usage is:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1399
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1400 $panel->add_track( transcript => \@genes,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1401 -fillcolor => 'green',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1402 -fgcolor => 'black',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1403 -bump => +1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1404 -height => 10,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1405 -label => 1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1406
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1407 =item $track = unshift_track($glyph,$features,@options)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1408
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1409 unshift_track() works like add_track(), except that the new track is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1410 added to the top of the image rather than the bottom.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1411
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1412 =item $gd = $panel-E<gt>gd([$gd])
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1413
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1414 The gd() method lays out the image and returns a GD::Image object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1415 containing it. You may then call the GD::Image object's png() or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1416 jpeg() methods to get the image data.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1417
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1418 Optionally, you may pass gd() a preexisting GD::Image object that you
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1419 wish to draw on top of. If you do so, you should call the width() and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1420 height() methods first to ensure that the image has sufficient
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1421 dimensions.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1422
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1423 =item $png = $panel-E<gt>png
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1424
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1425 The png() method returns the image as a PNG-format drawing, without
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1426 the intermediate step of returning a GD::Image object.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1427
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1428 =item $boxes = $panel-E<gt>boxes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1429
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1430 =item @boxes = $panel-E<gt>boxes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1431
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1432 The boxes() method returns the coordinates of each glyph, useful for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1433 constructing an image map. In a scalar context, boxes() returns an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1434 array ref. In an list context, the method returns the array directly.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1435
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1436 Each member of the list is an anonymous array of the following format:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1437
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1438 [ $feature, $x1, $y1, $x2, $y2 ]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1439
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1440 The first element is the feature object; either an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1441 Ace::Sequence::Feature, a Das::Segment::Feature, or another Bioperl
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1442 Bio::SeqFeatureI object. The coordinates are the topleft and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1443 bottomright corners of the glyph, including any space allocated for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1444 labels.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1445
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1446 =item $position = $panel-E<gt>track_position($track)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1447
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1448 After calling gd() or boxes(), you can learn the resulting Y
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1449 coordinate of a track by calling track_position() with the value
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1450 returned by add_track() or unshift_track(). This will return undef if
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1451 called before gd() or boxes() or with an invalid track.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1452
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1453 =item @pixel_coords = $panel-E<gt>location2pixel(@feature_coords)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1454
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1455 Public routine to map feature coordinates (in base pairs) into pixel
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1456 coordinates relative to the left-hand edge of the picture.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1457
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1458 =back
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1459
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1460 =head1 GLYPH OPTIONS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1461
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1462 Each glyph has its own specialized subset of options, but
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1463 some are shared by all glyphs:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1464
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1465 Option Description Default
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1466 ------ ----------- -------
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1467
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1468 -fgcolor Foreground color black
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1469
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1470 -bgcolor Background color turquoise
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1471
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1472 -linewidth Width of lines drawn by 1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1473 glyph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1474
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1475 -height Height of glyph 10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1476
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1477 -font Glyph font gdSmallFont
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1478
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1479 -fontcolor Primary font color black
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1480
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1481 -font2color Secondary font color turquoise
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1482
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1483 -label Whether to draw a label false
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1484
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1485 -description Whether to draw a false
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1486 description
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1487
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1488 -bump Bump direction 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1489
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1490 -sort_order Specify layout sort order "default"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1491
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1492 -bump_limit Maximum number of levels undef (unlimited)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1493 to bump
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1494
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1495 -strand_arrow Whether to indicate undef (false)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1496 strandedness
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1497
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1498 -stranded Synonym for -strand_arrow undef (false)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1499
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1500 -connector Type of connector to none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1501 use to connect related
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1502 features. Options are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1503 "solid," "hat", "dashed",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1504 "quill" and "none".
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1505
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1506 -key Description of track for undef
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1507 use in key.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1508
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1509 -all_callbacks Whether to invoke undef
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1510 callbacks for autogenerated
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1511 "track" and "group" glyphs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1512
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1513 -box_subparts Return boxes around feature false
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1514 subparts rather than around the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1515 feature itself.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1516
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1517
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1518 B<Specifying colors:> Colors can be expressed in either of two ways:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1519 as symbolic names such as "cyan" and as HTML-style #RRGGBB triples.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1520 The symbolic names are the 140 colors defined in the Netscape/Internet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1521 Explorer color cube, and can be retrieved using the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1522 Bio::Graphics::Panel-E<gt>color_names() method.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1523
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1524 B<Foreground color:> The -fgcolor option controls the foreground
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1525 color, including the edges of boxes and the like.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1526
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1527 B<Background color:> The -bgcolor option controls the background used
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1528 for filled boxes and other "solid" glyphs. The foreground color
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1529 controls the color of lines and strings. The -tkcolor argument
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1530 controls the background color of the entire track.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1531
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1532 B<Track color:> The -tkcolor option used to specify the background of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1533 the entire track.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1534
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1535 B<Font color:> The -fontcolor option controls the color of primary
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1536 text, such as labels
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1537
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1538 B<Secondary Font color:> The -font2color option controls the color of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1539 secondary text, such as descriptions.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1540
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1541 B<Labels:> The -label argument controls whether or not the ID of the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1542 feature should be printed next to the feature. It is accepted by all
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1543 glyphs. By default, the label is printed just above the glyph and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1544 left aligned with it.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1545
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1546 -label can be a constant string or a code reference. Values can be
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1547 any of:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1548
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1549 -label value Description
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1550 ------------ -----------
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1551
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1552 0 Don't draw a label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1553 1 Calculate a label based on primary tag of sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1554 "a string" Use "a string" as the label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1555 code ref Invoke the code reference to compute the label
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1556
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1557 A known bug with this naming scheme is that you can't label a feature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1558 with the string "1". To work around this, use "1 " (note the terminal
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1559 space).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1560
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1561 B<Descriptions:> The -description argument controls whether or not a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1562 brief description of the feature should be printed next to it. By
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1563 default, the description is printed just below the glyph and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1564 left-aligned with it. A value of 0 will suppress the description. A
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1565 value of 1 will call the source_tag() method of the feature. A code
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1566 reference will be invoked to calculate the description on the fly.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1567 Anything else will be treated as a string and used verbatim.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1568
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1569 B<Connectors:> A glyph can contain subglyphs, recursively. The top
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1570 level glyph is the track, which contains one or more groups, which
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1571 contain features, which contain subfeatures, and so forth. By
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1572 default, the "group" glyph draws dotted lines between each of its
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1573 subglyphs, the "segment" glyph draws a solid line between each of its
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1574 subglyphs, and the "transcript" and "transcript2" glyphs draw
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1575 hat-shaped lines between their subglyphs. All other glyphs do not
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1576 connect their components. You can override this behavior by providing
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1577 a -connector option, to explicitly set the type of connector. Valid
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1578 options are:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1579
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1580
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1581 "hat" an upward-angling conector
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1582 "solid" a straight horizontal connector
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1583 "quill" a decorated line with small arrows indicating strandedness
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1584 (like the UCSC Genome Browser uses)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1585 "dashed" a horizontal dashed line.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1586
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1587 The B<-connector_color> option controls the color of the connector, if
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1588 any.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1589
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1590 B<Collision control:> The -bump argument controls what happens when
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1591 glyphs collide. By default, they will simply overlap (value 0). A
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1592 -bump value of +1 will cause overlapping glyphs to bump downwards
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1593 until there is room for them. A -bump value of -1 will cause
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1594 overlapping glyphs to bump upwards. The bump argument can also be a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1595 code reference; see below.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1596
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1597 B<Keys:> The -key argument declares that the track is to be shown in a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1598 key appended to the bottom of the image. The key contains a picture
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1599 of a glyph and a label describing what the glyph means. The label is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1600 specified in the argument to -key.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1601
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1602 B<box_subparts:> Ordinarily, when you invoke the boxes() methods to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1603 retrieve the rectangles surrounding the glyphs (which you need to do
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1604 to create clickable imagemaps, for example), the rectangles will
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1605 surround the top level features. If you wish for the rectangles to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1606 surround subpieces of the glyph, such as the exons in a transcript,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1607 set box_subparts to a true value.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1608
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1609 B<strand_arrow:> If set to true, some glyphs will indicate their
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1610 strandedness, usually by drawing an arrow. For this to work, the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1611 Bio::SeqFeature must have a strand of +1 or -1. The glyph will ignore
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1612 this directive if the underlying feature has a strand of zero or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1613 undef.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1614
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1615 B<sort_order>: By default, features are drawn with a layout based only on the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1616 position of the feature, assuring a maximal "packing" of the glyphs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1617 when bumped. In some cases, however, it makes sense to display the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1618 glyphs sorted by score or some other comparison, e.g. such that more
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1619 "important" features are nearer the top of the display, stacked above
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1620 less important features. The -sort_order option allows a few
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1621 different built-in values for changing the default sort order (which
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1622 is by "left" position): "low_score" (or "high_score") will cause
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1623 features to be sorted from lowest to highest score (or vice versa).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1624 "left" (or "default") and "right" values will cause features to be
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1625 sorted by their position in the sequence. "longer" (or "shorter")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1626 will cause the longest (or shortest) features to be sorted first, and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1627 "strand" will cause the features to be sorted by strand: "+1"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1628 (forward) then "0" (unknown, or NA) then "-1" (reverse).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1629
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1630 In all cases, the "left" position will be used to break any ties. To
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1631 break ties using another field, options may be strung together using a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1632 "|" character; e.g. "strand|low_score|right" would cause the features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1633 to be sorted first by strand, then score (lowest to highest), then by
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1634 "right" position in the sequence. Finally, a subroutine coderef can
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1635 be provided, which should expect to receive two feature objects (via
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1636 the special sort variables $a and $b), and should return -1, 0 or 1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1637 (see Perl's sort() function for more information); this subroutine
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1638 will be used without further modification for sorting. For example,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1639 to sort a set of database search hits by bits (stored in the features'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1640 "score" fields), scaled by the log of the alignment length (with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1641 "left" position breaking any ties):
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1642
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1643 sort_order = sub { ( $b->score/log($b->length)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1644 <=>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1645 $a->score/log($a->length) )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1646 ||
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1647 ( $a->start <=> $b->start )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1648 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1649
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1650 B<bump_limit>: When bumping is chosen, colliding features will
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1651 ordinarily move upward or downward without limit. When many features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1652 collide, this can lead to excessively high images. You can limit the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1653 number of levels that features will bump by providing a numeric
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1654 B<bump_limit> option.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1655
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1656 =head2 Options and Callbacks
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1657
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1658 Instead of providing a constant value to an option, you may subsitute
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1659 a code reference. This code reference will be called every time the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1660 panel needs to configure a glyph. The callback will be called with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1661 three arguments like this:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1662
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1663 sub callback {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1664 my ($feature,$option_name,$part_no,$total_parts,$glyph) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1665 # do something which results in $option_value being set
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1666 return $option_value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1667 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1668
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1669 The five arguments are C<$feature>, a reference to the IO::SeqFeatureI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1670 object, C<$option_name>, the name of the option to configure,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1671 C<$part_no>, an integer index indicating which subpart of the feature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1672 is being drawn, C<$total_parts>, an integer indicating the total
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1673 number of subfeatures in the feature, and finally C<$glyph>, the Glyph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1674 object itself. The latter fields are useful in the case of treating
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1675 the first or last subfeature differently, such as using a different
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1676 color for the terminal exon of a gene. Usually you will only need to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1677 examine the first argument. This example shows a callback examining
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1678 the score() attribute of a feature (possibly a BLAST hit) and return
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1679 the color "red" for high-scoring features, and "green" for low-scoring
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1680 features:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1681
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1682 sub callback {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1683 my $feature = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1684 if ($feature->score > 90) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1685 return 'red';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1686 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1687 return 'green';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1688 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1689 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1690
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1691 The callback should return a string indicating the desired value of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1692 the option. To tell the panel to use the default value for this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1693 option, return the string "*default*".
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1694
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1695 When you install a callback for a feature that contains subparts, the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1696 callback will be invoked first for the top-level feature, and then for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1697 each of its subparts (recursively). You should make sure to examine
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1698 the feature's type to determine whether the option is appropriate.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1699
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1700 Some glyphs deliberately disable this recursive feature. The "track",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1701 "group", "transcript", "transcript2" and "segments" glyphs selectively
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1702 disable the -bump, -label and -description options. This is to avoid,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1703 for example, a label being attached to each exon in a transcript, or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1704 the various segments of a gapped alignment bumping each other. You
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1705 can override this behavior and force your callback to be invoked by
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1706 providing add_track() with a true B<-all_callbacks> argument. In this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1707 case, you must be prepared to handle configuring options for the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1708 "group" and "track" glyphs.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1709
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1710 In particular, this means that in order to control the -bump option
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1711 with a callback, you should specify -all_callbacks=E<gt>1, and turn on
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1712 bumping when the callback is in the track or group glyphs.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1713
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1714 =head2 ACCESSORS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1715
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1716 The following accessor methods provide access to various attributes of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1717 the panel object. Called with no arguments, they each return the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1718 current value of the attribute. Called with a single argument, they
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1719 set the attribute and return its previous value.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1720
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1721 Note that in most cases you must change attributes prior to invoking
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1722 gd(), png() or boxes(). These three methods all invoke an internal
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1723 layout() method which places the tracks and the glyphs within them,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1724 and then caches the result.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1725
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1726 Accessor Name Description
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1727 ------------- -----------
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1728
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1729 width() Get/set width of panel
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1730 spacing() Get/set spacing between tracks
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1731 key_spacing() Get/set spacing between keys
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1732 length() Get/set length of segment (bp)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1733 flip() Get/set coordinate flipping
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1734 pad_top() Get/set top padding
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1735 pad_left() Get/set left padding
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1736 pad_bottom() Get/set bottom padding
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1737 pad_right() Get/set right padding
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1738 start() Get the start of the sequence (bp; read only)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1739 end() Get the end of the sequence (bp; read only)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1740 left() Get the left side of the drawing area (pixels; read only)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1741 right() Get the right side of the drawing area (pixels; read only)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1742
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1743 =head2 COLOR METHODS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1744
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1745 The following methods are used internally, but may be useful for those
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1746 implementing new glyph types.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1747
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1748 =over 4
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1749
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1750 =item @names = Bio::Graphics::Panel-E<gt>color_names
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1751
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1752 Return the symbolic names of the colors recognized by the panel
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1753 object. In a scalar context, returns an array reference.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1754
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1755 =item ($red,$green,$blue) = Bio::Graphics::Panel-E<gt>color_name_to_rgb($color)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1756
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1757 Given a symbolic color name, returns the red, green, blue components
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1758 of the color. In a scalar context, returns an array reference to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1759 rgb triplet. Returns undef for an invalid color name.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1760
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1761 =item @rgb = $panel-E<gt>rgb($index)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1762
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1763 Given a GD color index (between 0 and 140), returns the RGB triplet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1764 corresponding to this index. This method is only useful within a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1765 glyph's draw() routine, after the panel has allocated a GD::Image and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1766 is populating it.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1767
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1768 =item $index = $panel-E<gt>translate_color($color)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1769
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1770 Given a color, returns the GD::Image index. The color may be
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1771 symbolic, such as "turquoise", or a #RRGGBB triple, as in #F0E0A8.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1772 This method is only useful within a glyph's draw() routine, after the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1773 panel has allocated a GD::Image and is populating it.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1774
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1775 =item $panel-E<gt>set_pen($width,$color)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1776
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1777 Changes the width and color of the GD drawing pen to the values
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1778 indicated. This is called automatically by the GlyphFactory fgcolor()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1779 method. It returns the GD value gdBrushed, which should be used for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1780 drawing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1781
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1782 =back
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1783
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1784 =head1 BUGS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1785
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1786 Please report them.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1787
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1788 =head1 SEE ALSO
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1789
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1790 L<Bio::Graphics::Glyph>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1791 L<Bio::Graphics::Glyph::arrow>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1792 L<Bio::Graphics::Glyph::cds>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1793 L<Bio::Graphics::Glyph::crossbox>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1794 L<Bio::Graphics::Glyph::diamond>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1795 L<Bio::Graphics::Glyph::dna>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1796 L<Bio::Graphics::Glyph::dot>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1797 L<Bio::Graphics::Glyph::ellipse>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1798 L<Bio::Graphics::Glyph::extending_arrow>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1799 L<Bio::Graphics::Glyph::generic>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1800 L<Bio::Graphics::Glyph::graded_segments>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1801 L<Bio::Graphics::Glyph::heterogeneous_segments>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1802 L<Bio::Graphics::Glyph::line>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1803 L<Bio::Graphics::Glyph::pinsertion>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1804 L<Bio::Graphics::Glyph::primers>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1805 L<Bio::Graphics::Glyph::rndrect>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1806 L<Bio::Graphics::Glyph::segments>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1807 L<Bio::Graphics::Glyph::redgreen_box>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1808 L<Bio::Graphics::Glyph::ruler_arrow>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1809 L<Bio::Graphics::Glyph::toomany>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1810 L<Bio::Graphics::Glyph::transcript>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1811 L<Bio::Graphics::Glyph::transcript2>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1812 L<Bio::Graphics::Glyph::translation>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1813 L<Bio::Graphics::Glyph::triangle>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1814 L<Bio::Graphics::Glyph::xyplot>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1815 L<Bio::SeqI>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1816 L<Bio::SeqFeatureI>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1817 L<Bio::Das>,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1818 L<GD>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1819
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1820 =head1 AUTHOR
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1821
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1822 Lincoln Stein E<lt>lstein@cshl.orgE<gt>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1823
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1824 Copyright (c) 2001 Cold Spring Harbor Laboratory
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1825
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1826 This library is free software; you can redistribute it and/or modify
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1827 it under the same terms as Perl itself. See DISCLAIMER.txt for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1828 disclaimers of warranty.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1829
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1830 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1831