Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/DBSQL/BaseAlignFeatureAdaptor.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/DBSQL/BaseAlignFeatureAdaptor.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,326 @@ +=head1 LICENSE + + Copyright (c) 1999-2012 The European Bioinformatics Institute and + Genome Research Limited. All rights reserved. + + This software is distributed under a modified Apache license. + For license details, please see + + http://www.ensembl.org/info/about/code_licence.html + +=head1 CONTACT + + Please email comments or questions to the public Ensembl + developers list at <dev@ensembl.org>. + + Questions may also be sent to the Ensembl help desk at + <helpdesk@ensembl.org>. + +=cut + +=head1 NAME + +Bio::EnsEMBL::DBSQL::BaseAlignFeatureAdaptor - Abstract Base class for +AlignFeatureAdaptors + +=head1 SYNOPSIS + +Abstract class, should not be instantiated. Implementation of abstract +methods must be performed by subclasses. + +=head1 DESCRIPTION + +This is a base adaptor for the align feature adaptors +DnaAlignFeatureAdaptor and ProteinAlignFeatureAdaptor. + +=head1 METHODS + +=cut + +package Bio::EnsEMBL::DBSQL::BaseAlignFeatureAdaptor; +use vars qw(@ISA @EXPORT); +use strict; + +use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor; + +@ISA = qw(Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor); + +@EXPORT = (@{$DBI::EXPORT_TAGS{'sql_types'}}); + +=head2 fetch_all_by_Slice_and_hcoverage + + Arg [1] : Bio::EnsEMBL::Slice $slice + The slice from which to obtain align features. + Arg [2] : (optional) float $hcoverage + A lower bound for the hcoverage of feats to obtain. + Arg [3] : (optional) string $logic_name + The logic name of the type of features to obtain. + Example : @feats = @{ + $adaptor->fetch_all_by_Slice_and_hcoverage( $slice, + 50.0 ) }; + Description: Returns a listref of features created from the + database which are on the Slice $slice and with a + hcoverage greater than $hcoverage. If logic name + is defined, only features with an analysis of type + $logic_name will be returned. + Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures + in Slice coordinates + Exceptions : none + Caller : general + Status : At Risk + +=cut + +sub fetch_all_by_Slice_and_hcoverage { + my ( $self, $slice, $hcoverage, $logic_name ) = @_; + + my $constraint; + if ( defined($hcoverage) ) { + $constraint = "hcoverage > $hcoverage"; + } + + return + $self->fetch_all_by_Slice_constraint( $slice, $constraint, + $logic_name ); +} + +=head2 fetch_all_by_Slice_and_external_db + + Arg [1] : Bio::EnsEMBL::Slice $slice + The slice from which to obtain align features. + Arg [2] : String $external_db_name + Name of the external DB to which the align features + should be restricted. + Arg [3] : (optional) string $logic_name + The logic name of the type of features to obtain. + Example : @feats = @{ + $adaptor->fetch_all_by_Slice_and_external_db( $slice, + 'EMBL' ) }; + Description: Returns a listref of features created from the + database which are on the Slice $slice and associated + with external DB $external_db_name. If logic name + is defined, only features with an analysis of type + $logic_name will be returned. + Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures + in Slice coordinates + Exceptions : thrown if $external_db_name is not defined or if + the subclass does not return a table alias for the + external_db table from _tables() + Caller : general + Status : At Risk + +=cut + +sub fetch_all_by_Slice_and_external_db { + my ( $self, $slice, $external_db_name, $logic_name ) = @_; + + if ( !defined($external_db_name) ) { + throw("Need name of external DB to restrict to"); + } + + my @join_tables = $self->_tables(); + + my $edb_alias; + foreach my $join_table (@join_tables) { + my ( $table, $table_alias ) = @{$join_table}; + if ( $table eq 'external_db' ) { + $edb_alias = $table_alias; + last; + } + } + + if ( !defined($edb_alias) ) { + throw("Can not find alias for external_db table"); + } + + my $constraint = sprintf( "%s.db_name = %s", + $edb_alias, + $self->dbc()->db_handle() + ->quote( $external_db_name, SQL_VARCHAR ) + ); + + return + $self->fetch_all_by_Slice_constraint( $slice, $constraint, + $logic_name ); +} ## end sub fetch_all_by_Slice_and_external_db + +=head2 fetch_all_by_Slice_and_pid + + Arg [1] : Bio::EnsEMBL::Slice $slice + The slice from which to obtain align features. + Arg [2] : (optional) float $pid + A lower bound for the percentage identity of features + to obtain. + Arg [3] : (optional) string $logic_name + The logic name of the type of features to obtain. + Example : @feats = + @{ $adaptor->fetch_all_by_Slice_and_pid( $slice, 50.0 ) }; + Description: Returns a listref of features created from the + database which are on the Slice $slice and with a + percentage identity greater than $pid. If logic name + is defined, only features with an analysis of type + $logic_name will be returned. + Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures + in Slice coordinates + Exceptions : none + Caller : general + Status : Stable + +=cut + +sub fetch_all_by_Slice_and_pid { + my ( $self, $slice, $pid, $logic_name ) = @_; + + # #get the primary table alias + # my @tabs = $self->_tables; + # my $alias = $tabs[0]->[1]; + + # if(defined $pid) { + # $constraint = "${alias}.perc_ident > $pid"; + # } + + my $constraint; + if ( defined($pid) ) { + $constraint = sprintf( "perc_ident > %s", + $self->dbc()->db_handle() + ->quote( $pid, SQL_FLOAT ) ); + } + + return + $self->fetch_all_by_Slice_constraint( $slice, $constraint, + $logic_name ); +} + + +=head2 fetch_all_by_hit_name + + Arg [1] : string $hit_name + The hit_name of the features to obtain + Arg [2] : (optional) string $logic_name + The analysis logic name of the type of features to + obtain. + Example : @feats = + @{ $adaptor->fetch_all_by_hit_name( $name, + $logic_name ); } + Description: Returns a listref of features created from the + database which correspond to the given hit_name. If + logic name is defined, only features with an analysis + of type $logic_name will be returned. + Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures + Exceptions : thrown if hit_name is not defined + Caller : general + Status : Stable + +=cut + +sub fetch_all_by_hit_name { + my ( $self, $hit_name, $logic_name ) = @_; + + if ( !defined($hit_name) ) { + throw("hit_name argument is required"); + } + + # Construct a constraint like 't1.hit_name = "123"' + my @tabs = $self->_tables(); + my ( $name, $syn ) = @{ $tabs[0] }; + + my $constraint = sprintf( "%s.hit_name = %s", + $syn, + $self->dbc()->db_handle()->quote( $hit_name, SQL_VARCHAR ) ); + + if ( defined($logic_name) ) { + # Add the $logic_name constraint + $constraint = + $self->_logic_name_to_constraint( $constraint, $logic_name ); + } + + return $self->generic_fetch($constraint); +} + + +=head2 fetch_all_by_hit_name_unversioned + + Arg [1] : string $hit_name + The beginning of the hit_name of the features to + obtain, e.g. AA768786 would retrieve AA768786.1, + AA768786.2 etc. + Arg [2] : (optional) string $logic_name + The analysis logic name of the type of features to + obtain. + Example : @feats = + @{ $adaptor->fetch_all_by_hit_name( $name, + $logic_name ) }; + Description: Returns a listref of features created from the + database which start with the given hit_name. If + logic name is defined, only features with an analysis + of type $logic_name will be returned. + Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures + Exceptions : thrown if hit_name is not defined + Caller : general + Status : At risk + +=cut + +sub fetch_all_by_hit_name_unversioned { + my ( $self, $hit_name, $logic_name ) = @_; + + if ( !defined($hit_name) ) { + throw("hit_name argument is required"); + } + $hit_name =~ s/_/\\_/; + + #construct a constraint like 't1.hit_name = "123"' + my @tabs = $self->_tables; + my ( $name, $syn ) = @{ $tabs[0] }; + + my $constraint = sprintf( "%s.hit_name LIKE %s", + $syn, + $self->dbc()->db_handle()->quote( $hit_name . '.%', SQL_VARCHAR ) ); + + if ( defined($logic_name) ) { + # Add the $logic_name constraint + $constraint = + $self->_logic_name_to_constraint( $constraint, $logic_name ); + } + + return $self->generic_fetch($constraint); +} + + + +=head2 fetch_all_by_RawContig_and_pid + + Description: DEPRECATED use fetch_all_by_Slice_and_pid instead + +=cut + +sub fetch_all_by_RawContig_and_pid { + my($self, $contig, $pid, $logic_name) = @_; + + my $constraint; + + #get the primary table alias + my @tabs = $self->_tables; + my $alias = $tabs[0]->[1]; + + if(defined $pid) { + $constraint = "${alias}.perc_ident > $pid"; + } + + return $self->fetch_all_by_RawContig_constraint($contig, + $constraint, + $logic_name); +} + + + + +##implemented by subclasses: +# store +# _tables +# _columns +# _obj_from_hashref + + + +1;