annotate variant_effect_predictor/Bio/Coordinate/Pair.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: Pair.pm,v 1.9.2.1 2003/02/20 05:11:45 heikki Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # bioperl module for Bio::Coordinate::Pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::Coordinate::Pair - Continuous match between two coordinate sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 use Bio::Location::Simple;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 use Bio::Coordinate::Pair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 my $match1 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 (-seq_id => 'propeptide', -start => 21, -end => 40, -strand=>1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 my $match2 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 (-seq_id => 'peptide', -start => 1, -end => 20, -strand=>1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 my $pair = Bio::Coordinate::Pair->new(-in => $match1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 -out => $match2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 # location to match
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $pos = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 (-start => 25, -end => 25, -strand=> -1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 # results are in a Bio::Coordinate::Result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 # they can be Matches and Gaps; are Bio::LocationIs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 $res = $pair->map($pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 $res->isa('Bio::Coordinate::Result');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 $res->each_match == 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $res->each_gap == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 $res->each_Location == 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 $res->match->start == 5;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 $res->match->end == 5;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 $res->match->strand == -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 $res->match->seq_id eq 'peptide';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 This class represents a one continuous match between two coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 systems represented by Bio::Location::Simple objects. The relationship
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 is directed and reversible. It implements methods to ensure internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 consistency, and map continuous and split locations from one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 coordinate system to another.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 The map() method returns Bio::Coordinate::Results with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Bio::Coordinate::Result::Gaps. The calling code have to deal (process
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 or ignore) them.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Bioperl modules. Send your comments and suggestions preferably to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Bioperl mailing lists Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 =head1 AUTHOR - Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Email: heikki@ebi.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 EMBL Outstation, European Bioinformatics Institute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 Wellcome Trust Genome Campus, Hinxton
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Cambs. CB10 1SD, United Kingdom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 Additional contributors names and emails here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 package Bio::Coordinate::Pair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 use vars qw(@ISA );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 # Object preamble - inherits from Bio::Root::Root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 use Bio::Coordinate::MapperI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 use Bio::Coordinate::Result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 use Bio::Coordinate::Result::Match;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 use Bio::Coordinate::Result::Gap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 @ISA = qw(Bio::Root::Root Bio::Coordinate::MapperI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my($in, $out) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 $self->_rearrange([qw(IN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 OUT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 )],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 $in && $self->in($in);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $out && $self->out($out);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 return $self; # success - we hope!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 =head2 in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 Title : in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 Usage : $obj->in('peptide');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 Function: Set and read the input coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Returns : value of input system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Args : new value (optional), Bio::LocationI
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 in {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 $self->throw("Not a valid input Bio::Location [$value] ")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 unless $value->isa('Bio::LocationI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 $self->{'_in'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 return $self->{'_in'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 =head2 out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Title : out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Usage : $obj->out('peptide');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Function: Set and read the output coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 Returns : value of output system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 Args : new value (optional), Bio::LocationI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 sub out {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->throw("Not a valid output coordinate Bio::Location [$value] ")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 unless $value->isa('Bio::LocationI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 $self->{'_out'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 return $self->{'_out'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 =head2 swap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 Title : swap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Usage : $obj->swap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Function: Swap the direction of mapping; input <-> output
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 Returns : 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 sub swap {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 ($self->{'_in'}, $self->{'_out'}) = ($self->{'_out'}, $self->{'_in'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 =head2 strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Title : strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Usage : $obj->strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Function: Get strand value for the pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Returns : ( 1 | 0 | -1 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 sub strand {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 $self->warn("Outgoing coordinates are not defined")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 unless $self->out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 $self->warn("Incoming coordinates are not defined")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 unless $self->in;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 return $self->in->strand * $self->out->strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 =head2 test
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 Title : test
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 Usage : $obj->test;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 Function: test that both components are of the same length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Returns : ( 1 | undef )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 sub test {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 $self->warn("Outgoing coordinates are not defined")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 unless $self->out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 $self->warn("Incoming coordinates are not defined")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 unless $self->in;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 1 if $self->in->end - $self->in->start == $self->out->end - $self->out->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 =head2 map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 Title : map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 Usage : $newpos = $obj->map($pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Function: Map the location from the input coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 to a new value in the output coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 Returns : new Bio::LocationI in the output coordinate system or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 Args : Bio::LocationI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 sub map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 $self->throw("Need to pass me a value.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 unless defined $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $self->throw("I need a Bio::Location, not [$value]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 unless $value->isa('Bio::LocationI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 $self->throw("Input coordinate system not set")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 unless $self->in;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 $self->throw("Output coordinate system not set")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 unless $self->out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 if ($value->isa("Bio::Location::SplitLocationI")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 my $result = new Bio::Coordinate::Result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 my $split = new Bio::Location::Split(-seq_id=>$self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 foreach my $loc ( $value->sub_Location(1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 my $res = $self->_map($loc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 map { $result->add_sub_Location($_) } $res->each_Location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 return $self->_map($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 =head2 _map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 Title : _map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 Usage : $newpos = $obj->_map($simpleloc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 Function: Internal method that does the actual mapping. Called
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 multiple times by map() if the location to be mapped is a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 split location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 Returns : new location in the output coordinate system or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 Args : Bio::Location::Simple
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 sub _map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 my $result = new Bio::Coordinate::Result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 my $offset = $self->in->start - $self->out->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my $start = $value->start - $offset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 my $end = $value->end - $offset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 my $match = Bio::Location::Simple->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 $match->location_type($value->location_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $match->strand($self->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 #within
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 # |-------------------------|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 # |-|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 if ($start >= $self->out->start and $end <= $self->out->end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $match->seq_id($self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $result->seq_id($self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 if ($self->strand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $match->start($start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $match->end($end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $match->start($self->out->end - $end + $self->out->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $match->end($self->out->end - $start + $self->out->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 if ($value->strand) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $match->strand($match->strand * $value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $result->strand($match->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 bless $match, 'Bio::Coordinate::Result::Match';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $result->add_sub_Location($match);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 #out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 # |-------------------------|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 # |-| or |-|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 elsif ( ($end < $self->out->start or $start > $self->out->end ) or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 #insertions just outside the range need special settings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 ($value->location_type eq 'IN-BETWEEN' and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 ($end = $self->out->start or $start = $self->out->end))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $match->seq_id($self->in->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $result->seq_id($self->in->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 $match->start($value->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $match->end($value->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $match->strand($value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 bless $match, 'Bio::Coordinate::Result::Gap';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 $result->add_sub_Location($match);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 #partial I
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 # |-------------------------|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 # |-----|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 elsif ($start < $self->out->start and $end <= $self->out->end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $result->seq_id($self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 if ($value->strand) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $match->strand($match->strand * $value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 $result->strand($match->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 my $gap = Bio::Location::Simple->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 $gap->start($value->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 $gap->end($self->in->start - 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $gap->strand($value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 $gap->seq_id($self->in->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 bless $gap, 'Bio::Coordinate::Result::Gap';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 $result->add_sub_Location($gap);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 # match
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 $match->seq_id($self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 if ($self->strand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 $match->start($self->out->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 $match->end($end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 $match->start($self->out->end - $end + $self->out->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 $match->end($self->out->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 bless $match, 'Bio::Coordinate::Result::Match';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 $result->add_sub_Location($match);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 #partial II
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 # |-------------------------|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 # |------|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 elsif ($start >= $self->out->start and $end > $self->out->end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 $match->seq_id($self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 $result->seq_id($self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 if ($value->strand) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 $match->strand($match->strand * $value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 $result->strand($match->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 if ($self->strand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $match->start($start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 $match->end($self->out->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 $match->start($self->out->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $match->end($self->out->end - $start + $self->out->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 bless $match, 'Bio::Coordinate::Result::Match';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 $result->add_sub_Location($match);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 my $gap = Bio::Location::Simple->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $gap->start($self->in->end + 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 $gap->end($value->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $gap->strand($value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 $gap->seq_id($self->in->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 bless $gap, 'Bio::Coordinate::Result::Gap';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 $result->add_sub_Location($gap);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 #enveloping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 # |-------------------------|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 # |---------------------------------|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 elsif ($start < $self->out->start and $end > $self->out->end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 $result->seq_id($self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 if ($value->strand) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 $match->strand($match->strand * $value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $result->strand($match->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 # gap1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 my $gap1 = Bio::Location::Simple->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $gap1->start($value->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 $gap1->end($self->in->start - 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 $gap1->strand($value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 $gap1->seq_id($self->in->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 bless $gap1, 'Bio::Coordinate::Result::Gap';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 $result->add_sub_Location($gap1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 # match
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 $match->seq_id($self->out->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 $match->start($self->out->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 $match->end($self->out->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 bless $match, 'Bio::Coordinate::Result::Match';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 $result->add_sub_Location($match);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 # gap2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 my $gap2 = Bio::Location::Simple->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 $gap2->start($self->in->end + 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 $gap2->end($value->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 $gap2->strand($value->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 $gap2->seq_id($self->in->seq_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 bless $gap2, 'Bio::Coordinate::Result::Gap';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 $result->add_sub_Location($gap2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 $self->throw("Should not be here!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 1;