Bio::EnsEMBL::DBSQL SupportingFeatureAdaptor
SummaryIncluded librariesPackage variablesSynopsisGeneral documentationMethods
Toolbar
WebCvsRaw content
Summary
Bio::EnsEMBL::DBSQL::SupportingFeatureAdaptor - Retrieves supporting
features from the database.
Package variables
No package variables defined.
Included modules
Bio::EnsEMBL::DBSQL::BaseAdaptor
Bio::EnsEMBL::Utils::Exception qw ( throw warning )
Inherit
Bio::EnsEMBL::DBSQL::BaseAdaptor
Synopsis
  my $sfa =
$registry->get_adaptor( 'Human', 'Core', 'SupportingFeature' );
my @supporting_feats = @{ $sfa->fetch_all_by_Exon($exon) };
Description
No description!
Methods
fetch_all_by_ExonDescriptionCode
storeDescriptionCode
Methods description
fetch_all_by_Exoncode    nextTop
  Arg [1]    : Bio::EnsEMBL::Exon $exon 
The exon to fetch supporting features.
Example : @sfs =
@{ $supporting_feat_adaptor->fetch_all_by_Exon($exon) };
Description: Retrieves supporting features (evidence) for a given
exon.
Returntype : List of Bio::EnsEMBL::BaseAlignFeatures in the same
coordinate system as the $exon argument
Exceptions : Warning if $exon is not in the database (i.e. dbID
not defined).
Throw if a retrieved supporting feature is of unknown
type.
Caller : Bio::EnsEMBL::Exon
Status : Stable
storecodeprevnextTop
  Arg [2]    : Int $transID
