annotate variant_effect_predictor/Bio/EnsEMBL/External/ExternalFeatureAdaptor.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::External::ExternalFeatureAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head 1 SUMMARY
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 Allows features created externally from Ensembl in a single
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 coordinate system to be retrieved in several other (Ensembl-style)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 coordinate systems. This is intended to be a replacement for the old
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 Bio::EnsEMBL::DB::ExternalFeatureFactoryI interface.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 $database_adaptor = new Bio::EnsEMBL::DBSQL::DBAdaptor(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 -host => 'kaka.sanger.ac.uk',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 -dbname => 'homo_sapiens_core_9_30',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 -pass => 'anonymous'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 $xf_adaptor = new ExternalFeatureAdaptorSubClass;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 # Connect the Ensembl core database:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 $xf_adaptor->db($database_adaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 # get some features in vontig coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 @feats =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 @{ $xf_adaptor->fetch_all_by_contig_name('AC000087.2.1.42071') };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 # get some features in assembly coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 @feats =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 @{ $xf_adaptor->fetch_all_by_chr_start_end( 'X', 100000, 200000 ) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 # get some features in clone coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 @feats = @{ $xf_adaptor->fetch_all_by_clone_accession('AC000087') };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 # Add the adaptor to the ensembl core dbadaptor (implicitly sets db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 # attribute)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 $database_adaptor->add_ExternalFeatureAdaptor($xf_adaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # get some features in Slice coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 $slice_adaptor = $database_adaptor->get_SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 $slice =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 $slice_adaptor->fetch_all_by_chr_start_end( 1, 100000, 200000 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 @feats = @{ $xf_adaptor->fetch_all_by_Slice($slice) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 # now features can be retrieved directly from Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 @feats = @{ $slice->get_all_ExternalFeatures };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 This class is intended to be used as a method of getting external
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 features into EnsEMBL. To work, this class must be extended and must
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 implement the the coordinate_systems method. As well, the subclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 is required to implement a single fetch method so that the external
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 features may be retrieved. By implementing a single fetch_method in a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 single coordinate system all of the other ExternalFeatureAdaptor fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 methods become available for retrieving the data in several different
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 coordinate systems.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 The coordinate_systems method should return a list of strings indicating
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 which coordinate system(s) have been implemented. If a given string is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 returned from the coordinate_systems method then the corresponding fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 method must be implemented. The reverse is also true: if a fetch method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 is implemented then coordinate_systems must return the appropriate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 string in its list of return values. The following are the valid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 coordinate system values and the corresponding fetch methods that must
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 be implemented:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 COORD SYSTEM STRING FETCH_METHOD
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 ------------------- ------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 'ASSEMBLY' fetch_all_by_chr_start_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 'CLONE' fetch_all_by_clone_accession
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 'CONTIG' fetch_all_by_contig_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 'SUPERCONTIG' fetch_all_by_supercontig_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 'SLICE' fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 The objects returned by the fetch methods should be EnsEMBL or BioPerl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 style Feature objects. These objects MUST have start, end and strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Before the non-overridden ExternalFeatureAdaptor fetch methods may
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 be called an EnsEMBL core database adaptor must be attached to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 ExternalFeatureAdaptor . This database adaptor is required to perform
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 the remappings between various coordinate system. This may be done
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 implicitly by adding the ExternalFeatureAdaptor to the database adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 through a call to the DBAdaptor add_ExternalFeatureAdaptor method or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 explicitly by calling the ExternalFeatureAdaptor ensembl_db method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 package Bio::EnsEMBL::External::ExternalFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 use Bio::EnsEMBL::Utils::Exception qw(warning throw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Example : $xfa = new Bio::EnsEMBL::External::ExternalFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Description: Creates a new ExternalFeatureAdaptor object. You may wish to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 extend this constructor and provide your own set of paremeters.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Returntype : Bio::EnsEMBL::External::ExternalFeatureAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 if(ref $class) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 return bless {}, ref $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 return bless {}, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 =head2 ensembl_db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 Arg [1] : (optional) Bio::EnsEMBL::DBSQL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Example : $external_feature_adaptor->ensembl_db($new_val);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Description: none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 Returntype : Bio::EnsEMBL::DBSQL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 sub ensembl_db {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 my ($self, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 if($value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $self->{'ensembl_db'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 return $self->{'ensembl_db'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 =head2 coordinate_systems
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 Example : @implemented_coord_systems = $ext_adaptor->coordinate_systems;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 Description: ABSTRACT method. Must be implemented by all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 ExternalFeatureAdaptor subclasses. This method returns a list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 of coordinate systems which are implemented by the subclass.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 A minimum of on valid coordinate system must be implemented.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 Valid coordinate systems are: 'SLICE', 'ASSEMBLY', 'CONTIG',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 and 'CLONE'.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Returntype : list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 sub coordinate_systems {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 throw("abstract method coordinate_systems not implemented\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 return '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 =head2 track_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Example : $track_name = $xf_adaptor->track_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Description: Currently this is not really used. In the future it may be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 possible to have ExternalFeatures automatically displayed by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 the EnsEMBL web code. By default this method returns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 'External features' but you are encouraged to override this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 method and provide your own meaningful name for the features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 your adaptor provides. This also allows you to distinguish the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 type of features retrieved from Slices. See
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 the PODs for Bio::EnsEMBL::Slice::get_all_ExternalFeatures and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Bio::EnsEMBL::DBSQL::DBAdaptor::add_ExternalFeatureAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Caller : Bio::EnsEMBL::DBSQL::DBAdaptor::add_ExternalFeatureAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 sub track_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 return 'External features';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 =head2 feature_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Example : $feature_type = $xf_adaptor->track_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 Description: Currently this is not used. In the future it may be possible
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 to have ExternalFeatures automatically displayed by the EnsEMBL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 web code. This method would then be used do determine the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 type of glyphs used to draw the features which are returned
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 from this external adaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Caller : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 sub feature_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 return qw(SIMPLE);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 =head2 fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Arg [1] : Bio::EnsEMBL::Slice $slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Example : @features = @{$ext_adaptor->fetch_all_by_Slice($slice)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Description: Retrieves all features which lie in the region defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 by $slice in slice coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 If this method is overridden then the coordinate_systems method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 must return 'SLICE' as one of its values.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 This method will work as is (i.e. without overriding it)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 providing at least one of the other fetch methods is overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Returntype : reference to a list of Bio::SeqFeature objects in the Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 Exceptions : Thrown on incorrect input arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 Caller : general, fetch_all_by_chr_start_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 sub fetch_all_by_Slice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 my ($self, $slice) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 unless($slice && ref $slice && $slice->isa('Bio::EnsEMBL::Slice')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 throw("[$slice] is not a Bio::EnsEMBL::Slice");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 my $out = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 my $csa = $self->ensembl_db->get_CoordSystemAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 my $slice_start = $slice->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 my $slice_end = $slice->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 my $slice_strand = $slice->strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $slice_seq_region = $slice->seq_region_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my $slice_seq_region_id = $slice->get_seq_region_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 my $coord_system = $slice->coord_system;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 if($self->_supported('SLICE')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 throw("ExternalFeatureAdaptor supports SLICE coordinate system" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 " but fetch_all_by_Slice not implemented");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 my %features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 my $from_coord_system;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my $fetch_method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 # Get all of the features from whatever coord system they are computed in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 if($self->_supported('CLONE')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $fetch_method = sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 my $name = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my ($acc, $ver) = split(/\./, $name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $self->fetch_all_by_clone_accession($acc,$ver,@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $from_coord_system = $csa->fetch_by_name('clone');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 } elsif($self->_supported('ASSEMBLY')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $from_coord_system = $csa->fetch_by_name('chromosome');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 $fetch_method = $self->can('fetch_all_by_chr_start_end');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 } elsif($self->_supported('CONTIG')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $from_coord_system = $csa->fetch_by_name('contig');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $fetch_method = $self->can('fetch_all_by_contig_name');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 } elsif($self->_supported('SUPERCONTIG')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $from_coord_system = $csa->fetch_by_name('supercontig');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $fetch_method = $self->can('fetch_all_by_supercontig_name');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $self->_no_valid_coord_systems();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 if($from_coord_system->equals($coord_system)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $features{$slice_seq_region} = &$fetch_method($self, $slice_seq_region,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $slice_start,$slice_end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 foreach my $segment (@{$slice->project($from_coord_system->name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 $from_coord_system->version)}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my ($start,$end,$pslice) = @$segment;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $features{$pslice->seq_region_name } ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 push @{$features{$pslice->seq_region_name }},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 @{&$fetch_method($self, $pslice->seq_region_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $pslice->start(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $pslice->end())};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 my @out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 if(!$coord_system->equals($from_coord_system)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 my $asma = $self->ensembl_db->get_AssemblyMapperAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 my $mapper = $asma->fetch_by_CoordSystems($from_coord_system,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 $coord_system);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 my %slice_cache;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 my $slice_adaptor = $self->ensembl_db->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 my $slice_setter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 #convert the coordinates of each of the features retrieved
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 foreach my $fseq_region (keys %features) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 my $feats = $features{$fseq_region};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 next if(!$feats);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 $slice_setter = _guess_slice_setter($feats) if(!$slice_setter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 foreach my $f (@$feats) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 my($sr_id, $start, $end, $strand) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $mapper->fastmap($fseq_region,$f->start,$f->end,$f->strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $from_coord_system);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 #maps to gap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 next if(!defined($sr_id));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 #maps to unexpected seq region, probably error in the externally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 if($sr_id ne $slice_seq_region_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 warning("Externally created Feature mapped to [$sr_id] " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 "which is not on requested seq_region_id [$slice_seq_region_id]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 #update the coordinates of the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 &$slice_setter($f,$slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 $f->start($start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 $f->end($end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $f->strand($strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 push @out, $f;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 #we already know the seqregion the featues are on, we just have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 #to put them on the slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 @out = @{$features{$slice_seq_region}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 my $slice_setter = _guess_slice_setter(\@out);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 foreach my $f (@out) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 &$slice_setter($f,$slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 #shift the feature coordinates again if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 #the requested slice is not the full seqregion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 if($slice->start != 1 || $slice->strand != 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 #convert from assembly coords to slice coords
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 my($f_start, $f_end, $f_strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 foreach my $f (@out) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 if($slice_strand == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 $f_start = $f->start - $slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $f_end = $f->end - $slice_start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 $f_strand = $f->strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 $f_start = $slice_end - $f->end + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $f_end = $slice_end - $f->start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 $f_strand = $f->strand * -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 $f->start($f_start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $f->end($f_end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $f->strand($f_strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 return \@out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 sub _guess_slice_setter {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 my $features = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 #we do not know what type of features these are. They might
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 #be bioperl features or old ensembl features, hopefully they are new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 #style features. Try to come up with a setter method for the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 #slice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 return undef if(!@$features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 my ($f) = @$features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 my $slice_setter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 foreach my $method (qw(slice contig attach_seq)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 last if($slice_setter = $f->can($method));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 if(!$slice_setter) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 if($f->can('seqname')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $slice_setter = sub { $_[0]->seqname($_[1]->seq_region_name()); };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $slice_setter = sub{} if(!$slice_setter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 return $slice_setter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 =head2 fetch_all_by_contig_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 Arg [1] : string $contig_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 Arg [2] : int $start (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 The start of the region on the contig to retrieve features on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 if not specified the whole of the contig is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Arg [3] : int $end (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 The end of the region on the contig to retrieve features on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 if not specified the whole of the contig is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Example : @fs = @{$self->fetch_all_by_contig_name('AB00879.1.1.39436')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Description: Retrieves features on the contig defined by the name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 $contig_name in contig coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 If this method is overridden then the coordinate_systems
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 method must return 'CONTIG' as one of its values.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 This method will work as is (i.e. without being overridden)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 providing at least one other fetch method has
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 been overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 Returntype : reference to a list of Bio::SeqFeature objects in the contig
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 Exceptions : thrown if the input argument is incorrect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 thrown if the coordinate_systems method returns the value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 'CONTIG' and this method has not been overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 Caller : general, fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 sub fetch_all_by_contig_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my ($self, $contig_name, $start, $end) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 unless($contig_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 throw("contig_name argument not defined");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 if($self->_supported('CONTIG')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 throw("ExternalFeatureAdaptor supports CONTIG coordinate system" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 " but fetch_all_by_contig_name is not implemented");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 unless($self->ensembl_db) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 throw('DB attribute not set. This value must be set for the ' .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 'ExternalFeatureAdaptor to function correctly');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 my $slice_adaptor = $self->ensembl_db->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 my $slice = $slice_adaptor->fetch_by_region('contig', $contig_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 $start, $end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 return $self->fetch_all_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 =head2 fetch_all_by_supercontig_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 Arg [1] : string $supercontig_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 Arg [2] : int $start (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 The start of the region on the contig to retrieve features on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 if not specified the whole of the contig is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Arg [3] : int $end (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 The end of the region on the contig to retrieve features on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 if not specified the whole of the contig is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 Example : @fs = @{$self->fetch_all_by_contig_name('NT_004321')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 Description: Retrieves features on the contig defined by the name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $supercontigname in supercontig coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 If this method is overridden then the coordinate_systems
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 method must return 'SUPERCONTIG' as one of its values.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 This method will work as is (i.e. without being overridden)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 providing at least one other fetch method has
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 been overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 Returntype : reference to a list of Bio::SeqFeature objects in the contig
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 Exceptions : thrown if the input argument is incorrect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 thrown if the coordinate_systems method returns the value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 'SUPERCONTIG' and this method has not been overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 Caller : general, fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 sub fetch_all_by_supercontig_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 my ($self, $supercontig_name, $start, $end) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 unless($supercontig_name) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 throw("supercontig_name argument not defined");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 if($self->_supported('SUPERCONTIG')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 throw("ExternalFeatureAdaptor supports SUPERCONTIG coordinate system" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 " but fetch_all_by_supercontig_name is not implemented");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 unless($self->ensembl_db) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 throw('DB attribute not set. This value must be set for the ' .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 'ExternalFeatureAdaptor to function correctly');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 my $slice_adaptor = $self->ensembl_db->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 my $slice = $slice_adaptor->fetch_by_region('supercontig', $supercontig_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 $start, $end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 return $self->fetch_all_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 =head2 fetch_all_by_clone_accession
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 Arg [1] : string $acc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 The EMBL accession number of the clone to fetch features from.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 Arg [2] : (optional) string $ver
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 Arg [3] : (optional) int $start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 Arg [4] : (optional) int $end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 Example : @fs = @{$self->fetch_all_by_clone_accession('AC000093')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Description: Retrieves features on the clone defined by the $acc arg in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Clone coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 If this method is overridden then the coordinate_systems method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 must return 'CLONE' as one of its values. The arguments
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 start, end, version are passed if this method is overridden and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 can optionally be used to reduce the scope of the query and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 improve performance.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 This method will work as is - providing at least one other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 fetch method has been overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 Returntype : reference to a list of Bio::SeqFeature objects in the Clone
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 Exceptions : thrown if the input argument is incorrect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 thrown if the coordinate system method returns the value 'CLONE'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 and this method is not overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 thrown if the coordinate systems method does not return any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 valid values.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 Caller : general, fetch_all_by_clone_accession
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 sub fetch_all_by_clone_accession {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 my ($self, $acc, $version, $start, $end) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 unless($acc) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 throw("clone accession argument not defined");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 if($self->_supported('CLONE')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 throw('ExternalFeatureAdaptor supports CLONE coordinate system ' .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 'but does not implement fetch_all_by_clone_accession');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 unless($self->ensembl_db) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 throw('DB attribute not set. This value must be set for the ' .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 'ExternalFeatureAdaptor to function correctly');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 if(defined($version)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 $acc = "$acc.$version";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 } elsif(!$acc =~ /\./) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 $acc = "$acc.1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 my $slice_adaptor = $self->ensembl_db->get_SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 my $slice = $slice_adaptor->fetch_by_region('clone', $acc, $start, $end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 return $self->fetch_all_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 =head2 fetch_all_by_chr_start_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 Arg [1] : string $chr_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 The name of the chromosome to retrieve features from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 Arg [2] : int $start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 The start coordinate of the chromosomal region to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 features from.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 Arg [3] : int $end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 The end coordinate of the chromosomal region to retrieve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 features from.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 Example : @features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 Description: Retrieves features on the region defined by the $chr_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 $start, and $end args in assembly (chromosomal) coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 If this method is overridden then the coordinate_systems method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 must return 'ASSEMBLY' as one of its values.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 This method will work as is (i.e. without overriding it)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 providing at least one of the other fetch methods is overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 Returntype : reference to a list of Bio::SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 Exceptions : Thrown if the coordinate_systems method returns ASSEMBLY as a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 value and this method is not overridden.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 Thrown if any of the input arguments are incorrect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 Caller : general, fetch_all_by_Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 sub fetch_all_by_chr_start_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 my ($self, $chr_name, $start, $end) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 unless($chr_name && defined $start && defined $end && $start < $end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 throw("Incorrect start [$start] end [$end] or chr [$chr_name] arg");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 unless($self->ensembl_db) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 throw('DB attribute not set. This value must be set for the ' .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 'ExternalFeatureAdaptor to function correctly');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 my $slice_adaptor = $self->ensembl_db->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 my $slice = $slice_adaptor->fetch_by_region('toplevel', $chr_name, $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 $end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 return $self->fetch_all_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 =head2 _no_valid_coord_system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 Description: PRIVATE method - throws an error with a descriptive message
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 Exceptions : always thrown
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 sub _no_valid_coord_system {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 throw("This ExternalFeatureAdaptor does not support a known " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 "coordinate system.\n Valid coordinate systems are: " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 "[SLICE,ASSEMBLY,SUPERCONTIG,CONTIG,CLONE].\n This External Adaptor " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 "supports: [" . join(', ', $self->coordinate_systems) . "]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 =head2 _supported
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 Arg [1] : string $system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 Example : print "CONTIG system supported" if($self->_supported('CONTIG'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 Description: PRIVATE method. Tests if the coordinate system defined by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 the $system argument is implemented.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 sub _supported {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 my ($self, $system) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 #construct the hash of supported features if it has not been already
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 unless(exists $self->{_supported}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 $self->{_supported} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 foreach my $coord_system ($self->coordinate_systems) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 $self->{_supported}->{$coord_system} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 return $self->{_supported}->{$system};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 1;