Raw content of Bio::EnsEMBL::Analysis::RunnableDB::BestPmatch
package Bio::EnsEMBL::Analysis::RunnableDB::BestPmatch;
use vars qw(@ISA);
use strict;
use Bio::EnsEMBL::Analysis::RunnableDB::BaseGeneBuild;
use Bio::EnsEMBL::Analysis::Config::GeneBuild::Pmatch qw(BESTPMATCH_BY_LOGIC);
use Bio::EnsEMBL::DnaPepAlignFeature;
use Bio::EnsEMBL::Utils::Exception qw(throw warning);
use Bio::EnsEMBL::Utils::Argument qw (rearrange);
use Bio::EnsEMBL::Analysis::Tools::GeneBuildUtils qw(empty_Object);
use Bio::EnsEMBL::Analysis::Runnable::BestPmatch;
@ISA = qw (
Bio::EnsEMBL::Analysis::RunnableDB::BaseGeneBuild
);
sub new {
my ($class,@args) = @_;
my $self = $class->SUPER::new(@args);
print "\nReading config : Bio/EnsEMBL/Analysis/Config/GeneBuild/Pmatch.pm\n\n" ;
$self->read_and_check_config($BESTPMATCH_BY_LOGIC);
return $self;
}
sub fetch_input{
my ($self) = @_;
my $pafa = $self->get_dbadaptor($self->INPUT_DB)->get_ProteinAlignFeatureAdaptor;
my @features ;
if ( ref($self->PMATCH_LOGIC_NAME)=~m/ARRAY/ ) {
for my $logic_name (@{ $self->PMATCH_LOGIC_NAME}) {
my @f = @{$pafa->fetch_all_by_logic_name($logic_name)} ;
print "Have fetched ".@f." with logic_name : $logic_name from ".$pafa->dbc->dbname."\n";
push @features, @f ;
}
} else {
@features = @{$pafa->fetch_all_by_logic_name($self->PMATCH_LOGIC_NAME)} ;
print "Have fetched ".@features." with logic_name : ".$self->PMATCH_LOGIC_NAME." from ".$pafa->dbc->dbname."\n";
}
$self->pmatch_features(\@features);
}
sub run{
my ($self) = @_;
my $pmf2 = Bio::EnsEMBL::Analysis::Runnable::BestPmatch->
new(
'-protein_hits' => $self->pmatch_features,
'-min_coverage' => $self->MIN_COVERAGE,
'-analysis' => $self->analysis,
);
$pmf2->run;
my @output = @{$pmf2->output};
foreach my $output(@output){
empty_Object($output);
}
#my @unique = $self->uniquify(@output);
$self->output(\@output);
}
sub get_adaptor{
my ($self) = @_;
my $output_db = $self->get_dbadaptor($self->OUTPUT_DB);
return $output_db->get_ProteinAlignFeatureAdaptor;
}
sub pmatch_features{
my ($self, $features) = @_;
if($features){
if(ref($features) eq "ARRAY"){
push(@{$self->{'pmatch_features'}}, @$features);
}else{
push(@{$self->{'pmatch_features'}}, $features);
}
}
return $self->{'pmatch_features'};
}
sub PMATCH_LOGIC_NAME{
my ($self, $arg) = @_;
if($arg){
$self->{'PMATCH_LOGIC_NAME'} = $arg;
}
return $self->{'PMATCH_LOGIC_NAME'};
}
sub OUTPUT_DB{
my ($self, $arg) = @_;
if($arg){
$self->{'OUTPUT_DB'} = $arg;
}
return $self->{'OUTPUT_DB'};
}
sub INPUT_DB{
my ($self, $arg) = @_;
if($arg){
$self->{'INPUT_DB'} = $arg;
}
return $self->{'INPUT_DB'};
}
sub MIN_COVERAGE{
my ($self, $arg) = @_;
if($arg){
$self->{'MIN_COVERAGE'} = $arg;
}
return $self->{'MIN_COVERAGE'} = $arg;
}
sub read_and_check_config {
my $self = shift;
$self->SUPER::read_and_check_config($BESTPMATCH_BY_LOGIC);
#######
#CHECKS
#######
foreach my $config_var (qw(PMATCH_LOGIC_NAME
OUTPUT_DB
INPUT_DB)){
throw("You must define $config_var in config for logic '".
$self->analysis->logic_name."'")
if not defined $self->$config_var;
}
};