Raw content of Bio::EnsEMBL::Analysis::Runnable::Funcgen::Chipotle
# Ensembl module for Bio::EnsEMBL::Analysis::Runnable::Funcgen::Chipotle
#
# Copyright (c) 2007 Ensembl
#
=head1 NAME
Bio::EnsEMBL::Analysis::Runnable::Funcgen::Chipotle
=head1 SYNOPSIS
my $runnable = Bio::EnsEMBL::Analysis::Runnable::Funcgen::Chipotle->new
(
-analysis => $analysis,
-query => 'slice',
-program => 'program.pl',
);
$runnable->run;
my @annotated_features = @{$runnable->output};
=head1 DESCRIPTION
Chipotle expects to run the program ChIPOTle (PMID: 16277752) and
predicts features which can be stored in the predicted_feature table
in the eFG database
=head1 AUTHOR
This module was created by Stefan Graf. It is part of the
Ensembl project: /
=head1 CONTACT
Post questions to the Ensembl development list: ensembl-dev@ebi.ac.uk
=cut
package Bio::EnsEMBL::Analysis::Runnable::Funcgen::Chipotle;
use strict;
use warnings;
use Data::Dumper;
use Bio::EnsEMBL::Analysis::Runnable;
use Bio::EnsEMBL::Analysis::Runnable::Funcgen;
use Bio::EnsEMBL::Utils::Exception qw(throw warning stack_trace_dump);
use Bio::EnsEMBL::Utils::Argument qw( rearrange );
use vars qw(@ISA);
@ISA = qw(Bio::EnsEMBL::Analysis::Runnable::Funcgen);
=head2 run_analysis
Arg [1] : Bio::EnsEMBL::Analysis::Runnable::Chipotle
Arg [2] : string, program name
Usage :
Description :
Returns :
Exceptions :
=cut
sub run_analysis {
print "Analysis::Runnable::Funcgen::Chipotle::run_analysis\n";
my ($self, $program) = @_;
if(!$program){
$program = $self->program;
}
throw($program." is not executable Chipotle::run_analysis ")
unless($program && -x $program);
# parse parameters
my $param = $self->get_parameters();
(my $resultsfile = $self->infile) =~ s/\.dat$/.peaks/;
$self->resultsfile($resultsfile);
$self->files_to_delete($resultsfile);
my @fields = (0..3);
$self->output_fields(\@fields);
my $command = join(' ', $self->program, 'get_peaks', '0', '0',
$self->infile(), $self->resultsfile(),
$param->{alpha}, $param->{stepSize},
$param->{windowSize}, $param->{adjustPvalue}, 'NORM');
warn("Running analysis " . $command . "\n");
eval { system($command) };
throw("FAILED to run $command: ", $@) if ($@);
# Check if adjustments via --transform need to be applied
### Version 1 logfile processing disabled ###
#(my $logfile = $self->resultsfile()) =~ s/_peaks.tsv/_STDOUT.txt/;
#open(LOG, "$logfile")
# or throw("Unable to open logfile $logfile.");
#my $transform;
#while () {
# print;
# next until (/^Re-run chipotle using \'(--transform -?\d+\.\d+)\'/);
# $transform = $1;
# #print "transform: ", $transform, "\n";
#}
#close LOG;
#if (defined $transform) {
# $command .= " $transform";
# warn("Re-running analysis " . $command . "\n");
#
# eval { system($command) };
# if ($@) {
# throw("FAILED to run ".$command);
# }
#}
}
=head2 write_infile
Arg [1] : Bio::EnsEMBL::Analysis::Runnable::Chipotle
Arg [2] : filename
Description :
Returntype :
Exceptions :
Example :
=cut
sub write_infile {
my ($self, $filename) = @_;
print "Analysis::Runnable::Funcgen::Chipotle::write_infile\n";
if (! $filename) {
$filename = $self->infile();
}
# merge infiles if more than one replicate have been selected
my $replicates = scalar(keys %{$self->result_features});
#print Dumper $replicates;
if ($replicates > 1) {
my @tmpfiles = ();
foreach my $rset (sort keys %{$self->result_features}) {
my $i = 1;
(my $tmpfile = $self->infile) =~ s/\.dat$/.$rset.dat/;
print Dumper $tmpfile;
open(DAT, ">$tmpfile")
or throw ("Can't open file $tmpfile");
map {
printf DAT "%d\t%s\t%d\t%d\t%f\n",
$i++, (@$_)[0..3];
} @{$self->result_features->{$rset}};
close DAT
or throw ("Can't close file $tmpfile");
push(@tmpfiles, $tmpfile);
}
my $command = join(' ', $self->program, 'merge_files', '0',
$replicates, @tmpfiles, $filename);
warn("Merging infiles " . $command . "\n");
eval { system($command) };
throw("FAILED to run $command: ", $@) if ($@);
map {$self->files_to_delete($_)} @tmpfiles;
} else {
open(F, ">".$filename)
or throw("Can't open file $filename.");
#print Dumper $self->result_features;
foreach (values %{$self->result_features}) {
foreach my $ft (@$_) {
#print join("\t", (@$ft)[4,0..3]), "\n";
print F join("\t", (@$ft)[4,0..3]), "\n";
}
}
close F;
}
return $filename;
}
1;