annotate variant_effect_predictor/Bio/Graphics/Glyph/translation.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 package Bio::Graphics::Glyph::translation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 use Bio::Graphics::Glyph::generic;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 use Bio::Graphics::Util qw(frame_and_offset);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 use vars '@ISA';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 @ISA = qw(Bio::Graphics::Glyph::generic);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 my %default_colors = qw(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10 frame0f cadetblue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 frame1f blue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12 frame2f darkblue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 frame0r darkred
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 frame1r red
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 frame2r crimson
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18 # turn off description
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 sub description { 0 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 # turn off label
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 # sub label { 1 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 sub default_color {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 my ($self,$key) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 return $self->factory->translate_color($default_colors{$key});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 sub height {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 my $font = $self->font;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 my $lines = $self->translation_type eq '3frame' ? 3
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 : $self->translation_type eq '6frame' ? 6
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 : 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 return $self->protein_fits ? $lines*$font->height
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 : $self->SUPER::height;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 sub pixels_per_base {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 return $self->scale;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 sub pixels_per_residue {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 return $self->scale * 3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 sub gridcolor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 my $color = $self->option('gridcolor') || 'lightgrey';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 $self->factory->translate_color($color);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 sub protein_fits {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 my $pixels_per_base = $self->pixels_per_residue;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 my $font = $self->font;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 my $font_width = $font->width;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 return $pixels_per_base >= $font_width;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 sub translation_type {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 return $self->option('translation') || '1frame';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 sub arrow_height {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 $self->option('arrow_height') || 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 sub show_stop_codons {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 my $show = $self->option('stop_codons');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 return $show if defined $show;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 sub show_start_codons {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 my $show = $self->option('start_codons');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 return $show if defined $show;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 sub strand {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 return $self->option('strand') || '+1';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 sub draw_component {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 my $gd = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 my ($x1,$y1,$x2,$y2) = $self->bounds(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 my $type = $self->translation_type;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 my $strand = $self->strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 my @strands = $type eq '6frame' ? (1,-1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 : $strand > 0 ? (1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 : -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 my @phase = (0,2,1); # looks weird, but gives correct effect
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 for my $s (@strands) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 for (my $i=0; $i < @phase; $i++) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 $self->draw_frame($self->feature,$s,$i,$phase[$i],$gd,$x1,$y1,$x2,$y2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 sub draw_frame {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 my ($feature,$strand,$base_offset,$phase,$gd,$x1,$y1,$x2,$y2) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 return unless $feature->seq; # no sequence, arggh.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 my ($seq,$pos) = $strand < 0 ? ($feature->revcom,$feature->end)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 : ($feature,$feature->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 my ($frame,$offset) = frame_and_offset($pos,$strand,$phase);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 ($strand >= 0 ? $x1 : $x2) += $self->pixels_per_base * $offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 my $lh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 if ($self->translation_type eq '6frame') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 $lh = $self->height / 6;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 $y1 += $lh * $frame;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 $y1 += $self->height/2 if $strand < 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 $lh = $self->height / 3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 $y1 += $lh * $frame;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 $y2 = $y1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 my $protein = $seq->translate(undef,undef,$base_offset)->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 my $k = $strand>=0 ? 'f' : 'r';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 my $color = $self->color("frame$frame$k") ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 $self->color("frame$frame") ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 $self->default_color("frame$frame$k") || $self->fgcolor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 if ($self->protein_fits) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 $self->draw_protein(\$protein,$strand,$color,$gd,$x1,$y1,$x2,$y2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 $self->draw_orfs(\$protein,$strand,$color,$gd,$x1,$y1,$x2,$y2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 sub draw_protein {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 my ($protein,$strand,$color,$gd,$x1,$y1,$x2,$y2) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 my $pixels_per_base = $self->pixels_per_base;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 my $font = $self->font;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 my @residues = split '',$$protein;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 for (my $i=0;$i<@residues;$i++) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 my $x = $strand > 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 ? $x1 + 3 * $i * $pixels_per_base
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 : $x2 - 3 * $i * $pixels_per_base;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 next if $x+1 < $x1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 last if $x > $x2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 $gd->char($font,$x,$y1,$residues[$i],$color);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 sub draw_orfs {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 my ($protein,$strand,$color,$gd,$x1,$y1,$x2,$y2) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 my $pixels_per_base = $self->pixels_per_base * 3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 $y1++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 my $gcolor = $self->gridcolor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 $gd->line($x1,$y1,$x2,$y1,$gcolor);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 if ($self->show_stop_codons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 my $stops = $self->find_codons($protein,'*');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 for my $stop (@$stops) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 my $pos = $strand > 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 ? $x1 + $stop * $pixels_per_base
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 : $x2 - $stop * $pixels_per_base;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 next if $pos+1 < $x1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 last if $pos > $x2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 $gd->line($pos,$y1-2,$pos,$y1+2,$color);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 my $arrowhead_height = $self->arrow_height;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 if ($self->show_start_codons) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 my $starts = $self->find_codons($protein,'M');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 for my $start (@$starts) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 my $pos = $strand > 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 ? $x1 + $start * $pixels_per_base
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 : $x2 - $start * $pixels_per_base;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 next if $pos+1 < $x1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 last if $pos > $x2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 # little arrowheads at the start codons
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 $strand > 0 ? $self->arrowhead($gd,$pos-$arrowhead_height,$y1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 $arrowhead_height,+1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 : $self->arrowhead($gd,$pos+$arrowhead_height,$y1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 $arrowhead_height,-1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 $strand > 0 ? $self->arrowhead($gd,$x2-1,$y1,3,+1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 : $self->arrowhead($gd,$x1,$y1,3,-1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 sub find_codons {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 my $protein = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 my $codon = shift || '*';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 my $pos = -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 my @stops;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 while ( ($pos = index($$protein,$codon,$pos+1)) >= 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 push @stops,$pos;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 \@stops;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 sub make_key_feature {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 my @gatc = qw(g a t c);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 my $offset = $self->panel->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 my $scale = 1/$self->scale; # base pairs/pixel
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 my $start = $offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 my $stop = $offset + 100 * $scale;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 my $seq = join('',map{$gatc[rand 4]} (1..500));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 my $feature =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 Bio::Graphics::Feature->new(-start=> $start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 -end => $stop,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 -seq => $seq,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 -name => $self->option('key')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 $feature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 __END__
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 Bio::Graphics::Glyph::translation - The "6-frame translation" glyph
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 This glyph draws the conceptual translation of DNA sequences. At high
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 magnifications, it simply draws lines indicating open reading frames.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 At low magnifications, it draws a conceptual protein translation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 Options can be used to set 1-frame, 3-frame or 6-frame translations.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 =head2 OPTIONS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 The following options are standard among all Glyphs. See
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 L<Bio::Graphics::Glyph> for a full explanation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 Option Description Default
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 ------ ----------- -------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 -fgcolor Foreground color black
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 -outlinecolor Synonym for -fgcolor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 -bgcolor Background color turquoise
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 -fillcolor Synonym for -bgcolor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 -linewidth Line width 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 -height Height of glyph 10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 -font Glyph font gdSmallFont
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 -connector Connector type 0 (false)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 -connector_color
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 Connector color black
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 -label Whether to draw a label 0 (false)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 -description Whether to draw a description 0 (false)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 In addition to the common options, the following glyph-specific
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 options are recognized:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 Option Description Default
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 ------ ----------- -------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 -translation Type of translation to 1frame
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 perform. One of "1frame",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 "3frame", or "6frame"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 -strand Forward (+1) or reverse (-1) +1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 translation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 -frame0 Color for the first frame fgcolor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 -frame1 Color for the second frame fgcolor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 -frame2 Color for the third frame fgcolor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 -gridcolor Color for the horizontal lightgrey
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 lines of the reading frames
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 -start_codons Draw little arrowheads 0 (false)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 indicating start codons
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 -stop_codons Draw little vertical ticks 1 (true)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 indicating stop codons
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 -arrow_height Height of the start codon 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 arrowheads
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 =head1 SUGGESTED STANZA FOR GENOME BROWSER
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 This produces a nice gbrowse display in which the DNA/GC Content glyph
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 is sandwiched between the forward and reverse three-frame
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 translations. The frames are color-coordinated with the example
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 configuration for the "cds" glyph.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 [TranslationF]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 glyph = translation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 global feature = 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 frame0 = cadetblue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 frame1 = blue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 frame2 = darkblue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 height = 20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 fgcolor = purple
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 strand = +1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 translation = 3frame
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 key = 3-frame translation (forward)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 [DNA/GC Content]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 glyph = dna
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 global feature = 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 height = 40
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 do_gc = 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 fgcolor = red
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 axis_color = blue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 [TranslationR]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 glyph = translation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 global feature = 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 frame0 = darkred
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 frame1 = red
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 frame2 = crimson
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 height = 20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 fgcolor = blue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 strand = -1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 translation = 3frame
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 key = 3-frame translation (reverse)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 =head1 BUGS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 Please report them.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 =head1 SEE ALSO
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 L<Bio::Graphics::Panel>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 L<Bio::Graphics::Glyph>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 L<Bio::Graphics::Glyph::arrow>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 L<Bio::Graphics::Glyph::cds>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 L<Bio::Graphics::Glyph::crossbox>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 L<Bio::Graphics::Glyph::diamond>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 L<Bio::Graphics::Glyph::dna>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 L<Bio::Graphics::Glyph::dot>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 L<Bio::Graphics::Glyph::ellipse>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 L<Bio::Graphics::Glyph::extending_arrow>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 L<Bio::Graphics::Glyph::generic>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 L<Bio::Graphics::Glyph::graded_segments>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 L<Bio::Graphics::Glyph::heterogeneous_segments>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 L<Bio::Graphics::Glyph::line>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 L<Bio::Graphics::Glyph::pinsertion>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 L<Bio::Graphics::Glyph::primers>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 L<Bio::Graphics::Glyph::rndrect>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 L<Bio::Graphics::Glyph::segments>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 L<Bio::Graphics::Glyph::ruler_arrow>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 L<Bio::Graphics::Glyph::toomany>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 L<Bio::Graphics::Glyph::transcript>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 L<Bio::Graphics::Glyph::transcript2>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 L<Bio::Graphics::Glyph::translation>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 L<Bio::Graphics::Glyph::triangle>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 L<Bio::DB::GFF>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 L<Bio::SeqI>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 L<Bio::SeqFeatureI>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 L<Bio::Das>,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 L<GD>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 =head1 AUTHOR
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 Lincoln Stein E<lt>lstein@cshl.orgE<gt>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 Copyright (c) 2001 Cold Spring Harbor Laboratory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 This library is free software; you can redistribute it and/or modify
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 it under the same terms as Perl itself. See DISCLAIMER.txt for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 disclaimers of warranty.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 =cut