Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Tools/Run/WrapperBase.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/Tools/Run/WrapperBase.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,354 @@ +# $Id: WrapperBase.pm,v 1.7.2.2 2003/03/11 10:52:26 jason Exp $ +# +# BioPerl module for Bio::Tools::Run::WrapperBase +# +# Cared for by Jason Stajich <jason@bioperl.org> +# +# Copyright Jason Stajich +# +# You may distribute this module under the same terms as perl itself + +# POD documentation - main docs before the code + +=head1 NAME + +Bio::Tools::Run::WrapperBase - A Base object for wrappers around executables + +=head1 SYNOPSIS + + # do not use this object directly, it provides the following methods + # for its subclasses + + my $errstr = $obj->error_string(); + my $exe = $obj->executable(); + $obj->save_tempfiles($booleanflag) + my $outfile= $obj->outfile_name(); + my $tempdir= $obj->tempdir(); # get a temporary dir for executing + my $io = $obj->io; # Bio::Root::IO object + my $cleanup= $obj->cleanup(); # remove tempfiles + + $obj->run({-arg1 => $value}); + +=head1 DESCRIPTION + +This is a basic module from which to build executable wrapper modules. +It has some basic methods to help when implementing new modules. + +=head1 FEEDBACK + +=head2 Mailing Lists + +User feedback is an integral part of the evolution of this and other +Bioperl modules. Send your comments and suggestions preferably to +the Bioperl mailing list. Your participation is much appreciated. + + bioperl-l@bioperl.org - General discussion + http://bioperl.org/MailList.shtml - About the mailing lists + +=head2 Reporting Bugs + +Report bugs to the Bioperl bug tracking system to help us keep track +of the bugs and their resolution. Bug reports can be submitted via +email or the web: + + bioperl-bugs@bioperl.org + http://bioperl.org/bioperl-bugs/ + +=head1 AUTHOR - Jason Stajich + +Email jason@bioperl.org + +Describe contact details here + +=head1 CONTRIBUTORS + +Additional contributors names and emails here + +=head1 APPENDIX + +The rest of the documentation details each of the object methods. +Internal methods are usually preceded with a _ + +=cut + + +# Let the code begin... + + +package Bio::Tools::Run::WrapperBase; +use vars qw(@ISA); +use strict; + +# Object preamble - inherits from Bio::Root::Root + +use Bio::Root::RootI; +use Bio::Root::IO; + +@ISA = qw(Bio::Root::RootI); + +=head2 run + + Title : run + Usage : $wrapper->run({ARGS HERE}); + Function: Support generic running with args passed in + as a hashref + Returns : Depends on the implementation, status OR data + Args : hashref of named arguments + + +=cut + +sub run { + my ($self,@args) = @_; + $self->throw_not_implemented(); +} + + +=head2 error_string + + Title : error_string + Usage : $obj->error_string($newval) + Function: Where the output from the last analysus run is stored. + Returns : value of error_string + Args : newvalue (optional) + + +=cut + +sub error_string{ + my ($self,$value) = @_; + if( defined $value) { + $self->{'_error_string'} = $value; + } + return $self->{'_error_string'} || ''; +} + + +=head2 no_param_checks + + Title : no_param_checks + Usage : $obj->no_param_checks($newval) + Function: Boolean flag as to whether or not we should + trust the sanity checks for parameter values + Returns : value of no_param_checks + Args : newvalue (optional) + + +=cut + +sub no_param_checks{ + my ($self,$value) = @_; + if( defined $value || ! defined $self->{'no_param_checks'} ) { + $value = 0 unless defined $value; + $self->{'no_param_checks'} = $value; + } + return $self->{'no_param_checks'}; +} + +=head2 save_tempfiles + + Title : save_tempfiles + Usage : $obj->save_tempfiles($newval) + Function: + Returns : value of save_tempfiles + Args : newvalue (optional) + + +=cut + +sub save_tempfiles{ + my ($self,$value) = @_; + if( defined $value) { + $self->{'save_tempfiles'} = $value; + } + return $self->{'save_tempfiles'}; +} + +=head2 outfile_name + + Title : outfile_name + Usage : my $outfile = $wrapper->outfile_name(); + Function: Get/Set the name of the output file for this run + (if you wanted to do something special) + Returns : string + Args : [optional] string to set value to + + +=cut + +sub outfile_name{ + my ($self,$nm) = @_; + if( defined $nm || ! defined $self->{'_outfilename'} ) { + $nm = 'mlc' unless defined $nm; + $self->{'_outfilename'} = $nm; + } + return $self->{'_outfilename'}; +} + + +=head2 tempdir + + Title : tempdir + Usage : my $tmpdir = $self->tempdir(); + Function: Retrieve a temporary directory name (which is created) + Returns : string which is the name of the temporary directory + Args : none + + +=cut + +sub tempdir{ + my ($self) = @_; + + unless( $self->{'_tmpdir'} ) { + $self->{'_tmpdir'} = $self->io->tempdir(CLEANUP => ! $self->save_tempfiles ); + } + unless( -d $self->{'_tmpdir'} ) { + mkdir($self->{'_tmpdir'},0777); + } + $self->{'_tmpdir'}; +} + +=head2 cleanup + + Title : cleanup + Usage : $wrapper->cleanup(); + Function: Will cleanup the tempdir directory after a PAML run + Returns : none + Args : none + + +=cut + +sub cleanup{ + my ($self) = @_; + $self->io->_io_cleanup(); + if( defined $self->{'_tmpdir'} && + -d $self->{'_tmpdir'} ) { + $self->io->rmtree($self->{'_tmpdir'}); + } +} + +=head2 io + + Title : io + Usage : $obj->io($newval) + Function: Gets a L<Bio::Root::IO> object + Returns : L<Bio::Root::IO> object + Args : none + + +=cut + +sub io{ + my ($self) = @_; + unless( defined $self->{'io'} ) { + $self->{'io'} = new Bio::Root::IO(-verbose => $self->verbose()); + } + return $self->{'io'}; +} + +=head2 version + + Title : version + Usage : $version = $wrapper->version() + Function: Returns the program version (if available) + Returns : string representing version of the program + Args : [Optional] value to (re)set version string + + +=cut + +sub version{ + my ($self,@args) = @_; + return undef; +} + +=head2 executable + + Title : executable + Usage : my $exe = $factory->executable(); + Function: Finds the full path to the executable + Returns : string representing the full path to the exe + Args : [optional] name of executable to set path to + [optional] boolean flag whether or not warn when exe is not found + +=cut + +sub executable{ + my ($self, $exe,$warn) = @_; + + if( defined $exe ) { + $self->{'_pathtoexe'} = $exe; + } + unless( defined $self->{'_pathtoexe'} ) { + my $prog_path = $self->program_path; + if( $prog_path && -e $prog_path && -x $prog_path ) { + $self->{'_pathtoexe'} = $prog_path; + } else { + my $exe; + if( ( $exe = $self->io->exists_exe($self->program_name) ) && + -x $exe ) { + $self->{'_pathtoexe'} = $exe; + } else { + $self->warn("Cannot find executable for ".$self->program_name) if $warn; + $self->{'_pathtoexe'} = undef; + } + } + } + $self->{'_pathtoexe'}; +} + +=head2 program_path + + Title : program_path + Usage : my $path = $factory->program_path(); + Function: Builds path for executable + Returns : string representing the full path to the exe + Args : none + +=cut + +sub program_path { + my ($self) = @_; + my @path; + push @path, $self->program_dir if $self->program_dir; + push @path, $self->program_name.($^O =~ /mswin/i ?'.exe':''); + + return Bio::Root::IO->catfile(@path); +} + +=head2 program_dir + + Title : program_dir + Usage : my $dir = $factory->program_dir(); + Function: Abstract get method for dir of program. To be implemented + by wrapper. + Returns : string representing program directory + Args : none + +=cut + +sub program_dir { + my ($self) = @_; + $self->throw_not_implemented(); +} + +=head2 program_name + + Title : program_name + Usage : my $name = $factory->program_name(); + Function: Abstract get method for name of program. To be implemented + by wrapper. + Returns : string representing program name + Args : none + +=cut + +sub program_name { + my ($self) = @_; + $self->throw_not_implemented(); +} + + +1;