Raw content of Bio::EnsEMBL::Compara::Production::GenomicAlignBlock::CreatePairAlignerJobs # # 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::CreatePairAlignerJobs =cut =head1 SYNOPSIS my $db = Bio::EnsEMBL::Compara::DBAdaptor->new($locator); my $repmask = Bio::EnsEMBL::Pipeline::RunnableDB::CreatePairAlignerJobs->new ( -db => $db, -input_id => $input_id -analysis => $analysis ); $repmask->fetch_input(); #reads from DB $repmask->run(); $repmask->output(); $repmask->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::CreatePairAlignerJobs; use strict; use Bio::EnsEMBL::Hive; use Bio::EnsEMBL::Compara::Production::DBSQL::DBAdaptor; use Bio::EnsEMBL::Compara::Production::DnaFragChunk; use Bio::EnsEMBL::Compara::Production::DnaFragChunkSet; use Bio::EnsEMBL::Compara::Production::DnaCollection; 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->{'pair_aligner_logic_name'} = undef; $self->{'query_dna'} = undef; $self->{'target_dna'} = undef; $self->{'method_link_species_set_id'} = undef; $self->get_params($self->parameters); $self->get_params($self->input_id); # create a Compara::DBAdaptor which shares my DBConnection $self->{'comparaDBA'} = Bio::EnsEMBL::Compara::Production::DBSQL::DBAdaptor->new(-DBCONN => $self->db->dbc); # get the PairAligner analysis throw("must specify pair_aligner to identify logic_name of PairAligner analysis") unless(defined($self->{'pair_aligner_logic_name'})); $self->{'pair_aligner'} = $self->db->get_AnalysisAdaptor->fetch_by_logic_name($self->{'pair_aligner_logic_name'}); throw("unable to find analysis with logic_name ". $self->{'pair_aligner_logic_name'}) unless(defined($self->{'pair_aligner'})); # get DnaCollection of query throw("must specify 'query_collection_name' to identify DnaCollection of query") unless(defined($self->{'query_collection_name'})); $self->{'query_collection'} = $self->{'comparaDBA'}->get_DnaCollectionAdaptor-> fetch_by_set_description($self->{'query_collection_name'}); throw("unable to find DnaCollection with name : ". $self->{'query_collection_name'}) unless(defined($self->{'query_collection'})); # get DnaCollection of target throw("must specify 'target_collection_name' to identify DnaCollection of query") unless(defined($self->{'target_collection_name'})); $self->{'target_collection'} = $self->{'comparaDBA'}->get_DnaCollectionAdaptor-> fetch_by_set_description($self->{'target_collection_name'}); throw("unable to find DnaCollection with name : ". $self->{'target_collection_name'}) unless(defined($self->{'target_collection'})); $self->print_params; return 1; } sub run { my $self = shift; $self->createPairAlignerJobs(); 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"); } $self->{'pair_aligner_logic_name'} = $params->{'pair_aligner'} if(defined($params->{'pair_aligner'})); $self->{'query_collection_name'} = $params->{'query_collection_name'} if(defined($params->{'query_collection_name'})); $self->{'target_collection_name'} = $params->{'target_collection_name'} if(defined($params->{'target_collection_name'})); $self->{'method_link_species_set_id'} = $params->{'method_link_species_set_id'} if(defined($params->{'method_link_species_set_id'})); return; } sub print_params { my $self = shift; printf(" params:\n"); printf(" method_link_species_set_id : %d\n", $self->{'method_link_species_set_id'}); printf(" pair_aligner : (%d) %s\n", $self->{'pair_aligner'}->dbID, $self->{'pair_aligner'}->logic_name); printf(" query_collection : (%d) %s\n", $self->{'query_collection'}->dbID, $self->{'query_collection'}->description); printf(" target_collection : (%d) %s\n", $self->{'target_collection'}->dbID, $self->{'target_collection'}->description); } sub createPairAlignerJobs { my $self = shift; my $query_dna_list = $self->{'query_collection'}->get_all_dna_objects; my $target_dna_list = $self->{'target_collection'}->get_all_dna_objects; my $count=0; foreach my $target_dna (@{$target_dna_list}) { my $input_hash = {}; $input_hash->{'dbChunk'} = undef; $input_hash->{'dbChunkSetID'} = undef; if($target_dna->isa('Bio::EnsEMBL::Compara::Production::DnaFragChunk')) { $input_hash->{'dbChunk'} = $target_dna->dbID; } if($target_dna->isa('Bio::EnsEMBL::Compara::Production::DnaFragChunkSet')) { $input_hash->{'dbChunkSetID'} = $target_dna->dbID; } foreach my $query_dna (@{$query_dna_list}) { $input_hash->{'qyChunk'} = undef $input_hash->{'qyChunkSetID'} = undef; if($query_dna->isa('Bio::EnsEMBL::Compara::Production::DnaFragChunk')) { $input_hash->{'qyChunk'} = $query_dna->dbID; } if($query_dna->isa('Bio::EnsEMBL::Compara::Production::DnaFragChunkSet')) { $input_hash->{'qyChunkSetID'} = $query_dna->dbID; } my $input_id = main::encode_hash($input_hash); #printf("create_job : %s : %s\n", $self->{'pair_aligner'}->logic_name, $input_id); Bio::EnsEMBL::Hive::DBSQL::AnalysisJobAdaptor->CreateNewJob ( -input_id => $input_id, -analysis => $self->{'pair_aligner'}, -input_job_id => 0, ); $count++; } } printf("created %d jobs for pair aligner\n", $count); } 1;