Raw content of Bio::EnsEMBL::ExternalData::Expression::SeqTagAdaptor
#
# EnsEMBL module for Bio::EnsEMBL::ExternalData::Expression::SeqTagAdaptor
#
# Cared for by EnsEMBL (www.ensembl.org)
#
# Copyright GRL and EBI
#
# You may distribute this module under the same terms as perl itself
# POD documentation - main docs before the code
=head1 NAME
Bio::EnsEMBL::ExternalData::Expression::SeqTagAdaptor
=head1 SYNOPSIS
my $dbname='expression';
my $tag_ad= Bio::EnsEMBL::ExternalData::Expression::SeqTagAdaptor->new($obj);
$tag_ad->dbname($dbname);
my $tag=$sta->fetch_by_Name("AAAAAAAAAA");
=head1 DESCRIPTION
Represents information on one Clone
=head1 CONTACT
Describe contact details here
=head1 APPENDIX
The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
=cut
package Bio::EnsEMBL::ExternalData::Expression::SeqTagAdaptor;
use Bio::EnsEMBL::ExternalData::BaseAdaptor;
use Bio::EnsEMBL::ExternalData::Expression::SeqTag;
use Bio::Annotation::DBLink;
use vars qw(@ISA);
use strict;
@ISA = qw(Bio::EnsEMBL::ExternalData::BaseAdaptor);
=head2 list_all_names
Title : list_all_names
Usage : $obj->list_all_names($newval)
Function:
Example :
Returns : array of seqtag names
Args :
=cut
sub list_all_names {
my ($self)=shift;
my $statement="select name from seqtag";
return $self->_list($statement);
}
=head2 list_all_ids
Title : list_all_ids
Usage : $obj->list_all_ids($newval)
Function:
Example :
Returns : array of seqtag db ids
Args :
=cut
sub list_all_ids {
my ($self)=shift;
my $statement="select seqtag_id from seqtag";
return $self->_list($statement);
}
=head2 list_by_alias
Title : list_by_alias
Usage : $obj->list_by_alias($alias)
Function:
Example :
Returns : array of seqtag db ids
Args :
=cut
sub list_by_alias {
my ($self,$alias)=@_;
my $statement="select s.name from seqtag s,seqtag_alias sa
where s.seqtag_id=sa.seqtag_id and sa.external_name='$alias'";
return $self->_list($statement);
}
=head2 fetch_all
Title : fetch_all
Usage : $obj->fetch_all
Function:
Example :
Returns : array of seqtag objects
Args :
=cut
sub fetch_all {
my ($self)=shift;
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id";
return $self->_fetch($statement);
}
=head2 fetch_by_dbID
Title : fetch_by_dbID
Usage : $obj->fetch_by_dbID
Function:
Example :
Returns :seqtag object
Args :db id
=cut
sub fetch_by_dbID {
my ($self,$id)=@_;
$self->throw("need a db id") unless $id;
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa,
library l
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id
and l.library_id=f.library_id and s.seqtag_id=$id";
my @tags=$self->_fetch($statement);
if ($#tags>=0){
return shift @tags;
}else {return;}
}
=head2 fetch_by_Synonym
Title : fetch_by_Synonym
Usage : $obj->fetch_by_Synonym
Function:
Example :
Returns :array of seqtag objects
Args :seqtag name or alias
=cut
sub fetch_by_Synonym {
my ($self,$lib_id,$synonym)=@_;
$self->throw("need a library id") unless $lib_id;
$self->throw("need a tag synonym") unless $synonym;
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa,
library l
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id
and l.library_id=f.library_id and l.library_id=$lib_id and sa.external_name='$synonym'";
return $self->_fetch($statement);
}
=head2 fetch_by_Name
Title : fetch_by_Name
Usage : $obj->fetch_by_Name
Function:
Example :
Returns :array of seqtag objects
Args :seqtag name or alias
=cut
sub fetch_by_Name {
my ($self,$lib_id,$name)=@_;
$self->throw("need a library id") unless $lib_id;
$self->throw("need a tag name") unless $name;
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa,
library l
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id
and l.library_id=f.library_id and l.library_id=$lib_id and s.name='$name' group by s.seqtag_id";
return $self->_fetch($statement);
}
=head2 fetch_by_Name_with_allAliases
Title : fetch_by_Name_with_allAliases
Usage : $obj->fetch_by_Name_with_allAliases
Function:
Example :
Returns :array of seqtag objects
Args :seqtag name or alias
=cut
sub fetch_by_Name_with_allAliases {
my ($self,$name)=@_;
$self->throw("need a tag name") unless $name;
my $statement="select s.name,sa.external_name, sa.db_name
from seqtag s,seqtag_alias sa
where sa.seqtag_id=s.seqtag_id and s.name='$name'";
return $self->_fetch_aliases($statement);
}
sub fetch_by_Synonym_with_allAliases_1 {
my ($self,$synonym)=@_;
# $self->throw("need a library id") unless $lib_id;
$self->throw("need a tag synonym") unless $synonym;
# my $multiplier=$self->multiplier;
# my $statement="select s.seqtag_id,s.source,s.name,
# sa1.db_name,sa1.external_name,f.frequency,
# ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
# from seqtag s,frequency f,seqtag_alias sa1, seqtag_alias sa2,
# library l
# where s.seqtag_id=f.seqtag_id and sa1.seqtag_id=s.seqtag_id and sa1.seqtag_id=sa2.seqtag_id
# and l.library_id=f.library_id and l.library_id=$lib_id and sa2.external_name='$synonym'";
# my $statement="select t.name,s1.external_name,s1.db_name
# from seqtag_alias s1,seqtag_alias s2,seqtag t
# where s1.seqtag_id=s2.seqtag_id and t.seqtag_id=s1.seqtag_id
# and s2.external_name='$synonym'";
# my $statement="select
# return $self->_fetch_aliases($statement);
}
=head2 fetch_by_Library_dbID
Title : fetch_by_Library_dbID
Usage : $obj->fetch_by_Library_dbID
Function:
Example :
Returns : array of seqtag objects
Args : library id
=cut
sub fetch_by_Library_dbID
{
my ($self,$id)=@_;
$self->throw("need a library id") unless $id;
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa,
library l
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id
and l.library_id=f.library_id and f.library_id='$id'";
return $self->_fetch($statement);
}
=head2 fetch_by_Library_dbID_SeqTag_dbID
Title : fetch_by_Library_dbID_SeqTag_dbID
Usage : $obj->fetch_by_Library_dbID_SeqTag_dbID
Function:
Example :
Returns : array of seqtag objects
Args : library id,seqtag db id
=cut
sub fetch_by_Library_dbID_SeqTag_dbID
{
my ($self,$library_id,$id)=@_;
$self->throw("need a library id") unless $library_id;
$self->throw("need a seqtag id") unless $id;
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa,
library l
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id
and l.library_id=f.library_id and f.library_id='$library_id' and s.seqtag_id=$id";
return $self->_fetch($statement);
}
=head2 fetch_by_Library_Name
Title : fetch_by_Library_Name
Usage : $obj->fetch_by_Library_Name
Function:
Example :
Returns : array of seqtag objects
Args : library name
=cut
sub fetch_by_Library_Name
{
my ($self,$name)=@_;
$self->throw("need a library name") unless $name;
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa,
library l
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id
and l.library_id=f.library_id and l.name='$name'";
return $self->_fetch($statement);
}
=head2 fetch_by_LibraryList_dbID
Title : fetch_by_LibraryList_dbID
Usage : $obj->fetch_by_LibraryList_dbID
Function:
Example :
Returns : array of seqtag objects
Args : array of library ids
=cut
sub fetch_by_LibraryList_dbIDs
{
my ($self,@ids)=@_;
$self->throw("need a list of library ids") unless @ids && $#ids>=0;
my $list=$self->_prepare_list(@ids);
unless ($list){
return ();
}
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa,
library l
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id
and l.library_id=f.library_id and f.library_id in $list limit 10";
return $self->_fetch($statement);
}
=head2 fetch_by_LibraryList_Name
Title : fetch_by_LibraryList_Name
Usage : $obj->fetch_by_LibraryList_Name
Function:
Example :
Returns : array of seqtag objects
Args : array of library names
=cut
sub fetch_by_LibraryList_Name
{
my ($self,@ids)=@_;
$self->throw("need a list of library ids") unless @ids && $#ids>=0;
my $list=$self->_prepare_list(@ids);
unless ($list){
return ();
}
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,
sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa,
library l
where s.seqtag_id=f.seqtag_id and sa.seqtag_id=s.seqtag_id
and l.library_id=f.library_id and l.name in $list";
return $self->_fetch($statement);
}
=head2 fetch_by_Library_dbID_above_frequency
Title : fetch_by_Library_dbID_above_frequency
Usage : $obj->fetch_by_Library_dbID_above_frequency
Function: this method is supposed to be used from LibraryAdaptor
Example :
Returns : array of seqtag objects above absolute frequency
Args : libray id, frequency
=cut
sub fetch_by_Library_dbID_above_frequency {
my ($self,$id,$frequency)=@_;
$self->throw("need a library id") unless $id;
$self->throw("need a frequency value") unless $frequency;
my $multiplier=$self->multiplier;
my $statement="select s.seqtag_id,s.source,s.name,sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,seqtag_alias sa
where s.seqtag_id=f.seqtag_id
and sa.seqtag_id=s.seqtag_id
and f.library_id='$id' and f.frequency>$frequency";
return $self->_fetch($statement);
}
=head2 fetch_by_Library_dbID_above_relative_frequency
Title : fetch_by_Library_dbID_above_relative_frequency
Usage : $obj->fetch_by_Library_dbID_above_relative_frequency
Function: this method is supposed to be used from LibraryAdaptor
Example :
Returns : array of seqtag objects above relative frequency
Args : libray id, frequency
=cut
sub fetch_by_Library_dbID_above_relative_frequency {
my ($self,$id,$frequency,$multiplier)=@_;
$self->throw("need a library id") unless $id;
$self->throw("need a frequency value") unless $frequency;
$multiplier=$self->multiplier unless $multiplier;
my $statement="select s.seqtag_id,s.source,s.name,sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,library l,seqtag_alias sa
where s.seqtag_id=f.seqtag_id
and l.library_id=f.library_id
and sa.seqtag_id=s.seqtag_id
and f.library_id='$id' and
ceiling((f.frequency*$multiplier/l.total_seqtags) -1)>$frequency
order by relative_frequency desc";
return $self->_fetch($statement);
}
=head2 fetch_by_Library_dbID_below_relative_frequency
Title : fetch_by_Library_dbID_below_relative_frequency
Usage : $obj->fetch_by_Library_dbID_below_relative_frequency
Function: this method is supposed to be used from LibraryAdaptor
Example :
Returns : array of seqtag objects below relative frequency
Args : libray id, frequency
=cut
sub fetch_by_Library_dbID_below_relative_frequency {
my ($self,$id,$frequency,$multiplier)=@_;
$self->throw("need a library id") unless $id;
$self->throw("need a frequency value") unless $frequency;
$multiplier=$self->multiplier unless $multiplier;
my $statement="select s.seqtag_id,s.source,s.name,sa.db_name,sa.external_name,f.frequency,
ceiling((f.frequency*$multiplier/l.total_seqtags) -1) as relative_frequency
from seqtag s,frequency f,library l,seqtag_alias sa
where s.seqtag_id=f.seqtag_id
and l.library_id=f.library_id
and sa.seqtag_id=s.seqtag_id
and f.library_id='$id' and
ceiling((f.frequency*$multiplier/l.total_seqtags) -1)<$frequency
order by relative_frequency desc";
return $self->_fetch($statement);
}
=head2 multiplier
Title : multiplier
Usage : $obj->multiplier($newval)
Function:
Example :
Returns : value of multiplier
Args : newvalue (optional)
=cut
sub multiplier {
my ($obj,$value) = @_;
if( defined $value) {
$obj->{'_multiplier'} = $value;
} elsif (!defined$obj->{'_multiplier'}) {
$obj->{'_multiplier'}=1000000;
}
return $obj->{'_multiplier'};
}
sub _list {
my ($self,$statement)=@_;
my @tag_ids;
my $sth = $self->prepare($statement);
$sth->execute();
while (my $nm=$sth->fetchrow_array){
push @tag_ids,$nm;
}
return @tag_ids;
}
sub _fetch {
my ($self,$statement)=@_;
my @tags;
my $sth = $self->prepare($statement);
$sth->execute();
my ($library_id,$source,$name,$db,$external_name,$frequency,$relative_frequency);
$sth->bind_columns(undef,\$library_id,\$source,\$name,\$db,\$external_name,\$frequency,\$relative_frequency);
while ($sth->fetch){
my @args=($library_id,$source,$name,$frequency,$relative_frequency);
my $tg=Bio::EnsEMBL::ExternalData::Expression::SeqTag->new($self,@args);
push @tags,$tg;
my $link = new Bio::Annotation::DBLink;
$link->database($db);
$link->primary_id($external_name);
$tg->add_DBLink($link);
}
return @tags;
}
sub _fetch_aliases {
my ($self,$statement)=@_;
my @tags;
my $sth = $self->prepare($statement);
$sth->execute();
my ($name,$external_name,$db);
$sth->bind_columns(undef,\$name,\$external_name,\$db);
while ($sth->fetch){
my ($library_id,$source,$frequency,$relative_frequency);
my @args=($library_id,$source,$name,$frequency,$relative_frequency);
my $tg=Bio::EnsEMBL::ExternalData::Expression::SeqTag->new($self,@args);
push @tags,$tg;
my $link = new Bio::Annotation::DBLink;
$link->database($db);
$link->primary_id($external_name);
$tg->add_DBLink($link);
}
return @tags;
}
sub _prepare_list {
my ($self,@ids)=@_;
my $string;
foreach my $id(@ids){
$string .= $id . ",";
}
chop $string;
if ($string) { $string = "($string)";}
return $string;
}