Raw content of Bio::EnsEMBL::Analysis::Runnable::Funcgen::Nessie # Ensembl module for Bio::EnsEMBL::Analysis::Runnable::Funcgen::Nessie # # Copyright (c) 2007 Ensembl # =head1 NAME Bio::EnsEMBL::Analysis::Runnable::Funcgen::Nessie =head1 SYNOPSIS my $nessie = Bio::EnsEMBL::Analysis::Runnable::Funcgen::Nessie->new ( -analysis => $analysis, -query => 'slice', -program => 'nessie', ); $nessie->run; my @annotated_features = @{$nessie->output}; =head1 DESCRIPTION Nessie expects to run the program Nessie 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::Nessie; 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 vars qw(@ISA); @ISA = qw(Bio::EnsEMBL::Analysis::Runnable::Funcgen); =head2 run_analysis Arg [1] : Bio::EnsEMBL::Analysis::Runnable::Nessie Arg [2] : string, program name Usage : Description : Returns : Exceptions : =cut sub run_analysis { print "Analysis::Runnable::Funcgen::Nessie::run_analysis\n"; my ($self, $program) = @_; if(!$program){ $program = $self->program; } throw($program." is not executable Nessie::run_analysis ") unless($program && -x $program); (my $outfile = $self->infile()) =~ s/\.dat$/.out/; my @fields = (0..2,4); $self->output_fields(\@fields); (my $resultsfile = $self->infile()) =~ s/\.dat$/_peaks.out/; my $replicates = scalar(keys %{$self->result_features}); if ($replicates == 1) { $replicates=2 } my ($nessie_parameters, $peak_parameters) = split('; ', $self->options); print Dumper ($nessie_parameters, $peak_parameters); my $command = $self->program.' --data="'.$self->infile().'" '. '--replicates='.$replicates.$nessie_parameters.' > '.$outfile; warn("Running analysis " . $command . "\n"); eval { system($command) }; throw("FAILED to run $command: ", $@) if ($@); my $parser = 'oligo_peaks.pl --sang --autonorm '. $peak_parameters . ' -l '.$outfile.' '.$self->infile.' > '.$resultsfile; warn("Running parser " . $parser . "\n"); eval { system($parser) }; throw("FAILED to run $parser: ", $@) if ($@); throw("No peak resultfile.") if (! -e $resultsfile); $self->resultsfile($resultsfile); } =head2 write_infile Arg [1] : Bio::EnsEMBL::Analysis::Runnable::Nessie Arg [2] : filename Description : Returntype : Exceptions : Example : =cut sub write_infile { print "Analysis::Runnable::Funcgen::Nessie::write_infile\n"; my ($self, $filename) = @_; warn("workdir : ".$self->workdir); if (! $filename) { $filename = $self->infile(); } warn("filename: ".$filename); foreach my $rset_name (sort keys %{$self->result_features}) { #print Dumper $self->query->[0]->name, $rset_name, $filename; #print $self->result_features->{$rset_name}, "\n"; my $datafile = $self->workdir.'/cache/'.$self->query->[0]->name.'.'.$rset_name.'.dat'; warn("datafile: ".$datafile); unless ( -e $datafile ) { open(F, ">".$datafile) or throw("Can't open file $datafile."); #foreach (keys %{$self->result_features}) { # next unless ($datafile =~ m/$_/); foreach my $ft (@{$self->result_features->{$rset_name}}) { #print join("\t", @$ft), "\n"; print F join("\t", @$ft), "\n"; } # last; #} close F; } $self->datafiles($datafile); } #print Dumper $self->datafiles; $self->write_filelist(); map {$self->files_to_delete($_)} @{$self->datafiles}; return $filename; } =head2 datafiles Arg [1] : Bio::EnsEMBL::Analysis::Runnable::Nessie Arg [2] : filename (string) Description : will hold/add a list of filename Returntype : listref of filenames Exceptions : none Example : =cut sub datafiles{ my ($self, $filename) = @_; if(! $self->{'datafiles'}){ $self->{'datafiles'} = []; } if($filename){ push @{$self->{'datafiles'}}, $filename; } return \@{$self->{'datafiles'}}; } =head2 write_filelist Arg [1] : Bio::EnsEMBL::Analysis::Runnable::Nessie Description : writes the nessie specific wrapper file containing a list of replicate data file names Returntype : none Exceptions : Example : =cut sub write_filelist { my ($self) = shift; throw("No infile found") if (! $self->infile()); open(F, ">".$self->infile()) or throw("Can't open file ".$self->infile); foreach my $f (@{$self->datafiles}) { print F $f, "\n"; } # nessie hack: if there is only one replicate data set we duplicate this one ... if (scalar(@{$self->datafiles}) == 1) { warn("Duplicating input data file."); print F ${$self->datafiles}[0], "\n"; } close F; } 1;