Raw content of Bio::EnsEMBL::Compara::Production::GenomicAlignBlock::CreateLowCoverageJobs
#
# You may distribute this module under the same terms as perl itself
#
# POD documentation - main docs before the code
=pod
=head1 NAME
Bio::EnsEMBL::Compara::RunnableDB::CreateLowCoverageAlignmentJobs
=cut
=head1 SYNOPSIS
my $db = Bio::EnsEMBL::Compara::DBAdaptor->new($locator);
my $low_coverage_aligment = Bio::EnsEMBL::Pipeline::RunnableDB::CreateLowCoverageAlignmentJobs->new (
-db => $db,
-input_id => $input_id
-analysis => $analysis );
$low_coverage_aligment->fetch_input(); #reads from DB
$low_coverage_aligment->run();
$low_coverage_aligment->write_output(); #writes to DB
=cut
=head1 DESCRIPTION
=cut
=head1 CONTACT
Describe contact details here
=cut
=head1 APPENDIX
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _
=cut
package Bio::EnsEMBL::Compara::Production::GenomicAlignBlock::CreateLowCoverageJobs;
use strict;
use Bio::EnsEMBL::Hive;
use Bio::EnsEMBL::Compara::Production::DBSQL::DBAdaptor;
use Bio::EnsEMBL::Analysis::RunnableDB;
use Bio::EnsEMBL::Hive::Process
our @ISA = qw(Bio::EnsEMBL::Hive::Process);
sub fetch_input {
my $self = shift;
#
# parameters which can be set either via
# $self->parameters OR
# $self->input_id
#
$self->{'base_method_link_species_set_id'} = undef;
$self->{'new_method_link_species_set_id'} = undef;
$self->{'tree_analysis_data_id'} = undef;
$self->{'pairwise_analysis_data_id'} = undef;
$self->{'reference_species'} = undef;
$self->{'taxon_tree_analysis_data_id'} = undef;
$self->get_params($self->parameters);
$self->get_params($self->input_id);
#throw("Must specify import alignment logic name of ImportAlignment analysis (import_alignment_logic_name)")
# unless (!defined $self->import_alignment_logic_name);
throw("Must specify the method_link_species_set_id for the alignment you wish to import (method_link_species_set_id)")
unless (defined $self->base_method_link_species_set_id);
# create a Compara::DBAdaptor which shares my DBConnection
$self->{'comparaDBA'} = Bio::EnsEMBL::Compara::Production::DBSQL::DBAdaptor->new(-DBCONN => $self->db->dbc);
return 1;
}
sub run
{
my $self = shift;
$self->createLowCoverageGenomeAlignmentJobs();
return 1;
}
sub write_output
{
my $self = shift;
return 1;
}
##################################
#
# subroutines
#
##################################
sub get_params {
my $self = shift;
my $param_string = shift;
return unless($param_string);
print("parsing parameter string : ",$param_string,"\n");
my $params = eval($param_string);
return unless($params);
foreach my $key (keys %$params) {
print(" $key : ", $params->{$key}, "\n");
}
#if(defined($params->{'import_alignment_logic_name'})) {
# $self->import_alignment_logic_name($params->{'import_alignment_logic_name'});
#}
if(defined($params->{'base_method_link_species_set_id'})) {
$self->base_method_link_species_set_id($params->{'base_method_link_species_set_id'});
}
if(defined($params->{'new_method_link_species_set_id'})) {
$self->new_method_link_species_set_id($params->{'new_method_link_species_set_id'});
}
if (defined($params->{'tree_analysis_data_id'})) {
$self->tree_analysis_data_id($params->{'tree_analysis_data_id'});
}
if (defined($params->{'pairwise_analysis_data_id'})) {
$self->pairwise_analysis_data_id($params->{'pairwise_analysis_data_id'});
}
if (defined($params->{'taxon_tree_analysis_data_id'})) {
$self->taxon_tree_analysis_data_id($params->{'taxon_tree_analysis_data_id'});
}
if (defined($params->{'reference_species'})) {
$self->reference_species($params->{'reference_species'});
}
return;
}
##########################################
#
# getter/setter methods
#
##########################################
sub base_method_link_species_set_id {
my $self = shift;
$self->{'_base_method_link_species_set_id'} = shift if(@_);
return $self->{'_base_method_link_species_set_id'};
}
sub new_method_link_species_set_id {
my $self = shift;
$self->{'_new_method_link_species_set_id'} = shift if(@_);
return $self->{'_new_method_link_species_set_id'};
}
sub tree_analysis_data_id {
my $self = shift;
$self->{'_tree_analysis_data_id'} = shift if(@_);
return $self->{'_tree_analysis_data_id'};
}
sub pairwise_analysis_data_id {
my $self = shift;
$self->{'_pairwise_analysis_data_id'} = shift if(@_);
return $self->{'_pairwise_analysis_data_id'};
}
sub taxon_tree_analysis_data_id {
my $self = shift;
$self->{'_taxon_tree_analysis_data_id'} = shift if(@_);
return $self->{'_taxon_tree_analysis_data_id'};
}
sub reference_species {
my $self = shift;
$self->{'_reference_species'} = shift if(@_);
return $self->{'_reference_species'};
}
sub createLowCoverageGenomeAlignmentJobs
{
my $self = shift;
my $gab_adaptor = $self->{'comparaDBA'}->get_GenomicAlignBlockAdaptor;
my $mlss_adaptor = $self->{'comparaDBA'}->get_MethodLinkSpeciesSetAdaptor;
throw ("No method_link_species_set") if (!$mlss_adaptor);
my $base_mlss = $mlss_adaptor->fetch_by_dbID($self->base_method_link_species_set_id);
my $analysis = $self->db->get_AnalysisAdaptor->fetch_by_logic_name("LowCoverageGenomeAlignment");
#Need to select genomic_align_blocks which are not ancestral segments
#The quickest way is to query the database rather than go through the api
my $dbname = $self->{'comparaDBA'}->dbc->dbname;
my $analysis_id = $analysis->dbID;
my $sql = "select genomic_align_block_id from genomic_align_block gab left join genomic_align ga using (genomic_align_block_id) left join dnafrag using (dnafrag_id) where gab.method_link_species_set_id=? and genome_db_id <> 63 group by genomic_align_block_id;";
print "sql $sql " . $self->base_method_link_species_set_id . "\n";
my $sth = $self->{'comparaDBA'}->dbc->prepare($sql);
$sth->execute($self->base_method_link_species_set_id);
my $genomic_align_block_id;
my @genomic_align_block_ids;
$sth->bind_columns(\$genomic_align_block_id);
while ($sth->fetch()) {
push @genomic_align_block_ids, $genomic_align_block_id;
}
$sth->finish();
my $count = 0;
foreach my $genomic_align_block_id (@genomic_align_block_ids) {
my $input_id = "{genomic_align_block_id=>" . $genomic_align_block_id .
",method_link_species_set_id=>" . $self->new_method_link_species_set_id .
",tree_analysis_data_id=>" . $self->tree_analysis_data_id .
",pairwise_analysis_data_id=>" . $self->pairwise_analysis_data_id .
",taxon_tree_analysis_data_id=>" . $self->taxon_tree_analysis_data_id .
",reference_species=>'" . $self->reference_species . "'}";
Bio::EnsEMBL::Hive::DBSQL::AnalysisJobAdaptor->CreateNewJob (
-input_id => $input_id,
-analysis => $analysis,
-input_job_id => 0,
);
$count++;
}
printf("created %d jobs for LowCoverageGenomeAlignment\n", $count);
}
1;