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