annotate variant_effect_predictor/Bio/EnsEMBL/SeqFeature.pm @ 0:1f6dce3d34e0

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