[med-svn] r23340 - in trunk/packages/bioperl-run/trunk/debian: . patches
Andreas Tille
tille at moszumanska.debian.org
Tue Dec 20 16:01:00 UTC 2016
Author: tille
Date: 2016-12-20 16:00:58 +0000 (Tue, 20 Dec 2016)
New Revision: 23340
Removed:
trunk/packages/bioperl-run/trunk/debian/patches/Some-spellchecking.patch
trunk/packages/bioperl-run/trunk/debian/patches/Use-system-s-Perl.patch
trunk/packages/bioperl-run/trunk/debian/patches/install-scripts.patch
trunk/packages/bioperl-run/trunk/debian/patches/move-StandAloneBlast-and-WrapperBase-from-root-Bio.-.patch
Modified:
trunk/packages/bioperl-run/trunk/debian/changelog
trunk/packages/bioperl-run/trunk/debian/patches/series
trunk/packages/bioperl-run/trunk/debian/patches/skip_tests_for_phylip.patch
trunk/packages/bioperl-run/trunk/debian/patches/skip_tests_for_phyml.patch
trunk/packages/bioperl-run/trunk/debian/rules
trunk/packages/bioperl-run/trunk/debian/watch
Log:
New upstream version
Modified: trunk/packages/bioperl-run/trunk/debian/changelog
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/changelog 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/changelog 2016-12-20 16:00:58 UTC (rev 23340)
@@ -1,5 +1,6 @@
-bioperl-run (1.6.9-4) UNRELEASED; urgency=medium
+bioperl-run (1.7.1-1) UNRELEASED; urgency=medium
+ * New upstream version
* Testsuite: autopkgtest-pkg-perl
* cme fix dpkg-control
* Enable lots of tests
@@ -7,6 +8,9 @@
bioperl-run in commit acd57a7d14112c5fd2cd979005b072efdaf57679 which is
taken over in quilt patch
* Fix homepage
+ * d/watch:
+ - version=4
+ - Fix versionmangling
-- Andreas Tille <tille at debian.org> Fri, 16 Dec 2016 09:17:37 +0100
Deleted: trunk/packages/bioperl-run/trunk/debian/patches/Some-spellchecking.patch
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/patches/Some-spellchecking.patch 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/patches/Some-spellchecking.patch 2016-12-20 16:00:58 UTC (rev 23340)
@@ -1,270 +0,0 @@
-Forwarded: https://redmine.open-bio.org/issues/3256
-From b6c1d10797c2fbb6c5fe3c0fe2e5f74d252889cb Mon Sep 17 00:00:00 2001
-From: Charles Plessy <plessy at debian.org>
-Date: Sat, 18 Jun 2011 13:13:43 +0900
-Subject: [PATCH] Some spellchecking.
-
----
- lib/Bio/Tools/Run/Alignment/Clustalw.pm | 2 +-
- lib/Bio/Tools/Run/Alignment/Pal2Nal.pm | 2 +-
- lib/Bio/Tools/Run/Alignment/StandAloneFasta.pm | 2 +-
- lib/Bio/Tools/Run/AssemblerBase.pm | 2 +-
- lib/Bio/Tools/Run/FootPrinter.pm | 2 +-
- lib/Bio/Tools/Run/Hmmer.pm | 2 +-
- lib/Bio/Tools/Run/MCS.pm | 2 +-
- lib/Bio/Tools/Run/Phylo/Gerp.pm | 4 ++--
- lib/Bio/Tools/Run/Phylo/Gumby.pm | 4 ++--
- lib/Bio/Tools/Run/Phylo/PAML/Baseml.pm | 2 +-
- lib/Bio/Tools/Run/Phylo/Phast/PhastCons.pm | 6 +++---
- lib/Bio/Tools/Run/Phylo/Phast/PhyloFit.pm | 4 ++--
- lib/Bio/Tools/Run/Phylo/Phylip/Consense.pm | 2 +-
- lib/Bio/Tools/Run/Phylo/Phyml.pm | 4 ++--
- lib/Bio/Tools/Run/Phylo/QuickTree.pm | 2 +-
- lib/Bio/Tools/Run/Phylo/Semphy.pm | 4 ++--
- lib/Bio/Tools/Run/StandAloneBlastPlus.pm | 2 +-
- lib/Bio/Tools/Run/TigrAssembler.pm | 2 +-
- t/lib/Test/Builder/Tester.pm | 2 +-
- 19 files changed, 26 insertions(+), 26 deletions(-)
-
---- a/lib/Bio/Tools/Run/Alignment/Clustalw.pm
-+++ b/lib/Bio/Tools/Run/Alignment/Clustalw.pm
-@@ -205,7 +205,7 @@ clustalw program have not yet been imple
- that a specific clustalw feature be added to this perl contact
- bioperl-l at bioperl.org.
-
--These can be specified as paramters when instantiating a new Clustalw
-+These can be specified as parameters when instantiating a new Clustalw
- object, or through get/set methods of the same name (lowercase).
-
- =head1 PARAMETER FOR ALIGNMENT COMPUTATION
---- a/lib/Bio/Tools/Run/Alignment/Pal2Nal.pm
-+++ b/lib/Bio/Tools/Run/Alignment/Pal2Nal.pm
-@@ -192,7 +192,7 @@ sub new {
- Args : The first argument represents a protein alignment, the second
- argument a set of nucleotide sequences.
- The alignment can be provided as an alignment file readable by
-- Bio::AlignIO, or a Bio::Align::AlignI complient object (eg. a
-+ Bio::AlignIO, or a Bio::Align::AlignI compliant object (eg. a
- Bio::SimpleAlign).
- The nucleotide sequences can be provided as a single filename of a
- fasta file containing multiple nucleotide sequences, or an array ref
---- a/lib/Bio/Tools/Run/Alignment/StandAloneFasta.pm
-+++ b/lib/Bio/Tools/Run/Alignment/StandAloneFasta.pm
-@@ -117,7 +117,7 @@ Email tqzhang1973 at yahoo.com
- =head1 Appendix
-
- The rest of the documendation details each of the object
--methods. Internal methods are preceeded with a underscore
-+methods. Internal methods are preceded with a underscore
-
- =cut
-
---- a/lib/Bio/Tools/Run/AssemblerBase.pm
-+++ b/lib/Bio/Tools/Run/AssemblerBase.pm
-@@ -865,7 +865,7 @@ sub parameters_changed {
- Usage : @params = $pobj->available_parameters()
- Function: Returns a list of the available parameters
- Returns : Array of parameters
-- Args : 'params' for settable program paramters
-+ Args : 'params' for settable program parameters
- 'switches' for boolean program switches
- default: all
-
---- a/lib/Bio/Tools/Run/FootPrinter.pm
-+++ b/lib/Bio/Tools/Run/FootPrinter.pm
-@@ -67,7 +67,7 @@ Written by Mathieu Blanchette and Martin
-
- =head2 Running Footprinter
-
--To run FootPrinter, you will need to set the enviroment variable
-+To run FootPrinter, you will need to set the environment variable
- FOOTPRINTER_DIR to where the binary is located (even if the executable
- is in your path). For example:
-
---- a/lib/Bio/Tools/Run/Hmmer.pm
-+++ b/lib/Bio/Tools/Run/Hmmer.pm
-@@ -172,7 +172,7 @@ our @UNSUPPORTED = qw(h verbose a
- -o is synonymous with -outfile
-
- # may be specified here, allowing run() to be used, or
-- # it can be ommitted and the corresponding method (eg.
-+ # it can be omitted and the corresponding method (eg.
- # hmmalign()) used later.
- -program => hmmalign|hmmbuild|hmmcalibrate|hmmemit|hmmpfam|hmmsearch
-
---- a/lib/Bio/Tools/Run/MCS.pm
-+++ b/lib/Bio/Tools/Run/MCS.pm
-@@ -216,7 +216,7 @@ sub new {
- third argument represents annotation of the exons in the alignment.
-
- The alignment can be provided as a multi-fasta format alignment
-- filename, or a Bio::Align::AlignI complient object (eg. a
-+ filename, or a Bio::Align::AlignI compliant object (eg. a
- Bio::SimpleAlign).
-
- The position in the genome can be provided as a Bio::Location::Atomic
---- a/lib/Bio/Tools/Run/Phylo/Gerp.pm
-+++ b/lib/Bio/Tools/Run/Phylo/Gerp.pm
-@@ -211,10 +211,10 @@ sub new {
- Args : The first argument represents an alignment, the second argument
- a phylogenetic tree with branch lengths.
- The alignment can be provided as a MAF format alignment
-- filename, or a Bio::Align::AlignI complient object (eg. a
-+ filename, or a Bio::Align::AlignI compliant object (eg. a
- Bio::SimpleAlign).
- The species tree can be provided as a newick format tree filename
-- or a Bio::Tree::TreeI complient object.
-+ or a Bio::Tree::TreeI compliant object.
-
- In all cases, the alignment sequence names must correspond to node
- ids in the tree. Multi-word species names should have the
---- a/lib/Bio/Tools/Run/Phylo/Gumby.pm
-+++ b/lib/Bio/Tools/Run/Phylo/Gumby.pm
-@@ -284,10 +284,10 @@ sub annots {
- Args : The first argument represents an alignment, the second argument
- a species tree.
- The alignment can be provided as a multi-fasta format alignment
-- filename, or a Bio::Align::AlignI complient object (eg. a
-+ filename, or a Bio::Align::AlignI compliant object (eg. a
- Bio::SimpleAlign).
- The species tree can be provided as a newick format tree filename
-- or a Bio::Tree::TreeI complient object. Alternatively a
-+ or a Bio::Tree::TreeI compliant object. Alternatively a
- Bio::DB::Taxonomy object can be supplied, in which case the species
- tree will be generated by using the alignment sequence names as
- species names and looking for those in the supplied database.
---- a/lib/Bio/Tools/Run/Phylo/PAML/Baseml.pm
-+++ b/lib/Bio/Tools/Run/Phylo/PAML/Baseml.pm
-@@ -554,7 +554,7 @@ sub set_parameter{
- Returns : none
- Args : boolean: keep existing parameter values
- NB : using this isn't an especially good idea! You don't need to do
-- anything to end up using default paramters: hence 'default'!
-+ anything to end up using default parameters: hence 'default'!
-
- =cut
-
---- a/lib/Bio/Tools/Run/Phylo/Phast/PhastCons.pm
-+++ b/lib/Bio/Tools/Run/Phylo/Phast/PhastCons.pm
-@@ -331,13 +331,13 @@ sub rho {
- ('footprinting').
- Returns : array of Bio::SeqFeature::Annotated (one feature per alignment
- sequence and prediction)
-- Args : The first arguement represents an alignment, the second arguement
-+ Args : The first argument represents an alignment, the second argument
- a species tree.
- The alignment can be provided as a multi-fasta format alignment
-- filename, or a Bio::Align::AlignI complient object (eg. a
-+ filename, or a Bio::Align::AlignI compliant object (eg. a
- Bio::SimpleAlign).
- The species tree can be provided as a newick format tree filename
-- or a Bio::Tree::TreeI complient object. Alternatively a
-+ or a Bio::Tree::TreeI compliant object. Alternatively a
- Bio::DB::Taxonomy object can be supplied, in which case the species
- tree will be generated by using the alignment sequence names as
- species names and looking for those in the supplied database.
---- a/lib/Bio/Tools/Run/Phylo/Phast/PhyloFit.pm
-+++ b/lib/Bio/Tools/Run/Phylo/Phast/PhyloFit.pm
-@@ -241,10 +241,10 @@ sub new {
- Args : The first argument represents an alignment, the second argument
- a species tree.
- The alignment can be provided as a multi-fasta format alignment
-- filename, or a Bio::Align::AlignI complient object (eg. a
-+ filename, or a Bio::Align::AlignI compliant object (eg. a
- Bio::SimpleAlign).
- The species tree can be provided as a newick format tree filename
-- or a Bio::Tree::TreeI complient object. Alternatively a
-+ or a Bio::Tree::TreeI compliant object. Alternatively a
- Bio::DB::Taxonomy object can be supplied, in which case the species
- tree will be generated by using the alignment sequence names as
- species names and looking for those in the supplied database.
---- a/lib/Bio/Tools/Run/Phylo/Phylip/Consense.pm
-+++ b/lib/Bio/Tools/Run/Phylo/Phylip/Consense.pm
-@@ -97,7 +97,7 @@ this is still experimental as v3.6 is st
-
- Title : TYPE
- Description : (optional)
-- Only avaliable in phylip v3.6
-+ Only available in phylip v3.6
-
- This program supports 3 types of consensus generation
-
---- a/lib/Bio/Tools/Run/Phylo/Phyml.pm
-+++ b/lib/Bio/Tools/Run/Phylo/Phyml.pm
-@@ -315,7 +315,7 @@ sub version {
- Returns : Bio::Tree::Tree object
- Args : file name for your input alignment in a format
- recognised by AlignIO, OR Bio::Align::AlignI
-- complient object (eg. Bio::SimpleAlign).
-+ compliant object (eg. Bio::SimpleAlign).
-
- =cut
-
-@@ -358,7 +358,7 @@ sub stats {
- Title : tree_string
- Usage : $factory->tree_string;
- $factory->run($align_object);
-- Function: Returns the contents of the phyml '_phyml_tree.txt' ouput file
-+ Function: Returns the contents of the phyml '_phyml_tree.txt' output file
- Returns : string with tree in Newick format, undef before run()
- Args : none
-
---- a/lib/Bio/Tools/Run/Phylo/QuickTree.pm
-+++ b/lib/Bio/Tools/Run/Phylo/QuickTree.pm
-@@ -240,7 +240,7 @@ sub boot {
- Function: Runs QuickTree to generate a tree
- Returns : Bio::Tree::Tree object
- Args : file name for your input alignment in stockholm format, OR
-- Bio::Align::AlignI complient object (eg. Bio::SimpleAlign).
-+ Bio::Align::AlignI compliant object (eg. Bio::SimpleAlign).
-
- =cut
-
---- a/lib/Bio/Tools/Run/Phylo/Semphy.pm
-+++ b/lib/Bio/Tools/Run/Phylo/Semphy.pm
-@@ -252,10 +252,10 @@ sub new {
- argument a species tree (to set an initial tree: normally the -t
- option to Semphy).
- The alignment can be provided as a multi-fasta format alignment
-- filename, or a Bio::Align::AlignI complient object (eg. a
-+ filename, or a Bio::Align::AlignI compliant object (eg. a
- Bio::SimpleAlign).
- The species tree can be provided as a newick format tree filename
-- or a Bio::Tree::TreeI complient object. Alternatively a
-+ or a Bio::Tree::TreeI compliant object. Alternatively a
- Bio::DB::Taxonomy object can be supplied, in which case the species
- tree will be generated by using the alignment sequence names as
- species names and looking for those in the supplied database.
---- a/lib/Bio/Tools/Run/StandAloneBlastPlus.pm
-+++ b/lib/Bio/Tools/Run/StandAloneBlastPlus.pm
-@@ -210,7 +210,7 @@ To get the tempfile basename, do:
-
- =item * Specify data post-construction
-
--Use the explict attribute setters:
-+Use the explicit attribute setters:
-
- $fac = Bio::Tools::Run::StandAloneBlastPlus->new(
- -create => 1
---- a/lib/Bio/Tools/Run/TigrAssembler.pm
-+++ b/lib/Bio/Tools/Run/TigrAssembler.pm
-@@ -179,7 +179,7 @@ TIGR Assembler options available in this
- ignore_tandem_32mers: a flag which causes tandem 32mers (a tandem 32mer is a
- 32mer which occurs more than once in at least one sequence read) to be
- ignored (this is now the default behavior and this flag is for backward
-- compatability)
-+ compatibility)
- use_tandem_32mers: a flag which causes tandem 32mers to be used for pairwise
- comparison opposite of the -t flag which is now the default).
- safe_merging_stop: a flag which causes merging to stop when only sequences
---- a/t/lib/Test/Builder/Tester.pm
-+++ b/t/lib/Test/Builder/Tester.pm
-@@ -323,7 +323,7 @@ will function normally and cause success
-
- sub test_test
- {
-- # decode the arguements as described in the pod
-+ # decode the arguments as described in the pod
- my $mess;
- my %args;
- if (@_ == 1)
Deleted: trunk/packages/bioperl-run/trunk/debian/patches/Use-system-s-Perl.patch
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/patches/Use-system-s-Perl.patch 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/patches/Use-system-s-Perl.patch 2016-12-20 16:00:58 UTC (rev 23340)
@@ -1,18 +0,0 @@
-Forwarded: https://redmine.open-bio.org/issues/3255
-From 8d4322bea521c457029a00155fe292ef7ef177d4 Mon Sep 17 00:00:00 2001
-From: Charles Plessy <plessy at debian.org>
-Date: Sat, 18 Jun 2011 12:58:08 +0900
-Subject: [PATCH] Use system's Perl.
-
----
- scripts/bioperl_application_installer.PLS | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/scripts/bioperl_application_installer.PLS
-+++ b/scripts/bioperl_application_installer.PLS
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/perl
-+#!/usr/bin/perl
- # BioPerl script for Bio::Installer
- #
- # Cared for by Albert Vilella
Deleted: trunk/packages/bioperl-run/trunk/debian/patches/install-scripts.patch
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/patches/install-scripts.patch 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/patches/install-scripts.patch 2016-12-20 16:00:58 UTC (rev 23340)
@@ -1,31 +0,0 @@
-Forwarded: https://redmine.open-bio.org/issues/3254
-From 4d1fe98b390c67170d0d23325de5ccd8fdc6ea1a Mon Sep 17 00:00:00 2001
-From: Charles Plessy <plessy at debian.org>
-Date: Sat, 18 Jun 2011 12:43:21 +0900
-Subject: [PATCH] New --install_scripts option to request script installation non-interactively.
-
----
- Build.PL | 5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
-
---- a/Build.PL
-+++ b/Build.PL
-@@ -27,7 +27,8 @@ my $build = Module::Build->new(
- },
- get_options => {
- accept => { },
-- network => { }
-+ network => { },
-+ install_scripts => { }
- },
- auto_features => {
- Network => {
-@@ -42,7 +43,7 @@ my $build = Module::Build->new(
- my $accept = $build->args->{accept};
-
- # Optionally have script files installed.
--if ($accept ? 0 : $build->y_n("Install scripts? y/n", 'n')) {
-+if ($build->args('install_scripts') or $accept ? 0 : $build->y_n("Install scripts? y/n", 'n')) {
- my $files = $build->_find_file_by_type('PLS', 'scripts');
-
- my $script_build = File::Spec->catdir($build->blib, 'script');
Deleted: trunk/packages/bioperl-run/trunk/debian/patches/move-StandAloneBlast-and-WrapperBase-from-root-Bio.-.patch
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/patches/move-StandAloneBlast-and-WrapperBase-from-root-Bio.-.patch 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/patches/move-StandAloneBlast-and-WrapperBase-from-root-Bio.-.patch 2016-12-20 16:00:58 UTC (rev 23340)
@@ -1,3430 +0,0 @@
-From: "Mark A. Jensen" <maj at fortinbras.us>
-Date: Sat, 23 Aug 2014 15:56:12 -0400
-Subject: [PATCH 02/28] move StandAloneBlast* and WrapperBase* from root/Bio...
- to root/lib/Bio...
-
----
- Bio/Tools/Run/StandAloneBlast.pm | 634 ------------
- Bio/Tools/Run/StandAloneNCBIBlast.pm | 538 ----------
- Bio/Tools/Run/StandAloneWUBlast.pm | 299 ------
- Bio/Tools/Run/WrapperBase.pm | 511 ----------
- Bio/Tools/Run/WrapperBase/CommandExts.pm | 1405 --------------------------
- lib/Bio/Tools/Run/StandAloneBlast.pm | 634 ++++++++++++
- lib/Bio/Tools/Run/StandAloneNCBIBlast.pm | 538 ++++++++++
- lib/Bio/Tools/Run/StandAloneWUBlast.pm | 299 ++++++
- lib/Bio/Tools/Run/WrapperBase.pm | 511 ++++++++++
- lib/Bio/Tools/Run/WrapperBase/CommandExts.pm | 1405 ++++++++++++++++++++++++++
- 10 files changed, 3387 insertions(+), 3387 deletions(-)
- delete mode 100644 Bio/Tools/Run/StandAloneBlast.pm
- delete mode 100644 Bio/Tools/Run/StandAloneNCBIBlast.pm
- delete mode 100644 Bio/Tools/Run/StandAloneWUBlast.pm
- delete mode 100644 Bio/Tools/Run/WrapperBase.pm
- delete mode 100644 Bio/Tools/Run/WrapperBase/CommandExts.pm
- create mode 100644 lib/Bio/Tools/Run/StandAloneBlast.pm
- create mode 100644 lib/Bio/Tools/Run/StandAloneNCBIBlast.pm
- create mode 100644 lib/Bio/Tools/Run/StandAloneWUBlast.pm
- create mode 100644 lib/Bio/Tools/Run/WrapperBase.pm
- create mode 100644 lib/Bio/Tools/Run/WrapperBase/CommandExts.pm
-
---- /dev/null
-+++ b/lib/Bio/Tools/Run/StandAloneBlast.pm
-@@ -0,0 +1,634 @@
-+#
-+# BioPerl module for Bio::Tools::Run::StandAloneBlast
-+#
-+# Copyright Peter Schattner
-+#
-+# You may distribute this module under the same terms as perl itself
-+
-+# POD documentation - main docs before the code
-+
-+=head1 NAME
-+
-+Bio::Tools::Run::StandAloneBlast - Object for the local execution
-+of the NCBI BLAST program suite (blastall, blastpgp, bl2seq).
-+There is experimental support for WU-Blast and NCBI rpsblast.
-+
-+=head1 SYNOPSIS
-+
-+ # Local-blast "factory object" creation and blast-parameter
-+ # initialization:
-+ @params = (-database => 'swissprot', -outfile => 'blast1.out');
-+ $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
-+
-+ # Blast a sequence against a database:
-+ $str = Bio::SeqIO->new(-file=>'t/amino.fa', -format => 'Fasta');
-+ $input = $str->next_seq();
-+ $input2 = $str->next_seq();
-+ $blast_report = $factory->blastall($input);
-+
-+ # Run an iterated Blast (psiblast) of a sequence against a database:
-+ $factory->j(3); # 'j' is blast parameter for # of iterations
-+ $factory->outfile('psiblast1.out');
-+ $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
-+ $blast_report = $factory->blastpgp($input);
-+
-+ # Use blast to align 2 sequences against each other:
-+ $factory = Bio::Tools::Run::StandAloneBlast->new(-outfile => 'bl2seq.out');
-+ $factory->bl2seq($input, $input2);
-+
-+ # Experimental support for WU-Blast 2.0
-+ my $factory = Bio::Tools::Run::StandAloneBlast->new(-program =>"wublastp",
-+ -database =>"swissprot",
-+ -e => 1e-20);
-+ my $blast_report = $factory->wublast($seq);
-+
-+ # Experimental support for NCBI rpsblast
-+ my $factory = Bio::Tools::Run::StandAloneBlast->new(-db => 'CDD/Cog',
-+ -expect => 0.001);
-+ $factory->F('T'); # turn on SEG filtering of query sequence
-+ my $blast_report = $factory->rpsblast($seq);
-+
-+ # Use the experimental fast Blast parser, 'blast_pull'
-+ my $factory = Bio::Tools::Run::StandAloneBlast->new(-_READMETHOD =>'blast_pull',
-+ @other_params);
-+
-+ # Various additional options and input formats are available,
-+ # see the DESCRIPTION section for details.
-+
-+=head1 DESCRIPTION
-+
-+This DESCRIPTION only documents Bio::Tools::Run::StandAloneBlast, a
-+Bioperl object for running the NCBI standAlone BLAST package. Blast
-+itself is a large & complex program - for more information regarding
-+BLAST, please see the BLAST documentation which accompanies the BLAST
-+distribution. BLAST is available from ftp://ncbi.nlm.nih.gov/blast/.
-+
-+A source of confusion in documenting a BLAST interface is that the
-+term "program" is used in - at least - three different ways in the
-+BLAST documentation. In this DESCRIPTION, "program" will refer to the
-+BLAST routine set by the BLAST C<-p> parameter that can be set to blastn,
-+blastp, tblastx etc. We will use the term Blast "executable" to refer
-+to the various different executable files that may be called - ie.
-+blastall, blastpgp or bl2seq. In addition, there are several BLAST
-+capabilities, which are also referred to as "programs", and are
-+implemented by using specific combinations of BLAST executables,
-+programs and parameters. They will be referred by their specific
-+names - eg PSIBLAST and PHIBLAST.
-+
-+Before running StandAloneBlast it is necessary: to install BLAST
-+on your system, to edit set the environmental variable $BLASTDIR
-+or your $PATH variable to point to the BLAST directory, and to
-+ensure that users have execute privileges for the BLAST program.
-+
-+If the databases which will be searched by BLAST are located in the
-+data subdirectory of the blast program directory (the default
-+installation location), StandAloneBlast will find them; however,
-+if the database files are located in any other location, environmental
-+variable $BLASTDATADIR will need to be set to point to that directory.
-+
-+The use of the StandAloneBlast module is as follows: Initially, a
-+local blast "factory object" is created. The constructor may be passed
-+an optional array of (non-default) parameters to be used by the
-+factory, eg:
-+
-+ @params = (-program => 'blastn', -database => 'ecoli.nt');
-+ $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
-+
-+Any parameters not explicitly set will remain as the defaults of the
-+BLAST executable. Note each BLAST executable has somewhat different
-+parameters and options. See the BLAST Documentation for a description
-+or run the BLAST executable from the command line followed solely with
-+a "-" to see a list of options and default values for that executable;
-+eg E<gt>blastall -.
-+
-+BLAST parameters can be changed and/or examined at any time after the
-+factory has been created. The program checks that any
-+parameter/switch being set/read is valid. Except where specifically
-+noted, StandAloneBlast uses the same single-letter, case-sensitive
-+parameter names as the actual blast program. Currently no checks are
-+included to verify that parameters are of the proper type (e.g. string
-+or numeric) or that their values are within the proper range.
-+
-+As an example, to change the value of the Blast parameter 'e' ('e' is
-+the parameter for expectation-value cutoff)
-+
-+ $expectvalue = 0.01;
-+ $factory->e($expectvalue);
-+
-+Note that for improved script readibility one can modify the name of
-+the (ncbi) BLAST parameters as desired as long as the initial letter (and
-+case) of the parameter are preserved, e.g.:
-+
-+ $factory->expectvalue($expectvalue);
-+
-+Unfortunately, some of the BLAST parameters are not the single
-+letter one might expect (eg "iteration round" in blastpgp is 'j').
-+Again one can check by using, for example:
-+
-+ > blastpgp -
-+
-+Wublast parameters need to be complete (ie. don't truncate them to their
-+first letter), but are case-insensitive.
-+
-+Once the factory has been created and the appropriate parameters set,
-+one can call one of the supported blast executables. The input
-+sequence(s) to these executables may be fasta file(s) as described in
-+the BLAST documentation.
-+
-+ $inputfilename = 't/testquery.fa';
-+ $blast_report = $factory->blastall($inputfilename);
-+
-+In addition, sequence input may be in the form of either a Bio::Seq
-+object or (a reference to) an array of Bio::Seq objects, e.g.:
-+
-+ $input = Bio::Seq->new(-id => "test query",
-+ -seq => "ACTACCCTTTAAATCAGTGGGGG");
-+ $blast_report = $factory->blastall($input);
-+
-+NOTE: Use of the BPlite method has been deprecated and is no longer supported.
-+
-+For blastall and non-psiblast blastpgp runs, report object is a L<Bio::SearchIO>
-+object, selected by the user with the parameter _READMETHOD. The leading
-+underscore is needed to distinguish this option from options which are passed to
-+the BLAST executable. The default parser is Bio::SearchIO::blast. In any case,
-+the "raw" blast report is also available. The filename is set by the 'outfile'
-+parameter and has the default value of "blastreport.out".
-+
-+For psiblast execution in the BLAST "jumpstart" mode, the program must
-+be passed (in addition to the query sequence itself) an alignment
-+containing the query sequence (in the form of a SimpleAlign object) as
-+well as a "mask" specifying at what residues position-specific scoring
-+matrices (PSSMs) are to used and at what residues default scoring
-+matrices (eg BLOSUM) are to be used. See psiblast documentation for
-+more details. The mask itself is a string of 0's and 1's which is the
-+same length as each sequence in the alignment and has a "1" at
-+locations where (PSSMs) are to be used and a "0" at all other
-+locations. So for example:
-+
-+ $str = Bio::AlignIO->new(-file => "cysprot.msf",
-+ -format => 'msf');
-+ $aln = $str->next_aln();
-+ $len = $aln->length_aln();
-+ $mask = '1' x $len;
-+ # simple case where PSSM's to be used at all residues
-+ $report = $factory->blastpgp("cysprot1.fa", $aln, $mask);
-+
-+For bl2seq execution, StandAloneBlast.pm can be combined with
-+AlignIO.pm to directly produce a SimpleAlign object from the alignment
-+of the two sequences produced by bl2seq as in:
-+
-+ # Get 2 sequences
-+ $str = Bio::SeqIO->new(-file=>'t/amino.fa' , -format => 'Fasta');
-+ my $seq3 = $str->next_seq();
-+ my $seq4 = $str->next_seq();
-+
-+ # Run bl2seq on them
-+ $factory = Bio::Tools::Run::StandAloneBlast->new(-program => 'blastp',
-+ -outfile => 'bl2seq.out');
-+ my $bl2seq_report = $factory->bl2seq($seq3, $seq4);
-+
-+ # Use AlignIO.pm to create a SimpleAlign object from the bl2seq report
-+ $str = Bio::AlignIO->new(-file=> 'bl2seq.out',-format => 'bl2seq');
-+ $aln = $str->next_aln();
-+
-+For more examples of syntax and use of StandAloneBlast.pm, the user is
-+encouraged to run the scripts standaloneblast.pl in the bioperl
-+examples/tools directory and StandAloneBlast.t in the bioperl t/
-+directory.
-+
-+=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 one
-+of the Bioperl mailing lists. Your participation is much appreciated.
-+
-+ bioperl-l at bioperl.org - General discussion
-+ http://bioperl.org/wiki/Mailing_lists - About the mailing lists
-+
-+=head2 Support
-+
-+Please direct usage questions or support issues to the mailing list:
-+
-+I<bioperl-l at bioperl.org>
-+
-+rather than to the module maintainer directly. Many experienced and
-+reponsive experts will be able look at the problem and quickly
-+address it. Please include a thorough description of the problem
-+with code and data examples if at all possible.
-+
-+=head2 Reporting Bugs
-+
-+Report bugs to the Bioperl bug tracking system to help us keep track
-+the bugs and their resolution. Bug reports can be submitted via
-+the web:
-+
-+ https://github.com/bioperl/bioperl-live/issues
-+
-+=head1 AUTHOR - Peter Schattner
-+
-+Email schattner at alum.mit.edu
-+
-+=head1 MAINTAINER - Torsten Seemann
-+
-+Email torsten at infotech.monash.edu.au
-+
-+=head1 CONTRIBUTORS
-+
-+Sendu Bala bix at sendu.me.uk (reimplementation)
-+
-+=head1 APPENDIX
-+
-+The rest of the documentation details each of the object
-+methods. Internal methods are usually preceded with a _
-+
-+=cut
-+
-+package Bio::Tools::Run::StandAloneBlast;
-+
-+use strict;
-+use warnings;
-+
-+use Bio::Root::IO;
-+use Bio::Seq;
-+use Bio::SeqIO;
-+use Bio::SearchIO;
-+use File::Spec;
-+
-+use base qw(Bio::Tools::Run::WrapperBase Bio::Factory::ApplicationFactoryI);
-+
-+our $AUTOLOAD;
-+our $DEFAULTBLASTTYPE = 'NCBI';
-+our $DEFAULTREADMETHOD = 'BLAST';
-+
-+# If local BLAST databases are not stored in the standard
-+# /data directory, the variable BLASTDATADIR will need to be
-+# set explicitly
-+our $DATADIR = $ENV{'BLASTDATADIR'} || $ENV{'BLASTDB'};
-+if (! defined $DATADIR && defined $ENV{'BLASTDIR'}) {
-+ my $dir = Bio::Root::IO->catfile($ENV{'BLASTDIR'}, 'data');
-+ if (-d $dir) {
-+ $DATADIR = $dir;
-+ }
-+ elsif ($ENV{'BLASTDIR'} =~ /bin/) {
-+ $dir = $ENV{'BLASTDIR'};
-+ $dir =~ s/bin/data/;
-+ $DATADIR = $dir if -d $dir;
-+ }
-+}
-+
-+=head2 new
-+
-+ Title : new
-+ Usage : my $obj = Bio::Tools::Run::StandAloneBlast->new();
-+ Function: Builds a newBio::Tools::Run::StandAloneBlast object
-+ Returns : Bio::Tools::Run::StandAloneNCBIBlast or StandAloneWUBlast
-+ Args : -quiet => boolean # make program execution quiet
-+ -_READMETHOD => 'BLAST' (default, synonym 'SearchIO') || 'blast_pull'
-+ # the parsing method, case insensitive
-+
-+Essentially all BLAST parameters can be set via StandAloneBlast.pm.
-+Some of the most commonly used parameters are listed below. All
-+parameters have defaults and are optional except for -p in those programs that
-+have it. For a complete listing of settable parameters, run the relevant
-+executable BLAST program with the option "-" as in blastall -
-+Note that the input parameters (-i, -j, -input) should not be set directly by
-+you: this module sets them when you call one of the executable methods.
-+
-+Blastall
-+
-+ -p Program Name [String]
-+ Input should be one of "blastp", "blastn", "blastx",
-+ "tblastn", or "tblastx".
-+ -d Database [String] default = nr
-+ The database specified must first be formatted with formatdb.
-+ Multiple database names (bracketed by quotations) will be accepted.
-+ An example would be -d "nr est"
-+ -e Expectation value (E) [Real] default = 10.0
-+ -o BLAST report Output File [File Out] Optional,
-+ default = ./blastreport.out ; set by StandAloneBlast.pm
-+ -S Query strands to search against database (for blast[nx], and tblastx). 3 is both, 1 is top, 2 is bottom [Integer]
-+ default = 3
-+
-+Blastpgp (including Psiblast)
-+
-+ -j is the maximum number of rounds (default 1; i.e., regular BLAST)
-+ -h is the e-value threshold for including sequences in the
-+ score matrix model (default 0.001)
-+ -c is the "constant" used in the pseudocount formula specified in the paper (default 10)
-+ -B Multiple alignment file for PSI-BLAST "jump start mode" Optional
-+ -Q Output File for PSI-BLAST Matrix in ASCII [File Out] Optional
-+
-+rpsblast
-+
-+ -d Database [String] default = (none - you must specify a database)
-+ The database specified must first be formatted with formatdb.
-+ Multiple database names (bracketed by quotations) will be accepted.
-+ An example would be -d "Cog Smart"
-+ -e Expectation value (E) [Real] default = 10.0
-+ -o BLAST report Output File [File Out] Optional,
-+ default = ./blastreport.out ; set by StandAloneBlast.pm
-+
-+Bl2seq
-+
-+ -p Program name: blastp, blastn, blastx. For blastx 1st argument should be nucleotide [String]
-+ default = blastp
-+ -o alignment output file [File Out] default = stdout
-+ -e Expectation value (E) [Real] default = 10.0
-+ -S Query strands to search against database (blastn only). 3 is both, 1 is top, 2 is bottom [Integer]
-+ default = 3
-+
-+WU-Blast
-+
-+ -p Program Name [String]
-+ Input should be one of "wublastp", "wublastn", "wublastx",
-+ "wutblastn", or "wutblastx".
-+ -d Database [String] default = nr
-+ The database specified must first be formatted with xdformat.
-+ -E Expectation value (E) [Real] default = 10.0
-+ -o BLAST report Output File [File Out] Optional,
-+ default = ./blastreport.out ; set by StandAloneBlast.pm
-+
-+=cut
-+
-+sub new {
-+ my ($caller, @args) = @_;
-+ my $class = ref($caller) || $caller;
-+
-+ # Because of case-sensitivity issues, ncbi and wublast methods are
-+ # mutually exclusive. We can't load ncbi methods if we start with wublast
-+ # (and vice versa) since wublast e() and E() should be the same thing,
-+ # whilst they must be different things in ncbi blast.
-+ #
-+ # Solution: split StandAloneBlast out into two more modules for NCBI and WU
-+
-+ if ($class =~ /NCBI|WU/) {
-+ return $class->SUPER::new(@args);
-+ }
-+
-+ my %args = @args;
-+ my $blasttype = $DEFAULTBLASTTYPE;
-+ while (my ($attr, $value) = each %args) {
-+ if ($attr =~/^-?\s*program\s*$|^-?p$/) {
-+ if ($value =~ /^wu*/) {
-+ $blasttype = 'WU';
-+ }
-+ }
-+ }
-+
-+ my $module = "Bio::Tools::Run::StandAlone${blasttype}Blast";
-+ Bio::Root::Root->_load_module($module);
-+ return $module->new(@args);
-+}
-+
-+=head2 executable
-+
-+ Title : executable
-+ Usage : my $exe = $blastfactory->executable('blastall');
-+ 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, $exename, $exe, $warn) = @_;
-+ $exename = 'blastall' unless (defined $exename || $self =~ /WUBlast/);
-+ $self->program_name($exename);
-+
-+ if( defined $exe && -x $exe ) {
-+ $self->{'_pathtoexe'}->{$exename} = $exe;
-+ }
-+ unless( defined $self->{'_pathtoexe'}->{$exename} ) {
-+ my $f = $self->program_path($exename);
-+ $exe = $self->{'_pathtoexe'}->{$exename} = $f if(-e $f && -x $f );
-+
-+ # This is how I meant to split up these conditionals --jason
-+ # if exe is null we will execute this (handle the case where
-+ # PROGRAMDIR pointed to something invalid)
-+ unless( $exe ) { # we didn't find it in that last conditional
-+ if( ($exe = $self->io->exists_exe($exename)) && -x $exe ) {
-+ $self->{'_pathtoexe'}->{$exename} = $exe;
-+ }
-+ else {
-+ $self->warn("Cannot find executable for $exename") if $warn;
-+ $self->{'_pathtoexe'}->{$exename} = undef;
-+ }
-+ }
-+ }
-+ return $self->{'_pathtoexe'}->{$exename};
-+}
-+
-+=head2 program_dir
-+
-+ Title : program_dir
-+ Usage : my $dir = $factory->program_dir();
-+ Function: Abstract get method for dir of program.
-+ Returns : string representing program directory
-+ Args : none
-+
-+=cut
-+
-+sub program_dir {
-+ my $self = shift;
-+ $self =~ /NCBIBlast/? $ENV{'BLASTDIR'}: $ENV{'WUBLASTDIR'};
-+}
-+
-+sub program_name {
-+ my $self = shift;
-+ if (@_) { $self->{program_name} = shift }
-+ return $self->{program_name} || '';
-+}
-+
-+sub program {
-+ my $self = shift;
-+ if( wantarray ) {
-+ return ($self->executable, $self->p());
-+ } else {
-+ return $self->executable(@_);
-+ }
-+}
-+
-+=head2 _setinput
-+
-+ Title : _setinput
-+ Usage : Internal function, not to be called directly
-+ Function: Create input file(s) for Blast executable
-+ Example :
-+ Returns : name of file containing Blast data input
-+ Args : Seq object reference or input file name
-+
-+=cut
-+
-+sub _setinput {
-+ my ($self, $executable, $input1, $input2) = @_;
-+ my ($seq, $temp, $infilename1, $infilename2,$fh ) ;
-+ # If $input1 is not a reference it better be the name of a file with
-+ # the sequence/ alignment data...
-+ $self->io->_io_cleanup();
-+
-+ SWITCH: {
-+ unless (ref $input1) {
-+ $infilename1 = (-e $input1) ? $input1 : 0 ;
-+ last SWITCH;
-+ }
-+
-+ # $input may be an array of BioSeq objects...
-+ if (ref($input1) =~ /ARRAY/i ) {
-+ ($fh,$infilename1) = $self->io->tempfile();
-+ $temp = Bio::SeqIO->new(-fh=> $fh, -format => 'fasta');
-+ foreach $seq (@$input1) {
-+ unless ($seq->isa("Bio::PrimarySeqI")) {return 0;}
-+ $seq->display_id($seq->display_id);
-+ $temp->write_seq($seq);
-+ }
-+ close $fh;
-+ $fh = undef;
-+ last SWITCH;
-+ }
-+
-+ # $input may be a single BioSeq object...
-+ elsif ($input1->isa("Bio::PrimarySeqI")) {
-+ ($fh,$infilename1) = $self->io->tempfile();
-+
-+ # just in case $input1 is taken from an alignment and has spaces (ie
-+ # deletions) indicated within it, we have to remove them - otherwise
-+ # the BLAST programs will be unhappy
-+ my $seq_string = $input1->seq();
-+ $seq_string =~ s/\W+//g; # get rid of spaces in sequence
-+ $input1->seq($seq_string);
-+ $temp = Bio::SeqIO->new(-fh=> $fh, '-format' => 'fasta');
-+ $temp->write_seq($input1);
-+ close $fh;
-+ undef $fh;
-+ last SWITCH;
-+ }
-+
-+ $infilename1 = 0; # Set error flag if you get here
-+ }
-+
-+ unless ($input2) { return $infilename1; }
-+
-+ SWITCH2: {
-+ unless (ref $input2) {
-+ $infilename2 = (-e $input2) ? $input2 : 0 ;
-+ last SWITCH2;
-+ }
-+ if ($input2->isa("Bio::PrimarySeqI") && $executable eq 'bl2seq' ) {
-+ ($fh,$infilename2) = $self->io->tempfile();
-+
-+ $temp = Bio::SeqIO->new(-fh=> $fh, '-format' => 'Fasta');
-+ $temp->write_seq($input2);
-+ close $fh;
-+ undef $fh;
-+ last SWITCH2;
-+ }
-+
-+ # Option for using psiblast's pre-alignment "jumpstart" feature
-+ elsif ($input2->isa("Bio::SimpleAlign") && $executable eq 'blastpgp' ) {
-+ # a bit of a lie since it won't be a fasta file
-+ ($fh,$infilename2) = $self->io->tempfile();
-+
-+ # first we retrieve the "mask" that determines which residues should
-+ # by scored according to their position and which should be scored
-+ # using the non-position-specific matrices
-+ my @mask = split("", shift ); # get mask
-+
-+ # then we have to convert all the residues in every sequence to upper
-+ # case at the positions that we want psiblast to use position specific
-+ # scoring
-+ foreach $seq ( $input2->each_seq() ) {
-+ my @seqstringlist = split("",$seq->seq());
-+ for (my $i = 0; $i < scalar(@mask); $i++) {
-+ unless ( $seqstringlist[$i] =~ /[a-zA-Z]/ ) {next}
-+ $seqstringlist[$i] = $mask[$i] ? uc $seqstringlist[$i]: lc $seqstringlist[$i] ;
-+ }
-+ my $newseqstring = join("", @seqstringlist);
-+ $seq->seq($newseqstring);
-+ }
-+
-+ # Now we need to write out the alignment to a file
-+ # in the "psi format" which psiblast is expecting
-+ $input2->map_chars('\.','-');
-+ $temp = Bio::AlignIO->new(-fh=> $fh, '-format' => 'psi');
-+ $temp->write_aln($input2);
-+ close $fh;
-+ undef $fh;
-+ last SWITCH2;
-+ }
-+
-+ $infilename2 = 0; # Set error flag if you get here
-+ }
-+
-+ return ($infilename1, $infilename2);
-+}
-+
-+=head1 Bio::Tools::Run::WrapperBase methods
-+
-+=cut
-+
-+=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
-+
-+=head2 save_tempfiles
-+
-+ Title : save_tempfiles
-+ Usage : $obj->save_tempfiles($newval)
-+ Function:
-+ Returns : value of save_tempfiles
-+ Args : newvalue (optional)
-+
-+=cut
-+
-+=head2 outfile_name
-+
-+ Title : outfile_name
-+ Usage : my $outfile = $tcoffee->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
-+
-+=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
-+
-+=head2 cleanup
-+
-+ Title : cleanup
-+ Usage : $tcoffee->cleanup();
-+ Function: Will cleanup the tempdir directory after a PAML run
-+ Returns : none
-+ Args : none
-+
-+=cut
-+
-+=head2 io
-+
-+ Title : io
-+ Usage : $obj->io($newval)
-+ Function: Gets a Bio::Root::IO object
-+ Returns : Bio::Root::IO
-+ Args : none
-+
-+=cut
-+
-+1;
---- /dev/null
-+++ b/lib/Bio/Tools/Run/StandAloneNCBIBlast.pm
-@@ -0,0 +1,538 @@
-+#
-+# BioPerl module for Bio::Tools::Run::StandAloneBlast
-+#
-+# Copyright Peter Schattner
-+#
-+# You may distribute this module under the same terms as perl itself
-+
-+# POD documentation - main docs before the code
-+
-+=head1 NAME
-+
-+Bio::Tools::Run::StandAloneNCBIBlast - Object for the local execution
-+of the NCBI BLAST program suite (blastall, blastpgp, bl2seq). With
-+experimental support for NCBI rpsblast.
-+
-+=head1 SYNOPSIS
-+
-+ # Do not use directly; see Bio::Tools::Run::StandAloneBlast
-+
-+=head1 DESCRIPTION
-+
-+See Bio::Tools::Run::StandAloneBlast
-+
-+=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 one
-+of the Bioperl mailing lists. Your participation is much appreciated.
-+
-+ bioperl-l at bioperl.org - General discussion
-+ http://bioperl.org/wiki/Mailing_lists - About the mailing lists
-+
-+=head2 Support
-+
-+Please direct usage questions or support issues to the mailing list:
-+
-+I<bioperl-l at bioperl.org>
-+
-+rather than to the module maintainer directly. Many experienced and
-+reponsive experts will be able look at the problem and quickly
-+address it. Please include a thorough description of the problem
-+with code and data examples if at all possible.
-+
-+=head2 Reporting Bugs
-+
-+Report bugs to the Bioperl bug tracking system to help us keep track
-+the bugs and their resolution. Bug reports can be submitted via
-+the web:
-+
-+ https://github.com/bioperl/bioperl-live/issues
-+
-+=head1 AUTHOR - Peter Schattner
-+
-+Email schattner at alum.mit.edu
-+
-+=head1 MAINTAINER - Torsten Seemann
-+
-+Email torsten at infotech.monash.edu.au
-+
-+=head1 CONTRIBUTORS
-+
-+Sendu Bala bix at sendu.me.uk (reimplementation)
-+
-+=head1 APPENDIX
-+
-+The rest of the documentation details each of the object
-+methods. Internal methods are usually preceded with a _
-+
-+=cut
-+
-+package Bio::Tools::Run::StandAloneNCBIBlast;
-+
-+use strict;
-+use warnings;
-+
-+use base qw(Bio::Tools::Run::StandAloneBlast);
-+
-+our $AUTOLOAD;
-+our $DEFAULTREADMETHOD = 'BLAST';
-+
-+# If local BLAST databases are not stored in the standard
-+# /data directory, the variable BLASTDATADIR will need to be
-+# set explicitly
-+our $DATADIR = $Bio::Tools::Run::StandAloneBlast::DATADIR;
-+
-+our %GENERAL_PARAMS = (i => 'input',
-+ o => 'outfile',
-+ p => 'program',
-+ d => 'database');
-+our @BLASTALL_PARAMS = qw(A B C D E F G K L M O P Q R S W X Y Z a b e f l m q r t v w y z n);
-+our @BLASTALL_SWITCH = qw(I g J T U n V s);
-+our @BLASTPGP_PARAMS = qw(A B C E F G H I J K L M N O P Q R S T U W X Y Z a b c e f h j k l m q s t u v y z);
-+our @RPSBLAST_PARAMS = qw(F I J L N O P T U V X Y Z a b e l m v y z);
-+our @BL2SEQ_PARAMS = qw(A D E F G I J M S T U V W X Y a e g j m q r t);
-+
-+our @OTHER_PARAMS = qw(_READMETHOD);
-+
-+
-+=head2 new
-+
-+ Title : new
-+ Usage : my $obj = Bio::Tools::Run::StandAloneBlast->new();
-+ Function: Builds a newBio::Tools::Run::StandAloneBlast object
-+ Returns : Bio::Tools::Run::StandAloneBlast
-+ Args : -quiet => boolean # make program execution quiet
-+ -_READMETHOD => 'BLAST' (default, synonym 'SearchIO') || 'blast_pull'
-+ # the parsing method, case insensitive
-+
-+Essentially all BLAST parameters can be set via StandAloneBlast.pm.
-+Some of the most commonly used parameters are listed below. All
-+parameters have defaults and are optional except for -p in those programs that
-+have it. For a complete listing of settable parameters, run the relevant
-+executable BLAST program with the option "-" as in blastall -
-+Note that the input parameters (-i, -j, -input) should not be set directly by
-+you: this module sets them when you call one of the executable methods.
-+
-+Blastall
-+
-+ -p Program Name [String]
-+ Input should be one of "blastp", "blastn", "blastx",
-+ "tblastn", or "tblastx".
-+ -d Database [String] default = nr
-+ The database specified must first be formatted with formatdb.
-+ Multiple database names (bracketed by quotations) will be accepted.
-+ An example would be -d "nr est"
-+ -e Expectation value (E) [Real] default = 10.0
-+ -o BLAST report Output File [File Out] Optional,
-+ default = ./blastreport.out ; set by StandAloneBlast.pm
-+ -S Query strands to search against database (for blast[nx], and tblastx). 3 is both, 1 is top, 2 is bottom [Integer]
-+ default = 3
-+
-+Blastpgp (including Psiblast)
-+
-+ -j is the maximum number of rounds (default 1; i.e., regular BLAST)
-+ -h is the e-value threshold for including sequences in the
-+ score matrix model (default 0.001)
-+ -c is the "constant" used in the pseudocount formula specified in the paper (default 10)
-+ -B Multiple alignment file for PSI-BLAST "jump start mode" Optional
-+ -Q Output File for PSI-BLAST Matrix in ASCII [File Out] Optional
-+
-+rpsblast
-+
-+ -d Database [String] default = (none - you must specify a database)
-+ The database specified must first be formatted with formatdb.
-+ Multiple database names (bracketed by quotations) will be accepted.
-+ An example would be -d "Cog Smart"
-+ -e Expectation value (E) [Real] default = 10.0
-+ -o BLAST report Output File [File Out] Optional,
-+ default = ./blastreport.out ; set by StandAloneBlast.pm
-+
-+Bl2seq
-+
-+ -p Program name: blastp, blastn, blastx. For blastx 1st argument should be nucleotide [String]
-+ default = blastp
-+ -o alignment output file [File Out] default = stdout
-+ -e Expectation value (E) [Real] default = 10.0
-+ -S Query strands to search against database (blastn only). 3 is both, 1 is top, 2 is bottom [Integer]
-+ default = 3
-+
-+=cut
-+
-+sub new {
-+ my ($caller, @args) = @_;
-+ my $self = $caller->SUPER::new(@args);
-+
-+ # StandAloneBlast is special in that "one can modify the name of
-+ # the (ncbi) BLAST parameters as desired as long as the initial letter (and
-+ # case) of the parameter are preserved". We handle this by truncating input
-+ # args to their first char
-+ my %args = @args;
-+ @args = ();
-+ while (my ($attr, $value) = each %args) {
-+ $attr =~ s/^-//;
-+ $attr = substr($attr, 0, 1) unless $attr =~ /^_/;
-+ push(@args, $attr, $value);
-+ }
-+
-+ $self->_set_from_args(\@args, -methods => {(map { $_ => $GENERAL_PARAMS{$_} } keys %GENERAL_PARAMS),
-+ (map { $_ => $_ } (@OTHER_PARAMS,
-+ @BLASTALL_PARAMS,
-+ @BLASTALL_SWITCH,
-+ @BLASTPGP_PARAMS,
-+ @RPSBLAST_PARAMS,
-+ @BL2SEQ_PARAMS))},
-+ -code => { map { $_ => 'my $self = shift;
-+ if (@_) {
-+ my $value = shift;
-+ if ($value && $value ne \'F\') {
-+ $value = \'T\';
-+ }
-+ else {
-+ $value = \'F\';
-+ }
-+ $self->{\'_\'.$method} = $value;
-+ }
-+ return $self->{\'_\'.$method} || return;' } @BLASTALL_SWITCH }, # these methods can take boolean or 'T' and 'F'
-+ -create => 1,
-+ -force => 1,
-+ -case_sensitive => 1);
-+
-+ my ($tfh, $tempfile) = $self->io->tempfile();
-+ my $outfile = $self->o || $self->outfile || $tempfile;
-+ $self->o($outfile);
-+ close($tfh);
-+
-+ $self->_READMETHOD($DEFAULTREADMETHOD) unless $self->_READMETHOD;
-+
-+ return $self;
-+}
-+
-+# StandAloneBlast is special in that "one can modify the name of
-+# the (ncbi) BLAST parameters as desired as long as the initial letter (and
-+# case) of the parameter are preserved". We handle this with AUTOLOAD
-+# redirecting to the automatically created methods from _set_from_args() !
-+sub AUTOLOAD {
-+ my $self = shift;
-+ my $attr = $AUTOLOAD;
-+ $attr =~ s/.*:://;
-+
-+ my $orig = $attr;
-+
-+ $attr = substr($attr, 0, 1);
-+
-+ $self->can($attr) || $self->throw("Unallowed parameter: $orig !");
-+
-+ return $self->$attr(@_);
-+}
-+
-+=head2 blastall
-+
-+ Title : blastall
-+ Usage : $blast_report = $factory->blastall('t/testquery.fa');
-+ or
-+ $input = Bio::Seq->new(-id=>"test query",
-+ -seq=>"ACTACCCTTTAAATCAGTGGGGG");
-+ $blast_report = $factory->blastall($input);
-+ or
-+ $seq_array_ref = \@seq_array;
-+ # where @seq_array is an array of Bio::Seq objects
-+ $blast_report = $factory->blastall($seq_array_ref);
-+ Returns : Reference to a Blast object containing the blast report.
-+ Args : Name of a file or Bio::Seq object or an array of
-+ Bio::Seq object containing the query sequence(s).
-+ Throws an exception if argument is not either a string
-+ (eg a filename) or a reference to a Bio::Seq object
-+ (or to an array of Seq objects). If argument is string,
-+ throws exception if file corresponding to string name can
-+ not be found.
-+
-+=cut
-+
-+sub blastall {
-+ my ($self, $input1) = @_;
-+ $self->io->_io_cleanup();
-+ my $executable = 'blastall';
-+
-+ # Create input file pointer
-+ my $infilename1 = $self->_setinput($executable, $input1) || $self->throw("$input1 not Bio::Seq object or array of Bio::Seq objects or file name!");
-+ $self->i($infilename1);
-+
-+ my $blast_report = $self->_generic_local_blast($executable);
-+}
-+
-+=head2 blastpgp
-+
-+ Title : blastpgp
-+ Usage : $blast_report = $factory-> blastpgp('t/testquery.fa');
-+ or
-+ $input = Bio::Seq->new(-id=>"test query",
-+ -seq=>"ACTADDEEQQPPTCADEEQQQVVGG");
-+ $blast_report = $factory->blastpgp ($input);
-+ or
-+ $seq_array_ref = \@seq_array;
-+ # where @seq_array is an array of Bio::Seq objects
-+ $blast_report = $factory-> blastpgp(\@seq_array);
-+ Returns : Reference to a Bio::SearchIO object containing the blast report
-+ Args : Name of a file or Bio::Seq object. In psiblast jumpstart
-+ mode two additional arguments are required: a SimpleAlign
-+ object one of whose elements is the query and a "mask" to
-+ determine how BLAST should select scoring matrices see
-+ DESCRIPTION above for more details.
-+
-+ Throws an exception if argument is not either a string
-+ (eg a filename) or a reference to a Bio::Seq object
-+ (or to an array of Seq objects). If argument is string,
-+ throws exception if file corresponding to string name can
-+ not be found.
-+ Returns : Reference to Bio::SearchIO object containing the blast report.
-+
-+=cut
-+
-+sub blastpgp {
-+ my $self = shift;
-+ my $executable = 'blastpgp';
-+ my $input1 = shift;
-+ my $input2 = shift;
-+ # used by blastpgp's -B option to specify which
-+ # residues are position aligned
-+ my $mask = shift;
-+
-+ my ($infilename1, $infilename2 ) = $self->_setinput($executable,
-+ $input1, $input2,
-+ $mask);
-+ if (!$infilename1) {$self->throw("$input1 not Bio::Seq object or array of Bio::Seq objects or file name!");}
-+ $self->i($infilename1); # set file name of sequence to be blasted to inputfilename1 (-i param of blastpgp)
-+ if ($input2) {
-+ unless ($infilename2) {$self->throw("$input2 not SimpleAlign Object in pre-aligned psiblast\n");}
-+ $self->B($infilename2); # set file name of partial alignment to inputfilename2 (-B param of blastpgp)
-+ }
-+
-+ my $blast_report = $self->_generic_local_blast($executable);
-+}
-+
-+=head2 rpsblast
-+
-+ Title : rpsblast
-+ Usage : $blast_report = $factory->rpsblast('t/testquery.fa');
-+ or
-+ $input = Bio::Seq->new(-id=>"test query",
-+ -seq=>"MVVLCRADDEEQQPPTCADEEQQQVVGG");
-+ $blast_report = $factory->rpsblast($input);
-+ or
-+ $seq_array_ref = \@seq_array;
-+ # where @seq_array is an array of Bio::Seq objects
-+ $blast_report = $factory->rpsblast(\@seq_array);
-+ Args : Name of a file or Bio::Seq object or an array of
-+ Bio::Seq object containing the query sequence(s).
-+ Throws an exception if argument is not either a string
-+ (eg a filename) or a reference to a Bio::Seq object
-+ (or to an array of Seq objects). If argument is string,
-+ throws exception if file corresponding to string name can
-+ not be found.
-+ Returns : Reference to a Bio::SearchIO object containing the blast report
-+
-+=cut
-+
-+sub rpsblast {
-+ my ($self, $input1) = @_;
-+ $self->io->_io_cleanup();
-+ my $executable = 'rpsblast';
-+
-+ # Create input file pointer
-+ my $infilename1 = $self->_setinput($executable, $input1) || $self->throw("$input1 not Bio::Seq object or array of Bio::Seq objects or file name!");
-+ $self->i($infilename1);
-+
-+ my $blast_report = $self->_generic_local_blast($executable);
-+}
-+
-+=head2 bl2seq
-+
-+ Title : bl2seq
-+ Usage : $factory-> bl2seq('t/seq1.fa', 't/seq2.fa');
-+ or
-+ $input1 = Bio::Seq->new(-id=>"test query1",
-+ -seq=>"ACTADDEEQQPPTCADEEQQQVVGG");
-+ $input2 = Bio::Seq->new(-id=>"test query2",
-+ -seq=>"ACTADDEMMMMMMMDEEQQQVVGG");
-+ $blast_report = $factory->bl2seq ($input1, $input2);
-+ Returns : Reference to a BPbl2seq object containing the blast report.
-+ Args : Names of 2 files or 2 Bio::Seq objects containing the
-+ sequences to be aligned by bl2seq.
-+
-+ Throws an exception if argument is not either a pair of
-+ strings (eg filenames) or references to Bio::Seq objects.
-+ If arguments are strings, throws exception if files
-+ corresponding to string names can not be found.
-+
-+=cut
-+
-+sub bl2seq {
-+ my $self = shift;
-+ my $executable = 'bl2seq';
-+ my $input1 = shift;
-+ my $input2 = shift;
-+
-+ # Create input file pointer
-+ my ($infilename1, $infilename2 ) = $self->_setinput($executable,
-+ $input1, $input2);
-+ if (!$infilename1){$self->throw(" $input1 not Seq Object or file name!");}
-+ if (!$infilename2){$self->throw("$input2 not Seq Object or file name!");}
-+
-+ $self->i($infilename1); # set file name of first sequence to
-+ # be aligned to inputfilename1
-+ # (-i param of bl2seq)
-+ $self->j($infilename2); # set file name of first sequence to
-+ # be aligned to inputfilename2
-+ # (-j param of bl2seq)
-+
-+ my $blast_report = $self->_generic_local_blast($executable);
-+}
-+
-+=head2 _generic_local_blast
-+
-+ Title : _generic_local_blast
-+ Usage : internal function not called directly
-+ Returns : Bio::SearchIO
-+ Args : Reference to calling object and name of BLAST executable
-+
-+=cut
-+
-+sub _generic_local_blast {
-+ my $self = shift;
-+ my $executable = shift;
-+
-+ # Create parameter string to pass to Blast program
-+ my $param_string = $self->_setparams($executable);
-+
-+ # run Blast
-+ my $blast_report = $self->_runblast($executable, $param_string);
-+}
-+
-+=head2 _runblast
-+
-+ Title : _runblast
-+ Usage : Internal function, not to be called directly
-+ Function: makes actual system call to Blast program
-+ Example :
-+ Returns : Report Bio::SearchIO object in the appropriate format
-+ Args : Reference to calling object, name of BLAST executable,
-+ and parameter string for executable
-+
-+=cut
-+
-+sub _runblast {
-+ my ($self, $executable, $param_string) = @_;
-+ my ($blast_obj, $exe);
-+ if (! ($exe = $self->executable($executable)) ) {
-+ $self->warn("cannot find path to $executable");
-+ return;
-+ }
-+
-+ # Use double quotes if executable path have empty spaces
-+ if ($exe =~ m/ /) {
-+ $exe = "\"$exe\"";
-+ }
-+ my $commandstring = $exe.$param_string;
-+
-+ $self->debug("$commandstring\n");
-+ system($commandstring) && $self->throw("$executable call crashed: $? | $! | $commandstring\n");
-+
-+ # set significance cutoff to set expectation value or default value
-+ # (may want to make this value vary for different executables)
-+ my $signif = $self->e() || 1e-5;
-+
-+ # get outputfilename
-+ my $outfile = $self->o();
-+
-+ # this should allow any blast SearchIO parser (not just 'blast_pull' or 'blast',
-+ # but 'blastxml' and 'blasttable'). Fall back to 'blast' if not stipulated.
-+ my $method = $self->_READMETHOD;
-+ if ($method =~ /^(?:blast|SearchIO)/i ) {
-+ $method = 'blast' if $method =~ m{SearchIO}i;
-+ $blast_obj = Bio::SearchIO->new(-file => $outfile,
-+ -format => $method);
-+ }
-+ # should these be here? They have been deprecated...
-+ elsif ($method =~ /BPlite/i ) {
-+ if ($executable =~ /bl2seq/i) {
-+ # Added program info so BPbl2seq can compute strand info
-+ $self->throw("Use of Bio::Tools::BPbl2seq is deprecated; use Bio::SearchIO modules instead");
-+ }
-+ elsif ($executable =~ /blastpgp/i && defined $self->j() && $self->j() > 1) {
-+ $self->throw("Use of Bio::Tools::BPpsilite is deprecated; use Bio::SearchIO modules instead");
-+ }
-+ elsif ($executable =~ /blastall|rpsblast/i) {
-+ $self->throw("Use of Bio::Tools::BPlite is deprecated; use Bio::SearchIO modules instead");
-+ }
-+ else {
-+ $self->warn("Unrecognized executable $executable");
-+ }
-+ }
-+ else {
-+ $self->warn("Unrecognized readmethod $method");
-+ }
-+
-+ return $blast_obj;
-+}
-+
-+=head2 _setparams
-+
-+ Title : _setparams
-+ Usage : Internal function, not to be called directly
-+ Function: Create parameter inputs for Blast program
-+ Example :
-+ Returns : parameter string to be passed to Blast
-+ Args : Reference to calling object and name of BLAST executable
-+
-+=cut
-+
-+sub _setparams {
-+ my ($self, $executable) = @_;
-+ my ($attr, $value, @execparams);
-+
-+ if ($executable eq 'blastall') { @execparams = (@BLASTALL_PARAMS,
-+ @BLASTALL_SWITCH); }
-+ elsif ($executable eq 'blastpgp') { @execparams = @BLASTPGP_PARAMS; }
-+ elsif ($executable eq 'rpsblast') { @execparams = @RPSBLAST_PARAMS; }
-+ elsif ($executable eq 'bl2seq' ) { @execparams = @BL2SEQ_PARAMS; }
-+
-+ # we also have all the general params
-+ push(@execparams, keys %GENERAL_PARAMS);
-+
-+ my $database = $self->d;
-+ if ($database && $executable ne 'bl2seq') {
-+ # Need to prepend datadirectory to database name
-+ my @dbs = split(/ /, $database);
-+ for my $i (0..$#dbs) {
-+ # (works with multiple databases)
-+ if (! (-e $dbs[$i].".nin" || -e $dbs[$i].".pin") &&
-+ ! (-e $dbs[$i].".nal" || -e $dbs[$i].".pal") ) {
-+ $dbs[$i] = File::Spec->catdir($DATADIR, $dbs[$i]);
-+ }
-+ }
-+ $self->d('"'.join(" ", @dbs).'"');
-+ }
-+
-+ # workaround for problems with shell metacharacters [bug 2707]
-+ # simply quoting does not always work!
-+ my $tmp = $self->o;
-+ $self->o(quotemeta($tmp)) if ($tmp && $^O !~ /^MSWin/);
-+
-+ my $param_string = $self->SUPER::_setparams(-params => [@execparams],
-+ -dash => 1);
-+
-+ $self->o($tmp) if ($tmp && $^O !~ /^MSWin/);
-+
-+ $self->d($database) if $database;
-+
-+ if ($self->quiet()) {
-+ $param_string .= ' 2> '.File::Spec->devnull;
-+ }
-+
-+ return $param_string;
-+}
-+
-+1;
---- /dev/null
-+++ b/lib/Bio/Tools/Run/StandAloneWUBlast.pm
-@@ -0,0 +1,299 @@
-+#
-+# BioPerl module for Bio::Tools::Run::StandAloneBlast
-+#
-+# Copyright Peter Schattner
-+#
-+# You may distribute this module under the same terms as perl itself
-+
-+# POD documentation - main docs before the code
-+
-+=head1 NAME
-+
-+Bio::Tools::Run::StandAloneWUBlast - Object for the local execution
-+of WU-Blast.
-+
-+=head1 SYNOPSIS
-+
-+ # Do not use directly; use Bio::Tools::Run::StandAloneBlast
-+
-+=head1 DESCRIPTION
-+
-+See Bio::Tools::Run::StandAloneBlast
-+
-+=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 one
-+of the Bioperl mailing lists. Your participation is much appreciated.
-+
-+ bioperl-l at bioperl.org - General discussion
-+ http://bioperl.org/wiki/Mailing_lists - About the mailing lists
-+
-+=head2 Support
-+
-+Please direct usage questions or support issues to the mailing list:
-+
-+I<bioperl-l at bioperl.org>
-+
-+rather than to the module maintainer directly. Many experienced and
-+reponsive experts will be able look at the problem and quickly
-+address it. Please include a thorough description of the problem
-+with code and data examples if at all possible.
-+
-+=head2 Reporting Bugs
-+
-+Report bugs to the Bioperl bug tracking system to help us keep track
-+the bugs and their resolution. Bug reports can be submitted via
-+the web:
-+
-+ https://github.com/bioperl/bioperl-live/issues
-+
-+=head1 AUTHOR - Peter Schattner
-+
-+Email schattner at alum.mit.edu
-+
-+=head1 MAINTAINER - Torsten Seemann
-+
-+Email torsten at infotech.monash.edu.au
-+
-+=head1 CONTRIBUTORS
-+
-+Sendu Bala bix at sendu.me.uk (reimplementation)
-+
-+=head1 APPENDIX
-+
-+The rest of the documentation details each of the object
-+methods. Internal methods are usually preceded with a _
-+
-+=cut
-+
-+package Bio::Tools::Run::StandAloneWUBlast;
-+
-+use strict;
-+
-+use base qw(Bio::Tools::Run::StandAloneBlast);
-+
-+our $AUTOLOAD;
-+our $DEFAULTREADMETHOD = 'BLAST';
-+
-+# If local BLAST databases are not stored in the standard
-+# /data directory, the variable BLASTDATADIR will need to be
-+# set explicitly
-+our $DATADIR = $Bio::Tools::Run::StandAloneBlast::DATADIR;
-+
-+our %GENERAL_PARAMS = (i => 'input',
-+ o => 'outfile',
-+ p => 'program',
-+ d => 'database');
-+our @WUBLAST_PARAMS = qw(e s e2 s2 w t x m y z l k h v b q r
-+ matrix filter wordmask filter maskextra hitdist wink ctxfactor gape
-+ gaps gape2 gaps2 gapw gapx olf golf olmax golmax gapdecayrate
-+ topcombon topcomboe sumstatsmethod hspsepqmax hspsepsmax gapsepqmax
-+ gapsepsmax altscore hspmax gspmax qoffset nwstart nwlen qrecmin qrecmax
-+ dbrecmin dbrecmax vdbdescmax dbchunks sort_by_pvalue cpus putenv
-+ getenv progress);
-+our @WUBLAST_SWITCH = qw(kap sump poissonp lcfilter lcmask echofilter
-+ stats nogap gapall pingpong nosegs postsw span2 span1 span prune
-+ consistency links ucdb gi noseqs qtype qres sort_by_pvalue
-+ sort_by_count sort_by_highscore sort_by_totalscore
-+ sort_by_subjectlength mmio nonnegok novalidctxok shortqueryok notes
-+ warnings errors endputenv getenv endgetenv abortonerror abortonfatal);
-+
-+our @OTHER_PARAMS = qw(_READMETHOD);
-+
-+
-+=head2 new
-+
-+ Title : new
-+ Usage : my $obj = Bio::Tools::Run::StandAloneBlast->new();
-+ Function: Builds a newBio::Tools::Run::StandAloneBlast object
-+ Returns : Bio::Tools::Run::StandAloneBlast
-+ Args : -quiet => boolean # make program execution quiet
-+ -_READMETHOD => 'BLAST' (default, synonym 'SearchIO') || 'blast_pull'
-+ # the parsing method, case insensitive
-+
-+Essentially all BLAST parameters can be set via StandAloneBlast.pm.
-+Some of the most commonly used parameters are listed below. All
-+parameters have defaults and are optional except for -p.
-+
-+ -p Program Name [String]
-+ Input should be one of "wublastp", "wublastn", "wublastx",
-+ "wutblastn", or "wutblastx".
-+ -d Database [String] default = nr
-+ The database specified must first be formatted with xdformat.
-+ -E Expectation value (E) [Real] default = 10.0
-+ -o BLAST report Output File [File Out] Optional,
-+ default = ./blastreport.out ; set by StandAloneBlast.pm
-+
-+=cut
-+
-+sub new {
-+ my ($caller, @args) = @_;
-+ my $self = $caller->SUPER::new(@args);
-+
-+ $self->_set_from_args(\@args, -methods => {(map { $_ => $GENERAL_PARAMS{$_} } keys %GENERAL_PARAMS),
-+ (map { $_ => $_ } (@OTHER_PARAMS,
-+ @WUBLAST_PARAMS,
-+ @WUBLAST_SWITCH))},
-+ -create => 1,
-+ -force => 1);
-+
-+ my ($tfh, $tempfile) = $self->io->tempfile();
-+ my $outfile = $self->o || $self->outfile || $tempfile;
-+ $self->o($outfile);
-+ close($tfh);
-+
-+ $self->_READMETHOD($DEFAULTREADMETHOD) unless $self->_READMETHOD;
-+
-+ return $self;
-+}
-+
-+# We let get/setter method names be case-insensitve
-+sub AUTOLOAD {
-+ my $self = shift;
-+ my $attr = $AUTOLOAD;
-+ $attr =~ s/.*:://;
-+
-+ my $orig = $attr;
-+
-+ $attr = lc($attr);
-+
-+ $self->can($attr) || $self->throw("Unallowed parameter: $orig !");
-+
-+ return $self->$attr(@_);
-+}
-+
-+=head2 wublast
-+
-+ Title : wublast
-+ Usage : $blast_report = $factory->wublast('t/testquery.fa');
-+ or
-+ $input = Bio::Seq->new(-id=>"test query",
-+ -seq=>"ACTACCCTTTAAATCAGTGGGGG");
-+ $blast_report = $factory->wublast($input);
-+ or
-+ $seq_array_ref = \@seq_array; # where @seq_array is an array of Bio::Seq objects
-+ $blast_report = $factory->wublast(\@seq_array);
-+ Returns : Reference to a Blast object
-+ Args : Name of a file or Bio::Seq object or an array of
-+ Bio::Seq object containing the query sequence(s).
-+ Throws an exception if argument is not either a string
-+ (eg a filename) or a reference to a Bio::Seq object
-+ (or to an array of Seq objects). If argument is string,
-+ throws exception if file corresponding to string name can
-+ not be found.
-+
-+=cut
-+
-+sub wublast {
-+ my ($self, $input1) = @_;
-+ $self->io->_io_cleanup();
-+ my $executable = 'wublast';
-+
-+ # Create input file pointer
-+ my $infilename1 = $self->_setinput($executable, $input1) || $self->throw("$input1 not Bio::Seq object or array of Bio::Seq objects or file name!");
-+ $self->i($infilename1);
-+
-+ my $blast_report = $self->_generic_local_wublast($executable);
-+}
-+
-+=head2 _generic_local_wublast
-+
-+ Title : _generic_local_wublast
-+ Usage : internal function not called directly
-+ Returns : Blast object
-+ Args : Reference to calling object and name of BLAST executable
-+
-+=cut
-+
-+sub _generic_local_wublast {
-+ my $self = shift;
-+ my $executable = shift;
-+
-+ # Create parameter string to pass to Blast program
-+ my $param_string = $self->_setparams($executable);
-+ $param_string = " ".$self->database." ".$self->input." ".$param_string;
-+
-+ # run Blast
-+ my $blast_report = $self->_runwublast($executable, $param_string);
-+}
-+
-+=head2 _runwublast
-+
-+ Title : _runwublast
-+ Usage : Internal function, not to be called directly
-+ Function: makes actual system call to WU-Blast program
-+ Example :
-+ Returns : Report Blast object
-+ Args : Reference to calling object, name of BLAST executable,
-+ and parameter string for executable
-+
-+=cut
-+
-+sub _runwublast {
-+ my ($self, $executable, $param_string) = @_;
-+ my ($blast_obj, $exe);
-+ if (! ($exe = $self->executable($self->p))){
-+ $self->warn("cannot find path to $executable");
-+ return;
-+ }
-+
-+ # Use double quotes if executable path have empty spaces
-+ if ($exe =~ m/ /) {
-+ $exe = "\"$exe\"";
-+ }
-+ my $commandstring = $exe.$param_string;
-+
-+ $self->debug("$commandstring\n");
-+ system($commandstring) && $self->throw("$executable call crashed: $? | $! | $commandstring\n");
-+
-+ # get outputfilename
-+ my $outfile = $self->o();
-+ $blast_obj = Bio::SearchIO->new(-file => $outfile, -format => 'blast');
-+
-+ return $blast_obj;
-+}
-+
-+=head2 _setparams
-+
-+ Title : _setparams
-+ Usage : Internal function, not to be called directly
-+ Function: Create parameter inputs for Blast program
-+ Example :
-+ Returns : parameter string to be passed to Blast
-+ Args : Reference to calling object and name of BLAST executable
-+
-+=cut
-+
-+sub _setparams {
-+ my ($self, $executable) = @_;
-+ my ($attr, $value, @execparams);
-+
-+ @execparams = @WUBLAST_PARAMS;
-+
-+ # of the general params, wublast only takes outfile at
-+ # this stage (we add in program, input and database manually elsewhere)
-+ push(@execparams, 'o');
-+
-+ # workaround for problems with shell metacharacters [bug 2707]
-+ # simply quoting does not always work!
-+ # Fixed so Windows files are not quotemeta'd
-+ my $tmp = $self->o;
-+ $self->o(quotemeta($tmp)) if ($tmp && $^O !~ /^MSWin/);
-+
-+ my $param_string = $self->SUPER::_setparams(-params => [@execparams],
-+ -switches => \@WUBLAST_SWITCH,
-+ -dash => 1);
-+
-+ $self->o($tmp) if ($tmp && $^O !~ /^MSWin/);
-+
-+ if ($self->quiet()) {
-+ $param_string .= ' 2> '.File::Spec->devnull;
-+ }
-+
-+ return $param_string;
-+}
-+
-+1;
---- /dev/null
-+++ b/lib/Bio/Tools/Run/WrapperBase.pm
-@@ -0,0 +1,511 @@
-+#
-+# BioPerl module for Bio::Tools::Run::WrapperBase
-+#
-+# Please direct questions and support issues to <bioperl-l at bioperl.org>
-+#
-+# Cared for by Jason Stajich <jason at 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 at bioperl.org - General discussion
-+ http://bioperl.org/wiki/Mailing_lists - About the mailing lists
-+
-+=head2 Support
-+
-+Please direct usage questions or support issues to the mailing list:
-+
-+I<bioperl-l at bioperl.org>
-+
-+rather than to the module maintainer directly. Many experienced and
-+reponsive experts will be able look at the problem and quickly
-+address it. Please include a thorough description of the problem
-+with code and data examples if at all possible.
-+
-+=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 the
-+web:
-+
-+ https://github.com/bioperl/bioperl-live/issues
-+
-+=head1 AUTHOR - Jason Stajich
-+
-+Email jason-at-bioperl.org
-+
-+=head1 CONTRIBUTORS
-+
-+Sendu Bala, bix at sendu.me.uk
-+
-+=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 strict;
-+
-+# Object preamble - inherits from Bio::Root::Root
-+
-+use base qw(Bio::Root::Root);
-+
-+use File::Spec;
-+use File::Path qw(); # don't import anything
-+
-+=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, at args) = @_;
-+ $self->throw_not_implemented();
-+}
-+
-+
-+=head2 error_string
-+
-+ Title : error_string
-+ Usage : $obj->error_string($newval)
-+ Function: Where the output from the last analysis 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 arguments
-+
-+ Title : arguments
-+ Usage : $obj->arguments($newval)
-+ Function: Commandline parameters
-+ Returns : value of arguments
-+ Args : newvalue (optional)
-+
-+
-+=cut
-+
-+sub arguments {
-+ my ($self,$value) = @_;
-+ if(defined $value) {
-+ $self->{'_arguments'} = $value;
-+ }
-+ return $self->{'_arguments'} || '';
-+}
-+
-+
-+=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: Get/set the choice of if tempfiles in the temp dir (see tempdir())
-+ are kept or cleaned up. Default is '0', ie. delete temp files.
-+ NB: This must be set to the desired value PRIOR to first creating
-+ a temp dir with tempdir(). Any attempt to set this after tempdir creation will get a warning.
-+ Returns : boolean
-+ Args : none to get, boolean to set
-+
-+=cut
-+
-+sub save_tempfiles{
-+ my $self = shift;
-+ my @args = @_;
-+ if (($args[0]) && (exists ($self->{'_tmpdir'}))) {
-+ $self->warn ("Tempdir already created; setting save_tempfiles will not affect cleanup behavior.");
-+ }
-+ return $self->io->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) = shift;
-+
-+ $self->{'_tmpdir'} = shift if @_;
-+ unless( $self->{'_tmpdir'} ) {
-+ $self->{'_tmpdir'} = $self->io->tempdir(CLEANUP => ! $self->save_tempfiles );
-+ }
-+ unless( -d $self->{'_tmpdir'} ) {
-+ mkdir($self->{'_tmpdir'},0777);
-+ }
-+ return $self->{'_tmpdir'};
-+}
-+
-+=head2 cleanup
-+
-+ Title : cleanup
-+ Usage : $wrapper->cleanup();
-+ Function: Will cleanup the tempdir directory
-+ Returns : none
-+ Args : none
-+
-+
-+=cut
-+
-+sub cleanup{
-+ my ($self) = @_;
-+ $self->io->_io_cleanup();
-+ if( defined $self->{'_tmpdir'} && -d $self->{'_tmpdir'} ) {
-+ my $verbose = ($self->verbose >= 1) ? 1 : 0;
-+ File::Path::rmtree( $self->{'_tmpdir'}, $verbose);
-+ }
-+}
-+
-+=head2 io
-+
-+ Title : io
-+ Usage : $obj->io($newval)
-+ Function: Gets a Bio::Root::IO object
-+ Returns : Bio::Root::IO object
-+ Args : none
-+
-+
-+=cut
-+
-+sub io{
-+ my ($self) = @_;
-+ unless( defined $self->{'io'} ) {
-+ $self->{'io'} = Bio::Root::IO->new(-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, at args) = @_;
-+ return;
-+}
-+
-+=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) {
-+ if (-f $prog_path && -x $prog_path) {
-+ $self->{'_pathtoexe'} = $prog_path;
-+ }
-+ elsif ($self->program_dir) {
-+ $self->warn("executable not found in $prog_path, trying system path...") if $warn;
-+ }
-+ }
-+ unless ($self->{'_pathtoexe'}) {
-+ my $exe;
-+ if ( $exe = $self->io->exists_exe($self->program_name) ) {
-+ $self->{'_pathtoexe'} = $exe;
-+ }
-+ else {
-+ $self->warn("Cannot find executable for ".$self->program_name) if $warn;
-+ $self->{'_pathtoexe'} = undef;
-+ }
-+ }
-+ }
-+
-+ # bail if we never found the executable
-+ unless ( defined $self->{'_pathtoexe'}) {
-+ $self->throw("Cannot find executable for ".$self->program_name .
-+ ". path=\"".$self->program_path."\"");
-+ }
-+ return $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' : '') if $self->program_name;
-+ return File::Spec->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();
-+}
-+
-+=head2 quiet
-+
-+ Title : quiet
-+ Usage : $factory->quiet(1);
-+ if ($factory->quiet()) { ... }
-+ Function: Get/set the quiet state. Can be used by wrappers to control if
-+ program output is printed to the console or not.
-+ Returns : boolean
-+ Args : none to get, boolean to set
-+
-+=cut
-+
-+sub quiet {
-+ my $self = shift;
-+ if (@_) { $self->{quiet} = shift }
-+ return $self->{quiet} || 0;
-+}
-+
-+=head2 _setparams()
-+
-+ Title : _setparams
-+ Usage : $params = $self->_setparams(-params => [qw(window evalue_cutoff)])
-+ Function: For internal use by wrapper modules to build parameter strings
-+ suitable for sending to the program being wrapped. For each method
-+ name supplied, calls the method and adds the method name (as modified
-+ by optional things) along with its value (unless a switch) to the
-+ parameter string
-+ Example : $params = $self->_setparams(-params => [qw(window evalue_cutoff)],
-+ -switches => [qw(simple large all)],
-+ -double_dash => 1,
-+ -underscore_to_dash => 1);
-+ If window() and simple() had not been previously called, but
-+ evalue_cutoff(0.5), large(1) and all(0) had been called, $params
-+ would be ' --evalue-cutoff 0.5 --large'
-+ Returns : parameter string
-+ Args : -params => [] or {} # array ref of method names to call,
-+ or hash ref where keys are method names and
-+ values are how those names should be output
-+ in the params string
-+ -switches => [] or {}# as for -params, but no value is printed for
-+ these methods
-+ -join => string # define how parameters and their values are
-+ joined, default ' '. (eg. could be '=' for
-+ param=value)
-+ -lc => boolean # lc() method names prior to output in string
-+ -dash => boolean # prefix all method names with a single dash
-+ -double_dash => bool # prefix all method names with a double dash
-+ -mixed_dash => bool # prefix single-character method names with a
-+ # single dash, and multi-character method names
-+ # with a double-dash
-+ -underscore_to_dash => boolean # convert all underscores in method
-+ names to dashes
-+
-+=cut
-+
-+sub _setparams {
-+ my ($self, @args) = @_;
-+
-+ my ($params, $switches, $join, $lc, $d, $dd, $md, $utd) =
-+ $self->_rearrange([qw(PARAMS
-+ SWITCHES
-+ JOIN
-+ LC
-+ DASH
-+ DOUBLE_DASH
-+ MIXED_DASH
-+ UNDERSCORE_TO_DASH)], @args);
-+ $self->throw('at least one of -params or -switches is required') unless ($params || $switches);
-+ $self->throw("-dash, -double_dash and -mixed_dash are mutually exclusive") if (defined($d) + defined($dd) + defined($md) > 1);
-+ $join ||= ' ';
-+
-+ my %params = ref($params) eq 'HASH' ? %{$params} : map { $_ => $_ } @{$params};
-+ my %switches = ref($switches) eq 'HASH' ? %{$switches} : map { $_ => $_ } @{$switches};
-+
-+ my $param_string = '';
-+ for my $hash_ref (\%params, \%switches) {
-+ while (my ($method, $method_out) = each %{$hash_ref}) {
-+ my $value = $self->$method();
-+ next unless (defined $value);
-+ next if (exists $switches{$method} && ! $value);
-+
-+ $method_out = lc($method_out) if $lc;
-+ my $method_length = length($method_out) if $md;
-+ $method_out = '-'.$method_out if ($d || ($md && ($method_length == 1)));
-+ $method_out = '--'.$method_out if ($dd || ($md && ($method_length > 1)));
-+ $method_out =~ s/_/-/g if $utd;
-+
-+ if ( exists $params{$method} ) {
-+ # if value are quoted with " or ', re-quote it
-+ if ( $value =~ m{^[\'\"]+(.+)[\'\"]+$} ) {
-+ $value = '"'. $1 . '"';
-+ }
-+ # quote values that contain spaces
-+ elsif ( $value =~ m{\s+} ) {
-+ $value = '"'. $value . '"';
-+ }
-+ }
-+
-+ $param_string .= ' '.$method_out.(exists $switches{$method} ? '' : $join.$value);
-+ }
-+ }
-+
-+ return $param_string;
-+}
-+
-+sub DESTROY {
-+ my $self= shift;
-+ unless ( $self->save_tempfiles ) {
-+ $self->cleanup();
-+ }
-+ $self->SUPER::DESTROY();
-+}
-+
-+
-+1;
---- /dev/null
-+++ b/lib/Bio/Tools/Run/WrapperBase/CommandExts.pm
-@@ -0,0 +1,1405 @@
-+#
-+# BioPerl module for Bio::Tools::Run::WrapperBase::CommandExts
-+#
-+# Please direct questions and support issues to <bioperl-l at bioperl.org>
-+#
-+# Cared for by Mark A. Jensen <maj -at- fortinbras -dot- us>
-+#
-+# Copyright Mark A. Jensen
-+#
-+# 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::CommandExts - Extensions to WrapperBase for handling programs with commands *ALPHA*
-+
-+=head1 SYNOPSIS
-+
-+Devs, see L</DEVELOPER INTERFACE>.
-+Users, see L</USER INTERFACE>.
-+
-+=head1 DESCRIPTION
-+
-+This is a developer-focused experimental module. The main idea is to
-+extend L<Bio::Tools::Run::WrapperBase> to make it relatively easy to
-+create run wrappers around I<suites> of related programs, like
-+C<samtools> or C<blast+>.
-+
-+Some definitions:
-+
-+=over
-+
-+=item * program
-+
-+The program is the command-line frontend application. C<samtools>, for example, is run from the command line as follows:
-+
-+ $ samtools view -bS in.bam > out.sam
-+ $ samtools faidx
-+
-+=item * command
-+
-+The command is the specific component of a suite run by executing the
-+program. In the example above, C<view> and C<faidx> are commands.
-+
-+=item * command prefix
-+
-+The command prefix is an abbreviation of the command name used
-+internally by C<CommandExts> method, and sometimes by the user of the
-+factory for specifying command line parameters to subcommands of
-+composite commands.
-+
-+=item * composite command
-+
-+A composite command is a pipeline or script representing a series of
-+separate executions of different commands. Composite commands can be
-+specified by configuring C<CommandExts> appropriately; the composite
-+command can be run by the user from a factory in the same way as
-+ordinary commands.
-+
-+=item * options, parameters, switches and filespecs
-+
-+An option is any command-line option; i.e., a specification set off by
-+a command-line by a specifier (like C<-v> or C<--outfile>). Parameters
-+are command-line options that accept a value (C<-title mydb>);
-+switches are boolean flags (C<--no-filter>). Filespecs are barewords
-+at the end of the command line that usually indicate input or output
-+files. In this module, this includes files that capture STDIN, STDOUT,
-+or STDERR via redirection.
-+
-+=item * pseudo-program
-+
-+A "pseudo-program" is a way to refer to a collection of related
-+applications that are run independently from the command line, rather
-+than via a frontend program. The C<blast+> suite of programs is an
-+example: C<blastn>, C<makeblastdb>, etc. C<CommandExts> can be
-+configured to create a single factory for a suite of related,
-+independent programs that treats each independent program as a
-+"pseudo-program" command.
-+
-+=back
-+
-+This module essentially adds the non-assembler-specific wrapper
-+machinery of fangly's L<Bio::Tools::Run::AssemblerBase> to the
-+L<Bio::Tools::Run::WrapperBase> namespace, adding the general
-+command-handling capability of L<Bio::Tools::Run::BWA>. It creates run
-+factories that are automatically Bio::ParameterBaseI compliant,
-+meaning that C<available_parameters()>, C<set_parameters()>,
-+C<get_parameters>, C<reset_parameters()>, and C<parameters_changed()>
-+are available.
-+
-+=head1 DEVELOPER INTERFACE
-+
-+C<CommandExts> is currently set up to read particular package globals
-+which define the program, the commands available, command-line options
-+for those commands, and human-readable aliases for those options.
-+
-+The easiest way to use C<CommandExts> is probably to create two modules:
-+
-+ Bio::Tools::Run::YourRunPkg
-+ Bio::Tools::Run::YourRunPkg::Config
-+
-+The package globals should be defined in the C<Config> module, and the
-+run package itself should begin with the following mantra:
-+
-+ use YourRunPkg::Config;
-+ use Bio::Tools::Run::WrapperBase;
-+ use Bio::Tools::Run::WrapperBase::CommandExts;
-+ sub new {
-+ my $class = shift;
-+ my @args = @_;
-+ my $self = $class->SUPER::new(@args);
-+ ...
-+ return $self;
-+ }
-+
-+The following globals can/should be defined in the C<Config> module:
-+
-+ $program_name
-+ $program_dir
-+ $use_dash
-+ $join
-+ @program_commands
-+ %command_prefixes
-+ @program_params
-+ @program_switches
-+ %param_translation
-+ %composite_commands
-+ %command_files
-+
-+See L</Config Globals> for detailed descriptions.
-+
-+The work of creating a run wrapper with C<CommandExts> lies mainly in
-+setting up the globals. The key methods for the developer interface are:
-+
-+=over
-+
-+=item * program_dir($path_to_programs)
-+
-+Set this to point the factory to the executables.
-+
-+=item * _run(@file_args)
-+
-+Runs an instantiated factory with the given file args. Use in the
-+ C<run()> method override.
-+
-+=item * _create_factory_set()
-+
-+Returns a hash of instantiated factories for each true command from a
-+composite command factory. The hash keys are the true command names, so
-+you could do
-+
-+ $cmds = $composite_fac->_create_factory_set;
-+ for (@true_commands) {
-+ $cmds->{$_}->_run(@file_args);
-+ }
-+
-+=item * executables($cmd,[$fullpath])
-+
-+For pseudo-programs, this gets/sets the full path to the executable of
-+the true program corresponding to the command C<$cmd>.
-+
-+=back
-+
-+=head2 Implementing Composite Commands
-+
-+=head2 Implementing Pseudo-programs
-+
-+To indicate that a package wraps disparate programs under a single pseudo program, use an asterisk before the program name:
-+
-+ package Bio::Tools::Run::YourPkg::Config;
-+ ...
-+ our $program_name = '*blast+';
-+
-+and C<_run> will know what to do. Specify the rest of the globals as
-+if the desired programs were commands. Use the basename of the
-+programs for the command names.
-+
-+If all the programs can be found in a single directory, just specify
-+that directory in C<program_dir()>. If not, use C<executables()> to set the paths to each program explicitly:
-+
-+ foreach (keys %cmdpaths) {
-+ $self->executables($_, $cmdpaths{$_});
-+ }
-+
-+=head2 Config Globals
-+
-+Here is an example config file. Further details in prose are below.
-+
-+ package Dummy::Config;
-+ use strict;
-+ use warnings;
-+ no warnings qw(qw);
-+ use Exporter;
-+ our (@ISA, @EXPORT, @EXPORT_OK);
-+ push @ISA, 'Exporter';
-+ @EXPORT = qw(
-+ $program_name
-+ $program_dir
-+ $use_dash
-+ $join
-+ @program_commands
-+ %command_prefixes
-+ @program_params
-+ @program_switches
-+ %param_translation
-+ %command_files
-+ %composite_commands
-+ );
-+
-+ our $program_name = '*flurb';
-+ our $program_dir = 'C:\cygwin\usr\local\bin';
-+ our $use_dash = 'mixed';
-+ our $join = ' ';
-+
-+ our @program_commands = qw(
-+ rpsblast
-+ find
-+ goob
-+ blorb
-+ multiglob
-+ );
-+
-+ our %command_prefixes = (
-+ blastp => 'blp',
-+ tblastn => 'tbn',
-+ goob => 'g',
-+ blorb => 'b',
-+ multiglob => 'm'
-+ );
-+
-+ our @program_params = qw(
-+ command
-+ g|narf
-+ g|schlurb
-+ b|scroob
-+ b|frelb
-+ m|trud
-+ );
-+
-+ our @program_switches = qw(
-+ g|freen
-+ b|klep
-+ );
-+
-+ our %param_translation = (
-+ 'g|narf' => 'n',
-+ 'g|schlurb' => 'schlurb',
-+ 'g|freen' => 'f',
-+ 'b|scroob' => 's',
-+ 'b|frelb' => 'frelb'
-+ );
-+
-+ our %command_files = (
-+ 'goob' => [qw( fas faq )],
-+ );
-+
-+ our %composite_commands = (
-+ 'multiglob' => [qw( blorb goob )]
-+ );
-+ 1;
-+
-+C<$use_dash> can be one of C<single>, C<double>, or C<mixed>. See L<Bio::Tools::Run::WrapperBase>.
-+
-+There is a syntax for the C<%command_files> specification. The token
-+matching C<[a-zA-Z0-9_]+> in each element of each arrayref becomes the
-+named filespec parameter for the C<_run()> method in the wrapper
-+class. Additional symbols surrounding this token indicate how this
-+argument should be handled. Some examples:
-+
-+ >out : stdout is redirected into the file
-+ specified by (..., -out => $file,... )
-+ <in : stdin is accepted from the file
-+ specified by (..., -in => $file,... )
-+ 2>log : stderr is redirected into the file
-+ specified by (..., -log => $file,... )
-+ #opt : this filespec argument is optional
-+ (no throw if -opt => $option is missing)
-+ 2>#log: if -log is not specified in the arguments, the stderr()
-+ method will capture stderr
-+ *lst : this filespec can take multiple arguments,
-+ specify using an arrayref (..., -lst => [$file1, $file2], ...)
-+ *#lst : an optional list
-+
-+The tokens above are examples; they can be anything matching the above regexp.
-+
-+=head1 USER INTERFACE
-+
-+Using a wrapper created with C<Bio::Tools::Run::WrapperBase::CommandExts>:
-+
-+=over
-+
-+=item * Getting a list of available commands, parameters, and filespecs:
-+
-+To get a list of commands, simply:
-+
-+ @commands = Bio::Tools::Run::ThePkg->available_commands;
-+
-+The wrapper will generally have human-readable aliases for each of the
-+command-line options for the wrapped program and commands. To obtain a
-+list of the parameters and switches available for a particular
-+command, do
-+
-+ $factory = Bio::Tools::Run::ThePkg->new( -command => 'glurb' );
-+ @params = $factory->available_parameters('params');
-+ @switches = $factory->available_parameters('switches');
-+ @filespec = $factory->available_parameters('filespec');
-+ @filespec = $factory->filespec; # alias
-+
-+=item * Create factories
-+
-+The factory is a handle on the program and command you wish to
-+run. Create a factory using C<new> to set command-line parameters:
-+
-+ $factory = Bio::Tools::Run::ThePkg->new( -command => 'glurb',
-+ -freen => 1,
-+ -furschlugginer => 'vreeble' );
-+
-+A shorthand for this is:
-+
-+ $factory = Bio::Tools::Run::ThePkg->new_glurb(
-+ -freen => 1,
-+ -furschlugginer => 'vreeble' );
-+
-+=item * Running programs
-+
-+To run the program, use the C<run> method, providing filespecs as arguments
-+
-+ $factory = Bio::Tools::Run::ThePkg->new_assemble( -min_qual => 63 );
-+ $factory->run( -faq1 => 'read1.fq', -faq2 => 'read2.fq',
-+ -ref => 'refseq.fas', -out => 'new.sam' );
-+ # do another
-+ $factory->run( -faq1 => 'read-old1.fq', -faq2 => 'read-old2.fq',
-+ -ref => 'refseq.fas', -out => 'old.sam' );
-+
-+Messages on STDOUT and STDERR are dumped into their respective attributes:
-+
-+ $stdout = $factory->stdout;
-+ $stderr = $factory->stderr;
-+
-+unless STDOUT and/or STDERR are part of the named files in the filespec.
-+
-+=item * Setting/getting/resetting/polling parameters.
-+
-+A C<CommandExts>-based factory is always L<Bio::ParameterBaseI>
-+compliant. That means that you may set, get, and reset parameters
-+using C<set_parameters()>, C<get_parameters()>, and
-+C<reset_parameters>. You can ask whether parameters have changed since
-+they were last accessed by using the predicate
-+C<parameters_changed>. See L<Bio::ParameterBaseI> for more details.
-+
-+Once set, parameters become attributes of the factory. Thus, you can get their values as follows:
-+
-+ if ($factory->freen) {
-+ $furs = $factory->furshlugginer;
-+ #...
-+ }
-+
-+=back
-+
-+=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 at bioperl.org - General discussion
-+http://bioperl.org/wiki/Mailing_lists - About the mailing lists
-+
-+=head2 Support
-+
-+Please direct usage questions or support issues to the mailing list:
-+
-+L<bioperl-l at bioperl.org>
-+
-+rather than to the module maintainer directly. Many experienced and
-+reponsive experts will be able look at the problem and quickly
-+address it. Please include a thorough description of the problem
-+with code and data examples if at all possible.
-+
-+=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
-+the web:
-+
-+ https://github.com/bioperl/bioperl-live/issues
-+
-+=head1 AUTHOR - Mark A. Jensen
-+
-+Email maj -at- fortinbras -dot- us
-+
-+Describe contact details here
-+
-+=head1 CONTRIBUTORS
-+
-+Dan Kortschak ( dan -dot- kortschak -at- adelaide -dot- edu -dot- au )
-+
-+=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; # need these methods in WrapperBase/maj
-+use strict;
-+use warnings;
-+no warnings qw(redefine);
-+
-+use Bio::Root::Root;
-+use File::Spec;
-+use IPC::Run;
-+use base qw(Bio::Root::Root Bio::ParameterBaseI);
-+
-+our $AUTOLOAD;
-+
-+=head2 new()
-+
-+ Title : new
-+ Usage :
-+ Function: constructor for WrapperBase::CommandExts ;
-+ correctly binds configuration variables
-+ to the WrapperBase object
-+ Returns : Bio::Tools::Run::WrapperBase object with command extensions
-+ Args :
-+ Note : this method subsumes the old _register_program_commands and
-+ _set_program_options, leaving out the assembler-specific
-+ parms ($qual_param and out_type())
-+
-+=cut
-+
-+sub new {
-+ my ($class, @args) = @_;
-+ my $self = bless ({}, $class);
-+ # pull in *copies* of the Config variables from the caller namespace:
-+ my ($pkg, @goob) = caller();
-+ my ($commands,
-+ $prefixes,
-+ $params,
-+ $switches,
-+ $translation,
-+ $use_dash,
-+ $join,
-+ $name,
-+ $dir,
-+ $composite_commands,
-+ $files);
-+ for (qw( @program_commands
-+ %command_prefixes
-+ @program_params
-+ @program_switches
-+ %param_translation
-+ $use_dash
-+ $join
-+ $program_name
-+ $program_dir
-+ %composite_commands
-+ %command_files ) ) {
-+ my ($sigil, $var) = m/(.)(.*)/;
-+ my $qualvar = "${sigil}${pkg}::${var}";
-+ for ($sigil) {
-+ /\@/ && do { $qualvar = "\[$qualvar\]" };
-+ /\%/ && do { $qualvar = "\{$qualvar\}" };
-+ }
-+ my $locvar = "\$${var}";
-+ $locvar =~ s/program_|command_|param_//g;
-+ eval "$locvar = $qualvar";
-+ }
-+ # set up the info registry hash
-+ my %registry;
-+ if ($composite_commands) {
-+ $self->_register_composite_commands($composite_commands,
-+ $params,
-+ $switches,
-+ $prefixes);
-+ }
-+ @registry{qw( _commands _prefixes _files
-+ _params _switches _translation
-+ _composite_commands )} =
-+ ($commands, $prefixes, $files,
-+ $params, $switches, $translation,
-+ $composite_commands);
-+ $self->{_options} = \%registry;
-+ if (not defined $use_dash) {
-+ $self->{'_options'}->{'_dash'} = 1;
-+ } else {
-+ $self->{'_options'}->{'_dash'} = $use_dash;
-+ }
-+ if (not defined $join) {
-+ $self->{'_options'}->{'_join'} = ' ';
-+ } else {
-+ $self->{'_options'}->{'_join'} = $join;
-+ }
-+ if ($name =~ /^\*/) {
-+ $self->is_pseudo(1);
-+ $name =~ s/^\*//;
-+ }
-+ $self->program_name($name) if not defined $self->program_name();
-+ $self->program_dir($dir) if not defined $self->program_dir();
-+ $self->set_parameters(@args);
-+ $self->parameters_changed(1); # set on instantiation, per Bio::ParameterBaseI
-+ return $self;
-+}
-+
-+=head2 program_name
-+
-+ Title : program_name
-+ Usage : $factory->program_name($name)
-+ Function: get/set the executable name
-+ Returns: string
-+ Args : string
-+
-+=cut
-+
-+sub program_name {
-+ my ($self, $val) = @_;
-+ $self->{'_program_name'} = $val if $val;
-+ return $self->{'_program_name'};
-+}
-+
-+=head2 program_dir
-+
-+ Title : program_dir
-+ Usage : $factory->program_dir($dir)
-+ Function: get/set the program dir
-+ Returns: string
-+ Args : string
-+
-+=cut
-+
-+sub program_dir {
-+ my ($self, $val) = @_;
-+ $self->{'_program_dir'} = $val if $val;
-+ return $self->{'_program_dir'};
-+}
-+
-+=head2 _register_program_commands()
-+
-+ Title : _register_program_commands
-+ Usage : $factory->_register_program_commands( \@commands, \%prefixes )
-+ Function: Register the commands a program accepts (for programs that act
-+ as frontends for a set of commands, each command having its own
-+ set of params/switches)
-+ Returns : true on success
-+ Args : arrayref to a list of commands (scalar strings),
-+ hashref to a translation table of the form
-+ { $prefix1 => $command1, ... } [optional]
-+ Note : To implement a program with this kind of calling structure,
-+ include a parameter called 'command' in the
-+ @program_params global
-+ Note : The translation table is used to associate parameters and
-+ switches specified in _set_program_options with the correct
-+ program command. In the globals @program_params and
-+ @program_switches, specify elements as 'prefix1|param' and
-+ 'prefix1|switch', etc.
-+
-+=cut
-+
-+=head2 _set_program_options
-+
-+ Title : _set_program_options
-+ Usage : $factory->_set_program_options( \@ args );
-+ Function: Register the parameters and flags that an assembler takes.
-+ Returns : 1 for success
-+ Args : - arguments passed by the user
-+ - parameters that the program accepts, optional (default: none)
-+ - switches that the program accepts, optional (default: none)
-+ - parameter translation, optional (default: no translation occurs)
-+ - dash option for the program parameters, [1|single|double|mixed],
-+ optional (default: yes, use single dashes only)
-+ - join, optional (default: ' ')
-+
-+=cut
-+
-+=head2 _translate_params
-+
-+ Title : _translate_params
-+ Usage : @options = @{$assembler->_translate_params( )};
-+ Function: Translate the Bioperl arguments into the arguments to pass to the
-+ program on the command line
-+ Returns : Arrayref of arguments
-+ Args : none
-+
-+=cut
-+
-+sub _translate_params {
-+ my ($self) = @_;
-+ # Get option string
-+ my ($params, $switches, $join, $dash, $translat) =
-+ @{$self->{_options}}{qw(_params _switches _join _dash _translation)};
-+
-+ # access the multiple dash choices of _setparams...
-+ my @dash_args;
-+ $dash ||= 1; # default as advertised
-+ for ($dash) {
-+ $_ eq '1' && do {
-+ @dash_args = ( -dash => 1 );
-+ last;
-+ };
-+ /^s/ && do { #single dash only
-+ @dash_args = ( -dash => 1);
-+ last;
-+ };
-+ /^d/ && do { # double dash only
-+ @dash_args = ( -double_dash => 1);
-+ last;
-+ };
-+ /^m/ && do { # mixed dash: one-letter opts get -,
-+ # long opts get --
-+ @dash_args = ( -mixed_dash => 1);
-+ last;
-+ };
-+ do {
-+ $self->warn( "Dash spec '$dash' not recognized; using 'single'" );
-+ @dash_args = ( -dash => 1 );
-+ };
-+ }
-+ my $options = $self->_setparams(
-+ -params => $params,
-+ -switches => $switches,
-+ -join => $join,
-+ @dash_args
-+ );
-+
-+ # Translate options
-+ # parse more carefully - bioperl-run issue #12
-+ $options =~ s/^\s+//;
-+ $options =~ s/\s+$//;
-+ my @options;
-+ my $in_quotes;
-+ for (split(/(\s|$join)/, $options)) {
-+ if (/^-/) {
-+ push @options, $_;
-+ }
-+ elsif (s/^"//) {
-+ $in_quotes=1 unless (s/["']$//);
-+ push @options, $_;
-+ }
-+ elsif (s/"$//) {
-+ $options[-1] .= $_;
-+ $in_quotes=0;
-+ }
-+ else {
-+ $in_quotes ? $options[-1] .= $_ :
-+ push(@options, $_);
-+ }
-+ }
-+ $self->throw("Unmatched quote in option value") if $in_quotes;
-+ for (my $i = 0; $i < scalar @options; $i++) {
-+ my ($prefix, $name) = ( $options[$i] =~ m/^(-{0,2})(.+)$/ );
-+ if (defined $name) {
-+ if ($name =~ /command/i) {
-+ $name = $options[$i+2]; # get the command
-+ splice @options, $i, 4;
-+ $i--;
-+ # don't add the command if this is a pseudo-program
-+ unshift @options, $name unless ($self->is_pseudo); # put command first
-+ }
-+ elsif (defined $$translat{$name}) {
-+ $options[$i] = $prefix.$$translat{$name};
-+ }
-+ }
-+ else {
-+ splice @options, $i, 1;
-+ $i--;
-+ }
-+ }
-+
-+ @options = grep (!/^\s*$/, at options);
-+ # this is a kludge for mixed options: the reason mixed doesn't
-+ # work right on the pass through _setparams is that the
-+ # *aliases* and not the actual params are passed to it.
-+ # here we just rejigger the dashes
-+ if ($dash =~ /^m/) {
-+ s/--([a-z0-9](?:\s|$))/-$1/gi for @options;
-+ }
-+ # Now arrayify the options
-+
-+ return \@options;
-+}
-+
-+=head2 executable()
-+
-+ Title : executable
-+ Usage :
-+ Function: find the full path to the main executable,
-+ or to the command executable for pseudo-programs
-+ Returns : full path, if found
-+ Args : [optional] explicit path to the executable
-+ (will set the appropriate command exec if
-+ applicable)
-+ [optional] boolean flag whether or not to warn when exe no found
-+ Note : overrides WrapperBase.pm
-+
-+=cut
-+
-+sub executable {
-+ my $self = shift;
-+ my ($exe, $warn) = @_;
-+ if ($self->is_pseudo) {
-+ return $self->{_pathtoexe} = $self->executables($self->command,$exe);
-+ }
-+
-+ # otherwise
-+ # setter
-+ if (defined $exe) {
-+ $self->throw("binary '$exe' does not exist") unless -e $exe;
-+ $self->throw("'$exe' is not executable") unless -x $exe;
-+ return $self->{_pathtoexe} = $exe;
-+ }
-+
-+ # getter
-+ return $self->{_pathtoexe} if defined $self->{_pathstoexe};
-+
-+ # finder
-+ return $self->{_pathtoexe} = $self->_find_executable($exe, $warn);
-+}
-+
-+=head2 executables()
-+
-+ Title : executables
-+ Usage :
-+ Function: find the full path to a command's executable
-+ Returns : full path (scalar string)
-+ Args : command (scalar string),
-+ [optional] explicit path to this command exe
-+ [optional] boolean flag whether or not to warn when exe no found
-+
-+=cut
-+
-+sub executables {
-+ my $self = shift;
-+ my ($cmd, $exe, $warn) = @_;
-+ # for now, barf if this is not a pseudo program
-+ $self->throw("This wrapper represents a single program with commands, not multiple programs; can't use executables()") unless $self->is_pseudo;
-+ $self->throw("Command name required at arg 1") unless defined $cmd;
-+ $self->throw("The desired executable '$cmd' is not registered as a command") unless grep /^$cmd$/, @{$self->{_options}->{_commands}};
-+
-+ # setter
-+ if (defined $exe) {
-+ $self->throw("binary '$exe' does not exist") unless -e $exe;
-+ $self->throw("'$exe' is not executable") unless -x $exe;
-+ $self->{_pathstoexe} = {} unless defined $self->{_pathstoexe};
-+ return $self->{_pathstoexe}->{$cmd} = $exe;
-+ }
-+
-+ # getter
-+ return $self->{_pathstoexe}->{$cmd} if defined $self->{_pathstoexe}->{$cmd};
-+
-+ $exe ||= $cmd;
-+ # finder
-+ return $self->{_pathstoexe}->{$cmd} = $self->_find_executable($exe, $warn);
-+}
-+
-+=head2 _find_executable()
-+
-+ Title : _find_executable
-+ Usage : my $exe_path = $fac->_find_executable($exe, $warn);
-+ Function: find the full path to a named executable,
-+ Returns : full path, if found
-+ Args : name of executable to find
-+ [optional] boolean flag whether or not to warn when exe no found
-+ Note : differs from executable and executables in not
-+ setting any object attributes
-+
-+=cut
-+
-+sub _find_executable {
-+ my $self = shift;
-+ my ($exe, $warn) = @_;
-+
-+ if ($self->is_pseudo && !$exe) {
-+ if (!$self->command) {
-+ # this throw probably appropriate
-+ # the rest are now warns if $warn.../maj
-+ $self->throw(
-+ "The ".__PACKAGE__." wrapper represents several different programs;".
-+ "arg1 to _find_executable must be specified explicitly,".
-+ "or the command() attribute set");
-+ }
-+ else {
-+ $exe = $self->command;
-+ }
-+ }
-+ $exe ||= $self->program_path;
-+
-+ my $path;
-+ if ($self->program_dir) {
-+ $path = File::Spec->catfile($self->program_dir, $exe);
-+ } else {
-+ $path = $exe;
-+ $self->warn('Program directory not specified; use program_dir($path).') if $warn;
-+ }
-+
-+ # use provided info - we are allowed to follow symlinks, but refuse directories
-+ map { return $path.$_ if ( -x $path.$_ && !(-d $path.$_) ) } ('', '.exe') if defined $path;
-+
-+ # couldn't get path to executable from provided info, so use system path
-+ $path = $path ? " in $path" : undef;
-+ $self->warn("Executable $exe not found$path, trying system path...") if $warn;
-+ if ($path = $self->io->exists_exe($exe)) {
-+ return $path;
-+ } else {
-+ $self->warn("Cannot find executable for program '".($self->is_pseudo ? $self->command : $self->program_name)."'") if $warn;
-+ return;
-+ }
-+}
-+
-+=head2 _register_composite_commands()
-+
-+ Title : _register_composite_commands
-+ Usage :
-+ Function: adds subcomand params and switches for composite commands
-+ Returns : true on success
-+ Args : \%composite_commands,
-+ \@program_params,
-+ \@program_switches
-+
-+=cut
-+
-+sub _register_composite_commands {
-+ my $self = shift;
-+ my ($composite_commands, $program_params,
-+ $program_switches, $command_prefixes) = @_;
-+ my @sub_params;
-+ my @sub_switches;
-+ foreach my $cmd (keys %$composite_commands) {
-+ my $pfx = $command_prefixes->{$cmd} || $cmd;
-+ foreach my $subcmd ( @{$$composite_commands{$cmd}} ) {
-+ my $spfx = $command_prefixes->{$subcmd} || $subcmd;
-+ my @sub_program_params = grep /^$spfx\|/, @$program_params;
-+ my @sub_program_switches = grep /^$spfx\|/, @$program_switches;
-+ for (@sub_program_params) {
-+ m/^$spfx\|(.*)/;
-+ push @sub_params, "$pfx\|${spfx}_".$1;
-+ }
-+ for (@sub_program_switches) {
-+ m/^$spfx\|(.*)/;
-+ push @sub_switches, "$pfx\|${spfx}_".$1;
-+ }
-+ }
-+ }
-+ push @$program_params, @sub_params;
-+ push @$program_switches, @sub_switches;
-+ # translations for subcmd params/switches not necessary
-+ return 1;
-+}
-+
-+=head2 _create_factory_set()
-+
-+ Title : _create_factory_set
-+ Usage : @facs = $self->_create_factory_set
-+ Function: instantiate a set of individual command factories for
-+ a given composite command
-+ Factories will have the correct parameter fields set for
-+ their own subcommand
-+ Returns : hash of factories: ( $subcmd_prefix => $subcmd_factory, ... )
-+ Args : none
-+
-+=cut
-+
-+sub _create_factory_set {
-+ my $self = shift;
-+ $self->throw('command not set') unless $self->command;
-+ my $cmd = $self->command;
-+ $self->throw('_create_factory_set only works on composite commands')
-+ unless grep /^$cmd$/, keys %{$self->{_options}->{_composite_commands}};
-+ my %ret;
-+ my $class = ref $self;
-+ my $subargs_hash = $self->_collate_subcmd_args($cmd);
-+ for (keys %$subargs_hash) {
-+ $ret{$_} = $class->new( -command => $_, @{$$subargs_hash{$_}} );
-+ }
-+ return %ret;
-+}
-+
-+=head2 _collate_subcmd_args()
-+
-+ Title : _collate_subcmd_args
-+ Usage : $args_hash = $self->_collate_subcmd_args
-+ Function: collate parameters and switches into command-specific
-+ arg lists for passing to new()
-+ Returns : hash of named argument lists
-+ Args : [optional] composite cmd prefix (scalar string)
-+ [default is 'run']
-+
-+=cut
-+
-+sub _collate_subcmd_args {
-+ my $self = shift;
-+ my $cmd = shift;
-+ my %ret;
-+ # default command is 'run'
-+ $cmd ||= 'run';
-+ return unless $self->{'_options'}->{'_composite_commands'};
-+ return unless $self->{'_options'}->{'_composite_commands'}->{$cmd};
-+ my @subcmds = @{$self->{'_options'}->{'_composite_commands'}->{$cmd}};
-+
-+ my $cur_options = $self->{'_options'};
-+ # collate
-+ foreach my $subcmd (@subcmds) {
-+ # find the composite cmd form of the argument in
-+ # the current params and switches
-+ # e.g., map_max_mismatches
-+ my $pfx = $self->{_options}->{_prefixes}->{$subcmd} || $subcmd;
-+ my @params = grep /^${pfx}_/, @{$$cur_options{'_params'}};
-+ my @switches = grep /^${pfx}_/, @{$$cur_options{'_switches'}};
-+ $ret{$subcmd} = [];
-+ # create an argument list suitable for passing to new() of
-+ # the subcommand factory...
-+ foreach my $opt (@params, @switches) {
-+ my $subopt = $opt;
-+ $subopt =~ s/^${pfx}_//;
-+ push(@{$ret{$subcmd}}, '-'.$subopt => $self->$opt) if defined $self->$opt;
-+ }
-+ }
-+ return \%ret;
-+}
-+
-+=head2 _run
-+
-+ Title : _run
-+ Usage : $fac->_run( @file_args )
-+ Function: Run a command as specified during object contruction
-+ Returns : true on success
-+ Args : a specification of the files to operate on according
-+ to the filespec
-+
-+=cut
-+
-+sub _run {
-+ my ($self, @args) = @_;
-+ # _translate_params will provide an array of command/parameters/switches
-+ # -- these are set at object construction
-+ # to set up the run, need to add the files to the call
-+ # -- provide these as arguments to this function
-+ my $cmd = $self->command if $self->can('command');
-+ my $opts = $self->{_options};
-+ my %args;
-+ $self->throw("No command specified for the object") unless $cmd;
-+ # setup files necessary for this command
-+ my $filespec = $opts->{'_files'}->{$cmd};
-+ my @switches;
-+ my ($in, $out, $err);
-+ # some applications rely completely on switches
-+ if (defined $filespec && @$filespec) {
-+ # parse args based on filespec
-+ # require named args
-+ $self->throw("Named args are required") unless !(@args % 2);
-+ s/^-// for @args;
-+ %args = @args;
-+ # validate
-+ my @req = map {
-+ my $s = $_;
-+ $s =~ s/^-.*\|//;
-+ $s =~ s/^[012]?[<>]//;
-+ $s =~ s/[^a-zA-Z0-9_]//g;
-+ $s
-+ } grep !/[#]/, @$filespec;
-+ !defined($args{$_}) && $self->throw("Required filearg '$_' not specified") for @req;
-+ # set up redirects and file switches
-+ for (@$filespec) {
-+ m/^1?>#?(.*)/ && do {
-+ defined($args{$1}) && ( open $out, '>', $args{$1} or $self->throw("Could not write file '$args{$1}': $!") );
-+ next;
-+ };
-+ m/^2>#?(.*)/ && do {
-+ defined($args{$1}) && ( open $err, '>', $args{$1} or $self->throw("Could not write file '$args{$1}': $!") );
-+ next;
-+ };
-+ m/^<#?(.*)/ && do {
-+ defined($args{$1}) && ( open $in, '<', $args{$1} or $self->throw("Could not read file '$args{$1}': $!") );
-+ next;
-+ };
-+ if (m/^-(.*)\|/) {
-+ push @switches, $self->_dash_switch($1);
-+ } else {
-+ push @switches, undef;
-+ }
-+ }
-+ }
-+ my $dum;
-+ $in || ($in = \$dum);
-+ $out || ($out = \$self->{'stdout'});
-+ $err || ($err = \$self->{'stderr'});
-+
-+ # Get program executable
-+ my $exe = $self->executable;
-+ $self->throw("Can't find executable for '".($self->is_pseudo ? $self->command : $self->program_name)."'; can't continue") unless $exe;
-+
-+ # Get command-line options
-+ my $options = $self->_translate_params();
-+ # Get file specs sans redirects in correct order
-+ my @specs = map {
-+ my $s = $_;
-+ $s =~ s/^-.*\|//;
-+ $s =~ s/[^a-zA-Z0-9_]//g;
-+ $s
-+ } grep !/[<>]/, @$filespec;
-+ my @files = @args{@specs};
-+ # expand arrayrefs
-+ my $l = $#files;
-+
-+ # Note: below code block may be brittle, see link on this:
-+ # http://lists.open-bio.org/pipermail/bioperl-l/2010-June/033439.html
-+
-+ for (0..$l) {
-+ if (ref($files[$_]) eq 'ARRAY') {
-+ splice(@switches, $_, 1, ($switches[$_]) x @{$files[$_]});
-+ splice(@files, $_, 1, @{$files[$_]});
-+ }
-+ }
-+
-+
-+ @files = map {
-+ my $s = shift @switches;
-+ defined $_ ? ($s, $_): ()
-+ } @files;
-+ @files = map { defined $_ ? $_ : () } @files; # squish undefs
-+ my @ipc_args = ( $exe, @$options, @files );
-+ $self->{_last_execution} = join( $self->{'_options'}->{'_join'}, @ipc_args );
-+ eval {
-+ IPC::Run::run(\@ipc_args, $in, $out, $err) or
-+ die ("There was a problem running $exe : ".$$err);
-+ };
-+
-+ if ($@) {
-+ $self->throw("$exe call crashed: $@") unless $self->no_throw_on_crash;
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+
-+=head2 no_throw_on_crash()
-+
-+ Title : no_throw_on_crash
-+ Usage :
-+ Function: prevent throw on execution error
-+ Returns :
-+ Args : [optional] boolean
-+
-+=cut
-+
-+sub no_throw_on_crash {
-+ my $self = shift;
-+ return $self->{'_no_throw'} = shift if @_;
-+ return $self->{'_no_throw'};
-+}
-+
-+=head2 last_execution()
-+
-+ Title : last_execution
-+ Usage :
-+ Function: return the last executed command with options
-+ Returns : string of command line sent to IPC::Run
-+ Args :
-+
-+=cut
-+
-+sub last_execution {
-+ my $self = shift;
-+ return $self->{'_last_execution'};
-+}
-+
-+=head2 _dash_switch()
-+
-+ Title : _dash_switch
-+ Usage : $version = $fac->_dash_switch( $switch )
-+ Function: Returns an appropriately dashed switch for the executable
-+ Args : A string containing a switch without dashes
-+ Returns : string containing an appropriately dashed switch for the current executable
-+
-+=cut
-+
-+sub _dash_switch {
-+ my ($self, $switch) = @_;
-+
-+ my $dash = $self->{'_options'}->{'_dash'};
-+ for ($dash) {
-+ $_ eq '1' && do {
-+ $switch = '-'.$switch;
-+ last;
-+ };
-+ /^s/ && do { #single dash only
-+ $switch = '-'.$switch;
-+ last;
-+ };
-+ /^d/ && do { # double dash only
-+ $switch = '--'.$switch;
-+ last;
-+ };
-+ /^m/ && do { # mixed dash: one-letter opts get -,
-+ $switch = '-'.$switch;
-+ $switch =~ s/^(-[a-z0-9](?:\w+))$/-$1/i;
-+ last;
-+ };
-+ do {
-+ $self->warn( "Dash spec '$dash' not recognized; using 'single'" );
-+ $switch = '-'.$switch;
-+ };
-+ }
-+
-+ return $switch;
-+}
-+
-+=head2 stdout()
-+
-+ Title : stdout
-+ Usage : $fac->stdout()
-+ Function: store the output from STDOUT for the run,
-+ if no file specified in _run arguments
-+ Example :
-+ Returns : scalar string
-+ Args : on set, new value (a scalar or undef, optional)
-+
-+=cut
-+
-+sub stdout {
-+ my $self = shift;
-+ return $self->{'stdout'} = shift if @_;
-+ return $self->{'stdout'};
-+}
-+
-+=head2 stderr()
-+
-+ Title : stderr
-+ Usage : $fac->stderr()
-+ Function: store the output from STDERR for the run,
-+ if no file is specified in _run arguments
-+ Example :
-+ Returns : scalar string
-+ Args : on set, new value (a scalar or undef, optional)
-+
-+=cut
-+
-+sub stderr {
-+ my $self = shift;
-+ return $self->{'stderr'} = shift if @_;
-+ return $self->{'stderr'};
-+}
-+
-+=head2 is_pseudo()
-+
-+ Title : is_pseudo
-+ Usage : $obj->is_pseudo($newval)
-+ Function: returns true if this factory represents
-+ a pseudo-program
-+ Example :
-+ Returns : value of is_pseudo (boolean)
-+ Args : on set, new value (a scalar or undef, optional)
-+
-+=cut
-+
-+sub is_pseudo {
-+ my $self = shift;
-+
-+ return $self->{'is_pseudo'} = shift if @_;
-+ return $self->{'is_pseudo'};
-+}
-+
-+=head2 AUTOLOAD
-+
-+AUTOLOAD permits
-+
-+ $class->new_yourcommand(@args);
-+
-+as an alias for
-+
-+ $class->new( -command => 'yourcommand', @args );
-+
-+=cut
-+
-+sub AUTOLOAD {
-+ my $class = shift;
-+ my $tok = $AUTOLOAD;
-+ my @args = @_;
-+ $tok =~ s/.*:://;
-+ unless ($tok =~ /^new_/) {
-+ $class->throw("Can't locate object method '$tok' via package '".ref($class)?ref($class):$class);
-+ }
-+ my ($cmd) = $tok =~ m/new_(.*)/;
-+ return $class->new( -command => $cmd, @args );
-+}
-+
-+=head1 Bio:ParameterBaseI compliance
-+
-+=head2 set_parameters()
-+
-+ Title : set_parameters
-+ Usage : $pobj->set_parameters(%params);
-+ Function: sets the parameters listed in the hash or array
-+ Returns : true on success
-+ Args : [optional] hash or array of parameter/values.
-+
-+=cut
-+
-+sub set_parameters {
-+ my ($self, @args) = @_;
-+
-+ # currently stored stuff
-+ my $opts = $self->{'_options'};
-+ my $params = $opts->{'_params'};
-+ my $switches = $opts->{'_switches'};
-+ my $translation = $opts->{'_translation'};
-+ my $use_dash = $opts->{'_dash'};
-+ my $join = $opts->{'_join'};
-+ unless (($self->can('command') && $self->command)
-+ || (grep /command/, @args)) {
-+ push @args, '-command', 'run';
-+ }
-+ my %args = @args;
-+ my $cmd = $args{'-command'} || $args{'command'} || ($self->can('command') && $self->command);
-+ if ($cmd) {
-+ my (@p, at s, %x);
-+ $self->warn('Command present, but no commands registered') unless $self->{'_options'}->{'_commands'};
-+ $self->throw("Command '$cmd' not registered") unless grep /^$cmd$/, @{$self->{'_options'}->{'_commands'}};
-+ $cmd = $self->{_options}->{_prefixes}->{$cmd} || $cmd;
-+
-+ @p = (grep(!/^.*?\|/, @$params), grep(/^${cmd}\|/, @$params));
-+ @s = (grep(!/^.*?\|/, @$switches), grep(/^${cmd}\|/, @$switches));
-+ s/.*?\|// for @p;
-+ s/.*?\|// for @s;
-+ @x{@p, @s} = @{$translation}{
-+ grep( !/^.*?\|/, @$params, @$switches),
-+ grep(/^${cmd}\|/, @$params, @$switches) };
-+ $opts->{_translation} = $translation = \%x;
-+ $opts->{_params} = $params = \@p;
-+ $opts->{_switches} = $switches = \@s;
-+ }
-+ $self->_set_from_args(
-+ \@args,
-+ -methods => [ @$params, @$switches, 'program_name', 'program_dir', 'out_type' ],
-+ -create => 1,
-+ # when our parms are accessed, signal parameters are unchanged for
-+ # future reads (until set_parameters is called)
-+ -code =>
-+ ' my $self = shift;
-+ $self->parameters_changed(0);
-+ return $self->{\'_\'.$method} = shift if @_;
-+ return $self->{\'_\'.$method};'
-+ );
-+ # the question is, are previously-set parameters left alone when
-+ # not specified in @args?
-+ $self->parameters_changed(1);
-+ return 1;
-+}
-+
-+=head2 reset_parameters()
-+
-+ Title : reset_parameters
-+ Usage : resets values
-+ Function: resets parameters to either undef or value in passed hash
-+ Returns : none
-+ Args : [optional] hash of parameter-value pairs
-+
-+=cut
-+
-+sub reset_parameters {
-+ my ($self, @args) = @_;
-+
-+ my @reset_args;
-+ # currently stored stuff
-+ my $opts = $self->{'_options'};
-+ my $params = $opts->{'_params'};
-+ my $switches = $opts->{'_switches'};
-+ my $translation = $opts->{'_translation'};
-+ my $qual_param = $opts->{'_qual_param'};
-+ my $use_dash = $opts->{'_dash'};
-+ my $join = $opts->{'_join'};
-+
-+ # handle command name
-+ my %args = @args;
-+ my $cmd = $args{'-command'} || $args{'command'} || $self->command;
-+ $args{'command'} = $cmd;
-+ delete $args{'-command'};
-+ @args = %args;
-+ # don't like this, b/c _set_program_args will create a bunch of
-+ # accessors with undef values, but oh well for now /maj
-+
-+ for my $p (@$params) {
-+ push(@reset_args, $p => undef) unless grep /^[-]?$p$/, @args;
-+ }
-+ for my $s (@$switches) {
-+ push(@reset_args, $s => undef) unless grep /^[-]?$s$/, @args;
-+ }
-+ push @args, @reset_args;
-+ $self->set_parameters(@args);
-+ $self->parameters_changed(1);
-+}
-+
-+=head2 parameters_changed()
-+
-+ Title : parameters_changed
-+ Usage : if ($pobj->parameters_changed) {...}
-+ Function: Returns boolean true (1) if parameters have changed
-+ Returns : Boolean (0 or 1)
-+ Args : [optional] Boolean
-+
-+=cut
-+
-+sub parameters_changed {
-+ my $self = shift;
-+ return $self->{'_parameters_changed'} = shift if @_;
-+ return $self->{'_parameters_changed'};
-+}
-+
-+=head2 available_parameters()
-+
-+ Title : available_parameters
-+ Usage : @params = $pobj->available_parameters()
-+ Function: Returns a list of the available parameters
-+ Returns : Array of parameters
-+ Args : 'params' for settable program parameters
-+ 'switches' for boolean program switches
-+ default: all
-+
-+=cut
-+
-+sub available_parameters {
-+ my $self = shift;
-+ my $subset = shift;
-+ my $opts = $self->{'_options'};
-+ my @ret;
-+ for ($subset) {
-+ (!defined || /^a/) && do {
-+ @ret = (@{$opts->{'_params'}}, @{$opts->{'_switches'}});
-+ last;
-+ };
-+ m/^p/i && do {
-+ @ret = @{$opts->{'_params'}};
-+ last;
-+ };
-+ m/^s/i && do {
-+ @ret = @{$opts->{'_switches'}};
-+ last;
-+ };
-+ m/^c/i && do {
-+ @ret = @{$opts->{'_commands'}};
-+ last;
-+ };
-+ m/^f/i && do { # get file spec
-+ return @{$opts->{'_files'}->{$self->command}};
-+ };
-+ do { #fail
-+ $self->throw("available_parameters: unrecognized subset");
-+ };
-+ }
-+ return @ret;
-+}
-+
-+sub available_commands { shift->available_parameters('commands') }
-+sub filespec { shift->available_parameters('filespec') }
-+
-+=head2 get_parameters()
-+
-+ Title : get_parameters
-+ Usage : %params = $pobj->get_parameters;
-+ Function: Returns list of key-value pairs of parameter => value
-+ Returns : List of key-value pairs
-+ Args : [optional] A string is allowed if subsets are wanted or (if a
-+ parameter subset is default) 'all' to return all parameters
-+
-+=cut
-+
-+sub get_parameters {
-+ my $self = shift;
-+ my $subset = shift;
-+ $subset ||= 'all';
-+ my @ret;
-+ my $opts = $self->{'_options'};
-+ for ($subset) {
-+ m/^p/i && do { #params only
-+ for (@{$opts->{'_params'}}) {
-+ push(@ret, $_, $self->$_) if $self->can($_) && defined $self->$_;
-+ }
-+ last;
-+ };
-+ m/^s/i && do { #switches only
-+ for (@{$opts->{'_switches'}}) {
-+ push(@ret, $_, $self->$_) if $self->can($_) && defined $self->$_;
-+ }
-+ last;
-+ };
-+ m/^a/i && do { # all
-+ for ((@{$opts->{'_params'}},@{$opts->{'_switches'}})) {
-+ push(@ret, $_, $self->$_) if $self->can($_) && defined $self->$_;
-+ }
-+ last;
-+ };
-+ do {
-+ $self->throw("get_parameters: unrecognized subset");
-+ };
-+ }
-+ return @ret;
-+}
-+
-+1;
Modified: trunk/packages/bioperl-run/trunk/debian/patches/series
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/patches/series 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/patches/series 2016-12-20 16:00:58 UTC (rev 23340)
@@ -1,14 +1,10 @@
-install-scripts.patch
-Use-system-s-Perl.patch
-Some-spellchecking.patch
-move-StandAloneBlast-and-WrapperBase-from-root-Bio.-.patch
skip_tests_for_wise.patch
-skip_tests_for_muscle.patch
-# skip_tests_for_bowtie.patch
+# skip_tests_for_muscle.patch # does not apply in 1.7.1
+# skip_tests_for_bowtie.patch # skip whole patch in 1.6.9
skip_tests_for_phylip.patch
-# skip_tests_for_infernal.patch
+# skip_tests_for_infernal.patch # skip whole patch in 1.6.9
skip_tests_for_phyml.patch
-skip_tests_for_ncbi-blast+.patch
-skip_tests_for_samtools.patch
+# skip_tests_for_ncbi-blast+.patch # does not apply in 1.7.1
+# skip_tests_for_samtools.patch # does not apply in 1.7.1
skip_tests_for_t-coffee.patch
-skip_tests_for_maq.patch
+# skip_tests_for_maq.patch # does not apply in 1.7.1
Modified: trunk/packages/bioperl-run/trunk/debian/patches/skip_tests_for_phylip.patch
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/patches/skip_tests_for_phylip.patch 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/patches/skip_tests_for_phylip.patch 2016-12-20 16:00:58 UTC (rev 23340)
@@ -2,40 +2,9 @@
Last-Update: Fri, 16 Dec 2016 09:17:37 +0100
Description: No idea why the number of tests is 8 instead of 9
---- a/t/Consense.t
-+++ b/t/Consense.t
-@@ -6,7 +6,7 @@ use strict;
-
- BEGIN {
- use Bio::Root::Test;
-- test_begin(-tests => 9,
-+ test_begin(-tests => 8,
- -requires_module => 'IO::String');
- use_ok('Bio::Tools::Run::Phylo::Phylip::Consense');
- use_ok('Bio::AlignIO');
---- a/t/Neighbor.t
-+++ b/t/Neighbor.t
-@@ -103,10 +103,10 @@ SKIP: {
- @nodes = sort { defined $a->id &&
- defined $b->id &&
- $a->id cmp $b->id } $tree->get_nodes();
-- is ($nodes[12]->id, 'S01',"failed to assign serial names");
-- foreach my $nd (@nodes){
-- $nd->id($ref_name->{$nd->id_output}) if $nd->is_Leaf;
-- }
-- is ($nodes[12]->id, 'Spar_21273',"failed to restore original names");
-+ #is ($nodes[12]->id, 'S01',"failed to assign serial names"); # Got undef in these tests! FIXME
-+ #foreach my $nd (@nodes){
-+ # $nd->id($ref_name->{$nd->id_output}) if $nd->is_Leaf;
-+ #}
-+ #is ($nodes[12]->id, 'Spar_21273',"failed to restore original names");
-
--}
-\ No newline at end of file
-+}
--- a/t/ProtPars.t
+++ b/t/ProtPars.t
-@@ -8,7 +8,7 @@ $DEBUG = test_debug();
+@@ -7,7 +7,7 @@ $DEBUG = test_debug();
use strict;
BEGIN {
use Bio::Root::Test;
@@ -44,8 +13,8 @@
use_ok('Bio::Tools::Run::Phylo::Phylip::ProtPars');
use_ok('Bio::Tools::Run::Alignment::Clustalw');
}
-@@ -81,10 +81,10 @@ SKIP: {
- @nodes = sort { $a->id cmp $b->id } $tree->get_nodes();
+@@ -78,10 +78,10 @@ SKIP: {
+ @nodes = sort { $a->id cmp $b->id } $tree2->get_nodes();
is (scalar(@nodes),27,
"creating tree by protpars");
- is ($nodes[12]->id, 'S01',"assign serial names");
Modified: trunk/packages/bioperl-run/trunk/debian/patches/skip_tests_for_phyml.patch
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/patches/skip_tests_for_phyml.patch 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/patches/skip_tests_for_phyml.patch 2016-12-20 16:00:58 UTC (rev 23340)
@@ -40,25 +40,7 @@
--- a/t/Phyml.t
+++ b/t/Phyml.t
-@@ -5,7 +5,7 @@ use strict;
-
- BEGIN {
- use Bio::Root::Test;
-- test_begin(-tests => 47);
-+ test_begin(-tests => 42);
- use_ok('Bio::Tools::Run::Phylo::Phyml');
- use_ok('Bio::AlignIO');
- }
-@@ -88,7 +88,7 @@ SKIP: {
- is ($factory->data_type('dna'), '0', 'data_type, dna');
- is ($factory->data_type('protein'), '1', 'data_type, protein');
-
-- is ($factory->model, 'JTT', 'model, default');
-+ # is ($factory->model, 'JTT', 'model, default'); # got: 'WAG' - expected: 'JTT'
-
-
- is ($factory->opt_topology, 'y', 'opt_topology, default');
-@@ -106,18 +106,17 @@ SKIP: {
+@@ -103,18 +103,17 @@ SKIP: {
# $factory->tempdir($workdir);
# using filename input
@@ -87,7 +69,7 @@
# using AlignIO on a DNA MSA
-@@ -148,8 +147,8 @@ SKIP: {
+@@ -145,7 +144,7 @@ SKIP: {
$factory = Bio::Tools::Run::Phylo::Phyml->new(%args);
$factory->save_tempfiles(1);
@@ -98,4 +80,3 @@
+ #@leaves = $tree->get_leaf_nodes;
+ #is (@leaves, 5, 'Result tree from DNA SimpleAlign input had correct number of leaves');
}
-
Modified: trunk/packages/bioperl-run/trunk/debian/rules
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/rules 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/rules 2016-12-20 16:00:58 UTC (rev 23340)
@@ -7,19 +7,16 @@
# The following programs are not packaged for Debian and thus
# the test is not supported
NOT_SUPPORTED_TESTS=Blat \
- Bowtie \
Eponine \
Glimmer2 \
Gumby \
- Infernal \
RepeatMasker
# Cap3 - some sensible tests seem to run despite this is not packaged
# The following tests should work but are missing to be packaged BioPerl modules
FAILING_TESTS_FOR_DUE_TO_MISSING_MODULES=BWA \
- MCS \
- Match
+ MCS
%:
dh $@
Modified: trunk/packages/bioperl-run/trunk/debian/watch
===================================================================
--- trunk/packages/bioperl-run/trunk/debian/watch 2016-12-20 14:01:05 UTC (rev 23339)
+++ trunk/packages/bioperl-run/trunk/debian/watch 2016-12-20 16:00:58 UTC (rev 23340)
@@ -1,5 +1,5 @@
-version=3
-opts="uversionmangle=s/_/./g" \
+version=4
+opts="uversionmangle=s/[-_]/./g" \
https://github.com/bioperl/bioperl-run/releases .*/archive/release-(\d[\d.-]+)\.(?:tar(?:\.gz|\.bz2)?|tgz)$
# http://search.cpan.org/dist/BioPerl-Run/ .*/BioPerl-Run-v?(\d[\d.-]+)\.(?:tar(?:\.gz|\.bz2)?|tgz|zip)$
More information about the debian-med-commit
mailing list