annotate variant_effect_predictor/Bio/Graphics/Feature.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
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::Feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 Bio::Graphics::Feature - A simple feature object for use with Bio::Graphics::Panel
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 use Bio::Graphics::Feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # create a simple feature with no internal structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 $f = Bio::Graphics::Feature->new(-start => 1000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 -stop => 2000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 -type => 'transcript',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 -name => 'alpha-1 antitrypsin',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 -desc => 'an enzyme inhibitor',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 # create a feature composed of multiple segments, all of type "similarity"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 $f = Bio::Graphics::Feature->new(-segments => [[1000,1100],[1500,1550],[1800,2000]],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 -name => 'ABC-3',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 -type => 'gapped_alignment',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 -subtype => 'similarity');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 # build up a gene exon by exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 $e1 = Bio::Graphics::Feature->new(-start=>1,-stop=>100,-type=>'exon');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 $e2 = Bio::Graphics::Feature->new(-start=>150,-stop=>200,-type=>'exon');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 $e3 = Bio::Graphics::Feature->new(-start=>300,-stop=>500,-type=>'exon');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 $f = Bio::Graphics::Feature->new(-segments=>[$e1,$e2,$e3],-type=>'gene');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 This is a simple Bio::SeqFeatureI-compliant object that is compatible
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 with Bio::Graphics::Panel. With it you can create lightweight feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 objects for drawing.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 All methods are as described in L<Bio::SeqFeatureI> with the following additions:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 =head2 The new() Constructor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 $feature = Bio::Graphics::Feature->new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 This method creates a new feature object. You can create a simple
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 feature that contains no subfeatures, or a hierarchically nested object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 Arguments are as follows:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 -start the start position of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 -end the stop position of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 -stop an alias for end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 -name the feature name (returned by seqname())
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 -type the feature type (returned by primary_tag())
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 -source the source tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 -desc a description of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 -segments a list of subfeatures (see below)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 -subtype the type to use when creating subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 -strand the strand of the feature (one of -1, 0 or +1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 -id an alias for -name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 -seqname an alias for -name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 -primary_id an alias for -name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 -display_id an alias for -name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 -display_name an alias for -name (do you get the idea the API has changed?)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 -attributes a hashref of tag value attributes, in which the key is the tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 and the value is an array reference of values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 -factory a reference to a feature factory, used for compatibility with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 more obscure parts of Bio::DB::GFF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 The subfeatures passed in -segments may be an array of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 Bio::Graphics::Feature objects, or an array of [$start,$stop]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 pairs. Each pair should be a two-element array reference. In the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 latter case, the feature type passed in -subtype will be used when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 creating the subfeatures.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 If no feature type is passed, then it defaults to "feature".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 =head2 Non-SeqFeatureI methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 A number of new methods are provided for compatibility with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Ace::Sequence, which has a slightly different API from SeqFeatureI:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 =over 4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 =item add_segment(@segments)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Add one or more segments (a subfeature). Segments can either be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Feature objects, or [start,stop] arrays, as in the -segments argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 to new(). The feature endpoints are automatically adjusted.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 =item segments()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 An alias for sub_SeqFeature().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 =item merged_segments()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 Another alias for sub_SeqFeature().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =item stop()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 An alias for end().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 =item name()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 An alias for seqname().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 =item exons()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 An alias for sub_SeqFeature() (you don't want to know why!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 use Bio::SeqFeatureI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 use Bio::SeqI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 use Bio::LocationI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 use vars '@ISA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 @ISA = qw(Bio::Root::Root Bio::SeqFeatureI Bio::LocationI Bio::SeqI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 *stop = \&end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 *info = \&name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 *seqname = \&name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 *type = \&primary_tag;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 *exons = *sub_SeqFeature = *merged_segments = \&segments;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 *method = \&type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 *source = \&source_tag;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 sub target { return; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 sub hit { return; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 # usage:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # Bio::Graphics::Feature->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 # -start => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 # -end => 100,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 # -name => 'fred feature',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 # -strand => +1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 # Alternatively, use -segments => [ [start,stop],[start,stop]...]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 # to create a multisegmented feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 my $class= shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 $class = ref($class) if ref $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my %arg = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 my $self = bless {},$class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 $arg{-strand} ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 $self->{strand} = $arg{-strand} ? ($arg{-strand} >= 0 ? +1 : -1) : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 $self->{name} = $arg{-name} || $arg{-seqname} || $arg{-display_id}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 || $arg{-display_name} || $arg{-id} || $arg{-primary_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 $self->{type} = $arg{-type} || 'feature';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 $self->{subtype} = $arg{-subtype} if exists $arg{-subtype};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 $self->{source} = $arg{-source} || $arg{-source_tag} || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 $self->{score} = $arg{-score} if exists $arg{-score};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 $self->{start} = $arg{-start};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $self->{stop} = $arg{-end} || $arg{-stop};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $self->{ref} = $arg{-ref};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 $self->{class} = $arg{-class} if exists $arg{-class};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 $self->{url} = $arg{-url} if exists $arg{-url};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 $self->{seq} = $arg{-seq} if exists $arg{-seq};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 $self->{phase} = $arg{-phase} if exists $arg{-phase};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 $self->{desc} = $arg{-desc} if exists $arg{-desc};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 $self->{attrib} = $arg{-attributes} if exists $arg{-attributes};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->{factory} = $arg{-factory} if exists $arg{-factory};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 # fix start, stop
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 if (defined $self->{stop} && defined $self->{start}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 && $self->{stop} < $self->{start}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 @{$self}{'start','stop'} = @{$self}{'stop','start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $self->{strand} *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 my @segments;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 if (my $s = $arg{-segments}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 $self->add_segment(@$s);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 sub add_segment {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 my $type = $self->{subtype} || $self->{type};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $self->{segments} ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 my @segments = @{$self->{segments}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 for my $seg (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 if (ref($seg) eq 'ARRAY') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my ($start,$stop) = @{$seg};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 next unless defined $start && defined $stop; # fixes an obscure bug somewhere above us
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my $strand = $self->{strand};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 if ($start > $stop) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 ($start,$stop) = ($stop,$start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 # $strand *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 $strand = -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 push @segments,$self->new(-start => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 -stop => $stop,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 -strand => $strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 -type => $type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 push @segments,$seg;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 if (@segments) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 local $^W = 0; # some warning of an uninitialized variable...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $self->{segments} = [ sort {$a->start <=> $b->start } @segments ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $self->{start} = $self->{segments}[0]->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 ($self->{stop}) = sort { $b <=> $a } map { $_->end } @segments;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 sub segments {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my $s = $self->{segments} or return wantarray ? () : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 @$s;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 sub score {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 my $d = $self->{score};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 $self->{score} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 sub primary_tag { shift->{type} }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 sub name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $d = $self->{name};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 $self->{name} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 sub seq_id { shift->ref() }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 sub ref {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 my $d = $self->{ref};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $self->{ref} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 sub start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 my $d = $self->{start};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 $self->{start} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 sub end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 my $d = $self->{stop};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 $self->{stop} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 sub strand {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my $d = $self->{strand};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $self->{strand} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 sub length {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 return $self->end - $self->start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 sub seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 my $dna = exists $self->{seq} ? $self->{seq} : '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 # $dna .= 'n' x ($self->length - CORE::length($dna));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 return $dna;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 *dna = \&seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 =head2 factory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 Title : factory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Usage : $factory = $obj->factory([$new_factory])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Function: Returns the feature factory from which this feature was generated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 Mostly for compatibility with weird dependencies in gbrowse.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 Returns : A feature factory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 Args : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 sub factory {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 my $d = $self->{factory};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $self->{factory} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 =head2 display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 Title : display_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 Usage : $id = $obj->display_name or $obj->display_name($newid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 Function: Gets or sets the display id, also known as the common name of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 the Seq object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 The semantics of this is that it is the most likely string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 to be used as an identifier of the sequence, and likely to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 have "human" readability. The id is equivalent to the LOCUS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 field of the GenBank/EMBL databanks and the ID field of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 Swissprot/sptrembl database. In fasta format, the >(\S+) is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 presumed to be the id, though some people overload the id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 to embed other information. Bioperl does not use any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 embedded information in the ID field, and people are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 encouraged to use other mechanisms (accession field for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 example, or extending the sequence object) to solve this.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 Notice that $seq->id() maps to this function, mainly for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 legacy/convenience issues.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 Returns : A string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 Args : None or a new id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 sub display_name { shift->name }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 *display_id = \&display_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 =head2 accession_number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Title : accession_number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Usage : $unique_biological_key = $obj->accession_number;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 Function: Returns the unique biological id for a sequence, commonly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 called the accession_number. For sequences from established
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 databases, the implementors should try to use the correct
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 accession number. Notice that primary_id() provides the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 unique id for the implemetation, allowing multiple objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 to have the same accession number in a particular implementation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 For sequences with no accession number, this method should return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 "unknown".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 Returns : A string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 Args : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 sub accession_number {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 return 'unknown';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 =head2 alphabet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Title : alphabet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Usage : if( $obj->alphabet eq 'dna' ) { /Do Something/ }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Function: Returns the type of sequence being one of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 'dna', 'rna' or 'protein'. This is case sensitive.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 This is not called <type> because this would cause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 upgrade problems from the 0.5 and earlier Seq objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 Returns : a string either 'dna','rna','protein'. NB - the object must
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 make a call of the type - if there is no type specified it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 has to guess.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 Status : Virtual
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 sub alphabet{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 return 'dna'; # no way this will be anything other than dna!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 =head2 desc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Title : desc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Usage : $seqobj->desc($string) or $seqobj->desc()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Function: Sets or gets the description of the sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Returns : The description
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 Args : The description or none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 sub desc {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 my $d = $self->{desc};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 $self->{desc} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 sub notes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 return shift->desc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 sub low {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 return $self->start < $self->end ? $self->start : $self->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 sub high {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 return $self->start > $self->end ? $self->start : $self->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 =head2 location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Title : location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 Usage : my $location = $seqfeature->location()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 Function: returns a location object suitable for identifying location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 of feature on sequence or parent feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Returns : Bio::LocationI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 sub location {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 require Bio::Location::Split unless Bio::Location::Split->can('new');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 my $location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 if (my @segments = $self->segments) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $location = Bio::Location::Split->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 foreach (@segments) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 $location->add_sub_Location($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 $location = $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 sub coordinate_policy {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 require Bio::Location::WidestCoordPolicy unless Bio::Location::WidestCoordPolicy->can('new');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 return Bio::Location::WidestCoordPolicy->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 sub min_start { shift->low }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 sub max_start { shift->low }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 sub min_end { shift->high }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 sub max_end { shift->high}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 sub start_pos_type { 'EXACT' }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 sub end_pos_type { 'EXACT' }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 sub to_FTstring {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 my $low = $self->min_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 my $high = $self->max_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 return "$low..$high";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 sub phase { shift->{phase} }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 sub class {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 my $d = $self->{class};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 $self->{class} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 return defined($d) ? $d : ucfirst $self->method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 sub gff_string {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 my $name = $self->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 my $class = $self->class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 my $group = "$class $name" if $name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 my $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 $string .= join("\t",$self->ref,$self->source||'.',$self->method||'.',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $self->start,$self->stop,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 $self->score||'.',$self->strand||'.',$self->phase||'.',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 $group);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 $string .= "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 foreach ($self->sub_SeqFeature) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 # add missing data if we need it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 $_->ref($self->ref) unless defined $_->ref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 $_->name($self->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 $_->class($self->class);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 $string .= $_->gff_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 sub db { return }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 sub source_tag {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 my $d = $self->{source};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 $self->{source} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 # This probably should be deleted. Not sure why it's here, but might
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 # have been added for Ace::Sequence::Feature-compliance.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 sub introns {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 sub has_tag { }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 # get/set the configurator (Bio::Graphics::FeatureFile) for this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 sub configurator {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 my $d = $self->{configurator};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 $self->{configurator} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 # get/set the url for this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 sub url {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 my $d = $self->{url};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $self->{url} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 # make a link
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 sub make_link {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 if (my $url = $self->url) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 return $url;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 elsif (my $configurator = $self->configurator) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 return $configurator->make_link($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 sub all_tags {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 return keys %{$self->{attrib}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 sub each_tag_value {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 my $tag = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 my $value = $self->{attrib}{$tag} or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 return CORE::ref $value ? @{$self->{attrib}{$tag}}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 : $self->{attrib}{$tag};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 sub DESTROY { }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 __END__
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 L<Bio::Graphics::Panel>,L<Bio::Graphics::Glyph>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 L<GD>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Lincoln Stein E<lt>lstein@cshl.orgE<gt>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 Copyright (c) 2001 Cold Spring Harbor Laboratory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 This library is free software; you can redistribute it and/or modify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 it under the same terms as Perl itself. See DISCLAIMER.txt for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 disclaimers of warranty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 =cut