Raw content of Bio::EnsEMBL::Analysis::Runnable::Funcgen::MAT
# Ensembl module for Bio::EnsEMBL::Analysis::Runnable::Funcgen::MAT
#
# Copyright (c) 2007 Ensembl
#
=head1 NAME
Bio::EnsEMBL::Analysis::Runnable::Funcgen::MAT
=head1 SYNOPSIS
my $runnable = Bio::EnsEMBL::Analysis::Runnable::Funcgen::MAT->new
(
-analysis => $analysis,
-query => 'slice',
-program => 'program.pl',
);
$runnable->run;
my @features = @{$runnable->output};
=head1 DESCRIPTION
MAT expects to run the program MAT (Model-based Analysis of Tiling-array, Johnson
et al., PMID: 16895995) and predicts features which can be stored in the
annotated_feature table in the eFG database
=head1 LICENCE
This code is distributed under an Apache style licence. Please see
/info/about/code_licence.html for details.
=head1 AUTHOR
Stefan Graf, Ensembl Functional Genomics -
=head1 CONTACT
Post questions to the Ensembl development list: ensembl-dev@ebi.ac.uk
=cut
package Bio::EnsEMBL::Analysis::Runnable::Funcgen::MAT;
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);
use Bio::EnsEMBL::Utils::Argument qw( rearrange );
use vars qw(@ISA);
@ISA = qw(Bio::EnsEMBL::Analysis::Runnable::Funcgen);
=head2 query
Arg [1] : Bio::EnsEMBL::Analysis::Runnable
Arg [2] : integer
Function : container for the chip number
Returntype: interger
Exceptions: throws if passed an object which isnt a slice
Example :
=cut
sub query {
my ($self, $chip) = @_;
if ($chip){
throw("Must pass RunnableDB::Funcgen::MAT::query an integer ".
"specifying the chip to br processed not ".$chip)
unless($chip =~ m/^\d+$/);
$self->{'chip'} = $chip;
}
return $self->{'chip'};
}
=head2 write_infile
Arg [1] : Bio::EnsEMBL::Analysis::Runnable::MAT
Arg [2] : filename
Description :
Returntype :
Exceptions :
Example :
=cut
sub write_infile {
my ($self, $filename) = @_;
my $chipno = sprintf("%02d", $self->query);
if (exists $ENV{INFILE_EXISTS} && $ENV{INFILE_EXISTS}) {
opendir(DIR, $self->workdir())
or throw("Can't open dir ".$self->workdir());
my @files = grep { /.$chipno.tag$/ } readdir DIR;
throw("More than one tag file fir chip $chipno in ".$self->workdir)
if (! @files);
$filename = $self->workdir.'/'.$files[0];
closedir DIR;
}
if (! $filename) {
($filename = $self->infile()) =~ s/\.dat$/.$chipno.tag/;
}
(my $logfile = $filename) =~ s/\.tag$/.log/;
$ENV{BPMAPFILE} =~ s//$chipno/;
$ENV{CELFILES} =~ s//$chipno/g;
open(TAG, ">$filename")
or throw("Can't open .tag-file $filename.");
print TAG <infile($filename);
(my $bedfile = $filename) =~ s/\.tag$/.bed/;
$self->resultsfile($bedfile);
# set columns (fields) for output
my @fields = (0..2,4); # bed
$self->output_fields(\@fields);
return $filename;
}
=head2 run_analysis
Arg [1] : Bio::EnsEMBL::Analysis::Runnable::MAT
Arg [2] : string, program name
Usage :
Description :
Returns :
Exceptions :
=cut
sub run_analysis {
my ($self, $program) = @_;
if(!$program){
$program = $self->program;
}
throw($program." is not executable")
unless($program && -x $program);
if (! $ENV{INFILE_EXISTS}) {
my $command = $self->program . ' ' . $self->infile;
warn("Running analysis " . $command . "\n");
#eval { system($command) };
throw("FAILED to run $command: ", $@) if ($@);
}
}
=head2 infile
Arg [1] : Bio::EnsEMBL::Analysis::Runnable::MAT
Arg [2] : filename (string)
Description : will hold a given filename or if one is requested but none
defined it will use the create_filename method to create a filename
Returntype : string, filename
Exceptions : none
Example :
=cut
sub infile{
my ($self, $filename) = @_;
if($filename){
$self->{'infile'} = $filename;
}
if(!$self->{'infile'}){
$self->{'infile'} = $self->create_filename($self->analysis->logic_name, 'dat');
}
return $self->{'infile'};
}
sub config_file {
my $self = shift;
$self->{'config_file'} = shift if(@_);
return $self->{'config_file'};
}
1;