Raw content of Bio::EnsEMBL::Analysis::Runnable::CPG
# Ensembl module for Bio::EnsEMBL::Analysis::Runnable::CPG
#
# Copyright (c) 2004 Ensembl
#
=head1 NAME
Bio::EnsEMBL::Analysis::Runnable::CPG
=head1 SYNOPSIS
my $runnable = Bio::EnsEMBL::Analysis::Runnable::CPG->new
(
-query => $slice,
-program => 'cpg',
);
$runnable->run;
my @simple_features = @{$runnable->output};
=head1 DESCRIPTION
CPG expects to run the program cpg and produces SimpleFeature which can be
stored in the simple_feature table in the core database
=head1 CONTACT
Post questions to the Ensembl development list: ensembl-dev@ebi.ac.uk
=cut
package Bio::EnsEMBL::Analysis::Runnable::CPG;
use strict;
use warnings;
use Bio::EnsEMBL::Analysis::Runnable;
use Bio::EnsEMBL::Utils::Exception qw(throw warning);
use Bio::EnsEMBL::Utils::Argument qw( rearrange );
use vars qw(@ISA);
@ISA = qw(Bio::EnsEMBL::Analysis::Runnable);
=head2 new
Arg [1] : Bio::EnsEMBL::Analysis::Runnable::CPG
Arg [2] : int, minimun length of hit
Arg [3] : int, minimun gc content of hit
Arg [4] : int, minimum oe of hit
Function : create a Bio::EnsEMBL::Analysis::Runnable::CPG
Returntype: Bio::EnsEMBL::Analysis::Runnable::CPG
Exceptions: none
Example :
=cut
sub new {
my ($class,@args) = @_;
my $self = $class->SUPER::new(@args);
my ($min_length, $min_gc, $min_oe) = rearrange(['MIN_LENGTH',
'MIN_GC_CONTENT',
'MIN_OE',
], @args);
##################
#SETTING DEFAULTS#
##################
$self->program('cpg') if(!$self->program);
$self->min_length(400);
$self->min_gc_content(50);
$self->min_oe(0.6);
#################
$self->min_length($min_length) if($min_length);
$self->min_gc_content($min_gc) if($min_gc);
$self->min_oe($min_oe) if($min_oe);
return $self;
}
=head2 containers
Arg [1] : Bio::EnsEMBL::Analysis::Runnable::CPG
Arg [2] : int, minimun value
Function : container for specified variable. This pod refers to the
three methods below min_length, min_gc_content, min_oe. These are simple
containers which dont do more than hold and return an given value
nothing is defined
Returntype: int
Exceptions:
Example :
=cut
sub min_length{
my $self = shift;
$self->{'min_length'} = shift if(@_);
return $self->{'min_length'};
}
sub min_gc_content{
my $self = shift;
$self->{'min_gc_content'} = shift if(@_);
return $self->{'min_gc_content'};
}
sub min_oe{
my $self = shift;
$self->{'min_oe'} = shift if(@_);
return $self->{'min_oe'};
}
=head2 parse_results
Arg [1] : Bio::EnsEMBL::Analysis::Runnable::CPG
Arg [2] : string, filename
Function : to open and parse the results file
Returntype: none
Exceptions: throws on failure to open or close the results file
or if the results file doesnt exist
Example :
=cut
sub parse_results{
my ($self, $results) = @_;
if(!$results){
$results = $self->resultsfile;
}
my $ff = $self->feature_factory;
if(!-e $results){
throw("Can't parse an no existance results file ".$results.
" CPG:parse_results");
}
my @output;
open(CPG, $results) or throw("FAILED to open ".$results.
" CPG:parse_results");
LINE:while(){
if (/\d+/){ #ignore introductory lines
chomp;
my @elements = split;
my ($name, $start, $end, $score, $gc_content, $oe)
= @elements[0, 1, 2, 3, 6, 7];
if($oe eq "-"){
$oe = 0;
}
my $length = $end - $start + 1;
next LINE unless($length >= $self->min_length &&
$gc_content >= $self->min_gc_content &&
$oe >= $self->min_oe);
my $sf = $ff->create_simple_feature($start, $end, 0, $score,
"oe = $oe", $name,
$self->query);
push(@output, $sf);
}
}
$self->output(\@output);
close(CPG) or throw("FAILED to close ".$results.
" CPG:parse_results");
}
1;