Raw content of Bio::EnsEMBL::Analysis::Runnable::Spliced_elsewhere
# 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::Runnable::Spliced_elsewhere;
=head1 SYNOPSIS
my $runnable = Bio::EnsEMBL::Analysis::Runnable::Spliced_elsewhere ->new
(
'-genes' => \@genes_array_ref,
'-analysis' => $analysis_object,
);
$runnable->run;
$output = $runnable->output
=head1 DESCRIPTION
Runnable for Bio::EnsEMBL::Analysis::RunnableDB::Spliced_elsewhere
Does the blast analysis and returns the results to the runnable_db for
parsing.
Uses Bio::EnsEMBL::Analysis::Config::Pseudogene for config
=head1 CONTACT
Post questions to the Ensembl development list: ensembl-dev@ebi.ac.uk
=cut
package Bio::EnsEMBL::Analysis::Runnable::Spliced_elsewhere;
use strict;
use Bio::EnsEMBL::Analysis::Runnable::Pseudogene;
use Bio::EnsEMBL::Analysis::Config::Pseudogene;
use Bio::EnsEMBL::Analysis::Runnable::Blast;
use Bio::EnsEMBL::Analysis::Tools::BPliteWrapper;
use Bio::EnsEMBL::Analysis::Tools::FilterBPlite;
use Bio::EnsEMBL::Utils::Argument qw( rearrange );
use vars qw(@ISA);
@ISA = qw(Bio::EnsEMBL::Analysis::Runnable::Pseudogene);
=head2 new
Args : various
Description: Runnable constructor
Returntype : Bio::EnsEMBL::Analysis::Runnable::Spliced_elsewhere;
Caller : general
=cut
sub new {
my ($class,@args) = @_;
my $self = $class->SUPER::new(@args);
$self->{'_genes'} = []; #array of genescripts to test;
my($genes,$PS_MULTI_EXON_DIR) =
rearrange([qw( GENES
PS_MULTI_EXON_DIR
)], @args);
$self->genes($genes);
$self->PS_MULTI_EXON_DIR($PS_MULTI_EXON_DIR);
# Path to blast database
$self->db($self->PS_MULTI_EXON_DIR."/all_multi_exon_genes.fasta");
return $self;
}
=head2 run
Arg [none] :
Description: calls run_blast for each genescript in turn
Returntype : none
Exceptions : none
Caller : general
=cut
sub run {
my ($self)=@_;
my @genes = @{$self->genes};
GENE: foreach my $gene(@genes){
$self->run_blast($gene);
next GENE;
}
return 1;
}
=head2 run_blast
Arg [none] :
Description: runs the blast analysis, uses BPliteWapper as parser
Returntype : returns the blast result in a hash keyed by the transcript dbid
also returns the gene object in the hash for refence
Exceptions : none
Caller : general
=cut
sub run_blast{
my ($self,$gene)=@_;
my $bplitewrapper = Bio::EnsEMBL::Analysis::Tools::BPliteWrapper-> new
(
-query_type => 'dna',
-database_type => 'dna',
);
my %output_hash;
foreach my $trans (@{$gene->get_all_Transcripts}){
next unless ($trans->translateable_seq);
my $query = $trans->feature_Slice->expand(1000,1000)->get_repeatmasked_seq;
my $test = $trans->feature_Slice->get_repeatmasked_seq->seq;
# print "BEFORE Ns have gone " . length($test) . "\n";
$test =~ s/N//g;
# print "AFTER Ns have gone " . length($test) . "\n";
unless ( length($test) > 5 ) {
print STDOUT "ignoring " . $trans->display_id. " all Ns \n";
$output_hash{$trans->dbID}= 'REPEATS';
$self->output(\%output_hash);
return 1;
}
print $trans->stable_id if ( $trans->stable_id ) ;
# need to mask out other coding sequences here
my $blast = Bio::EnsEMBL::Analysis::Runnable::Blast->new
('-query' => $query,
'-program' => 'blastn',
'-database' => $self->db,
'-threshold' => 1e-50,
'-parser' => $bplitewrapper,
'-options' => 'V=10',
'-analysis' => $self->analysis,
);
eval {
$blast->run();
};
if ($@) {
$self->throw("Problem with Blast $@ \n ");
} else {
if ( $blast->output ) {
$output_hash{$trans->dbID}= $blast->output;
} else {
$output_hash{$trans->dbID}= 'NONE';
}
}
}
$self->output(\%output_hash);
return 1;
}
########################################################
# Containers
=head2 db
Arg [1] : scalar
Description: get/set path to blast database
Returntype : scalar
Exceptions : none
Caller : general
=cut
sub db {
my ($self, $db) = @_;
if ($db) {
$self->find_file($db);
$self->{'_db'} = $db;
}
return $self->{'_db'};
}
=head2 output
Arg [1] : hasref
Description: overrides output array
Returntype : array
Exceptions : none
Caller : general
=cut
sub output {
my ($self, $hash_ref) = @_;
if ($hash_ref) {
push @{$self->{'_output'}},$hash_ref;
}
return $self->{'_output'};
}