Raw content of Bio::EnsEMBL::Analysis::RunnableDB::Finished::TRF
# Copyright GRL/EBI
#
# You may distribute this module under the same terms as perl itself
#
# POD documentation - main docs before the code
=pod
=head1 NAME
Bio::EnsEMBL::Analysis::RunnableDB::Finished::TRF
=head1 SYNOPSIS
my $db = Bio::EnsEMBL::DBLoader->new($locator);
my $trf = Bio::EnsEMBL::Analysis::RunnableDB::TRF->new(
-dbobj => $db,
-input_id => $input_id
-analysis => $analysis
);
$trf->fetch_input();
$trf->run();
$trf->output();
$trf->write_output(); #writes to DB
=head1 DESCRIPTION
This object wraps Bio::EnsEMBL::Analysis::Runnable::TRF to add
functionality to read and write to databases. The appropriate
Bio::EnsEMBL::Analysis object must be passed for extraction of
parameters. A Bio::EnsEMBL::Pipeline::DBSQL::Obj is required
for database access.
=head1 CONTACT
Refactored by Sindhu K. Pillai B
=head1 APPENDIX
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _
=cut
package Bio::EnsEMBL::Analysis::RunnableDB::Finished::TRF;
use strict;
use Bio::EnsEMBL::Utils::Exception qw(verbose throw warning);
use Bio::EnsEMBL::Analysis::RunnableDB::Finished;
use Bio::EnsEMBL::Analysis::Runnable::TRF;
use Bio::EnsEMBL::Analysis::Config::General;
use vars qw(@ISA);
@ISA = qw(Bio::EnsEMBL::Analysis::RunnableDB::Finished);
=head2 fetch_input
=cut
sub fetch_input {
my( $self) = @_;
throw("No input id") unless defined($self->input_id);
my $sliceid = $self->input_id;
my $sa = $self->db->get_SliceAdaptor();
my $slice = $sa->fetch_by_name($sliceid);
$slice->{'seq'}=$slice->seq();
my %parameters = %{$self->parameters_hash};
$parameters{-trf} = $self->analysis->program_file || undef;
$parameters{-query} = $slice->get_repeatmasked_seq($ANALYSIS_RM_TRF,$SOFT_MASKING) or throw("Unable to fetch slice");
$parameters{-analysis} = $self->analysis;
my $runnable = new Bio::EnsEMBL::Analysis::Runnable::TRF(%parameters);
$self->runnable($runnable);
return 1;
}
sub write_output{
my ($self) = @_;
my @features = @{$self->output()->[0]};
my $repeat_f_a = $self->db->get_RepeatFeatureAdaptor();
my $slice;
eval {
$slice = $self->db->get_SliceAdaptor->fetch_by_name($self->input_id);
};
if ($@) {
print STDERR "Slice not found, skipping writing output to db: $@\n";
}
foreach my $f(@features){
$f->analysis($self->analysis);
$f->slice($slice);
$repeat_f_a->store($f);
}
}
1;