Raw content of Bio::EnsEMBL::Analysis::RunnableDB::Pseudogene2x # 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::Pseudogene2x.pm =head1 SYNOPSIS my $runnabledb = Bio::EnsEMBL::Analysis::RunnableDB::Pseudogene_DB->new( -db => $db_adaptor, -input_id => $slice_id, -analysis => $analysis, ); $runnabledb->fetch_input(); $runnabledb->run(); my @array = @{$runnabledb->output}; $runnabledb->write_output(); =head1 DESCRIPTION This object wraps Bio::EnsEMBL::Analysis::Runnable::Pseudogene2x.pm Specidfic behaviour for Pseudogene identification in 2x gene-builds =head1 CONTACT Post questions to the Ensembl development list: ensembl-dev@ebi.ac.uk =head1 APPENDIX =cut package Bio::EnsEMBL::Analysis::RunnableDB::Pseudogene2x; use strict; use vars qw(@ISA); use Bio::EnsEMBL::DBSQL::DBConnection; use Bio::EnsEMBL::Analysis::Config::Pseudogene; use Bio::EnsEMBL::Utils::Exception qw(verbose throw warning stack_trace); use Bio::EnsEMBL::Analysis::RunnableDB::Pseudogene_DB; use Bio::EnsEMBL::Analysis::Runnable::Pseudogene2x; @ISA = qw(Bio::EnsEMBL::Analysis::RunnableDB::Pseudogene_DB ); sub fetch_input { my( $self) = @_; $self->SUPER::fetch_input; my $genes_slice = $self->query; my @seq_level_features; foreach my $bit (@{$genes_slice->project('seqlevel')}) { push @seq_level_features, Bio::EnsEMBL::Feature->new(-start => $bit->from_start + $genes_slice->start - 1, -end => $bit->from_end + $genes_slice->start - 1, -strand => 1); } foreach my $run (@{$self->runnable}) { $run->seqlevel(\@seq_level_features); } } sub make_runnable { my ($self) = @_; my $run = Bio::EnsEMBL::Analysis::Runnable::Pseudogene2x->new ( -analysis => $self->analysis, -genes => $self->genes, -repeat_features => $self->repeat_blocks, -PS_REPEAT_TYPES => $self->PS_REPEAT_TYPES, -PS_FRAMESHIFT_INTRON_LENGTH => $self->PS_FRAMESHIFT_INTRON_LENGTH, -PS_MAX_INTRON_LENGTH => $self->PS_MAX_INTRON_LENGTH, -PS_MAX_INTRON_COVERAGE => $self->PS_MAX_INTRON_COVERAGE, -PS_MAX_EXON_COVERAGE => $self->PS_MAX_EXON_COVERAGE, -PS_NUM_FRAMESHIFT_INTRONS => $self->PS_NUM_FRAMESHIFT_INTRONS, -PS_NUM_REAL_INTRONS => $self->PS_NUM_REAL_INTRONS, -SINGLE_EXON => $self->SINGLE_EXON, -INDETERMINATE => $self->INDETERMINATE, -PS_MIN_EXONS => $self->PS_MIN_EXONS, -PS_MULTI_EXON_DIR => $self->PS_MULTI_EXON_DIR, -BLESSED_BIOTYPES => $self->BLESSED_BIOTYPES, -PS_PSEUDO_TYPE => $self->PS_PSEUDO_TYPE, -PS_BIOTYPE => $self->PS_BIOTYPE, -PS_REPEAT_TYPE => $self->PS_REPEAT_TYPE, -DEBUG => $self->DEBUG, ); $self->runnable($run); } sub get_all_repeat_blocks { my ($self,$repeat_ref) = @_; my @repeat_blocks; my @repeats = @{$repeat_ref}; @repeats = sort {$a->start <=> $b->start} @repeats; my $curblock = undef; REPLOOP: foreach my $repeat (@repeats) { my $rc = $repeat->repeat_consensus; if ($rc->repeat_class !~ /LINE/ && $rc->repeat_class !~ /LTR/ && $rc->repeat_class !~ /SINE/ && $rc->repeat_class !~ /Unknown/) { next REPLOOP; } if ($repeat->start <= 0) { $repeat->start(1); } if (defined($curblock) && $curblock->end >= $repeat->start) { if ($repeat->end > $curblock->end) { $curblock->end($repeat->end); } } else { $curblock = Bio::EnsEMBL::Feature->new( -START => $repeat->start, -END => $repeat->end, -STRAND => $repeat->strand ); push (@repeat_blocks,$curblock); } } @repeat_blocks = sort {$a->start <=> $b->start} @repeat_blocks; return\@repeat_blocks; } 1;