annotate variant_effect_predictor/Bio/Coordinate/Collection.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: Collection.pm,v 1.11.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::Collection
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::Collection - Noncontinuous 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 # create Bio::Coordinate::Pairs or other Bio::Coordinate::MapperIs somehow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 $pair1; $pair2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 # add them into a Collection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 $collection = Bio::Coordinate::Collection->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 $collection->add_mapper($pair1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 $collection->add_mapper($pair2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # create a position and map it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 $pos = Bio::Location::Simple->new (-start => 5, -end => 9 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 $res = $collection->map($pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $res->match->start == 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 $res->match-> == 5;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 # if mapping is many to one (*>1) or many-to-many (*>*)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 # you have to give seq_id not get unrelevant entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 $pos = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 (-start => 5, -end => 9 -seq_id=>'clone1');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 Generic, context neutral mapper to provide coordinate transforms
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 between two B<disjoint> coordinate systems. It brings into Bioperl the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 functionality from Ewan Birney's Bio::EnsEMBL::Mapper ported into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 current bioperl.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 This class is aimed for representing mapping between whole chromosomes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 and contigs, or between contigs and clones, or between sequencing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 reads and assembly. The submaps are automatically sorted, so they can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 be added in any order.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 To map coordinates to the other direction, you have to swap() the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 collection. Keeping track of the direction and ID restrictions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 are left to the calling code.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 Bioperl modules. Send your comments and suggestions preferably to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 Bioperl mailing lists Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 =head1 AUTHOR - Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Email: heikki@ebi.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 EMBL Outstation, European Bioinformatics Institute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Wellcome Trust Genome Campus, Hinxton
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Cambs. CB10 1SD, United Kingdom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Ewan Birney, birney@ebi.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 package Bio::Coordinate::Collection;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 use vars qw(@ISA );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 # Object preamble - inherits from Bio::Root::Root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 use Bio::Coordinate::MapperI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 use Bio::Coordinate::Result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 use Bio::Coordinate::Result::Gap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 @ISA = qw(Bio::Root::Root Bio::Coordinate::MapperI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 $self->{'_mappers'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 my($in, $out, $strict, $mappers, $return_match) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 $self->_rearrange([qw(IN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 OUT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 STRICT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 MAPPERS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 RETURN_MATCH
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 )],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 $in && $self->in($in);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 $out && $self->out($out);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 $mappers && $self->mappers($mappers);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 $return_match && $self->return_match('return_match');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 return $self; # success - we hope!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 =head2 add_mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Title : add_mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Usage : $obj->add_mapper($mapper)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Function: Pushes one Bio::Coodinate::MapperI into the list of mappers.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Sets _is_sorted() to false.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Returns : 1 when succeeds, 0 for failure.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Args : mapper object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 sub add_mapper {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 $self->throw("Is not a Bio::Coordinate::MapperI but a [$self]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 unless defined $value && $value->isa('Bio::Coordinate::MapperI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 # test pair range lengths
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 $self->warn("Coodinates in pair [". $value . ":" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 $value->in->seq_id . "/". $value->in->seq_id .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 "] are not right.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 unless $value->test;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $self->_is_sorted(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 push(@{$self->{'_mappers'}},$value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 =head2 mappers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 Title : mappers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 Usage : $obj->mappers();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 Function: Returns or sets a list of mappers.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 Returns : array of mappers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 Args : array of mappers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 sub mappers{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 if (@args) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $self->throw("Is not a Bio::Coordinate::MapperI but a [$self]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 unless defined $args[0] && $args[0]->isa('Bio::Coordinate::MapperI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 push(@{$self->{'_mappers'}}, @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 return @{$self->{'_mappers'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 =head2 each_mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Title : each_mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 Usage : $obj->each_mapper();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 Function: Returns a list of mappers.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Returns : list of mappers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 sub each_mapper{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 return @{$self->{'_mappers'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 =head2 swap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Title : swap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Usage : $obj->swap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Function: Swap the direction of mapping;input <-> output
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Returns : 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 sub swap {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 use Data::Dumper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 $self->sort unless $self->_is_sorted;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 map {$_->swap;} @{$self->{'_mappers'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 ($self->{'_in_ids'}, $self->{'_out_ids'}) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 ($self->{'_out_ids'}, $self->{'_in_ids'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 =head2 test
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Title : test
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Usage : $obj->test;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Function: test that both components of all pairs are of the same length.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 Ran automatically.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 sub test {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my $res = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 foreach my $mapper ($self->each_mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $self->warn("Coodinates in pair [". $mapper . ":" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 $mapper->in->seq_id . "/". $mapper->in->seq_id .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 "] are not right.") && ($res = 0)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 unless $mapper->test;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 $res;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 =head2 map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 Title : map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 Usage : $newpos = $obj->map($pos);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 Function: Map the location from the input coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 to a new value in the output coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Returns : new value in the output coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Args : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 sub map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $self->throw("Need to pass me a value.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 unless defined $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $self->throw("I need a Bio::Location, not [$value]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 unless $value->isa('Bio::LocationI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $self->throw("No coordinate mappers!")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 unless $self->each_mapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 $self->sort unless $self->_is_sorted;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 if ($value->isa("Bio::Location::SplitLocationI")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my $result = new Bio::Coordinate::Result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 foreach my $loc ( $value->sub_Location(1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 my $res = $self->_map($loc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 map { $result->add_sub_Location($_) } $res->each_Location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 return $self->_map($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 =head2 _map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 Title : _map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 Usage : $newpos = $obj->_map($simpleloc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Function: Internal method that does the actual mapping. Called multiple times
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 by map() if the location to be mapped is a split location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 Returns : new location in the output coordinate system or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 Args : Bio::Location::Simple
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 sub _map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 my $result = Bio::Coordinate::Result->new(-is_remote=>1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 IDMATCH: {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 # bail out now we if are forcing the use of an ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 # and it is not in this collection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 last IDMATCH if defined $value->seq_id &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 ! $self->{'_in_ids'}->{$value->seq_id};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 foreach my $pair ($self->each_mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 # if we are limiting input to a certain ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 next if defined $value->seq_id && $value->seq_id ne $pair->in->seq_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 # if we haven't even reached the start, move on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 next if $pair->in->end < $value->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 # if we have over run, break
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 last if $pair->in->start > $value->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 my $subres = $pair->map($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $result->add_result($subres);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $result->seq_id($result->match->seq_id) if $result->match;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 unless ($result->each_Location) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 #build one gap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 my $gap = Bio::Location::Simple->new(-start => $value->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 -end => $value->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 -strand => $value->strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 -location_type => $value->location_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 $gap->seq_id($value->seq_id) if defined $value->seq_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 bless $gap, 'Bio::Coordinate::Result::Gap';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $result->seq_id($value->seq_id) if defined $value->seq_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $result->add_sub_Location($gap);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 =head2 sort
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 Title : sort
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Usage : $obj->sort;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Function: Sort function so that all mappings are sorted by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 input coordinate start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Returns : 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 sub sort{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 @{$self->{'_mappers'}} = map { $_->[0] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 sort { $a->[1] <=> $b->[1] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 map { [ $_, $_->in->start] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 @{$self->{'_mappers'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 #create hashes for sequence ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 $self->{'_in_ids'} = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 $self->{'_out_ids'} = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 foreach ($self->each_mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 $self->{'_in_ids'}->{$_->in->seq_id} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 $self->{'_out_ids'}->{$_->out->seq_id} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 $self->_is_sorted(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 =head2 _is_sorted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Title : _is_sorted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Usage : $newpos = $obj->_is_sorted;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Function: toggle for whether the (internal) coodinate mapper data are sorted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 Args : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 sub _is_sorted{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 $self->{'_is_sorted'} = 1 if defined $value && $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 return $self->{'_is_sorted'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405