annotate variant_effect_predictor/Bio/DB/GFF/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 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Bio::DB::GFF::Feature -- A relative segment identified by a feature type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 See L<Bio::DB::GFF>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 Bio::DB::GFF::Feature is a stretch of sequence that corresponding to a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 single annotation in a GFF database. It inherits from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Bio::DB::GFF::RelSegment, and so has all the support for relative
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 addressing of this class and its ancestors. It also inherits from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::SeqFeatureI and so has the familiar start(), stop(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 primary_tag() and location() methods (it implements Bio::LocationI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 too, if needed).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 Bio::DB::GFF::Feature adds new methods to retrieve the annotation's
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 type, group, and other GFF attributes. Annotation types are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 represented by Bio::DB::GFF::Typename objects, a simple class that has
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 two methods called method() and source(). These correspond to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 method and source fields of a GFF file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 Annotation groups serve the dual purpose of giving the annotation a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 human-readable name, and providing higher-order groupings of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 subfeatures into features. The groups returned by this module are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 objects of the Bio::DB::GFF::Featname class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 Bio::DB::GFF::Feature inherits from and implements the abstract
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 methods of Bio::SeqFeatureI, allowing it to interoperate with other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 Bioperl modules.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 Generally, you will not create or manipulate Bio::DB::GFF::Feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 objects directly, but use those that are returned by the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 Bio::DB::GFF::RelSegment-E<gt>features() method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 =head2 Important note about start() vs end()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 If features are derived from segments that use relative addressing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 (which is the default), then start() will be less than end() if the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 feature is on the opposite strand from the reference sequence. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 breaks Bio::SeqI compliance, but is necessary to avoid having the real
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 genomic locations designated by start() and end() swap places when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 changing reference points.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 To avoid this behavior, call $segment-E<gt>absolute(1) before fetching
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 features from it. This will force everything into absolute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 For example:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 my $segment = $db->segment('CHROMOSOME_I');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 $segment->absolute(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 my @features = $segment->features('transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 =head1 API
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 The remainder of this document describes the public and private
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 methods implemented by this module.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 package Bio::DB::GFF::Feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 use Bio::DB::GFF::Util::Rearrange;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 use Bio::DB::GFF::RelSegment;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 use Bio::DB::GFF::Featname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 use Bio::DB::GFF::Typename;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 use Bio::DB::GFF::Homol;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 use Bio::SeqFeatureI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 use Bio::LocationI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 use vars qw(@ISA $AUTOLOAD);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 @ISA = qw(Bio::DB::GFF::RelSegment Bio::SeqFeatureI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Bio::Root::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 #'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 *segments = \&sub_SeqFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 my %CONSTANT_TAGS = (method=>1, source=>1, score=>1, phase=>1, notes=>1, id=>1, group=>1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 =head2 new_from_parent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 Title : new_from_parent
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 Usage : $f = Bio::DB::GFF::Feature->new_from_parent(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 Function: create a new feature object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 Returns : new Bio::DB::GFF::Feature object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 Args : see below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 Status : Internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 This method is called by Bio::DB::GFF to create a new feature using
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 information obtained from the GFF database. It is one of two similar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 constructors. This one is called when the feature is generated from a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 RelSegment object, and should inherit that object's coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 The 13 arguments are positional (sorry):
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 $parent a Bio::DB::GFF::RelSegment object (or descendent)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 $start start of this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $stop stop of this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 $method this feature's GFF method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 $source this feature's GFF source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 $score this feature's score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 $fstrand this feature's strand (relative to the source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 sequence, which has its own strandedness!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 $phase this feature's phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 $group this feature's group (a Bio::DB::GFF::Featname object)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 $db_id this feature's internal database ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 $group_id this feature's internal group database ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 $tstart this feature's target start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 $tstop this feature's target stop
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 tstart and tstop aren't used for anything at the moment, since the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 information is embedded in the group object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 # this is called for a feature that is attached to a parent sequence,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 # in which case it inherits its coordinate reference system and strandedness
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 sub new_from_parent {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 my $package = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 my ($parent,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 $start,$stop,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 $method,$source,$score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 $fstrand,$phase,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 $group,$db_id,$group_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 $tstart,$tstop) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 ($start,$stop) = ($stop,$start) if defined($fstrand) and $fstrand eq '-';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my $class = $group ? $group->class : $parent->class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 my $self = bless {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 factory => $parent->{factory},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 sourceseq => $parent->{sourceseq},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 strand => $parent->{strand},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 ref => $parent->{ref},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 refstart => $parent->{refstart},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 refstrand => $parent->{refstrand},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 absolute => $parent->{absolute},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 start => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 stop => $stop,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 type => Bio::DB::GFF::Typename->new($method,$source),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 fstrand => $fstrand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 score => $score,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 phase => $phase,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 group => $group,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 db_id => $db_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 group_id => $group_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 class => $class,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 },$package;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 Usage : $f = Bio::DB::GFF::Feature->new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 Function: create a new feature object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 Returns : new Bio::DB::GFF::Feature object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 Args : see below
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 Status : Internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 This method is called by Bio::DB::GFF to create a new feature using
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 information obtained from the GFF database. It is one of two similar
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 constructors. This one is called when the feature is generated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 without reference to a RelSegment object, and should therefore use its
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 default coordinate system (relative to itself).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 The 11 arguments are positional:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 $factory a Bio::DB::GFF adaptor object (or descendent)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 $srcseq the source sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $start start of this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $stop stop of this feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 $method this feature's GFF method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $source this feature's GFF source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $score this feature's score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 $fstrand this feature's strand (relative to the source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 sequence, which has its own strandedness!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $phase this feature's phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $group this feature's group
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 $db_id this feature's internal database ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 # 'This is called when creating a feature from scratch. It does not have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 # an inherited coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my $package = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my ($factory,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $srcseq,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 $start,$stop,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 $method,$source,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $score,$fstrand,$phase,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 $group,$db_id,$group_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 $tstart,$tstop) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 my $self = bless { },$package;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 ($start,$stop) = ($stop,$start) if defined($fstrand) and $fstrand eq '-';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 my $class = $group ? $group->class : 'Sequence';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 @{$self}{qw(factory sourceseq start stop strand class)} =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 ($factory,$srcseq,$start,$stop,$fstrand,$class);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 # if the target start and stop are defined, then we use this information to create
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 # the reference sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 # THIS SHOULD BE BUILT INTO RELSEGMENT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 if (0 && $tstart ne '' && $tstop ne '') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 if ($tstart < $tstop) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 @{$self}{qw(ref refstart refstrand)} = ($group,$start - $tstart + 1,'+');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 @{$self}{'start','stop'} = @{$self}{'stop','start'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 @{$self}{qw(ref refstart refstrand)} = ($group,$tstop + $stop - 1,'-');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 @{$self}{qw(ref refstart refstrand)} = ($srcseq,1,'+');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 @{$self}{qw(type fstrand score phase group db_id group_id absolute)} =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 (Bio::DB::GFF::Typename->new($method,$source),$fstrand,$score,$phase,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 $group,$db_id,$group_id,$factory->{absolute});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 =head2 type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 Title : type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 Usage : $type = $f->type([$newtype])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 Function: get or set the feature type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Returns : a Bio::DB::GFF::Typename object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 Args : a new Typename object (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 This method gets or sets the type of the feature. The type is a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Bio::DB::GFF::Typename object, which encapsulates the feature method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 and source.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 The method() and source() methods described next provide shortcuts to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 the individual fields of the type.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 sub type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 my $d = $self->{type};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 $self->{type} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 =head2 method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 Title : method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Usage : $method = $f->method([$newmethod])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Function: get or set the feature method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 Args : a new method (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 This method gets or sets the feature method. It is a convenience
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 feature that delegates the task to the feature's type object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 sub method {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 my $d = $self->{type}->method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 $self->{type}->method(shift) if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 =head2 source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 Title : source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 Usage : $source = $f->source([$newsource])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 Function: get or set the feature source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 Args : a new source (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 This method gets or sets the feature source. It is a convenience
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 feature that delegates the task to the feature's type object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 sub source {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 my $d = $self->{type}->source;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $self->{type}->source(shift) if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 =head2 score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Title : score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 Usage : $score = $f->score([$newscore])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 Function: get or set the feature score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 Args : a new score (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 This method gets or sets the feature score.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 sub score {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 my $d = $self->{score};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $self->{score} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 =head2 phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Title : phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Usage : $phase = $f->phase([$phase])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 Function: get or set the feature phase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 Args : a new phase (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 This method gets or sets the feature phase.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 sub phase {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 my $d = $self->{phase};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 $self->{phase} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 =head2 strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Title : strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Usage : $strand = $f->strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Function: get the feature strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Returns : +1, 0 -1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Returns the strand of the feature. Unlike the other methods, the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 strand cannot be changed once the object is created (due to coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 considerations).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 sub strand {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 return 0 unless $self->{fstrand};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 if ($self->absolute) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 return Bio::DB::GFF::RelSegment::_to_strand($self->{fstrand});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 return $self->SUPER::strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 =head2 group
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 Title : group
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Usage : $group = $f->group([$new_group])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Function: get or set the feature group
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Returns : a Bio::DB::GFF::Featname object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Args : a new group (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 This method gets or sets the feature group. The group is a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Bio::DB::GFF::Featname object, which has an ID and a class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 sub group {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my $d = $self->{group};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 $self->{group} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 =head2 display_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Title : display_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Usage : $display_id = $f->display_id([$display_id])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Function: get or set the feature display id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Returns : a Bio::DB::GFF::Featname object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Args : a new display_id (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 This method is an alias for group(). It is provided for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 Bio::SeqFeatureI compatibility.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 =head2 info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 Title : info
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 Usage : $info = $f->info([$new_info])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Function: get or set the feature group
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 Returns : a Bio::DB::GFF::Featname object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 Args : a new group (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 This method is an alias for group(). It is provided for AcePerl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 compatibility.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 *info = \&group;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 *display_id = \&group;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 *display_name = \&group;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 =head2 target
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 Title : target
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 Usage : $target = $f->target([$new_target])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 Function: get or set the feature target
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 Returns : a Bio::DB::GFF::Featname object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 Args : a new group (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 This method works like group(), but only returns the group if it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 implements the start() method. This is typical for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 similarity/assembly features, where the target encodes the start and stop
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 location of the alignment.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 sub target {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 my $group = $self->group or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 return unless $group->can('start');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 $group;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 =head2 hit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 Title : hit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Usage : $hit = $f->hit([$new_hit])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Function: get or set the feature hit
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Returns : a Bio::DB::GFF::Featname object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Args : a new group (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 This is the same as target(), for compatibility with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Bio::SeqFeature::SimilarityPair.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 *hit = \&target;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 =head2 id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 Title : id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 Usage : $id = $f->id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 Function: get the feature ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 Returns : a database identifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 This method retrieves the database identifier for the feature. It
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 cannot be changed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 sub id { shift->{db_id} }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 =head2 group_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 Title : group_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Usage : $id = $f->group_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 Function: get the feature ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 Returns : a database identifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 This method retrieves the database group identifier for the feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 It cannot be changed. Often the group identifier is more useful than
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 the feature identifier, since it is used to refer to a complex object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 containing subparts.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 sub group_id { shift->{group_id} }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 =head2 clone
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 Title : clone
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Usage : $feature = $f->clone
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Function: make a copy of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 Returns : a new Bio::DB::GFF::Feature object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 This method returns a copy of the feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 sub clone {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 my $clone = $self->SUPER::clone;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 if (ref(my $t = $clone->type)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 my $type = $t->can('clone') ? $t->clone : bless {%$t},ref $t;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 $clone->type($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 if (ref(my $g = $clone->group)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 my $group = $g->can('clone') ? $g->clone : bless {%$g},ref $g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 $clone->group($group);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 if (my $merged = $self->{merged_segs}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 $clone->{merged_segs} = { %$merged };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 $clone;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 =head2 compound
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 Title : compound
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Usage : $flag = $f->compound([$newflag])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 Function: get or set the compound flag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Returns : a boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Args : a new flag (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 This method gets or sets a flag indicated that the feature is not a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 primary one from the database, but the result of aggregation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 sub compound {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 my $d = $self->{compound};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 $self->{compound} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 $d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 =head2 sub_SeqFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 Title : sub_SeqFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 Usage : @feat = $feature->sub_SeqFeature([$method])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Function: get subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Returns : a list of Bio::DB::GFF::Feature objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 Args : a feature method (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 This method returns a list of any subfeatures that belong to the main
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 feature. For those features that contain heterogeneous subfeatures,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 you can retrieve a subset of the subfeatures by providing a method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 name to filter on.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 For AcePerl compatibility, this method may also be called as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 segments().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 sub sub_SeqFeature {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 my $type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 my $subfeat = $self->{subfeatures} or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 $self->sort_features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 my @a;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 if ($type) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 my $features = $subfeat->{lc $type} or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 @a = @{$features};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 @a = map {@{$_}} values %{$subfeat};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 return @a;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 =head2 add_subfeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 Title : add_subfeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 Usage : $feature->add_subfeature($feature)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 Function: add a subfeature to the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 Returns : nothing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 Args : a Bio::DB::GFF::Feature object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 This method adds a new subfeature to the object. It is used
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 internally by aggregators, but is available for public use as well.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 sub add_subfeature {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 my $feature = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 my $type = $feature->method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 my $subfeat = $self->{subfeatures}{lc $type} ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 push @{$subfeat},$feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 =head2 attach_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 Title : attach_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 Usage : $sf->attach_seq($seq)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 Function: Attaches a Bio::Seq object to this feature. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 Bio::Seq object is for the *entire* sequence: ie
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 from 1 to 10000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 Returns : TRUE on success
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 Args : a Bio::PrimarySeqI compliant object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 sub attach_seq { }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 =head2 location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 Title : location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 Usage : my $location = $seqfeature->location()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 Function: returns a location object suitable for identifying location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 of feature on sequence or parent feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 Returns : Bio::LocationI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 sub location {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 require Bio::Location::Split unless Bio::Location::Split->can('new');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 require Bio::Location::Simple unless Bio::Location::Simple->can('new');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 my $location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 if (my @segments = $self->segments) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 $location = Bio::Location::Split->new(-seq_id => $self->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 foreach (@segments) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 $location->add_sub_Location($_->location);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 $location = Bio::Location::Simple->new(-start => $self->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 -end => $self->stop,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 -strand => $self->strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 -seq_id => $self->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 $location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 =head2 entire_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 Title : entire_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 Usage : $whole_seq = $sf->entire_seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 Function: gives the entire sequence that this seqfeature is attached to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 Returns : a Bio::PrimarySeqI compliant object, or undef if there is no
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 sequence attached
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 sub entire_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 $self->factory->segment($self->sourceseq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 =head2 merged_segments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 Title : merged_segments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 Usage : @segs = $feature->merged_segments([$method])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 Function: get merged subfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 Returns : a list of Bio::DB::GFF::Feature objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 Args : a feature method (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 This method acts like sub_SeqFeature, except that it merges
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 overlapping segments of the same time into contiguous features. For
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 those features that contain heterogeneous subfeatures, you can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 retrieve a subset of the subfeatures by providing a method name to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 filter on.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 A side-effect of this method is that the features are returned in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 sorted order by their start tposition.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 #'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 sub merged_segments {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 my $type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 $type ||= ''; # prevent uninitialized variable warnings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 my $truename = overload::StrVal($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 return @{$self->{merged_segs}{$type}} if exists $self->{merged_segs}{$type};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 my @segs = map { $_->[0] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 sort { $a->[1] <=> $b->[1] ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 $a->[2] cmp $b->[2] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 map { [$_, $_->start, $_->type] } $self->sub_SeqFeature($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 # attempt to merge overlapping segments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 my @merged = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 for my $s (@segs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 my $previous = $merged[-1] if @merged;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 my ($pscore,$score) = (eval{$previous->score}||0,eval{$s->score}||0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 if (defined($previous)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 && $previous->stop+1 >= $s->start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 && (!defined($s->score) || $previous->score == $s->score)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 && $previous->method eq $s->method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 if ($self->absolute && $self->strand < 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 $previous->{start} = $s->{start};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 $previous->{stop} = $s->{stop};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 # fix up the target too
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 my $g = $previous->{group};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 if ( ref($g) && $g->isa('Bio::DB::GFF::Homol')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 my $cg = $s->{group};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 $g->{stop} = $cg->{stop};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 } elsif (defined($previous)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 && $previous->start == $s->start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 && $previous->stop == $s->stop) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 my $copy = $s->clone;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 push @merged,$copy;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 $self->{merged_segs}{$type} = \@merged;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 @merged;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 =head2 sub_types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 Title : sub_types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 Usage : @methods = $feature->sub_types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 Function: get methods of all sub-seqfeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 Returns : a list of method names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 For those features that contain subfeatures, this method will return a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 unique list of method names of those subfeatures, suitable for use
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 with sub_SeqFeature().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 sub sub_types {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 my $subfeat = $self->{subfeatures} or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 return keys %$subfeat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 =head2 attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 Title : attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 Usage : @attributes = $feature->attributes($name)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 Function: get the "attributes" on a particular feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 Returns : an array of string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 Args : feature ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 Status : public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 Some GFF version 2 files use the groups column to store a series of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 attribute/value pairs. In this interpretation of GFF, the first such
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 pair is treated as the primary group for the feature; subsequent pairs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 are treated as attributes. Two attributes have special meaning:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 "Note" is for backward compatibility and is used for unstructured text
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 remarks. "Alias" is considered as a synonym for the feature name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 @gene_names = $feature->attributes('Gene');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 @aliases = $feature->attributes('Alias');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 If no name is provided, then attributes() returns a flattened hash, of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 attribute=E<gt>value pairs. This lets you do:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 %attributes = $db->attributes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 sub attributes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 my $factory = $self->factory;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 defined(my $id = $self->id) or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 $factory->attributes($id,@_)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 =head2 notes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 Title : notes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 Usage : @notes = $feature->notes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 Function: get the "notes" on a particular feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 Returns : an array of string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 Args : feature ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 Status : public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 Some GFF version 2 files use the groups column to store various notes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 and remarks. Adaptors can elect to store the notes in the database,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 or just ignore them. For those adaptors that store the notes, the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 notes() method will return them as a list.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 sub notes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 $self->attributes('Note');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 =head2 aliases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 Title : aliases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 Usage : @aliases = $feature->aliases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 Function: get the "aliases" on a particular feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 Returns : an array of string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 Args : feature ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 Status : public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 This method will return a list of attributes of type 'Alias'.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 sub aliases {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 $self->attributes('Alias');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 =head2 Autogenerated Methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 Title : AUTOLOAD
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 Usage : @subfeat = $feature->Method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 Function: Return subfeatures using autogenerated methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 Returns : a list of Bio::DB::GFF::Feature objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 Any method that begins with an initial capital letter will be passed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 to AUTOLOAD and treated as a call to sub_SeqFeature with the method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 name used as the method argument. For instance, this call:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 @exons = $feature->Exon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 is equivalent to this call:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 @exons = $feature->sub_SeqFeature('exon');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 =head2 SeqFeatureI methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 The following Bio::SeqFeatureI methods are implemented:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 primary_tag(), source_tag(), all_tags(), has_tag(), each_tag_value() [renamed get_tag_values()].
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 *primary_tag = \&method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 *source_tag = \&source;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 sub all_tags {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 my @tags = keys %CONSTANT_TAGS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 # autogenerated methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 if (my $subfeat = $self->{subfeatures}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 push @tags,keys %$subfeat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 @tags;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 *get_all_tags = \&all_tags;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 sub has_tag {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 my $tag = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 my %tags = map {$_=>1} $self->all_tags;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 return $tags{$tag};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 *each_tag_value = \&get_tag_values;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 sub get_tag_values {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 my $tag = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 return $self->$tag() if $CONSTANT_TAGS{$tag};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 $tag = ucfirst $tag;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 return $self->$tag(); # try autogenerated tag
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 sub AUTOLOAD {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 my($pack,$func_name) = $AUTOLOAD=~/(.+)::([^:]+)$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 my $sub = $AUTOLOAD;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 my $self = $_[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 # ignore DESTROY calls
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 return if $func_name eq 'DESTROY';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 # fetch subfeatures if func_name has an initial cap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 # return sort {$a->start <=> $b->start} $self->sub_SeqFeature($func_name) if $func_name =~ /^[A-Z]/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 return $self->sub_SeqFeature($func_name) if $func_name =~ /^[A-Z]/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 # error message of last resort
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 $self->throw(qq(Can't locate object method "$func_name" via package "$pack"));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 }#'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 =head2 adjust_bounds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 Title : adjust_bounds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 Usage : $feature->adjust_bounds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 Function: adjust the bounds of a feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 Returns : ($start,$stop,$strand)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 This method adjusts the boundaries of the feature to enclose all its
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 subfeatures. It returns the new start, stop and strand of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 enclosing feature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 # adjust a feature so that its boundaries are synched with its subparts' boundaries.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 # this works recursively, so subfeatures can contain other features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923 sub adjust_bounds {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 my $g = $self->{group};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 if (my $subfeat = $self->{subfeatures}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 for my $list (values %$subfeat) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 for my $feat (@$list) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 # fix up our bounds to hold largest subfeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 my($start,$stop,$strand) = $feat->adjust_bounds;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933 $self->{fstrand} = $strand unless defined $self->{fstrand};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 my ($low,$high) = $start < $stop ? ($start,$stop) : ($stop,$start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 if ($self->{fstrand} ne '-') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 $self->{start} = $low if !defined($self->{start}) || $low < $self->{start};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 $self->{stop} = $high if !defined($self->{stop}) || $high > $self->{stop};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 $self->{start} = $high if !defined($self->{start}) || $high > $self->{start};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 $self->{stop} = $low if !defined($self->{stop}) || $low < $self->{stop};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 # fix up endpoints of targets too (for homologies only)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944 my $h = $feat->group;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 next unless $h && $h->isa('Bio::DB::GFF::Homol');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 next unless $g && $g->isa('Bio::DB::GFF::Homol');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 ($start,$stop) = ($h->{start},$h->{stop});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 if ($start <= $stop) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 $g->{start} = $start if !defined($g->{start}) || $start < $g->{start};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 $g->{stop} = $stop if !defined($g->{stop}) || $stop > $g->{stop};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 $g->{start} = $start if !defined($g->{start}) || $start > $g->{start};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 $g->{stop} = $stop if !defined($g->{stop}) || $stop < $g->{stop};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 ($self->{start},$self->{stop},$self->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 =head2 sort_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 Title : sort_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 Usage : $feature->sort_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 Function: sort features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 Returns : nothing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 This method sorts subfeatures in ascending order by their start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 position. For reverse strand features, it sorts subfeatures in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 descending order. After this is called sub_SeqFeature will return the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 features in order.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 This method is called internally by merged_segments().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 # sort features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 sub sort_features {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 return if $self->{sorted}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 my $strand = $self->strand or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985 my $subfeat = $self->{subfeatures} or return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 for my $type (keys %$subfeat) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 $subfeat->{$type} = [map { $_->[0] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988 sort {$a->[1] <=> $b->[1] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 map { [$_,$_->start] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 @{$subfeat->{$type}}] if $strand > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 $subfeat->{$type} = [map { $_->[0] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 sort {$b->[1] <=> $a->[1]}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 map { [$_,$_->start] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 @{$subfeat->{$type}}] if $strand < 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 =head2 asString
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 Title : asString
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 Usage : $string = $feature->asString
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 Function: return human-readabled representation of feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 Returns : a string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 Status : Public
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 This method returns a human-readable representation of the feature and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 is called by the overloaded "" operator.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 sub asString {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 my $type = $self->type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 my $name = $self->group;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 return "$type($name)" if $name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 return $type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018 # my $type = $self->method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 # my $id = $self->group || 'unidentified';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 # return join '/',$id,$type,$self->SUPER::asString;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 sub name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 my $self =shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 return $self->group || $self->SUPER::name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 sub gff_string {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 my ($start,$stop) = ($self->start,$self->stop);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 # the defined() tests prevent uninitialized variable warnings, when dealing with clone objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 # whose endpoints may be undefined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 ($start,$stop) = ($stop,$start) if defined($start) && defined($stop) && $start > $stop;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 my ($class,$name) = ('','');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 my @group;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 if (my $t = $self->target) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039 my $class = $t->class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 my $name = $t->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 my $start = $t->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 my $stop = $t->stop;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 push @group,qq(Target "$class:$name" $start $stop);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046 elsif (my $g = $self->group) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047 $class = $g->class || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048 $name = $g->name || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 push @group,"$class $name";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051 push @group,map {qq(Note "$_")} $self->notes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 my $group_field = join ' ; ',@group;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 my $strand = ('-','.','+')[$self->strand+1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 my $ref = $self->refseq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056 my $n = ref($ref) ? $ref->name : $ref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057 my $phase = $self->phase;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 $phase = '.' unless defined $phase;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059 return join("\t",$n,$self->source,$self->method,$start||'.',$stop||'.',$self->score||'.',$strand||'.',$phase,$group_field);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 =head1 A Note About Similarities
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064 The current default aggregator for GFF "similarity" features creates a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065 composite Bio::DB::GFF::Feature object of type "gapped_alignment".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066 The target() method for the feature as a whole will return a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067 RelSegment object that is as long as the extremes of the similarity
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068 hit target, but will not necessarily be the same length as the query
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 sequence. The length of each "similarity" subfeature will be exactly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 the same length as its target(). These subfeatures are essentially
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071 the HSPs of the match.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073 The following illustrates this:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075 @similarities = $segment->feature('similarity:BLASTN');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 $sim = $similarities[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078 print $sim->type; # yields "gapped_similarity:BLASTN"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 $query_length = $sim->length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081 $target_length = $sim->target->length; # $query_length != $target_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 @matches = $sim->Similarity; # use autogenerated method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084 $query1_length = $matches[0]->length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085 $target1_length = $matches[0]->target->length; # $query1_length == $target1_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087 If you merge segments by calling merged_segments(), then the length of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088 the query sequence segments will no longer necessarily equal the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 length of the targets, because the alignment information will have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090 been lost. Nevertheless, the targets are adjusted so that the first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091 and last base pairs of the query match the first and last base pairs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092 of the target.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098 =head1 BUGS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100 This module is still under development.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104 L<bioperl>, L<Bio::DB::GFF>, L<Bio::DB::RelSegment>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108 Lincoln Stein E<lt>lstein@cshl.orgE<gt>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 Copyright (c) 2001 Cold Spring Harbor Laboratory.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 This library is free software; you can redistribute it and/or modify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 it under the same terms as Perl itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116