annotate variant_effect_predictor/Bio/EnsEMBL/SeqFeature.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::SeqFeature - Ensembl specific sequence feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 Do not use this module if you can avoid it. It has been replaced by
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 Bio::EnsEMBL::Feature. This module has a long history of usage but has
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 become very bloated, and quite unweildy. It was decided to replace
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 it completely with a smaller, light-weight feature class rather than
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 attempting to refactor this class, and maintain strict backwards
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 compatibility.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 Part of the complexity of this class was in its extensive
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 inheritance. As an example the following is a simplified inheritance
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 heirarchy that was present for Bio::EnsEMBL::DnaAlignFeature:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 Bio::EnsEMBL::DnaAlignFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 Bio::EnsEMBL::BaseAlignFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 Bio::EnsEMBL::FeaturePair
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 Bio::EnsEMBL::SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 Bio::EnsEMBL::SeqFeatureI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 Bio::SeqFeatureI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 Bio::RangeI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 Bio::Root::RootI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 The new Bio::EnsEMBL::Feature class is much shorter, and hopefully much
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 easier to understand and maintain.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 package Bio::EnsEMBL::SeqFeature;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 use Bio::EnsEMBL::SeqFeatureI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 use Bio::EnsEMBL::Analysis;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 use Bio::EnsEMBL::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 @ISA = qw(Bio::EnsEMBL::Root Bio::EnsEMBL::SeqFeatureI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 my($caller,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 my $self = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 if(ref $caller) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 bless $self, ref $caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 bless $self, $caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 $self->{'_gsf_tag_hash'} = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 $self->{'_gsf_sub_array'} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 $self->{'_parse_h'} = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 $self->{'_is_splittable'} = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 my ($start,$end,$strand,$frame,$score,$analysis,$seqname, $source_tag,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 $primary_tag, $percent_id, $p_value, $phase, $end_phase) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 &rearrange([qw(START
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 END
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 STRAND
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 FRAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 SCORE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 ANALYSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 SEQNAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 SOURCE_TAG
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 PRIMARY_TAG
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 PERCENT_ID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 P_VALUE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 PHASE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 END_PHASE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 )],@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 # $gff_string && $self->_from_gff_string($gff_string);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 if ( defined $analysis && $analysis ne "") { $self->analysis($analysis)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 if ( defined ($start) && $start ne "" ) { $self->start($start)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 if ( defined ($end ) && $end ne "" ) { $self->end($end)}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 if ( defined $strand && $strand ne "") { $self->strand($strand)}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 if ( defined $frame && $frame ne "") { $self->frame($frame)}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 if ( defined $score && $score ne "") { $self->score($score)}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 if ( defined $seqname && $seqname ne "") { $self->seqname($seqname)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 if ( defined $percent_id && $percent_id ne ""){ $self->percent_id($percent_id)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 if ( defined $p_value && $p_value ne "") { $self->p_value($p_value)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 if ( defined $phase && $phase ne "") { $self->phase($phase)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 if ( defined $end_phase && $end_phase ne "") { $self->end_phase($end_phase)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 return $self; # success - we hope!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 =head2 start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 Title : start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 Usage : $start = $feat->start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $feat->start(20)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 Function: Get/set on the start coordinate of the feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 Returns : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 sub start{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 if (defined($value)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 if ($value !~ /^\-?\d+/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 $self->throw("$value is not a valid start");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 $self->{'_gsf_start'} = $value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 return $self->{'_gsf_start'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 =head2 end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 Title : end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 Usage : $end = $feat->end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 $feat->end($end)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 Function: get/set on the end coordinate of the feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 Returns : integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 sub end{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 if (defined($value)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 if( $value !~ /^\-?\d+/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 $self->throw("[$value] is not a valid end");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 $self->{'_gsf_end'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 return $self->{'_gsf_end'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 =head2 length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Title : length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 sub length{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 return $self->end - $self->start +1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 =head2 strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 Title : strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 Usage : $strand = $feat->strand()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 $feat->strand($strand)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 Function: get/set on strand information, being 1,-1 or 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 Returns : -1,1 or 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 sub strand {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 if (defined($value)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 if( $value eq '+' ) { $value = 1; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 if( $value eq '-' ) { $value = -1; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 if( $value eq '.' ) { $value = 0; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 if( $value != -1 && $value != 1 && $value != 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 $self->throw("$value is not a valid strand info");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 $self->{'_gsf_strand'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 return $self->{'_gsf_strand'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 =head2 move
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 Arg [1] : int $start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 Arg [2] : int $end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 Arg [3] : (optional) int $strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 Example : $feature->move(100, 200, -1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 Description: Moves a feature to a different location. This is faster
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 then calling 3 seperate accesors in a large loop.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 Caller : BaseFeatureAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 sub move {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 my ($self, $start, $end, $strand) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 $self->{'_gsf_start'} = $start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 $self->{'_gsf_end'} = $end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 if(defined $strand) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 $self->{'_gsf_strand'} = $strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 =head2 score
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 Title : score
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 Usage : $score = $feat->score()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 $feat->score($score)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 Function: get/set on score information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 Returns : float
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 Args : none if get, the new value if set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 sub score {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 if(defined ($value) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 if( $value !~ /^[+-]?\d+\.?\d*(e-\d+)?/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 $self->throw("'$value' is not a valid score");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 $self->{'_gsf_score'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 return $self->{'_gsf_score'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 =head2 frame
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Title : frame
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 Usage : $frame = $feat->frame()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 $feat->frame($frame)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 Function: get/set on frame information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 Returns : 0,1,2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 Args : none if get, the new value if set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 sub frame {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 if (defined($value)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 if( $value != 1 && $value != 2 && $value != 3 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 $self->throw("'$value' is not a valid frame");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 $self->{'_gsf_frame'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 return $self->{'_gsf_frame'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 =head2 primary_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 Title : primary_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 Usage : $tag = $feat->primary_tag()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 $feat->primary_tag('exon')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 Function: get/set on the primary tag for a feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 eg 'exon'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 Returns : a string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 sub primary_tag{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 my ($self,$arg) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 if (defined($arg)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 # throw warnings about setting primary tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 my ($p,$f,$l) = caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 $self->warn("$f:$l setting primary_tag now deprecated." .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 "Primary tag is delegated to analysis object");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 unless($self->analysis) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 return '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 return $self->analysis->gff_feature();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 =head2 source_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 Title : source_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 Usage : $tag = $feat->source_tag()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 $feat->source_tag('genscan');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 Function: Returns the source tag for a feature,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 eg, 'genscan'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 Returns : a string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 sub source_tag{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 my ($self,$arg) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 if (defined($arg)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 # throw warnings about setting primary tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 my ($p,$f,$l) = caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 $self->warn("$f:$l setting source_tag now deprecated. " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 "Source tag is delegated to analysis object");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 unless($self->analysis) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 return "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 return $self->analysis->gff_source();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 =head2 analysis
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 Title : analysis
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 Usage : $sf->analysis();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 Function: Store details of the program/database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 and versions used to create this feature.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 sub analysis {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 if (defined($value)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 unless(ref($value) && $value->isa('Bio::EnsEMBL::Analysis')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 $self->throw("Analysis is not a Bio::EnsEMBL::Analysis object "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 . "but a $value object");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 $self->{_analysis} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 #if _analysis is not defined, create a new analysis object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 unless(defined $self->{_analysis}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 $self->{_analysis} = new Bio::EnsEMBL::Analysis();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 return $self->{_analysis};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 =head2 validate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 Title : validate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 Usage : $sf->validate;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 Function: Checks whether all the data is present in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 sub validate {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 $self->vthrow("Seqname not defined in feature") unless defined($self->seqname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 $self->vthrow("start not defined in feature") unless defined($self->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 $self->vthrow("end not defined in feature") unless defined($self->end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 $self->vthrow("strand not defined in feature") unless defined($self->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 $self->vthrow("score not defined in feature") unless defined($self->score);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 $self->vthrow("analysis not defined in feature") unless defined($self->analysis);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 if ($self->end < $self->start) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 $self->vthrow("End coordinate < start coordinate");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 sub vthrow {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 my ($self,$message) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 print(STDERR "Error validating feature [$message]\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 print(STDERR " Seqname : [" . $self->{_seqname} . "]\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 print(STDERR " Start : [" . $self->{_gsf_start} . "]\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 print(STDERR " End : [" . $self->{_gsf_end} . "]\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 print(STDERR " Strand : [" .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 ((defined ($self->{_gsf_strand})) ? $self->{_gsf_strand} : "undefined") . "]\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 print(STDERR " Score : [" . $self->{_gsf_score} . "]\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 print(STDERR " Analysis : [" . $self->{_analysis}->dbID . "]\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 $self->throw("Invalid feature - see dump on STDERR");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 =head2 validate_prot_feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 Title : validate_prot_feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 # Shouldn't this go as "validate" into Pro_SeqFeature?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 sub validate_prot_feature{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 my ($self,$num) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 $self->throw("Seqname not defined in feature") unless defined($self->seqname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 $self->throw("start not defined in feature") unless defined($self->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 $self->throw("end not defined in feature") unless defined($self->end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 if ($num == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 $self->throw("score not defined in feature") unless defined($self->score);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 $self->throw("percent_id not defined in feature") unless defined($self->percent_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 $self->throw("evalue not defined in feature") unless defined($self->p_value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 $self->throw("analysis not defined in feature") unless defined($self->analysis);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 # These methods are specified in the SeqFeatureI interface but we don't want
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 # people to store data in them. These are just here in order to keep
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 # existing code working
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 =head2 has_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 Title : has_tag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 Usage : $value = $self->has_tag('some_tag')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 Function: Returns the value of the tag (undef if
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 none)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 sub has_tag{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 my ($self,$tag) = (shift, shift);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 return exists $self->{'_gsf_tag_hash'}->{$tag};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 =head2 add_tag_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 Title : add_tag_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 Usage : $self->add_tag_value('note',"this is a note");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 Returns : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 Args : tag (string) and value (any scalar)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 sub add_tag_value{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 my ($self,$tag,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 if( !defined $self->{'_gsf_tag_hash'}->{$tag} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 $self->{'_gsf_tag_hash'}->{$tag} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 push(@{$self->{'_gsf_tag_hash'}->{$tag}},$value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 =head2 each_tag_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 Title : each_tag_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 sub each_tag_value {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 my ($self,$tag) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 if( ! exists $self->{'_gsf_tag_hash'}->{$tag} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 $self->throw("asking for tag value that does not exist $tag");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 return @{$self->{'_gsf_tag_hash'}->{$tag}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 =head2 all_tags
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 Title : all_tags
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 Usage : @tags = $feat->all_tags()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 Function: gives all tags for this feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 Returns : an array of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 sub all_tags{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 return keys %{$self->{'_gsf_tag_hash'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 =head2 seqname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 Arg [1] : string $seqname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 Example : $seqname = $self->seqname();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 Description: Obtains the seqname of this features sequence. This is set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 automatically when a sequence with a name is attached, or may
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 be set manually.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 Returntype : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571 Caller : general, attach_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 sub seqname{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 my ($self,$seqname) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 my $seq = $self->contig();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 if(defined $seqname) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 $self->{_seqname} = $seqname;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 if($seq && ref $seq && $seq->can('name')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 $self->{_seqname} = $seq->name();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 return $self->{_seqname};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 =head2 attach_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 Title : attach_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 Usage : $sf->attach_seq($seq)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 Function: Attaches a Bio::PrimarySeqI object to this feature. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 Bio::PrimarySeqI object is for the *entire* sequence: ie
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 from 1 to 10000
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 sub attach_seq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 my ($self, $seq) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 $self->contig($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 =head2 seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 Example : $tseq = $sf->seq()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615 Function: returns the sequence (if any ) for this feature truncated to the range spanning the feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 Returns : a Bio::PrimarySeq object (I reckon)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 sub seq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 my ($self,$arg) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 if( defined $arg ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 $self->throw("Calling SeqFeature::Generic->seq with an argument. " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 "You probably want attach_seq");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 if( ! exists $self->{'_gsf_seq'} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 # assumming our seq object is sensible, it should not have to yank
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 # the entire sequence out here.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 my $seq = $self->{'_gsf_seq'}->trunc($self->start(),$self->end());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 if( $self->strand == -1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 # ok. this does not work well (?)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 #print STDERR "Before revcom", $seq->str, "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 $seq = $seq->revcom;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 #print STDERR "After revcom", $seq->str, "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 return $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649 =head2 entire_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651 Title : entire_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 Usage : $whole_seq = $sf->entire_seq()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 Function: gives the entire sequence that this seqfeature is attached to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 sub entire_seq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 return $self->contig;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 =head2 sub_SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 Title : sub_SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 Usage : @feats = $feat->sub_SeqFeature();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672 Function: Returns an array of sub Sequence Features
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 Returns : An array
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679 sub sub_SeqFeature {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 if ( $self->{'_gsf_sub_array'} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 return @{ $self->{'_gsf_sub_array'} };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685 return ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689 =head2 add_sub_SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 Title : add_sub_SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 Usage : $feat->add_sub_SeqFeature($subfeat);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 $feat->add_sub_SeqFeature($subfeat,'EXPAND')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 Function: adds a SeqFeature into the subSeqFeature array.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 with no 'EXPAND' qualifer, subfeat will be tested
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 as to whether it lies inside the parent, and throw
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697 an exception if not.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 If EXPAND is used, the parents start/end/strand will
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700 be adjusted so that it grows to accommodate the new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 subFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 Returns : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 Args : An object which has the SeqFeatureI interface
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708 sub add_sub_SeqFeature{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 my ($self,$feat,$expand) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 if( !$feat->isa('Bio::SeqFeatureI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 $self->warn("$feat does not implement Bio::SeqFeatureI. Will add it anyway, but beware...");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 if( $expand eq 'EXPAND' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 # if this doesn't have start/end set - forget it!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 if( !defined $self->start && !defined $self->end ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 $self->start($feat->start());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719 $self->end($feat->end());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 $self->strand($feat->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 my ($start,$end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723 if( $feat->start < $self->start ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 $start = $feat->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727 if( $feat->end > $self->end ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 $end = $feat->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731 $self->start($start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732 $self->end($end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 if( !defined($feat->start()) || !defined($feat->end()) ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737 !defined($self->start()) || !defined($self->end())) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738 $self->throw( "This SeqFeature and the sub_SeqFeature must define".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739 " start and end.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741 if($feat->start() > $feat->end() || $self->start() > $self->end()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742 $self->throw("This SeqFeature and the sub_SeqFeature must have " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 "start that is less than or equal to end.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745 if($feat->start() < $self->start() || $feat->end() > $self->end() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 $self->throw("$feat is not contained within parent feature, " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747 "and expansion is not valid");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751 push(@{$self->{'_gsf_sub_array'}},$feat);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755 =head2 flush_sub_SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757 Title : flush_sub_SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758 Usage : $sf->flush_sub_SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759 Function: Removes all sub SeqFeature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760 (if you want to remove only a subset, take
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761 an array of them all, flush them, and add
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762 back only the guys you want)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764 Returns : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770 sub flush_sub_SeqFeature {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773 $self->{'_gsf_sub_array'} = []; # zap the array implicitly.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777 sub id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780 if (defined($value)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781 $self->{_id} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 return $self->{_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788 =head2 percent_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790 Title : percent_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791 Usage : $pid = $feat->percent_id()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792 $feat->percent_id($pid)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793 Function: get/set on percentage identity information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 Returns : float
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795 Args : none if get, the new value if set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799 sub percent_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802 if (defined($value))
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804 $self->{_percent_id} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807 return $self->{_percent_id};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810 =head2 p_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812 Title : p_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813 Usage : $p_val = $feat->p_value()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814 $feat->p_value($p_val)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815 Function: get/set on p value information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816 Returns : float
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817 Args : none if get, the new value if set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
820
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
821 sub p_value {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
822 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
823
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
824 if (defined($value))
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
825 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
826 $self->{_p_value} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
827 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
828
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
829 return $self->{_p_value};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
830 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
831
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
832 =head2 phase
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
833
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
834 Title : phase
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
835 Usage : $phase = $feat->phase()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
836 $feat->phase($phase)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
837 Function: get/set on start phase of predicted exon feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
838 Returns : [0,1,2]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
839 Args : none if get, 0,1 or 2 if set.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
840
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
841 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
842
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
843 sub phase {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
844 my ($self, $value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
845
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
846 if (defined($value) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
847 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
848 $self->throw("Valid values for Phase are [0,1,2]") if ($value < 0 || $value > 2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
849 $self->{_phase} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
850 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
851
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
852 return $self->{_phase};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
853 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
854
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
855 =head2 end_phase
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
856
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
857 Title : end_phase
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
858 Usage : $end_phase = $feat->end_phase()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
859 $feat->end_phase($end_phase)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
860 Function: returns end_phase based on phase and length of feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
861 Returns : [0,1,2]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
862 Args : none if get, 0,1 or 2 if set.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
863
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
864 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
865
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
866 sub end_phase {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
867 my ($self, $value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
868
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
869 if (defined($value))
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
870 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
871 $self->throw("Valid values for Phase are [0,1,2]") if ($value < 0 || $value > 2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
872 $self->{_end_phase} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
873 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
874
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
875 return $self->{_end_phase};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
876 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
877
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
878
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
879 sub gffstring {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
880 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
881
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
882 my $str;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
883
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
884 my $strand = "+";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
885
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
886 if ((defined $self->strand)&&($self->strand == -1)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
887 $strand = "-";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
888 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
889
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
890 $str .= (defined $self->seqname) ? $self->seqname."\t" : "\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
891 $str .= (defined $self->source_tag) ? $self->source_tag."\t" : "\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
892 $str .= (defined $self->primary_tag) ? $self->primary_tag."\t" : "\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
893 $str .= (defined $self->start) ? $self->start."\t" : "\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
894 $str .= (defined $self->end) ? $self->end."\t" : "\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
895 $str .= (defined $self->score) ? $self->score."\t" : "\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
896 $str .= (defined $self->strand) ? $strand."\t" : ".\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
897 $str .= (defined $self->phase) ? $self->phase."\t" : ".\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
898 eval{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
899 $str .= (defined $self->end_phase) ? $self->end_phase."\t" : ".\t";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
900 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
901
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
902 return $str;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
903 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
904
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
905
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
906 =head2 external_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
907
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
908 Title : external_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
909 Usage : $pid = $feat->external_db()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
910 $feat->external_db($dbid)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
911 Function: get/set for an external db accession number (e.g.: Interpro)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
912 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
913 Args : none if get, the new value if set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
914
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
915 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
916
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
917 sub external_db {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
918 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
919
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
920 if (defined($value))
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
921 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
922 $self->{'_external_db'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
923 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
924
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
925 return $self->{'_external_db'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
926 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
927
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
928
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
929
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
930 =head2 contig
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
931
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
932 Arg [1] : Bio::PrimarySeqI $seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
933 Example : $seq = $self->contig;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
934 Description: Accessor to attach/retrieve a sequence to/from a feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
935 Returntype : Bio::PrimarySeqI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
936 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
937 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
938
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
939 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
940
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
941 sub contig {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
942 my ($self, $arg) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
943
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
944 if ($arg) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
945 unless (defined $arg && ref $arg && $arg->isa("Bio::PrimarySeqI")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
946 $self->throw("Must attach Bio::PrimarySeqI objects to SeqFeatures");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
947 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
948
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
949 $self->{'_gsf_seq'} = $arg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
950
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
951 # attach to sub features if they want it
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
952
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
953 foreach my $sf ($self->sub_SeqFeature) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
954 if ($sf->can("attach_seq")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
955 $sf->attach_seq($arg);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
956 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
957 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
958 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
959 #print STDERR "contig is ".$self->{'_gsf_seq'}." with name ".$self->{'_gsf_seq'}->name."\n" unless(!$self->{'_gsf_seq'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
960 # my ($p, $f, $l) = caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
961 # print STDERR "Caller = ".$f." ".$l."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
962 return $self->{'_gsf_seq'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
963 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
964
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
965
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
966
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
967 sub is_splittable {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
968 my ($self, $arg) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
969
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
970 if (defined $arg) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
971 $self->{'_is_splittable'} = $arg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
972 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
973 return $self->{'_is_splittable'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
974 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
975
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
976
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
977 sub transform {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
978 my ($self, $slice) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
979
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
980 unless (defined $slice) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
981
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
982 if ((defined $self->contig) &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
983 ($self->contig->isa("Bio::EnsEMBL::RawContig"))) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
984
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
985 # we are already in rawcontig coords, nothing needs to be done
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
986 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
987
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
988 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
989 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
990 # transform to raw_contig coords from Slice coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
991 return $self->_transform_to_RawContig();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
992 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
993 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
994
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
995 if (defined $self->contig) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
996
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
997 if ($self->contig->isa("Bio::EnsEMBL::RawContig")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
998
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
999 # transform to slice coords from raw contig coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1000 return $self->_transform_to_Slice($slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1001 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1002 elsif ($self->contig->isa( "Bio::EnsEMBL::Slice" ) or $self->contig->isa( "Bio::EnsEMBL::LRGSlice" )) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1003
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1004 # transform to slice coords from other slice coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1005 return $self->_transform_between_Slices($slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1006 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1007 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1008
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1009 # Unknown contig type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1010 $self->throw("Cannot transform unknown contig type @{[$self->contig]}");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1011 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1012 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1013 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1014
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1015 #Can't convert to slice coords without a contig to work with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1016 return $self->throw("Object's contig is not defined - cannot transform");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1017 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1018
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1019 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1020
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1021
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1022 sub _transform_to_Slice {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1023 my ($self, $slice) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1024
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1025 $self->throw("can't transform coordinates of $self without a contig defined")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1026 unless $self->contig;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1027
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1028 unless($self->contig->adaptor) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1029 $self->throw("cannot transform coordinates of $self without adaptor " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1030 "attached to contig");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1031 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1032
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1033 my $dbh = $self->contig->adaptor->db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1034
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1035 my $mapper =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1036 $dbh->get_AssemblyMapperAdaptor->fetch_by_type($slice->assembly_type);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1037 my $rca = $dbh->get_RawContigAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1038
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1039 my @mapped = $mapper->map_coordinates_to_assembly(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1040 $self->contig->dbID,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1041 $self->start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1042 $self->end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1043 $self->strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1044 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1045
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1046 unless (@mapped) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1047 $self->throw("couldn't map $self to Slice");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1048 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1049
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1050 unless (@mapped == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1051 $self->throw("$self should only map to one chromosome - " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1052 "something bad has happened ...");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1053 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1054
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1055 if ($mapped[0]->isa("Bio::EnsEMBL::Mapper::Gap")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1056 $self->warn("feature lies on gap\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1057 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1058 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1059
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1060 if( ! defined $slice->chr_name() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1061 my $slice_adaptor = $slice->adaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1062 %$slice = %{$slice_adaptor->fetch_by_chr_name( $mapped[0]->id() )};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1063 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1064
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1065 # mapped coords are on chromosome - need to convert to slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1066 if($slice->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1067 $self->start ($mapped[0]->start - $slice->chr_start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1068 $self->end ($mapped[0]->end - $slice->chr_start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1069 $self->strand ($mapped[0]->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1070 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1071 $self->start ($slice->chr_end - $mapped[0]->end + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1072 $self->end ($slice->chr_end - $mapped[0]->start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1073 $self->strand ($mapped[0]->strand * -1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1074 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1075
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1076 $self->seqname($mapped[0]->id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1077
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1078 #set the contig to the slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1079 $self->contig($slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1080
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1081 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1082 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1083
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1084
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1085 sub _transform_between_Slices {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1086 my ($self, $to_slice) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1087
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1088 my $from_slice = $self->contig;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1089
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1090 $self->throw("New contig [$to_slice] is not a Bio::EnsEMBL::Slice")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1091 unless ($to_slice->isa("Bio::EnsEMBL::Slice") or $to_slice->isa("Bio::EnsEMBL::LRGSlice") );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1092
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1093 if ((my $c1 = $from_slice->chr_name) ne (my $c2 = $to_slice->chr_name)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1094 $self->warn("Can't transform between chromosomes: $c1 and $c2");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1095 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1096 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1097
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1098 my($start, $end, $strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1099
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1100 #first convert to assembly coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1101 if($from_slice->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1102 $start = $from_slice->chr_start + $self->start - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1103 $end = $from_slice->chr_start + $self->end - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1104 $strand = $self->strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1105 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1106 $start = $from_slice->chr_end - $self->end + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1107 $end = $from_slice->chr_end - $self->start + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1108 $strand = $self->strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1109 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1110
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1111 #now convert to the other slice's coords
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1112 if($to_slice->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1113 $self->start ($start - $to_slice->chr_start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1114 $self->end ($end - $to_slice->chr_start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1115 $self->strand($strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1116 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1117 $self->start ($to_slice->chr_end - $end + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1118 $self->end ($to_slice->chr_end - $start + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1119 $self->strand($strand * -1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1120 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1122 $self->contig($to_slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1124 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1125 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1127
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1128 sub _transform_to_RawContig {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1129 my($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1131 #print STDERR "transforming ".$self." to raw contig coords\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1132 $self->throw("can't transform coordinates of $self without a contig defined")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1133 unless $self->contig;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1135 my $slice = $self->contig;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1137 unless($slice->adaptor) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1138 $self->throw("can't transform coordinates of $self without an adaptor " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1139 "attached to the feature's slice");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1140 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1141
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1142 my $dbh = $slice->adaptor->db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1144 my $mapper =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1145 $dbh->get_AssemblyMapperAdaptor->fetch_by_type($slice->assembly_type);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1146 my $rca = $dbh->get_RawContigAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1148 #first convert the features coordinates to assembly coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1149 my($start, $end, $strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1150 if($slice->strand == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1151 $start = $slice->chr_start + $self->start - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1152 $end = $slice->chr_start + $self->end - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1153 $strand = $self->strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1154 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1155 $start = $slice->chr_end - $self->end + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1156 $end = $slice->chr_end - $self->start + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1157 $strand = $self->strand * -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1158 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1159
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1160 #convert the assembly coordinates to RawContig coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1161 my @mapped = $mapper->map_coordinates_to_rawcontig(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1162 $slice->chr_name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1163 $start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1164 $end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1165 $strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1166 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1168 unless (@mapped) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1169 $self->throw("couldn't map $self");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1170 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1171 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1173 if (@mapped == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1174
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1175 if ($mapped[0]->isa("Bio::EnsEMBL::Mapper::Gap")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1176 $self->warn("feature lies on gap\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1177 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1178 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1180 my $rc = $rca->fetch_by_dbID($mapped[0]->id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1182 $self->start ($mapped[0]->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1183 $self->end ($mapped[0]->end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1184 $self->strand ($mapped[0]->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1185 $self->seqname ($mapped[0]->id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1186 #print STDERR "setting contig to be ".$mapped[0]->id."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1187 $self->contig($rca->fetch_by_dbID($mapped[0]->id));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1189 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1190 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1191 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1193 # more than one object returned from mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1194 # possibly more than one RawContig in region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1196 my (@gaps, @coords);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1198 foreach my $m (@mapped) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1200 if ($m->isa("Bio::EnsEMBL::Mapper::Gap")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1201 push @gaps, $m;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1202 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1203 elsif ($m->isa("Bio::EnsEMBL::Mapper::Coordinate")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1204 push @coords, $m;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1205 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1206 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1207
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1208 # case where only one RawContig maps
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1209 if (@coords == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1211 $self->start ($coords[0]->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1212 $self->end ($coords[0]->end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1213 $self->strand ($coords[0]->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1214 $self->seqname($coords[0]->id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1215 #print STDERR "2 setting contig to be ".$coords[0]->id."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1216 $self->contig ($rca->fetch_by_dbID($coords[0]->id));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1218 $self->warn("Feature [$self] truncated as lies partially on a gap");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1219 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1220 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1221
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1222 unless ($self->is_splittable) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1223 $self->warn("Feature spans >1 raw contig - can't split\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1224 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1225 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1227 my @out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1228 my $obj = ref $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1230 SPLIT: foreach my $map (@mapped) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1232 if ($map->isa("Bio::EnsEMBL::Mapper::Gap")) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1233 $self->warn("piece of evidence lies on gap\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1234 next SPLIT;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1235 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1237 my $feat = $obj->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1238
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1239 $feat->start ($map->start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1240 $feat->end ($map->end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1241 $feat->strand ($map->strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1242 #print STDERR "3 setting contig to be ".$mapped[0]->id."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1243 $feat->contig ($rca->fetch_by_dbID($map->id));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1244 $feat->adaptor($self->adaptor) if $self->adaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1245 $feat->display_label($self->display_label) if($self->can('display_label'));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1246 $feat->analysis($self->analysis);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1247 push @out, $feat;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1248 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1250 return @out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1251 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1252 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1254
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1255 1;