annotate variant_effect_predictor/Bio/Graphics/Panel.pm @ 2:a5976b2dce6f

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