annotate variant_effect_predictor/Bio/EnsEMBL/TopLevelAssemblyMapper.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::TopLevelAssemblyMapper -
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24 Handles mapping between a given coordinate system and the toplevel
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25 pseudo coordinate system.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 $db = Bio::EnsEMBL::DBSQL::DBAdaptor->new(...);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30 $asma = $db->get_AssemblyMapperAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31 $csa = $db->get_CoordSystemAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 my $toplevel = $cs_adaptor->fetch_by_name('toplevel');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34 my $ctg_cs = $cs_adaptor->fetch_by_name('contig');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36 $asm_mapper = $map_adaptor->fetch_by_CoordSystems( $cs1, $cs2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38 # map to toplevel coord system for this region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39 @chr_coords =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 $asm_mapper->map( 'AL30421.1.200.92341', 100, 10000, -1, $ctg_cs );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42 # list toplevel seq_region_ids for this region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 @chr_ids =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44 $asm_mapper->list_ids( 'AL30421.1.200.92341', 1, 1000, -1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45 $ctg_cs );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 The TopLevelAssemblyMapper performs mapping between a provided
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50 coordinate system and the toplevel pseudo cooordinate system. The
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51 toplevel coordinate system is not a real coordinate system, but
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52 represents the highest coordinate system that can be mapped to in a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53 given region. It is only possible to perform unidirectional mapping
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54 using this mapper, because it does not make sense to map from the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55 toplevel coordinate system to another coordinate system.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57 =head1 METHODS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63 use warnings;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65 package Bio::EnsEMBL::TopLevelAssemblyMapper;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 use Bio::EnsEMBL::Utils::Exception qw(throw);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68 use Bio::EnsEMBL::Mapper;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69 use Bio::EnsEMBL::CoordSystem;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70 use Scalar::Util qw(weaken);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72 =head2 new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74 Arg [1] : Bio::EnsEMBL::DBAdaptor $dbadaptor the adaptor for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75 the database this mapper is using.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76 Arg [2] : Toplevel CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77 Arg [3] : Other CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 Description: Creates a new TopLevelAssemblyMapper object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79 Returntype : Bio::EnsEMBL::DBSQL::TopLevelAssemblyMapper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80 Exceptions : throws if any of the 3 arguments are missing/ not
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81 : of the correct type.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82 Caller : Bio::EnsEMBL::DBSQL::AssemblyMapperAdaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88 sub new {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 my ($caller, $adaptor, $toplevel_cs, $other_cs) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91 my $class = ref($caller) || $caller;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 if(!ref($toplevel_cs)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94 throw('Toplevel CoordSystem argument expected.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96 if(!ref($other_cs)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 throw('Other CoordSystem argument expected.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 if(!$toplevel_cs->is_top_level()) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 throw($toplevel_cs->name() . " is not the toplevel CoordSystem.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103 if($other_cs->is_top_level()) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 throw("Other CoordSystem argument should not be toplevel CoordSystem.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107 my $cs_adaptor = $adaptor->db()->get_CoordSystemAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 my $coord_systems = $cs_adaptor->fetch_all();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 my $self = bless {'coord_systems' => $coord_systems,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111 'toplevel_cs' => $toplevel_cs,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112 'other_cs' => $other_cs}, $class;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 $self->adaptor($adaptor);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115 return $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 sub adaptor {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 weaken($self->{'adaptor'} = shift) if(@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 return $self->{'adaptor'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126 =head2 map
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128 Arg [1] : string $frm_seq_region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129 The name of the sequence region to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 Arg [2] : int $frm_start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131 The start of the region to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 Arg [3] : int $frm_end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133 The end of the region to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 Arg [4] : int $strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135 The strand of the region to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136 Arg [5] : Bio::EnsEMBL::CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137 The coordinate system to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138 Arg [6] : if set will do a fastmap
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 Example : @coords = $mapper->map('X', 1_000_000, 2_000_000,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140 1, $chr_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141 Description: Transforms coordinates from one coordinate system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 to another.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143 Returntype : List of Bio::EnsEMBL::Mapper::Coordinate and/or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 Bio::EnsEMBL::Mapper:Gap objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145 Exceptions : thrown if if the specified TO coordinate system is not one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 of the coordinate systems associated with this mapper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 sub map {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154 throw('Incorrect number of arguments.') if(@_ != 6 && @_ != 7);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156 my($self, $frm_seq_region_name, $frm_start, $frm_end, $frm_strand, $frm_cs,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157 $fastmap) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 if($frm_cs->is_top_level()) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160 throw("The toplevel CoordSystem can only be mapped TO, not FROM.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163 my @tmp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164 push @tmp, $frm_seq_region_name;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165 my $seq_region_id = @{$self->adaptor()->seq_regions_to_ids($frm_cs, \@tmp)}[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167 my $mapper = $self->{'mapper'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 my $toplevel_cs = $self->{'toplevel_cs'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 my $other_cs = $self->{'other_cs'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 my $adaptor = $self->adaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 if($frm_cs != $other_cs && !$frm_cs->equals($other_cs)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173 throw("Coordinate system " . $frm_cs->name . " " . $frm_cs->version .
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174 " is neither the assembled nor the component coordinate system " .
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175 " of this AssemblyMapper");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178 my $coord_systems = $self->{'coord_systems'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 my $csa = $self->adaptor()->db()->get_CoordSystemAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 # TBD try to make this more efficient
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185 my $from_rank = $other_cs->rank();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186 foreach my $cs (@$coord_systems) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187 last if($cs->rank >= $from_rank);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189 #check if a mapping path even exists to this coordinate system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 my @mapping_path = @{ $csa->get_mapping_path( $cs, $other_cs ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192 if(@mapping_path) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 # Try to map to this coord system. If we get back any coordinates then
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 # it is our 'toplevel' that we were looking for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196 my $mapper = $adaptor->fetch_by_CoordSystems($other_cs, $cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198 if($fastmap) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 my @result = $mapper->fastmap($frm_seq_region_name, $frm_start, $frm_end,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200 $frm_strand, $frm_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201 return @result if(@result);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 my @coords = $mapper->map($frm_seq_region_name, $frm_start, $frm_end,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204 $frm_strand, $frm_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206 if(@coords > 1 || !$coords[0]->isa('Bio::EnsEMBL::Mapper::Gap')) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207 return @coords;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213 # the toplevel coordinate system for the region requested *is* the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214 # requested region.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 if($fastmap) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216 return ($seq_region_id,$frm_start, $frm_end, $frm_strand, $other_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218 return Bio::EnsEMBL::Mapper::Coordinate->new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 ($seq_region_id,$frm_start,$frm_end, $frm_strand, $other_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223 # for polymorphism with AssemblyMapper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225 =head2 flush
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228 Example : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229 Description: polymorphism with AssemblyMapper, does nothing
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230 Returntype : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 sub flush {}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 =head2 fastmap
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240 Arg [1] : string $frm_seq_region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241 The name of the sequence region to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 Arg [2] : int $frm_start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 The start of the region to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 Arg [3] : int $frm_end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245 The end of the region to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246 Arg [4] : int $strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 The strand of the region to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 Arg [5] : Bio::EnsEMBL::CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249 The coordinate system to transform FROM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250 Example : @coords = $mapper->fastmap('X', 1_000_000, 2_000_000,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 1, $chr_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252 Description: Transforms coordinates from one coordinate system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 to another.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254 Returntype : List of Bio::EnsEMBL::Mapper::Coordinate and/or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255 Bio::EnsEMBL::Mapper:Gap objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256 Exceptions : thrown if if the specified TO coordinate system is not one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 of the coordinate systems associated with this mapper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 sub fastmap {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265 return $self->map(@_,1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268 =head2 assembled_CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271 Example : $cs = $mapper->assembled_CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 Description: Retrieves the assembled CoordSystem from this mapper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 Returntype : Bio::EnsEMBL::CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275 Caller : internal, AssemblyMapperAdaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280 sub assembled_CoordSystem {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282 return $self->{'toplevel_cs'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285 =head2 component_CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288 Example : $cs = $mapper->component_CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289 Description: Retrieves the component CoordSystem from this mapper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290 Returntype : Bio::EnsEMBL::CoordSystem
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292 Caller : internal, AssemblyMapperAdaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297 sub component_CoordSystem {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 return $self->{'other_cs'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303 sub _list {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304 my($self, $frm_seq_region_name, $frm_start, $frm_end, $frm_cs, $seq_regions) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306 my $mapper = $self->{'mapper'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307 my $toplevel_cs = $self->{'toplevel_cs'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 my $other_cs = $self->{'other_cs'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309 my $adaptor = $self->adaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311 if($frm_cs->is_top_level()) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 throw("The toplevel CoordSystem can only be mapped TO, not FROM.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314 if($frm_cs != $other_cs && !$frm_cs->equals($other_cs)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315 throw("Coordinate system " . $frm_cs->name . " " . $frm_cs->version .
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316 " is neither the assembled nor the component coordinate system " .
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 " of this AssemblyMapper");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320 my $coord_systems = $self->{'coord_systems'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321 my $csa = $self->adaptor()->db()->get_CoordSystemAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324 # TBD try to make this more efficient
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326 my $from_rank = $other_cs->rank();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327 foreach my $cs (@$coord_systems) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 last if($cs->rank >= $from_rank);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330 #check if a mapping path even exists to this coordinate system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331 my @mapping_path = @{ $csa->get_mapping_path( $cs, $other_cs ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333 if(@mapping_path) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335 # Try to map to this coord system. If we get back any coordinates then
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 # it is our 'toplevel' that we were looking for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337 my $mapper = $adaptor->fetch_by_CoordSystems($other_cs, $cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 my @result;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341 my @tmp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342 push @tmp, $frm_seq_region_name;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 my $seq_region_id = @{$self->adaptor()->seq_regions_to_ids($frm_cs, \@tmp)}[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 if($seq_regions) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 @result = $mapper->list_seq_regions($frm_seq_region_name, $frm_start,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 $frm_end, $frm_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 @result = $mapper->list_ids($frm_seq_region_name, $frm_start,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350 $frm_end, $frm_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 return @result if(@result);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357 # the toplevel coordinate system for the region requested *is* the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358 return ($frm_seq_region_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361 # requested region.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 if($seq_regions) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363 return ($frm_seq_region_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366 #this seems a bit silly and inefficient, but it is probably never
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367 #called anyway.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368 my $slice_adaptor = $adaptor->db()->get_SliceAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369 my $slice = $slice_adaptor->fetch_by_region($other_cs->name(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370 $frm_seq_region_name,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371 undef,undef,undef,$other_cs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372 return ($slice_adaptor->get_seq_region_id($slice));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377 =head2 list_seq_regions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379 Arg [1] : string $frm_seq_region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 The name of the sequence region of interest
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381 Arg [2] : int $frm_start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382 The start of the region of interest
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383 Arg [3] : int $frm_end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384 The end of the region to transform of interest
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 Arg [5] : Bio::EnsEMBL::CoordSystem $frm_cs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 The coordinate system to obtain overlapping ids of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387 Example : foreach $id ($asm_mapper->list_ids('X',1,1000,$ctg_cs)) {...}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388 Description: Retrieves a list of overlapping seq_region names
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389 of another coordinate system. This is the same as the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390 list_ids method but uses seq_region names rather internal ids
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391 Returntype : List of strings
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398 sub list_seq_regions {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399 throw('Incorrect number of arguments.') if(@_ != 5);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400 return _list(@_,1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404 =head2 list_ids
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406 Arg [1] : string $frm_seq_region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 The name of the sequence region of interest.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408 Arg [2] : int $frm_start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409 The start of the region of interest
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410 Arg [3] : int $frm_end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411 The end of the region to transform of interest
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412 Arg [5] : Bio::EnsEMBL::CoordSystem $frm_cs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413 The coordinate system to obtain overlapping ids of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414 Example : foreach $id ($asm_mapper->list_ids('X',1,1000,$chr_cs)) {...}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415 Description: Retrieves a list of overlapping seq_region internal identifiers
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416 of another coordinate system. This is the same as the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417 list_seq_regions method but uses internal identfiers rather
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 than seq_region strings
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419 Returntype : List of ints
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420 Exceptions : thrown if the from CoordSystem is the toplevel coord system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 thrown if the from CoordSystem is not the one used in the mapper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427 sub list_ids {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
428 throw('Incorrect number of arguments.') if(@_ != 5);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
429 return _list(@_,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
430 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
431
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
432
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
433
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
434
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
435
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
436 1;