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

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::ChainedAssemblyMapper -
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 Handles mapping between two coordinate systems using the information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 stored in the assembly table
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 $db = Bio::EnsEMBL::DBSQL::DBAdaptor->new(...);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 $asma = $db->get_AssemblyMapperAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 $csa = $db->get_CoordSystemAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 my $chr_cs = $cs_adaptor->fetch_by_name( 'chromosome', 'NCBI33' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 my $cln_cs = $cs_adaptor->fetch_by_name('clone');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 $asm_mapper = $map_adaptor->fetch_by_CoordSystems( $cs1, $cs2 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 # Map to contig coordinate system from chromosomal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 @cln_coords =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 $asm_mapper->map( 'X', 1_000_000, 2_000_000, 1, $chr_cs );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 # Map to chromosome coordinate system from contig
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 @chr_coords =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 $asm_mapper->map( 'AL30421.1', 100, 10000, -1, $cln_cs );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 # List contig names for a region of chromsome
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 @cln_ids = $asm_mapper->list_ids( '13', 1_000_000, 1, $chr_cs );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 # List chromosome names for a contig region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 @chr_ids =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 $asm_mapper->list_ids( 'AL30421.1', 1, 1000, -1, $cln_cs );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 The ChainedAssemblyMapper is an extension of the regular AssemblyMapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 that allows for mappings between coordinate systems that require
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 multi-step mapping. For example if explicit mappings are defined
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 between the following coordinate systems,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 chromosome <-> contig
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 contig <-> clone
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 the ChainedAssemblyMapper would be able to perform implicit mapping
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 between the chromosome and clone coordinate systems. This should be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 transparent to the user of this module, and users should not even
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 realise that they are using a chained assembly mapper as opposed to a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 normal assembly mapper.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 my $FIRST = 'first';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 my $MIDDLE = 'middle';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 my $LAST = 'last';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 package Bio::EnsEMBL::ChainedAssemblyMapper;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 use warnings;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 use integer; #use proper arithmetic bitshifts
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 use Bio::EnsEMBL::Mapper;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 use Bio::EnsEMBL::Mapper::RangeRegistry;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 use Bio::EnsEMBL::Utils::Exception qw(throw deprecate);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 use Scalar::Util qw(weaken);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 #2^20 = approx 10^6
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 my $CHUNKFACTOR = 20;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 # max size of the pair cache in the mappers
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 my $DEFAULT_MAX_PAIR_COUNT = 6000;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 Arg [1] : Bio::EnsEMBL::DBSQL::AssemblyMapperAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 Arg [2] : Bio::EnsEMBL::CoordSystem $src_cs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 Arg [3] : Bio::EnsEMBL::CoordSystem $int_cs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 Arg [4] : Bio::EnsEMBL::CoordSystem $dst_cs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 Example : Should use AssemblyMapperAdaptor->fetch_by_CoordSystems
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 Description: Creates a new AssemblyMapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 Returntype : Bio::EnsEMBL::DBSQL::AssemblyMapperAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 Exceptions : thrown if wrong number of coord_systems are provided
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 Caller : AssemblyMapperAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 my ($caller,$adaptor,@coord_systems) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 my $class = ref($caller) || $caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 my $self = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 bless $self, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 $self->adaptor($adaptor);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 if(@coord_systems != 3) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 throw('ChainedMapper can only map between 3 coordinate systems. ' .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 scalar(@coord_systems) . ' were provided');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 $adaptor->cache_seq_ids_with_mult_assemblys();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 # Set the component, intermediate and assembled coordinate systems
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 $self->{'first_cs'} = $coord_systems[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 $self->{'mid_cs'} = $coord_systems[1];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 $self->{'last_cs'} = $coord_systems[2];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 #maps between first and intermediate coord systems
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $self->{'first_mid_mapper'} = Bio::EnsEMBL::Mapper->new($FIRST, $MIDDLE);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 #maps between last and intermediate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 $self->{'last_mid_mapper'} = Bio::EnsEMBL::Mapper->new($LAST, $MIDDLE);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 #mapper that is actually used and is loaded by the mappings generated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 #by the other two mappers
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 $self->{'first_last_mapper'} = Bio::EnsEMBL::Mapper->new($FIRST, $LAST,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 $coord_systems[0],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 $coord_systems[2]);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 #need registries to keep track of what regions are registered in source
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 #and destination coordinate systems
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 $self->{'first_registry'} = Bio::EnsEMBL::Mapper::RangeRegistry->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 $self->{'last_registry'} = Bio::EnsEMBL::Mapper::RangeRegistry->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 $self->{'max_pair_count'} = $DEFAULT_MAX_PAIR_COUNT;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 =head2 max_pair_count
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 Arg [1] : (optional) int $max_pair_count
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 Example : $mapper->max_pair_count(100000)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 Description: Getter/Setter for the number of mapping pairs allowed in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 internal cache. This can be used to override the default value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 (6000) to tune the performance and memory usage for certain
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 scenarios. Higher value = bigger cache, more memory used
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 sub max_pair_count {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 $self->{'max_pair_count'} = shift if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 return $self->{'max_pair_count'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 =head2 register_all
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Example : $mapper->max_pair_count(10e6);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 $mapper->register_all();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Description: Pre-registers all assembly information in this mapper. The
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 cache size should be set to a sufficiently large value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 so that all of the information can be stored. This method
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 is useful when *a lot* of mapping will be done in regions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 which are distributed around the genome. After registration
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 the mapper will consume a lot of memory but will not have to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 perform any SQL and will be faster.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 Caller : specialised programs doing a lot of mapping
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 sub register_all {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 $self->adaptor->register_all_chained($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 sub flush {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 $self->{'first_registry'}->flush();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 $self->{'last_registry'}->flush();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 $self->{'first_mid_mapper'}->flush();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 $self->{'last_mid_mapper'}->flush();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 $self->{'first_last_mapper'}->flush();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 =head2 size
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 Example : $num_of_pairs = $mapper->size();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 Description: return the number of pairs currently stored.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 sub size {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 return ( $self->{'first_last_mapper'}->{'pair_count'} +
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 $self->{'last_mid_mapper'}->{'pair_count'} +
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 $self->{'first_mid_mapper'}->{'pair_count'} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 =head2 map
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 Arg [1] : string $frm_seq_region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 The name of the sequence region to transform FROM
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 Arg [2] : int $frm_start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 The start of the region to transform FROM
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 Arg [3] : int $frm_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 The end of the region to transform FROM
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Arg [4] : int $strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 The strand of the region to transform FROM
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 Arg [5] : Bio::EnsEMBL::CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 The coordinate system to transform FROM
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 Arg [6] : (optional) fastmap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 Arg [7] : (optional) Bio::Ensembl::Slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 The slice to transform TO
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 Example : @coords = $asm_mapper->map('X', 1_000_000, 2_000_000,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 1, $chr_cs);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 Description: Transforms coordinates from one coordinate system
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 to another.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 Returntype : List of Bio::EnsEMBL::Mapper::Coordinate and/or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 Bio::EnsEMBL::Mapper:Gap objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 Exceptions : thrown if the specified TO coordinat system is not one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 of the coordinate systems associated with this assembly mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 sub map {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 throw('Incorrect number of arguments.') if(@_ < 6);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 my ($self, $frm_seq_region_name, $frm_start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 $frm_end, $frm_strand, $frm_cs, $fastmap, $to_slice) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 my $mapper = $self->{'first_last_mapper'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 my $first_cs = $self->{'first_cs'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 my $last_cs = $self->{'last_cs'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 my $is_insert = ($frm_end + 1 == $frm_start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 my $frm;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 my $registry;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 my @tmp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 push @tmp, $frm_seq_region_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 my $seq_region_id = @{$self->adaptor()->seq_regions_to_ids($frm_cs, \@tmp)}[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 #speed critical section:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 #try to do simple pointer equality comparisons of the coord system objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 #first since this is likely to work most of the time and is much faster
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 #than a function call
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 if($frm_cs == $first_cs ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 ($frm_cs != $last_cs && $frm_cs->equals($first_cs))) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 $frm = $FIRST;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 $registry = $self->{'first_registry'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 } elsif($frm_cs == $last_cs || $frm_cs->equals($last_cs)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 $frm = $LAST;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 $registry = $self->{'last_registry'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 throw("Coordinate system " . $frm_cs->name . " " . $frm_cs->version .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 " is neither the first nor the last coordinate system " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 " of this ChainedAssemblyMapper");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 #the minimum area we want to register if registration is necessary is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 #about 1MB. Break requested ranges into chunks of 1MB and then register
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 #this larger region if we have a registry miss.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 #use bitwise shift for fast and easy integer multiplication and division
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 my ($min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 if($is_insert) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 $min_start = (($frm_end >> $CHUNKFACTOR) << $CHUNKFACTOR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 $min_end = ((($frm_start >> $CHUNKFACTOR) + 1) << $CHUNKFACTOR) - 1 ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 $min_start = (($frm_start >> $CHUNKFACTOR) << $CHUNKFACTOR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 $min_end = ((($frm_end >> $CHUNKFACTOR) + 1) << $CHUNKFACTOR) - 1 ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 #get a list of ranges in the requested region that have not been registered,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 #and register them at the same
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 my $ranges;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 if($is_insert) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 $ranges = $registry->check_and_register($seq_region_id, $frm_end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 $frm_start, $min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 $ranges = $registry->check_and_register($seq_region_id, $frm_start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 $frm_end, $min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 if(defined($ranges)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 if( $self->size() > $self->{'max_pair_count'} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 $self->flush();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 if($is_insert) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 $ranges = $registry->check_and_register
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 ($seq_region_id, $frm_end, $frm_start, $min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 $ranges = $registry->check_and_register
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 ($seq_region_id, $frm_start, $frm_end, $min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 $self->adaptor->register_chained($self,$frm,$seq_region_id,$ranges,$to_slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 if($fastmap) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 return $mapper->fastmap($seq_region_id, $frm_start, $frm_end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 $frm_strand, $frm);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 return $mapper->map_coordinates($seq_region_id, $frm_start, $frm_end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 $frm_strand, $frm);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 sub fastmap {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 return $self->map(@_,1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 =head2 list_ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 Arg [1] : string $frm_seq_region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 The name of the sequence region of interest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 Arg [2] : int $frm_start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 The start of the region of interest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 Arg [3] : int $frm_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 The end of the region to transform of interest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 Arg [5] : Bio::EnsEMBL::CoordSystem $frm_cs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 The coordinate system to obtain overlapping ids of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 Example : foreach $id ($asm_mapper->list_ids('X',1,1000,$chr_cs)) {...}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 Description: Retrieves a list of overlapping seq_region internal identifiers
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 of another coordinate system. This is the same as the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 list_seq_regions method but uses internal identfiers rather
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 than seq_region strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 Returntype : List of ints
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 sub list_ids {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 throw('Incorrect number of arguments.') if(@_ != 5);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 my($self, $frm_seq_region_name, $frm_start, $frm_end, $frm_cs) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 my $is_insert = ($frm_start == $frm_end + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 #the minimum area we want to register if registration is necessary is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 #about 1MB. Break requested ranges into chunks of 1MB and then register
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 #this larger region if we have a registry miss.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 #use bitwise shift for fast and easy integer multiplication and division
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 my ($min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 if($is_insert) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 $min_start = (($frm_end >> $CHUNKFACTOR) << $CHUNKFACTOR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 $min_end = ((($frm_start >> $CHUNKFACTOR) + 1) << $CHUNKFACTOR) - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 $min_start = (($frm_start >> $CHUNKFACTOR) << $CHUNKFACTOR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 $min_end = ((($frm_end >> $CHUNKFACTOR) + 1) << $CHUNKFACTOR) - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 my @tmp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 push @tmp, $frm_seq_region_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 my $seq_region_id = @{$self->adaptor()->seq_regions_to_ids($frm_cs, \@tmp)}[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 if($frm_cs->equals($self->{'first_cs'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 my $registry = $self->{'first_registry'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 my $ranges;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 if($is_insert) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 $ranges = $registry->check_and_register
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 ($seq_region_id, $frm_end, $frm_start, $min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 $ranges = $registry->check_and_register
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 ($seq_region_id, $frm_start, $frm_end, $min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 if(defined($ranges)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 $self->adaptor->register_chained($self,$FIRST,$seq_region_id,$ranges);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 return map {$_->to()->id()}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 $self->first_last_mapper()->list_pairs($seq_region_id, $frm_start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 $frm_end, $FIRST);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 } elsif($frm_cs->equals($self->{'last_cs'})) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 my $registry = $self->{'last_registry'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 my $ranges;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 if($is_insert) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 $ranges = $registry->check_and_register
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 ($seq_region_id, $frm_end, $frm_start, $min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 $ranges = $registry->check_and_register
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 ($seq_region_id, $frm_start, $frm_end, $min_start, $min_end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 if(defined($ranges)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 $self->adaptor->register_chained($self,$LAST,$seq_region_id,$ranges);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 return map {$_->from()->id()}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 $self->first_last_mapper()->list_pairs($seq_region_id, $frm_start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 $frm_end, $LAST);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 throw("Coordinate system " . $frm_cs->name . " " . $frm_cs->version .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 " is neither the first nor the last coordinate system " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 " of this ChainedAssemblyMapper");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 =head2 list_seq_regions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 Arg [1] : string $frm_seq_region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 The name of the sequence region of interest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 Arg [2] : int $frm_start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 The start of the region of interest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 Arg [3] : int $frm_end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 The end of the region to transform of interest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 Arg [5] : Bio::EnsEMBL::CoordSystem $frm_cs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 The coordinate system to obtain overlapping ids of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 Example : foreach $id ($asm_mapper->list_ids('X',1,1000,$ctg_cs)) {...}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 Description: Retrieves a list of overlapping seq_region internal identifiers
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 of another coordinate system. This is the same as the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 list_ids method but uses seq_region names rather internal ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 Returntype : List of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 sub list_seq_regions {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 throw('Incorrect number of arguments.') if(@_ != 5);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 my($self, $frm_seq_region, $frm_start, $frm_end, $frm_cs) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 #retrieve the seq_region names
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 my @seq_regs =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 $self->list_ids($frm_seq_region,$frm_start,$frm_end,$frm_cs);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 #The seq_regions are from the 'to' coordinate system not the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 #from coordinate system we used to obtain them
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 my $to_cs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 if($frm_cs->equals($self->first_CoordSystem())) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 $to_cs = $self->last_CoordSystem();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497 $to_cs = $self->first_CoordSystem();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 #convert them to names
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 return @{$self->adaptor()->seq_ids_to_regions(\@seq_regs)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 =head2 first_last_mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 Example : $mapper = $cam->first_last_mapper();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 Description: return the mapper.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 Returntype : Bio::EnsEMBL::Mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 sub first_last_mapper {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 return $self->{'first_last_mapper'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 =head2 first_middle_mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 Example : $mapper = $cam->first_middle_mapper();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 Description: return the mapper.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 Returntype : Bio::EnsEMBL::Mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 sub first_middle_mapper {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 return $self->{'first_mid_mapper'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 =head2 last_middle_mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 Example : $mapper = $cam->last_middle_mapper();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 Description: return the mapper.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 Returntype : Bio::EnsEMBL::Mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 sub last_middle_mapper {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 return $self->{'last_mid_mapper'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 =head2 first_CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 Example : $coordsys = $cam->first_CoordSystem();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 Description: return the CoordSystem.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 Returntype : Bio::EnsEMBL::CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 sub first_CoordSystem {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 return $self->{'first_cs'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 =head2 middle_CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 Example : $coordsys = $cam->middle_CoordSystem();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 Description: return the CoordSystem.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 Returntype : Bio::EnsEMBL::CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 sub middle_CoordSystem {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 return $self->{'mid_cs'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 =head2 last_CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600 Example : $coordsys = $cam->last_CoordSystem();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 Description: return the CoordSystem.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602 Returntype : Bio::EnsEMBL::CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 sub last_CoordSystem {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 return $self->{'last_cs'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 =head2 first_registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 Example : $rr = $cam->first_registry();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 Description: return the Registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619 Returntype : Bio::EnsEMBL::Mapper::RangeRegistry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626 sub first_registry {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 return $self->{'first_registry'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 =head2 last_registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 Example : $rr = $cam->last_registry();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 Description: return the Registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 Returntype : Bio::EnsEMBL::Mapper::RangeRegistry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 sub last_registry {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645 return $self->{'last_registry'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 # Methods supplied to maintain polymorphism with AssemblyMapper there
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651 # is no real assembled or component in the chained mapper, since the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 # ordering is arbitrary and both ends might actually be assembled, but
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 # these methods provide convenient synonyms
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 =head2 mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 Example : $mapper = $cam->mapper();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 Description: return the first_last_mapper.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 Returntype : Bio::EnsEMBL::Mapper
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 sub mapper {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 return $self->first_last_mapper();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 =head2 assembled_CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 Example : $coordsys = $cam->assembled_CoordSystem();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 Description: return the first CoordSystem.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 Returntype : Bio::EnsEMBL::CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 sub assembled_CoordSystem {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 return $self->{'first_cs'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 =head2 component_CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 Example : $coordsys = $cam->component_CoordSystem();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 Description: return the last CoordSystem.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 Returntype : Bio::EnsEMBL::CoordSystem
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 sub component_CoordSystem {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 return $self->{'last_cs'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 =head2 adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 Arg [1] : Bio::EnsEMBL::DBSQL::AssemblyMapperAdaptor $adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 Description: get/set for this objects database adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 Returntype : Bio::EnsEMBL::DBSQL::AssemblyMapperAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 sub adaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 weaken($self->{'adaptor'} = shift) if(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723 return $self->{'adaptor'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727 =head2 in_assembly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 Deprecated. Use map() or list_ids() instead
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 sub in_assembly {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 my ($self, $object) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 deprecate('Use map() or list_ids() instead.');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738 my $csa = $self->db->get_CoordSystemAdaptor();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740 my $top_level = $csa->fetch_top_level();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742 my $asma = $self->adaptor->fetch_by_CoordSystems($object->coord_system(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 $top_level);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745 my @list = $asma->list_ids($object->seq_region(), $object->start(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 $object->end(), $object->coord_system());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748 return (@list > 0);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752 =head2 map_coordinates_to_assembly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754 DEPRECATED use map() instead
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758 sub map_coordinates_to_assembly {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759 my ($self, $contig_id, $start, $end, $strand) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761 deprecate('Use map() instead.');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763 #not sure if contig_id is seq_region_id or name...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764 return $self->map($contig_id, $start, $end, $strand,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 $self->contig_CoordSystem());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770 =head2 fast_to_assembly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772 DEPRECATED use map() instead
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776 sub fast_to_assembly {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777 my ($self, $contig_id, $start, $end, $strand) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779 deprecate('Use map() instead.');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781 #not sure if contig_id is seq_region_id or name...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782 return $self->map($contig_id, $start, $end, $strand,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783 $self->contig_CoordSystem());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787 =head2 map_coordinates_to_rawcontig
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789 DEPRECATED use map() instead
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793 sub map_coordinates_to_rawcontig {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 my ($self, $chr_name, $start, $end, $strand) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796 deprecate('Use map() instead.');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798 return $self->map($chr_name, $start, $end, $strand,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799 $self->assembled_CoordSystem());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803 =head2 list_contig_ids
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804 DEPRECATED Use list_ids instead
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 sub list_contig_ids {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809 my ($self, $chr_name, $start, $end) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811 deprecate('Use list_ids() instead.');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813 return $self->list_ids($chr_name, $start, $end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814 $self->assembled_CoordSystem());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819 1;