Raw content of Bio::EnsEMBL::Analysis::RunnableDB::CopyGenes
=head1 NAME
ProteinAnnotation.pm - DESCRIPTION of Object
=head1 SYNOPSIS
RunnableDB for copying genes from a source database to a target
database. By default all the genes in the database COPY_SOURCE_DB are copied into
the database COPY_TARGET_DB
=head1 DESCRIPTION
=head1 CONTACT
ensembl-dev@ebi.ac.uk
=cut
package Bio::EnsEMBL::Analysis::RunnableDB::CopyGenes;
use vars qw(@ISA);
use strict;
use Bio::EnsEMBL::Analysis::RunnableDB;
use Bio::EnsEMBL::Analysis::RunnableDB::BaseGeneBuild;
use Bio::EnsEMBL::Utils::Exception qw(throw warning);
use Bio::EnsEMBL::Utils::Argument qw (rearrange);
@ISA = qw (
Bio::EnsEMBL::Analysis::RunnableDB::BaseGeneBuild
);
sub new{
my ($class,@args) = @_;
my $self = $class->SUPER::new(@args);
my ($given_source_db, $given_target_db, $given_biotype) = rearrange
(['SOURCE_DB', 'TARGET_DB', 'BIOTYPE'], @args);
#### Default values...
$self->source_db_name("COPY_SOURCE_DB");
$self->target_db_name("COPY_TARGET_DB");
$self->biotype("");
### ...are over-ridden by parameters given in analysis table...
my $ph = $self->parameters_hash;
$self->source_db_name($ph->{-source_db}) if exists $ph->{-source_db};
$self->target_db_name($ph->{-target_db}) if exists $ph->{-target_db};
$self->biotype($ph->{-biotype}) if exists $ph->{-biotype};
### ...which are over-ridden by constructor arguments.
$self->source_db_name($given_source_db) if defined $given_source_db;
$self->target_db_name($given_target_db) if defined $given_target_db;
$self->biotype($given_biotype) if defined $given_biotype;
return $self;
}
#getter/setters
sub source_db_name{
my ($self, $arg) = @_;
if(defined $arg){
$self->{'source_db_name'} = $arg;
}
return $self->{'source_db_name'};
}
sub target_db_name{
my ($self, $arg) = @_;
if(defined $arg){
$self->{'target_db_name'} = $arg;
}
return $self->{'target_db_name'};
}
sub biotype{
my ($self, $arg) = @_;
if(defined $arg){
$self->{'biotype'} = $arg;
}
return $self->{'biotype'};
}
################################
sub fetch_input {
my ($self) = @_;
my $source_db = $self->get_dbadaptor($self->source_db_name);
my $slice = $source_db->get_SliceAdaptor->fetch_by_name($self->input_id);
#
# total paranoia: fetch everything up front
#
my (@genes);
my @target_genes;
if($self->biotype){
@target_genes = @{$slice->get_all_Genes_by_type($self->biotype)};
}else{
@target_genes = @{$slice->get_all_Genes};
}
foreach my $g (@target_genes) {
foreach my $t (@{$g->get_all_Transcripts}) {
foreach my $e (@{$t->get_all_Exons}) {
$e->get_all_supporting_features;
$e->stable_id;
}
my $tr = $t->translation;
if (defined $tr) {
$tr->stable_id;
$tr->get_all_Attributes;
$tr->get_all_DBEntries;
$tr->get_all_ProteinFeatures;
}
$t->stable_id;
$t->get_all_supporting_features;
$t->get_all_DBEntries;
$t->display_xref;
$t->get_all_Attributes;
}
$g->stable_id;
$g->get_all_DBEntries;
$g->display_xref;
$g->get_all_Attributes;
push @genes, $g;
}
$self->output(\@genes);
}
##################################
sub write_output {
my($self) = @_;
my $target_db = $self->get_dbadaptor($self->target_db_name);
my $g_adap = $target_db->get_GeneAdaptor;
foreach my $g (@{$self->output}) {
$g_adap->store($g);
}
return 1;
}
1;