comparison variant_effect_predictor/Bio/EnsEMBL/DBSQL/BaseAlignFeatureAdaptor.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1f6dce3d34e0
1 =head1 LICENSE
2
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
4 Genome Research Limited. All rights reserved.
5
6 This software is distributed under a modified Apache license.
7 For license details, please see
8
9 http://www.ensembl.org/info/about/code_licence.html
10
11 =head1 CONTACT
12
13 Please email comments or questions to the public Ensembl
14 developers list at <dev@ensembl.org>.
15
16 Questions may also be sent to the Ensembl help desk at
17 <helpdesk@ensembl.org>.
18
19 =cut
20
21 =head1 NAME
22
23 Bio::EnsEMBL::DBSQL::BaseAlignFeatureAdaptor - Abstract Base class for
24 AlignFeatureAdaptors
25
26 =head1 SYNOPSIS
27
28 Abstract class, should not be instantiated. Implementation of abstract
29 methods must be performed by subclasses.
30
31 =head1 DESCRIPTION
32
33 This is a base adaptor for the align feature adaptors
34 DnaAlignFeatureAdaptor and ProteinAlignFeatureAdaptor.
35
36 =head1 METHODS
37
38 =cut
39
40 package Bio::EnsEMBL::DBSQL::BaseAlignFeatureAdaptor;
41 use vars qw(@ISA @EXPORT);
42 use strict;
43
44 use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor;
45
46 @ISA = qw(Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor);
47
48 @EXPORT = (@{$DBI::EXPORT_TAGS{'sql_types'}});
49
50 =head2 fetch_all_by_Slice_and_hcoverage
51
52 Arg [1] : Bio::EnsEMBL::Slice $slice
53 The slice from which to obtain align features.
54 Arg [2] : (optional) float $hcoverage
55 A lower bound for the hcoverage of feats to obtain.
56 Arg [3] : (optional) string $logic_name
57 The logic name of the type of features to obtain.
58 Example : @feats = @{
59 $adaptor->fetch_all_by_Slice_and_hcoverage( $slice,
60 50.0 ) };
61 Description: Returns a listref of features created from the
62 database which are on the Slice $slice and with a
63 hcoverage greater than $hcoverage. If logic name
64 is defined, only features with an analysis of type
65 $logic_name will be returned.
66 Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures
67 in Slice coordinates
68 Exceptions : none
69 Caller : general
70 Status : At Risk
71
72 =cut
73
74 sub fetch_all_by_Slice_and_hcoverage {
75 my ( $self, $slice, $hcoverage, $logic_name ) = @_;
76
77 my $constraint;
78 if ( defined($hcoverage) ) {
79 $constraint = "hcoverage > $hcoverage";
80 }
81
82 return
83 $self->fetch_all_by_Slice_constraint( $slice, $constraint,
84 $logic_name );
85 }
86
87 =head2 fetch_all_by_Slice_and_external_db
88
89 Arg [1] : Bio::EnsEMBL::Slice $slice
90 The slice from which to obtain align features.
91 Arg [2] : String $external_db_name
92 Name of the external DB to which the align features
93 should be restricted.
94 Arg [3] : (optional) string $logic_name
95 The logic name of the type of features to obtain.
96 Example : @feats = @{
97 $adaptor->fetch_all_by_Slice_and_external_db( $slice,
98 'EMBL' ) };
99 Description: Returns a listref of features created from the
100 database which are on the Slice $slice and associated
101 with external DB $external_db_name. If logic name
102 is defined, only features with an analysis of type
103 $logic_name will be returned.
104 Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures
105 in Slice coordinates
106 Exceptions : thrown if $external_db_name is not defined or if
107 the subclass does not return a table alias for the
108 external_db table from _tables()
109 Caller : general
110 Status : At Risk
111
112 =cut
113
114 sub fetch_all_by_Slice_and_external_db {
115 my ( $self, $slice, $external_db_name, $logic_name ) = @_;
116
117 if ( !defined($external_db_name) ) {
118 throw("Need name of external DB to restrict to");
119 }
120
121 my @join_tables = $self->_tables();
122
123 my $edb_alias;
124 foreach my $join_table (@join_tables) {
125 my ( $table, $table_alias ) = @{$join_table};
126 if ( $table eq 'external_db' ) {
127 $edb_alias = $table_alias;
128 last;
129 }
130 }
131
132 if ( !defined($edb_alias) ) {
133 throw("Can not find alias for external_db table");
134 }
135
136 my $constraint = sprintf( "%s.db_name = %s",
137 $edb_alias,
138 $self->dbc()->db_handle()
139 ->quote( $external_db_name, SQL_VARCHAR )
140 );
141
142 return
143 $self->fetch_all_by_Slice_constraint( $slice, $constraint,
144 $logic_name );
145 } ## end sub fetch_all_by_Slice_and_external_db
146
147 =head2 fetch_all_by_Slice_and_pid
148
149 Arg [1] : Bio::EnsEMBL::Slice $slice
150 The slice from which to obtain align features.
151 Arg [2] : (optional) float $pid
152 A lower bound for the percentage identity of features
153 to obtain.
154 Arg [3] : (optional) string $logic_name
155 The logic name of the type of features to obtain.
156 Example : @feats =
157 @{ $adaptor->fetch_all_by_Slice_and_pid( $slice, 50.0 ) };
158 Description: Returns a listref of features created from the
159 database which are on the Slice $slice and with a
160 percentage identity greater than $pid. If logic name
161 is defined, only features with an analysis of type
162 $logic_name will be returned.
163 Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures
164 in Slice coordinates
165 Exceptions : none
166 Caller : general
167 Status : Stable
168
169 =cut
170
171 sub fetch_all_by_Slice_and_pid {
172 my ( $self, $slice, $pid, $logic_name ) = @_;
173
174 # #get the primary table alias
175 # my @tabs = $self->_tables;
176 # my $alias = $tabs[0]->[1];
177
178 # if(defined $pid) {
179 # $constraint = "${alias}.perc_ident > $pid";
180 # }
181
182 my $constraint;
183 if ( defined($pid) ) {
184 $constraint = sprintf( "perc_ident > %s",
185 $self->dbc()->db_handle()
186 ->quote( $pid, SQL_FLOAT ) );
187 }
188
189 return
190 $self->fetch_all_by_Slice_constraint( $slice, $constraint,
191 $logic_name );
192 }
193
194
195 =head2 fetch_all_by_hit_name
196
197 Arg [1] : string $hit_name
198 The hit_name of the features to obtain
199 Arg [2] : (optional) string $logic_name
200 The analysis logic name of the type of features to
201 obtain.
202 Example : @feats =
203 @{ $adaptor->fetch_all_by_hit_name( $name,
204 $logic_name ); }
205 Description: Returns a listref of features created from the
206 database which correspond to the given hit_name. If
207 logic name is defined, only features with an analysis
208 of type $logic_name will be returned.
209 Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures
210 Exceptions : thrown if hit_name is not defined
211 Caller : general
212 Status : Stable
213
214 =cut
215
216 sub fetch_all_by_hit_name {
217 my ( $self, $hit_name, $logic_name ) = @_;
218
219 if ( !defined($hit_name) ) {
220 throw("hit_name argument is required");
221 }
222
223 # Construct a constraint like 't1.hit_name = "123"'
224 my @tabs = $self->_tables();
225 my ( $name, $syn ) = @{ $tabs[0] };
226
227 my $constraint = sprintf( "%s.hit_name = %s",
228 $syn,
229 $self->dbc()->db_handle()->quote( $hit_name, SQL_VARCHAR ) );
230
231 if ( defined($logic_name) ) {
232 # Add the $logic_name constraint
233 $constraint =
234 $self->_logic_name_to_constraint( $constraint, $logic_name );
235 }
236
237 return $self->generic_fetch($constraint);
238 }
239
240
241 =head2 fetch_all_by_hit_name_unversioned
242
243 Arg [1] : string $hit_name
244 The beginning of the hit_name of the features to
245 obtain, e.g. AA768786 would retrieve AA768786.1,
246 AA768786.2 etc.
247 Arg [2] : (optional) string $logic_name
248 The analysis logic name of the type of features to
249 obtain.
250 Example : @feats =
251 @{ $adaptor->fetch_all_by_hit_name( $name,
252 $logic_name ) };
253 Description: Returns a listref of features created from the
254 database which start with the given hit_name. If
255 logic name is defined, only features with an analysis
256 of type $logic_name will be returned.
257 Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures
258 Exceptions : thrown if hit_name is not defined
259 Caller : general
260 Status : At risk
261
262 =cut
263
264 sub fetch_all_by_hit_name_unversioned {
265 my ( $self, $hit_name, $logic_name ) = @_;
266
267 if ( !defined($hit_name) ) {
268 throw("hit_name argument is required");
269 }
270 $hit_name =~ s/_/\\_/;
271
272 #construct a constraint like 't1.hit_name = "123"'
273 my @tabs = $self->_tables;
274 my ( $name, $syn ) = @{ $tabs[0] };
275
276 my $constraint = sprintf( "%s.hit_name LIKE %s",
277 $syn,
278 $self->dbc()->db_handle()->quote( $hit_name . '.%', SQL_VARCHAR ) );
279
280 if ( defined($logic_name) ) {
281 # Add the $logic_name constraint
282 $constraint =
283 $self->_logic_name_to_constraint( $constraint, $logic_name );
284 }
285
286 return $self->generic_fetch($constraint);
287 }
288
289
290
291 =head2 fetch_all_by_RawContig_and_pid
292
293 Description: DEPRECATED use fetch_all_by_Slice_and_pid instead
294
295 =cut
296
297 sub fetch_all_by_RawContig_and_pid {
298 my($self, $contig, $pid, $logic_name) = @_;
299
300 my $constraint;
301
302 #get the primary table alias
303 my @tabs = $self->_tables;
304 my $alias = $tabs[0]->[1];
305
306 if(defined $pid) {
307 $constraint = "${alias}.perc_ident > $pid";
308 }
309
310 return $self->fetch_all_by_RawContig_constraint($contig,
311 $constraint,
312 $logic_name);
313 }
314
315
316
317
318 ##implemented by subclasses:
319 # store
320 # _tables
321 # _columns
322 # _obj_from_hashref
323
324
325
326 1;