The dbID of an EnsEMBL transcript to associate with
supporting features.
Arg [1] : Ref to array of Bio::EnsEMBL::BaseAlignFeature
(the support)
Example : $sfa->store($exon_id, \@features);
Description: Stores a set of alignment features and associates an
EnsEMBL transcript with them
Returntype : none
Exceptions : thrown when invalid dbID is passed to this method
Caller : TranscriptAdaptor
Status : Stable
Methods code
fetch_all_by_ExondescriptionprevnextTop
sub fetch_all_by_Exon {
  my ( $self, $exon )  = @_;

  my $out = [];

  unless($exon->dbID) {
    warning("Cannot retrieve evidence for exon without dbID");
    return [];
  }

  my $sth = $self->prepare("SELECT sf.feature_type, sf.feature_id
                            FROM   supporting_feature sf
                            WHERE  exon_id = ?");

  $sth->bind_param(1,$exon->dbID,SQL_INTEGER);
  $sth->execute();

  my $prot_adp = $self->db->get_ProteinAlignFeatureAdaptor;
  my $dna_adp  = $self->db->get_DnaAlignFeatureAdaptor;

  my $feature;
  while(my ($type, $feature_id) = $sth->fetchrow){
    if($type eq 'protein_align_feature'){
      $feature = $prot_adp->fetch_by_dbID($feature_id);
    } elsif($type eq 'dna_align_feature'){
      $feature = $dna_adp->fetch_by_dbID($feature_id);
    } else {
      warning("Unknown feature type [$type]\n");
    }

    if(!$feature) {
      warning("Supporting feature $type $feature_id does not exist in DB");
    } else {
      my $new_feature = $feature->transfer($exon->slice());
      push @$out, $new_feature if( $new_feature );
    }
  }

  $sth->finish();

  return $out;
}
storedescriptionprevnextTop
sub store {
  my ( $self, $exon_dbID, $aln_objs ) = @_;

  my $pep_check_sql = 
      "SELECT protein_align_feature_id " . 
      "FROM protein_align_feature " . 
      "WHERE seq_region_id = ? " . 
      "AND   seq_region_start = ? " . 
      "AND   seq_region_end   = ? " .
      "AND   seq_region_strand = ? " . 
      "AND   hit_name = ? " . 
      "AND   hit_start = ? " . 
      "AND   hit_end   = ? " . 
      "AND   analysis_id = ? " . 
      "AND   cigar_line = ? ";

  my $dna_check_sql = 
      "SELECT dna_align_feature_id " . 
      "FROM dna_align_feature " . 
      "WHERE seq_region_id = ? " . 
      "AND   seq_region_start = ? " . 
      "AND   seq_region_end   = ? " .
      "AND   seq_region_strand = ? " . 
      "AND   hit_name = ? " . 
      "AND   hit_start = ? " . 
      "AND   hit_end   = ? " . 
      "AND   analysis_id = ? " . 
      "AND   cigar_line = ? " . 
      "AND   hit_strand = ? ";

  my $assoc_check_sql = 
      "SELECT * " .  
      "FROM  supporting_feature " . 
      "WHERE exon_id = $exon_dbID " . 
      "AND   feature_type = ? " . 
      "AND   feature_id   = ? ";

  my $assoc_write_sql = "INSERT into supporting_feature " . 
      "(exon_id, feature_id, feature_type) " . 
      "values(?, ?, ?)";

  my $pep_check_sth = $self->prepare($pep_check_sql);
  my $dna_check_sth = $self->prepare($dna_check_sql);
  my $assoc_check_sth = $self->prepare($assoc_check_sql);
  my $sf_sth = $self->prepare($assoc_write_sql);

  my $dna_adaptor = $self->db->get_DnaAlignFeatureAdaptor();
  my $pep_adaptor = $self->db->get_ProteinAlignFeatureAdaptor();

  foreach my $f (@$aln_objs) {
    # check that the feature is in toplevel coords
if($f->slice->start != 1 || $f->slice->strand != 1) { #move feature onto a slice of the entire seq_region
my $tls = $self->db->get_sliceAdaptor->fetch_by_region($f->slice->coord_system->name(), $f->slice->seq_region_name(), undef, #start
undef, #end
undef, #strand
$f->slice->coord_system->version()); $f = $f->transfer($tls); if(!$f) { throw('Could not transfer Feature to slice of ' . 'entire seq_region prior to storing'); } } if(!$f->isa("Bio::EnsEMBL::BaseAlignFeature")){ throw("$f must be an align feature otherwise" . "it can't be stored"); } my ($sf_dbID, $type, $adap, $check_sth); my @check_args = ($self->db->get_SliceAdaptor->get_seq_region_id($f->slice), $f->start, $f->end, $f->strand, $f->hseqname, $f->hstart, $f->hend, $f->analysis->dbID, $f->cigar_string); if($f->isa("Bio::EnsEMBL::DnaDnaAlignFeature")){ $adap = $dna_adaptor; $check_sth = $dna_check_sth; $type = 'dna_align_feature'; push @check_args, $f->hstrand; } elsif($f->isa("Bio::EnsEMBL::DnaPepAlignFeature")){ $adap = $pep_adaptor; $check_sth = $pep_check_sth; $type = 'protein_align_feature'; } else { warning("Supporting feature of unknown type. Skipping : [$f]\n"); next; } $check_sth->execute(@check_args); $sf_dbID = $check_sth->fetchrow_array; if (not $sf_dbID) { $adap->store($f); $sf_dbID = $f->dbID; } # now check association
$assoc_check_sth->execute($type, $sf_dbID); if (not $assoc_check_sth->fetchrow_array) { $sf_sth->bind_param(1, $exon_dbID, SQL_INTEGER); $sf_sth->bind_param(2, $sf_dbID, SQL_INTEGER); $sf_sth->bind_param(3, $type, SQL_VARCHAR); $sf_sth->execute(); } } $dna_check_sth->finish; $pep_check_sth->finish; $assoc_check_sth->finish; $sf_sth->finish; } 1;
}
General documentation
LICENSETop
  Copyright (c) 1999-2009 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 /info/about/code_licence.html
CONTACTTop
  Please email comments or questions to the public Ensembl
developers list at <ensembl-dev@ebi.ac.uk>.
Questions may also be sent to the Ensembl help desk at <helpdesk@ensembl.org>.