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

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 package Bio::Graphics::Glyph::segments;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #$Id: segments.pm,v 1.21.2.1 2003/07/05 00:32:04 lstein Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 use Bio::Location::Simple;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 use Bio::Graphics::Glyph::generic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 use Bio::Graphics::Glyph::segmented_keyglyph;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 use vars '@ISA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 use constant RAGGED_START_FUZZ => 25; # will show ragged ends of alignments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # up to this many bp.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 use constant DEBUG => 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 @ISA = qw( Bio::Graphics::Glyph::segmented_keyglyph
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::Graphics::Glyph::generic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 my %complement = (g=>'c',a=>'t',t=>'a',c=>'g',n=>'n',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 G=>'C',A=>'T',T=>'A',C=>'G',N=>'N');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 sub pad_left {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 return $self->SUPER::pad_left unless $self->option('draw_target') && $self->option('ragged_start') && $self->dna_fits;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 return $self->SUPER::pad_left unless $self->level > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 my $target = eval {$self->feature->hit} or return $self->SUPER::pad_left;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 return $self->SUPER::pad_left unless $target->start<$target->end && $target->start < RAGGED_START_FUZZ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 return ($target->start-1) * $self->scale;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 sub pad_right {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 return $self->SUPER::pad_right unless $self->level > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 return $self->SUPER::pad_right unless $self->option('draw_target') && $self->option('ragged_start') && $self->dna_fits;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my $target = eval {$self->feature->hit} or return $self->SUPER::pad_right;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 return $self->SUPER::pad_right unless $target->end < $target->start && $target->start < RAGGED_START_FUZZ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 return ($target->end-1) * $self->scale;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 # group sets connector to 'solid'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 sub connector {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 return $self->SUPER::connector(@_) if $self->all_callbacks;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 return ($self->SUPER::connector(@_) || 'solid');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 # never allow our components to bump
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 sub bump {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 return $self->SUPER::bump(@_) if $self->all_callbacks;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 sub fontcolor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 return $self->SUPER::fontcolor unless $self->option('draw_target') || $self->option('draw_dna');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 return $self->SUPER::fontcolor unless $self->dna_fits;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 return $self->bgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 sub draw_component {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 my ($draw_dna,$draw_target) = ($self->option('draw_dna'),$self->option('draw_target'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 return $self->SUPER::draw_component(@_)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 unless $draw_dna || $draw_target;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 return $self->SUPER::draw_component(@_) unless $self->dna_fits;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 my $dna = $draw_target ? eval {$self->feature->hit->seq}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 : eval {$self->feature->seq};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 return $self->SUPER::draw_component(@_) unless length $dna > 0; # safety
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 my $show_mismatch = $draw_target && $self->option('show_mismatch');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 my $genomic = eval {$self->feature->seq} if $show_mismatch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 my $gd = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 my ($x1,$y1,$x2,$y2) = $self->bounds(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 # adjust for nonaligned left end (for ESTs...) The size given here is roughly sufficient
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 # to show a polyA end or a C. elegans trans-spliced leader.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 my $offset = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 eval { # protect against data structures that don't implement the target() method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 if ($draw_target && $self->option('ragged_start')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 my $target = $self->feature->hit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 if ($target->start < $target->end && $target->start < RAGGED_START_FUZZ
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 && $self->{partno} == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 $offset = $target->start - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 if ($offset > 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 $dna = $target->subseq(1-$offset,0)->seq . $dna;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 $genomic = $self->feature->subseq(1-$offset,0)->seq . $genomic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 $x1 -= $offset * $self->scale;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 elsif ($target->end < $target->start &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 $target->end < RAGGED_START_FUZZ && $self->{partno} == $self->{total_parts}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 $offset = $target->end - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 if ($offset > 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 $dna .= $target->factory->get_dna($target,$offset,1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 $genomic = $self->feature->subseq(-$offset,0)->seq . $genomic;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 $x2 += $offset * $self->scale;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 $offset = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $self->draw_dna($gd,$offset,lc $dna,lc $genomic,$x1,$y1,$x2,$y2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 sub draw_dna {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 my ($gd,$start_offset,$dna,$genomic,$x1,$y1,$x2,$y2) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 my $pixels_per_base = $self->scale;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 my $feature = $self->feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my $target = $feature->target;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my $strand = $feature->strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my @segs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my $complement = $strand < 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 if ($self->{flip}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $dna = $self->reversec($dna);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 $genomic = $self->reversec($genomic);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 $strand *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 warn "strand = $strand, complement = $complement" if DEBUG;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 if ($genomic && length($genomic) != length($dna) && eval { require Bio::Graphics::Browser::Realign}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 warn "$genomic\n$dna\n" if DEBUG;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 warn "strand = $strand" if DEBUG;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 @segs = Bio::Graphics::Browser::Realign::align_segs($genomic,$dna);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 for my $seg (@segs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 my $src = substr($genomic,$seg->[0],$seg->[1]-$seg->[0]+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my $tgt = substr($dna, $seg->[2],$seg->[3]-$seg->[2]+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 warn "@$seg\n$src\n$tgt" if DEBUG;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 @segs = [0,length($genomic)-1,0,length($dna)-1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 my $color = $self->fgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 my $font = $self->font;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 my $lineheight = $font->height;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my $fontwidth = $font->width;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 $y1 -= $lineheight/2 - 3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my $pink = $self->factory->translate_color('lightpink');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my $panel_end = $self->panel->right;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $start = $self->map_no_trunc($self->feature->start- $start_offset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 my $end = $self->map_no_trunc($self->feature->end - $start_offset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my ($last,$tlast);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 for my $seg (@segs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 # fill in misaligned bits with dashes and bases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 if (defined $last) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 my $delta = $seg->[0] - $last - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 my $tdelta = $seg->[2] - $tlast - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 warn "src gap [$last,$seg->[0]], tgt gap [$tlast,$seg->[2]], delta = $delta, tdelta = $tdelta\n" if DEBUG;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 my $gaps = $delta - $tdelta;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 my @fill_in = split '',substr($dna,$tlast+1,$tdelta) if $tdelta > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 unshift @fill_in,('-')x$gaps if $gaps > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 warn "gaps = $gaps, fill_in = @fill_in\n" if DEBUG;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my $distance = $pixels_per_base * ($delta+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 my $pixels_per_target = $gaps >= 0 ? $pixels_per_base : $distance/(@fill_in+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 warn "pixels_per_base = $pixels_per_base, pixels_per_target=$pixels_per_target\n" if DEBUG;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 my $offset = $self->{flip} ? $end + ($last-1)*$pixels_per_base : $start + $last*$pixels_per_base;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 for (my $i=0; $i<@fill_in; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 my $x = $self->{flip} ? int($offset + ($i+1)*$pixels_per_target + 0.5)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 : int($offset + ($i+1)*$pixels_per_target + 0.5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $self->filled_box($gd,$x,$y1+3,$x+$fontwidth,$y1+$lineheight-3,$pink,$pink) unless $gaps;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 $gd->char($font,$x,$y1,$complement? $complement{$fill_in[$i]} : $fill_in[$i],$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 my @genomic = split '',substr($genomic,$seg->[0],$seg->[1]-$seg->[0]+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 my @bases = split '',substr($dna, $seg->[2],$seg->[3]-$seg->[2]+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 for (my $i = 0; $i<@bases; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 my $x = $self->{flip} ? int($end + ($seg->[0] + $i - 1)*$pixels_per_base + 0.5)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 : int($start + ($seg->[0] + $i) *$pixels_per_base + 0.5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 next if $x+1 < $x1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 last if $x+1 > $x2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 if ($genomic[$i] && lc($bases[$i]) ne lc($complement ? $complement{$genomic[@genomic - $i - 1]} : $genomic[$i])) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $self->filled_box($gd,$x,$y1+3,$x+$fontwidth,$y1+$lineheight-3,$pink,$pink);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 $gd->char($font,$x,$y1,$complement ? $complement{$bases[$i]} || $bases[$i] : $bases[$i],$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $last = $seg->[1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 $tlast = $seg->[3];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 # Override _subseq() method to make it appear that a top-level feature that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 # has no subfeatures appears as a feature that has a single subfeature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 # Otherwise at high mags gaps will be drawn as components rather than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 # as connectors. Because of differing representations of split features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 # in Bio::DB::GFF::Feature and Bio::SeqFeature::Generic, there is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 # some breakage of encapsulation here.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 sub _subseq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 my $feature = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 my @subseq = $self->SUPER::_subseq($feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 return @subseq if @subseq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 if ($self->level == 0 && !@subseq && !eval{$feature->compound}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 my($start,$end) = ($feature->start,$feature->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 ($start,$end) = ($end,$start) if $start > $end; # to keep Bio::Location::Simple from bitching
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 # return Bio::Location::Simple->new(-start=>$start,-end=>$end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 return $self->feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 __END__
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Bio::Graphics::Glyph::segments - The "segments" glyph
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 This glyph is used for drawing features that consist of discontinuous
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 segments. Unlike "graded_segments" or "alignment", the segments are a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 uniform color and not dependent on the score of the segment.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 =head2 OPTIONS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 The following options are standard among all Glyphs. See
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 L<Bio::Graphics::Glyph> for a full explanation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Option Description Default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 ------ ----------- -------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 -fgcolor Foreground color black
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 -outlinecolor Synonym for -fgcolor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 -bgcolor Background color turquoise
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 -fillcolor Synonym for -bgcolor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 -linewidth Line width 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 -height Height of glyph 10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 -font Glyph font gdSmallFont
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 -connector Connector type 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 -connector_color
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 Connector color black
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 -label Whether to draw a label 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 -description Whether to draw a description 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 -strand_arrow Whether to indicate 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 strandedness
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 -draw_dna If true, draw the dna residues 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 when magnification level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 allows.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 -draw_target If true, draw the dna residues 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 of the TARGET sequence when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 magnification level allows.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 SEE NOTE.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 -ragged_start When combined with -draw_target, 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 draw a few bases beyond the end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 of the alignment. SEE NOTE.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 -show_mismatch When combined with -draw_target, 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 highlights mismatched bases in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 pink. SEE NOTE.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 The -draw_target and -ragged_start options only work with seqfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 that implement the hit() method (Bio::SeqFeature::SimilarityPair).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 The -ragged_start option is mostly useful for looking for polyAs and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 cloning sites at the beginning of ESTs and cDNAs. Currently there is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 no way of activating ragged ends. The length of the ragged starts is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 hard-coded at 25 bp, and the color of mismatches is hard-coded as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 light pink.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 =head1 BUGS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Please report them.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 L<Bio::Graphics::Panel>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 L<Bio::Graphics::Glyph>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 L<Bio::Graphics::Glyph::arrow>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 L<Bio::Graphics::Glyph::cds>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 L<Bio::Graphics::Glyph::crossbox>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 L<Bio::Graphics::Glyph::diamond>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 L<Bio::Graphics::Glyph::dna>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 L<Bio::Graphics::Glyph::dot>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 L<Bio::Graphics::Glyph::ellipse>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 L<Bio::Graphics::Glyph::extending_arrow>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 L<Bio::Graphics::Glyph::generic>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 L<Bio::Graphics::Glyph::graded_segments>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 L<Bio::Graphics::Glyph::heterogeneous_segments>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 L<Bio::Graphics::Glyph::line>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 L<Bio::Graphics::Glyph::pinsertion>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 L<Bio::Graphics::Glyph::primers>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 L<Bio::Graphics::Glyph::rndrect>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 L<Bio::Graphics::Glyph::segments>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 L<Bio::Graphics::Glyph::ruler_arrow>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 L<Bio::Graphics::Glyph::toomany>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 L<Bio::Graphics::Glyph::transcript>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 L<Bio::Graphics::Glyph::transcript2>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 L<Bio::Graphics::Glyph::translation>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 L<Bio::Graphics::Glyph::triangle>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 L<Bio::DB::GFF>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 L<Bio::SeqI>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 L<Bio::SeqFeatureI>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 L<Bio::Das>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 L<GD>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Lincoln Stein E<lt>lstein@cshl.orgE<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Copyright (c) 2001 Cold Spring Harbor Laboratory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 This library is free software; you can redistribute it and/or modify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 it under the same terms as Perl itself. See DISCLAIMER.txt for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 disclaimers of warranty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 =cut