[med-svn] [Git][med-team/bioperl-run][master] 5 commits: Revert changes made outside of debian/
Pranav Ballaney
gitlab at salsa.debian.org
Mon Mar 30 20:44:23 BST 2020
Pranav Ballaney pushed to branch master at Debian Med / bioperl-run
Commits:
96aa79c3 by Pranav Ballaney at 2020-03-31T01:12:12+05:30
Revert changes made outside of debian/
- - - - -
ffe645e3 by Pranav Ballaney at 2020-03-31T01:12:33+05:30
Update quilt version
- - - - -
7bbdd9dd by Pranav Ballaney at 2020-03-31T01:12:54+05:30
Kalign takes input via a pipe
- - - - -
fcb50c4e by Pranav Ballaney at 2020-03-31T01:13:08+05:30
Extract Kalign version properly
- - - - -
34ae5967 by Pranav Ballaney at 2020-03-31T01:14:02+05:30
Update changelog
- - - - -
13 changed files:
- + .pc/.quilt_patches
- + .pc/.quilt_series
- + .pc/.version
- + .pc/applied-patches
- + .pc/kalign-input-via-piping.patch/.timestamp
- + .pc/kalign-input-via-piping.patch/lib/Bio/Tools/Run/Alignment/Kalign.pm
- + .pc/kalign-version-regex.patch/.timestamp
- + .pc/kalign-version-regex.patch/lib/Bio/Tools/Run/Alignment/Kalign.pm
- debian/changelog
- + debian/patches/kalign-input-via-piping.patch
- + debian/patches/kalign-version-regex.patch
- debian/patches/series
- lib/Bio/Tools/Run/Alignment/Kalign.pm
Changes:
=====================================
.pc/.quilt_patches
=====================================
@@ -0,0 +1 @@
+debian/patches
=====================================
.pc/.quilt_series
=====================================
@@ -0,0 +1 @@
+series
=====================================
.pc/.version
=====================================
@@ -0,0 +1 @@
+2
=====================================
.pc/applied-patches
=====================================
@@ -0,0 +1,2 @@
+kalign-input-via-piping.patch
+kalign-version-regex.patch
=====================================
.pc/kalign-input-via-piping.patch/.timestamp
=====================================
=====================================
.pc/kalign-input-via-piping.patch/lib/Bio/Tools/Run/Alignment/Kalign.pm
=====================================
@@ -0,0 +1,566 @@
+#
+# BioPerl module for Bio::Tools::Run::Alignment::Kalign
+#
+# Please direct questions and support issues to <bioperl-l at bioperl.org>
+#
+# Cared for by Albert Vilella
+#
+# Copyright Albert Vilella
+#
+# You may distribute this module under the same terms as perl itself
+#
+# POD documentation - main docs before the code
+
+=head1 NAME
+
+Bio::Tools::Run::Alignment::Kalign - Object for the calculation of an
+iterative multiple sequence alignment from a set of unaligned
+sequences or alignments using the KALIGN program
+
+=head1 SYNOPSIS
+
+ # Build a kalign alignment factory
+ $factory = Bio::Tools::Run::Alignment::Kalign->new(@params);
+
+ # Pass the factory a list of sequences to be aligned.
+ $inputfilename = 't/cysprot.fa';
+ # $aln is a SimpleAlign object.
+ $aln = $factory->align($inputfilename);
+
+ # or where @seq_array is an array of Bio::Seq objects
+ $seq_array_ref = \@seq_array;
+ $aln = $factory->align($seq_array_ref);
+
+ # Or one can pass the factory a pair of (sub)alignments
+ #to be aligned against each other, e.g.:
+
+ #There are various additional options and input formats available.
+ #See the DESCRIPTION section that follows for additional details.
+
+=head1 DESCRIPTION
+
+Please cite:
+
+ Timo Lassmann and Erik L.L. Sonnhammer (2005)
+ Kalign - an accurate and fast multiple sequence alignment algorithm.
+ BMC Bioinformatics 6:298
+
+http://msa.cgb.ki.se/downloads/kalign/current.tar.gz
+
+
+=head2 Helping the module find your executable
+
+You will need to enable Kalign to find the kalign program. This can be
+done in (at least) three ways:
+
+ 1. Make sure the kalign executable is in your path (i.e.
+ 'which kalign' returns a valid program
+ 2. define an environmental variable KALIGNDIR which points to a
+ directory containing the 'kalign' app:
+ In bash
+ export KALIGNDIR=/home/progs/kalign or
+ In csh/tcsh
+ setenv KALIGNDIR /home/progs/kalign
+
+ 3. include a definition of an environmental variable KALIGNDIR
+ in every script that will
+ BEGIN {$ENV{KALIGNDIR} = '/home/progs/kalign'; }
+ use Bio::Tools::Run::Alignment::Kalign;
+
+=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:
+
+ http://redmine.open-bio.org/projects/bioperl/
+
+=head1 AUTHOR - Albert Vilella
+
+Email idontlikespam at hotmail.com
+
+=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::Alignment::Kalign;
+
+use vars qw($AUTOLOAD @ISA $PROGRAMNAME $PROGRAM %DEFAULTS
+ @KALIGN_PARAMS @KALIGN_SWITCHES %OK_FIELD
+ );
+use strict;
+use Bio::Seq;
+use Bio::SeqIO;
+use Bio::SimpleAlign;
+use Bio::AlignIO;
+use Bio::Root::Root;
+use Bio::Root::IO;
+use Bio::Factory::ApplicationFactoryI;
+use Bio::Tools::Run::WrapperBase;
+ at ISA = qw(Bio::Root::Root Bio::Tools::Run::WrapperBase
+ Bio::Factory::ApplicationFactoryI);
+
+
+BEGIN {
+ %DEFAULTS = ( 'AFORMAT' => 'fasta' );
+ @KALIGN_PARAMS = qw(IN OUT GAPOPEN GAPEXTENSION TERMINAL_GAP_EXTENSION_PENALTY MATRIX_BONUS
+ SORT FEATURE DISTANCE TREE ZCUTOFF FORMAT
+ MAXMB MAXHOURS MAXITERS);
+ @KALIGN_SWITCHES = qw(QUIET);
+
+# Authorize attribute fields
+ foreach my $attr ( @KALIGN_PARAMS, @KALIGN_SWITCHES ) {
+ $OK_FIELD{$attr}++; }
+}
+
+=head2 program_name
+
+ Title : program_name
+ Usage : $factory->program_name()
+ Function: holds the program name
+ Returns: string
+ Args : None
+
+=cut
+
+sub program_name {
+ return 'kalign';
+}
+
+=head2 program_dir
+
+ Title : program_dir
+ Usage : $factory->program_dir(@params)
+ Function: returns the program directory, obtained from ENV variable.
+ Returns: string
+ Args :
+
+=cut
+
+sub program_dir {
+ return Bio::Root::IO->catfile($ENV{KALIGNDIR}) if $ENV{KALIGNDIR};
+}
+
+=head2 new
+
+ Title : new
+ Usage : my $kalign = Bio::Tools::Run::Alignment::Kalign->new();
+ Function: Constructor
+ Returns : Bio::Tools::Run::Alignment::Kalign
+ Args : -outfile_name => $outname
+
+
+=cut
+
+sub new {
+ my ($class, at args) = @_;
+ my( @kalign_args, @obj_args);
+ while( my $arg = shift @args ) {
+ if( $arg =~ /^-/ ) {
+ push @obj_args, $arg, shift @args;
+ } else {
+ push @kalign_args,$arg, shift @args;
+ }
+ }
+ my $self = $class->SUPER::new(@obj_args);
+
+ my ($on) = $self->_rearrange([qw(OUTFILE_NAME)], at obj_args);
+
+ $self->outfile_name($on || '');
+ my ($attr, $value);
+ # FIXME: only tested with fasta output format right now...
+ $self->aformat($DEFAULTS{'AFORMAT'});
+
+ while ( @kalign_args) {
+ $attr = shift @kalign_args;
+ $value = shift @kalign_args;
+ next if( $attr =~ /^-/); # don't want named parameters
+ $self->$attr($value);
+ }
+
+ if( defined $self->out ) {
+ $self->outfile_name($self->out);
+ }
+ return $self;
+}
+
+sub AUTOLOAD {
+ my $self = shift;
+ my $attr = $AUTOLOAD;
+ $attr =~ s/.*:://;
+ $attr = uc $attr;
+ # aliasing
+ $self->throw("Unallowed parameter: $attr !") unless $OK_FIELD{$attr};
+
+ $self->{$attr} = shift if @_;
+ return $self->{$attr};
+}
+
+=head2 error_string
+
+ Title : error_string
+ Usage : $obj->error_string($newval)
+ Function: Where the output from the last analysus run is stored.
+ Returns : value of error_string
+ Args : newvalue (optional)
+
+
+=cut
+
+sub error_string{
+ my ($self,$value) = @_;
+ if( defined $value) {
+ $self->{'error_string'} = $value;
+ }
+ return $self->{'error_string'};
+
+}
+
+=head2 version
+
+ Title : version
+ Usage : exit if $prog->version() < 2
+ Function: Determine the version number of the program
+ Example :
+ Returns : float or undef
+ Args : none
+
+=cut
+
+sub version {
+ my ($self) = @_;
+ my $exe;
+ # Kalign version 2.01, Copyright (C) 2004, 2005, 2006 Timo Lassmann
+ return undef unless $exe = $self->executable;
+ my $string = `$exe 2>&1` ;
+ $string =~ /Kalign\s+version\s+(\d+\.\d+)/m;
+ return $1 || undef;
+}
+
+=head2 run
+
+ Title : run
+ Usage : my $output = $application->run(\@seqs);
+ Function: Generic run of an application
+ Returns : Bio::SimpleAlign object
+ Args : Arrayref of Bio::PrimarySeqI objects or
+ a filename to run on
+
+=cut
+
+sub run {
+ my $self = shift;
+ return $self->align(shift);
+}
+
+=head2 align
+
+ Title : align
+ Usage :
+ $inputfilename = 't/data/cysprot.fa';
+ $aln = $factory->align($inputfilename);
+or
+ $seq_array_ref = \@seq_array;
+ # @seq_array is array of Seq objs
+ $aln = $factory->align($seq_array_ref);
+ Function: Perform a multiple sequence alignment
+ Returns : Reference to a SimpleAlign object containing the
+ sequence alignment.
+ Args : Name of a file containing a set of unaligned fasta sequences
+ or else an array of references to Bio::Seq objects.
+
+ Throws an exception if argument is not either a string (eg a
+ filename) or a reference to an array of Bio::Seq objects. If
+ argument is string, throws exception if file corresponding to string
+ name can not be found. If argument is Bio::Seq array, throws
+ exception if less than two sequence objects are in array.
+
+=cut
+
+sub align {
+ my ($self,$input) = @_;
+ # Create input file pointer
+ $self->io->_io_cleanup();
+ my $infilename;
+ if( defined $input ) {
+ $infilename = $self->_setinput($input);
+ } elsif( defined $self->in ) {
+ $infilename = $self->_setinput($self->in);
+ } else {
+ $self->throw("No inputdata provided\n");
+ }
+ if (! $infilename) {
+ $self->throw("Bad input data or less than 2 sequences in $input !");
+ }
+
+ my $param_string = $self->_setparams();
+
+ # run kalign
+ return &_run($self, $infilename, $param_string);
+}
+
+=head2 _run
+
+ Title : _run
+ Usage : Internal function, not to be called directly
+ Function: makes actual system call to kalign program
+ Example :
+ Returns : nothing; kalign output is written to a
+ temporary file OR specified output file
+ Args : Name of a file containing a set of unaligned fasta sequences
+ and hash of parameters to be passed to kalign
+
+
+=cut
+
+sub _run {
+ my ($self,$infilename,$params) = @_;
+ my $commandstring = $self->executable." -in $infilename $params";
+
+ $self->debug( "kalign command = $commandstring \n");
+
+ my $status = system($commandstring);
+ my $outfile = $self->outfile_name();
+ if( !-e $outfile || -z $outfile ) {
+ $self->warn( "Kalign call crashed: $? [command $commandstring]\n");
+ return undef;
+ }
+
+ my $in = Bio::AlignIO->new('-file' => $outfile,
+ '-format' => $self->aformat);
+ my $aln = $in->next_aln();
+ return $aln;
+}
+
+
+=head2 _setinput
+
+ Title : _setinput
+ Usage : Internal function, not to be called directly
+ Function: Create input file for kalign program
+ Example :
+ Returns : name of file containing kalign data input AND
+ Args : Arrayref of Seqs or input file name
+
+
+=cut
+
+sub _setinput {
+ my ($self,$input) = @_;
+ my ($infilename, $seq, $temp, $tfh);
+ if (! ref $input) {
+ # check that file exists or throw
+ $infilename = $input;
+ unless (-e $input) {return 0;}
+ # let's peek and guess
+ open(IN,$infilename) || $self->throw("Cannot open $infilename");
+ my $header;
+ while( defined ($header = <IN>) ) {
+ last if $header !~ /^\s+$/;
+ }
+ close(IN);
+ if ( $header !~ /^>\s*\S+/ ){
+ $self->throw("Need to provide a FASTA format file to kalign!");
+ }
+ return ($infilename);
+ } elsif (ref($input) =~ /ARRAY/i ) { # $input may be an
+ # array of BioSeq objects...
+ # Open temporary file for both reading & writing of array
+ ($tfh,$infilename) = $self->io->tempfile();
+ if( ! ref($input->[0]) ) {
+ $self->warn("passed an array ref which did not contain objects to _setinput");
+ return undef;
+ } elsif( $input->[0]->isa('Bio::PrimarySeqI') ) {
+ $temp = Bio::SeqIO->new('-fh' => $tfh,
+ '-format' => 'fasta');
+ my $ct = 1;
+ foreach $seq (@$input) {
+ return 0 unless ( ref($seq) &&
+ $seq->isa("Bio::PrimarySeqI") );
+ if( ! defined $seq->display_id ||
+ $seq->display_id =~ /^\s+$/) {
+ $seq->display_id( "Seq".$ct++);
+ }
+ $temp->write_seq($seq);
+ }
+ $temp->close();
+ undef $temp;
+ close($tfh);
+ $tfh = undef;
+ } else {
+ $self->warn( "got an array ref with 1st entry ".
+ $input->[0].
+ " and don't know what to do with it\n");
+ }
+ return ($infilename);
+ } else {
+ $self->warn("Got $input and don't know what to do with it\n");
+ }
+ return 0;
+}
+
+
+=head2 _setparams
+
+ Title : _setparams
+ Usage : Internal function, not to be called directly
+ Function: Create parameter inputs for kalign program
+ Example :
+ Returns : parameter string to be passed to kalign
+ during align or profile_align
+ Args : name of calling object
+
+=cut
+
+sub _setparams {
+ my ($self) = @_;
+ my ($attr, $value,$param_string);
+ $param_string = '';
+ my $laststr;
+ for $attr ( @KALIGN_PARAMS ) {
+ $value = $self->$attr();
+ next unless (defined $value);
+ my $attr_key = lc $attr;
+ $attr_key = ' -'.$attr_key;
+ $param_string .= $attr_key .' '.$value;
+
+ }
+ for $attr ( @KALIGN_SWITCHES) {
+ $value = $self->$attr();
+ next unless ($value);
+ my $attr_key = lc $attr; #put switches in format expected by tcoffee
+ $attr_key = ' -'.$attr_key;
+ $param_string .= $attr_key ;
+ }
+
+ # Set default output file if no explicit output file selected
+ unless ($self->outfile_name ) {
+ my ($tfh, $outfile) = $self->io->tempfile(-dir=>$self->tempdir());
+ close($tfh);
+ undef $tfh;
+ $self->outfile_name($outfile);
+ }
+ $param_string .= " -out ".$self->outfile_name;
+
+ if ($self->quiet() || $self->verbose < 0) {
+ my $null = ($^O =~ m/mswin/i) ? 'NUL' : '/dev/null';
+ $param_string .= " 2> $null";
+ }
+ return $param_string;
+}
+
+=head2 aformat
+
+ Title : aformat
+ Usage : my $alignmentformat = $self->aformat();
+ Function: Get/Set alignment format
+ Returns : string
+ Args : string
+
+
+=cut
+
+sub aformat{
+ my $self = shift;
+ $self->{'_aformat'} = shift if @_;
+ return $self->{'_aformat'};
+}
+
+=head1 Bio::Tools::Run::BaseWrapper 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 = $kalign->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 : $kalign->cleanup();
+ Function: Will cleanup the tempdir directory
+ Returns : none
+ Args : none
+
+
+=cut
+
+=head2 io
+
+ Title : io
+ Usage : $obj->io($newval)
+ Function: Gets a L<Bio::Root::IO> object
+ Returns : L<Bio::Root::IO>
+ Args : none
+
+
+=cut
+
+1; # Needed to keep compiler happy
=====================================
.pc/kalign-version-regex.patch/.timestamp
=====================================
=====================================
.pc/kalign-version-regex.patch/lib/Bio/Tools/Run/Alignment/Kalign.pm
=====================================
@@ -0,0 +1,566 @@
+#
+# BioPerl module for Bio::Tools::Run::Alignment::Kalign
+#
+# Please direct questions and support issues to <bioperl-l at bioperl.org>
+#
+# Cared for by Albert Vilella
+#
+# Copyright Albert Vilella
+#
+# You may distribute this module under the same terms as perl itself
+#
+# POD documentation - main docs before the code
+
+=head1 NAME
+
+Bio::Tools::Run::Alignment::Kalign - Object for the calculation of an
+iterative multiple sequence alignment from a set of unaligned
+sequences or alignments using the KALIGN program
+
+=head1 SYNOPSIS
+
+ # Build a kalign alignment factory
+ $factory = Bio::Tools::Run::Alignment::Kalign->new(@params);
+
+ # Pass the factory a list of sequences to be aligned.
+ $inputfilename = 't/cysprot.fa';
+ # $aln is a SimpleAlign object.
+ $aln = $factory->align($inputfilename);
+
+ # or where @seq_array is an array of Bio::Seq objects
+ $seq_array_ref = \@seq_array;
+ $aln = $factory->align($seq_array_ref);
+
+ # Or one can pass the factory a pair of (sub)alignments
+ #to be aligned against each other, e.g.:
+
+ #There are various additional options and input formats available.
+ #See the DESCRIPTION section that follows for additional details.
+
+=head1 DESCRIPTION
+
+Please cite:
+
+ Timo Lassmann and Erik L.L. Sonnhammer (2005)
+ Kalign - an accurate and fast multiple sequence alignment algorithm.
+ BMC Bioinformatics 6:298
+
+http://msa.cgb.ki.se/downloads/kalign/current.tar.gz
+
+
+=head2 Helping the module find your executable
+
+You will need to enable Kalign to find the kalign program. This can be
+done in (at least) three ways:
+
+ 1. Make sure the kalign executable is in your path (i.e.
+ 'which kalign' returns a valid program
+ 2. define an environmental variable KALIGNDIR which points to a
+ directory containing the 'kalign' app:
+ In bash
+ export KALIGNDIR=/home/progs/kalign or
+ In csh/tcsh
+ setenv KALIGNDIR /home/progs/kalign
+
+ 3. include a definition of an environmental variable KALIGNDIR
+ in every script that will
+ BEGIN {$ENV{KALIGNDIR} = '/home/progs/kalign'; }
+ use Bio::Tools::Run::Alignment::Kalign;
+
+=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:
+
+ http://redmine.open-bio.org/projects/bioperl/
+
+=head1 AUTHOR - Albert Vilella
+
+Email idontlikespam at hotmail.com
+
+=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::Alignment::Kalign;
+
+use vars qw($AUTOLOAD @ISA $PROGRAMNAME $PROGRAM %DEFAULTS
+ @KALIGN_PARAMS @KALIGN_SWITCHES %OK_FIELD
+ );
+use strict;
+use Bio::Seq;
+use Bio::SeqIO;
+use Bio::SimpleAlign;
+use Bio::AlignIO;
+use Bio::Root::Root;
+use Bio::Root::IO;
+use Bio::Factory::ApplicationFactoryI;
+use Bio::Tools::Run::WrapperBase;
+ at ISA = qw(Bio::Root::Root Bio::Tools::Run::WrapperBase
+ Bio::Factory::ApplicationFactoryI);
+
+
+BEGIN {
+ %DEFAULTS = ( 'AFORMAT' => 'fasta' );
+ @KALIGN_PARAMS = qw(IN OUT GAPOPEN GAPEXTENSION TERMINAL_GAP_EXTENSION_PENALTY MATRIX_BONUS
+ SORT FEATURE DISTANCE TREE ZCUTOFF FORMAT
+ MAXMB MAXHOURS MAXITERS);
+ @KALIGN_SWITCHES = qw(QUIET);
+
+# Authorize attribute fields
+ foreach my $attr ( @KALIGN_PARAMS, @KALIGN_SWITCHES ) {
+ $OK_FIELD{$attr}++; }
+}
+
+=head2 program_name
+
+ Title : program_name
+ Usage : $factory->program_name()
+ Function: holds the program name
+ Returns: string
+ Args : None
+
+=cut
+
+sub program_name {
+ return 'kalign';
+}
+
+=head2 program_dir
+
+ Title : program_dir
+ Usage : $factory->program_dir(@params)
+ Function: returns the program directory, obtained from ENV variable.
+ Returns: string
+ Args :
+
+=cut
+
+sub program_dir {
+ return Bio::Root::IO->catfile($ENV{KALIGNDIR}) if $ENV{KALIGNDIR};
+}
+
+=head2 new
+
+ Title : new
+ Usage : my $kalign = Bio::Tools::Run::Alignment::Kalign->new();
+ Function: Constructor
+ Returns : Bio::Tools::Run::Alignment::Kalign
+ Args : -outfile_name => $outname
+
+
+=cut
+
+sub new {
+ my ($class, at args) = @_;
+ my( @kalign_args, @obj_args);
+ while( my $arg = shift @args ) {
+ if( $arg =~ /^-/ ) {
+ push @obj_args, $arg, shift @args;
+ } else {
+ push @kalign_args,$arg, shift @args;
+ }
+ }
+ my $self = $class->SUPER::new(@obj_args);
+
+ my ($on) = $self->_rearrange([qw(OUTFILE_NAME)], at obj_args);
+
+ $self->outfile_name($on || '');
+ my ($attr, $value);
+ # FIXME: only tested with fasta output format right now...
+ $self->aformat($DEFAULTS{'AFORMAT'});
+
+ while ( @kalign_args) {
+ $attr = shift @kalign_args;
+ $value = shift @kalign_args;
+ next if( $attr =~ /^-/); # don't want named parameters
+ $self->$attr($value);
+ }
+
+ if( defined $self->out ) {
+ $self->outfile_name($self->out);
+ }
+ return $self;
+}
+
+sub AUTOLOAD {
+ my $self = shift;
+ my $attr = $AUTOLOAD;
+ $attr =~ s/.*:://;
+ $attr = uc $attr;
+ # aliasing
+ $self->throw("Unallowed parameter: $attr !") unless $OK_FIELD{$attr};
+
+ $self->{$attr} = shift if @_;
+ return $self->{$attr};
+}
+
+=head2 error_string
+
+ Title : error_string
+ Usage : $obj->error_string($newval)
+ Function: Where the output from the last analysus run is stored.
+ Returns : value of error_string
+ Args : newvalue (optional)
+
+
+=cut
+
+sub error_string{
+ my ($self,$value) = @_;
+ if( defined $value) {
+ $self->{'error_string'} = $value;
+ }
+ return $self->{'error_string'};
+
+}
+
+=head2 version
+
+ Title : version
+ Usage : exit if $prog->version() < 2
+ Function: Determine the version number of the program
+ Example :
+ Returns : float or undef
+ Args : none
+
+=cut
+
+sub version {
+ my ($self) = @_;
+ my $exe;
+ # Kalign version 2.01, Copyright (C) 2004, 2005, 2006 Timo Lassmann
+ return undef unless $exe = $self->executable;
+ my $string = `$exe 2>&1` ;
+ $string =~ /Kalign\s+version\s+(\d+\.\d+)/m;
+ return $1 || undef;
+}
+
+=head2 run
+
+ Title : run
+ Usage : my $output = $application->run(\@seqs);
+ Function: Generic run of an application
+ Returns : Bio::SimpleAlign object
+ Args : Arrayref of Bio::PrimarySeqI objects or
+ a filename to run on
+
+=cut
+
+sub run {
+ my $self = shift;
+ return $self->align(shift);
+}
+
+=head2 align
+
+ Title : align
+ Usage :
+ $inputfilename = 't/data/cysprot.fa';
+ $aln = $factory->align($inputfilename);
+or
+ $seq_array_ref = \@seq_array;
+ # @seq_array is array of Seq objs
+ $aln = $factory->align($seq_array_ref);
+ Function: Perform a multiple sequence alignment
+ Returns : Reference to a SimpleAlign object containing the
+ sequence alignment.
+ Args : Name of a file containing a set of unaligned fasta sequences
+ or else an array of references to Bio::Seq objects.
+
+ Throws an exception if argument is not either a string (eg a
+ filename) or a reference to an array of Bio::Seq objects. If
+ argument is string, throws exception if file corresponding to string
+ name can not be found. If argument is Bio::Seq array, throws
+ exception if less than two sequence objects are in array.
+
+=cut
+
+sub align {
+ my ($self,$input) = @_;
+ # Create input file pointer
+ $self->io->_io_cleanup();
+ my $infilename;
+ if( defined $input ) {
+ $infilename = $self->_setinput($input);
+ } elsif( defined $self->in ) {
+ $infilename = $self->_setinput($self->in);
+ } else {
+ $self->throw("No inputdata provided\n");
+ }
+ if (! $infilename) {
+ $self->throw("Bad input data or less than 2 sequences in $input !");
+ }
+
+ my $param_string = $self->_setparams();
+
+ # run kalign
+ return &_run($self, $infilename, $param_string);
+}
+
+=head2 _run
+
+ Title : _run
+ Usage : Internal function, not to be called directly
+ Function: makes actual system call to kalign program
+ Example :
+ Returns : nothing; kalign output is written to a
+ temporary file OR specified output file
+ Args : Name of a file containing a set of unaligned fasta sequences
+ and hash of parameters to be passed to kalign
+
+
+=cut
+
+sub _run {
+ my ($self,$infilename,$params) = @_;
+ my $commandstring = "cat $infilename | ".$self->executable." $params";
+
+ $self->debug( "kalign command = $commandstring \n");
+
+ my $status = system($commandstring);
+ my $outfile = $self->outfile_name();
+ if( !-e $outfile || -z $outfile ) {
+ $self->warn( "Kalign call crashed: $? [command $commandstring]\n");
+ return undef;
+ }
+
+ my $in = Bio::AlignIO->new('-file' => $outfile,
+ '-format' => $self->aformat);
+ my $aln = $in->next_aln();
+ return $aln;
+}
+
+
+=head2 _setinput
+
+ Title : _setinput
+ Usage : Internal function, not to be called directly
+ Function: Create input file for kalign program
+ Example :
+ Returns : name of file containing kalign data input AND
+ Args : Arrayref of Seqs or input file name
+
+
+=cut
+
+sub _setinput {
+ my ($self,$input) = @_;
+ my ($infilename, $seq, $temp, $tfh);
+ if (! ref $input) {
+ # check that file exists or throw
+ $infilename = $input;
+ unless (-e $input) {return 0;}
+ # let's peek and guess
+ open(IN,$infilename) || $self->throw("Cannot open $infilename");
+ my $header;
+ while( defined ($header = <IN>) ) {
+ last if $header !~ /^\s+$/;
+ }
+ close(IN);
+ if ( $header !~ /^>\s*\S+/ ){
+ $self->throw("Need to provide a FASTA format file to kalign!");
+ }
+ return ($infilename);
+ } elsif (ref($input) =~ /ARRAY/i ) { # $input may be an
+ # array of BioSeq objects...
+ # Open temporary file for both reading & writing of array
+ ($tfh,$infilename) = $self->io->tempfile();
+ if( ! ref($input->[0]) ) {
+ $self->warn("passed an array ref which did not contain objects to _setinput");
+ return undef;
+ } elsif( $input->[0]->isa('Bio::PrimarySeqI') ) {
+ $temp = Bio::SeqIO->new('-fh' => $tfh,
+ '-format' => 'fasta');
+ my $ct = 1;
+ foreach $seq (@$input) {
+ return 0 unless ( ref($seq) &&
+ $seq->isa("Bio::PrimarySeqI") );
+ if( ! defined $seq->display_id ||
+ $seq->display_id =~ /^\s+$/) {
+ $seq->display_id( "Seq".$ct++);
+ }
+ $temp->write_seq($seq);
+ }
+ $temp->close();
+ undef $temp;
+ close($tfh);
+ $tfh = undef;
+ } else {
+ $self->warn( "got an array ref with 1st entry ".
+ $input->[0].
+ " and don't know what to do with it\n");
+ }
+ return ($infilename);
+ } else {
+ $self->warn("Got $input and don't know what to do with it\n");
+ }
+ return 0;
+}
+
+
+=head2 _setparams
+
+ Title : _setparams
+ Usage : Internal function, not to be called directly
+ Function: Create parameter inputs for kalign program
+ Example :
+ Returns : parameter string to be passed to kalign
+ during align or profile_align
+ Args : name of calling object
+
+=cut
+
+sub _setparams {
+ my ($self) = @_;
+ my ($attr, $value,$param_string);
+ $param_string = '';
+ my $laststr;
+ for $attr ( @KALIGN_PARAMS ) {
+ $value = $self->$attr();
+ next unless (defined $value);
+ my $attr_key = lc $attr;
+ $attr_key = ' -'.$attr_key;
+ $param_string .= $attr_key .' '.$value;
+
+ }
+ for $attr ( @KALIGN_SWITCHES) {
+ $value = $self->$attr();
+ next unless ($value);
+ my $attr_key = lc $attr; #put switches in format expected by tcoffee
+ $attr_key = ' -'.$attr_key;
+ $param_string .= $attr_key ;
+ }
+
+ # Set default output file if no explicit output file selected
+ unless ($self->outfile_name ) {
+ my ($tfh, $outfile) = $self->io->tempfile(-dir=>$self->tempdir());
+ close($tfh);
+ undef $tfh;
+ $self->outfile_name($outfile);
+ }
+ $param_string .= " -out ".$self->outfile_name;
+
+ if ($self->quiet() || $self->verbose < 0) {
+ my $null = ($^O =~ m/mswin/i) ? 'NUL' : '/dev/null';
+ $param_string .= " 2> $null";
+ }
+ return $param_string;
+}
+
+=head2 aformat
+
+ Title : aformat
+ Usage : my $alignmentformat = $self->aformat();
+ Function: Get/Set alignment format
+ Returns : string
+ Args : string
+
+
+=cut
+
+sub aformat{
+ my $self = shift;
+ $self->{'_aformat'} = shift if @_;
+ return $self->{'_aformat'};
+}
+
+=head1 Bio::Tools::Run::BaseWrapper 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 = $kalign->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 : $kalign->cleanup();
+ Function: Will cleanup the tempdir directory
+ Returns : none
+ Args : none
+
+
+=cut
+
+=head2 io
+
+ Title : io
+ Usage : $obj->io($newval)
+ Function: Gets a L<Bio::Root::IO> object
+ Returns : L<Bio::Root::IO>
+ Args : none
+
+
+=cut
+
+1; # Needed to keep compiler happy
=====================================
debian/changelog
=====================================
@@ -1,11 +1,22 @@
bioperl-run (1.7.3-4) UNRELEASED; urgency=medium
+ [ Michael R. Crusoe ]
* Team upload.
* Fix the autopkgtests
* Set 'Bio::Factory::EMBOSS' as the main module name for the purpose of
the use.t autopkgtest
-
- -- Michael R. Crusoe <michael.crusoe at gmail.com> Fri, 14 Feb 2020 18:05:51 +0100
+ * fix hyphympi autopkgtests
+ * libipc-run-perl is needed for Bio::Tools::Run::BEDTools
+ * drawgram is pary of the phylip package
+
+ [ Pranav Ballaney ]
+ * Change kalign command string to input via stdin It fails to take input via the -in flag during testing
+ * Revert changes made outside of debian/
+ * Update quilt version
+ * Kalign takes input via a pipe
+ * Extract Kalign version properly
+
+ -- Pranav Ballaney <ballaneypranav at gmail.com> Tue, 31 Mar 2020 01:13:25 +0530
bioperl-run (1.7.3-3) unstable; urgency=medium
=====================================
debian/patches/kalign-input-via-piping.patch
=====================================
@@ -0,0 +1,18 @@
+Description: Kalign takes input via piping
+ For some reason, input via the -i flag doesn't work inside a chroot.
+ For this reason, Kalign.pm is modified to allow the program to take input via a pipe.
+Author: Pranav Ballaney <ballaneypranav at gmail.com>
+Last-Update: 2020-03-31
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/lib/Bio/Tools/Run/Alignment/Kalign.pm
++++ b/lib/Bio/Tools/Run/Alignment/Kalign.pm
+@@ -339,7 +339,7 @@ sub align {
+
+ sub _run {
+ my ($self,$infilename,$params) = @_;
+- my $commandstring = $self->executable." -in $infilename $params";
++ my $commandstring = "cat $infilename | ".$self->executable." $params";
+
+ $self->debug( "kalign command = $commandstring \n");
+
=====================================
debian/patches/kalign-version-regex.patch
=====================================
@@ -0,0 +1,22 @@
+Description: Update regex to extract Kalign version
+ Due to an update from v2 to v3, the output format of Kalign has changed.
+ This patch changes the regex used to extract the version number from Kalign3.
+ --show flag is added because otherwise Kalign3 throws an error,
+ being run without an input file.
+Author: Pranav Ballaney <ballaneypranav at gmail.com>
+Last-Update: 2020-03-31
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/lib/Bio/Tools/Run/Alignment/Kalign.pm
++++ b/lib/Bio/Tools/Run/Alignment/Kalign.pm
+@@ -256,8 +256,8 @@ sub version {
+ my $exe;
+ # Kalign version 2.01, Copyright (C) 2004, 2005, 2006 Timo Lassmann
+ return undef unless $exe = $self->executable;
+- my $string = `$exe 2>&1` ;
+- $string =~ /Kalign\s+version\s+(\d+\.\d+)/m;
++ my $string = `$exe --show 2>&1` ;
++ $string =~ /Kalign\s+\((\d+)\..+\)/m;
+ return $1 || undef;
+ }
+
=====================================
debian/patches/series
=====================================
@@ -1,3 +1,5 @@
+kalign-input-via-piping.patch
+kalign-version-regex.patch
skip_tests_for_wise.patch
skip_tests_for_phylip.patch
skip_tests_for_phyml.patch
=====================================
lib/Bio/Tools/Run/Alignment/Kalign.pm
=====================================
@@ -256,8 +256,8 @@ sub version {
my $exe;
# Kalign version 2.01, Copyright (C) 2004, 2005, 2006 Timo Lassmann
return undef unless $exe = $self->executable;
- my $string = `$exe 2>&1` ;
- $string =~ /Kalign\s+version\s+(\d+\.\d+)/m;
+ my $string = `$exe --show 2>&1` ;
+ $string =~ /Kalign\s+\((\d+)\..+\)/m;
return $1 || undef;
}
View it on GitLab: https://salsa.debian.org/med-team/bioperl-run/-/compare/1d0816c1e6114efaa1af54d1f79568a410ad9a8a...34ae59674f1f2358d86b815c63a52b9852e6bf35
--
View it on GitLab: https://salsa.debian.org/med-team/bioperl-run/-/compare/1d0816c1e6114efaa1af54d1f79568a410ad9a8a...34ae59674f1f2358d86b815c63a52b9852e6bf35
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20200330/47bec300/attachment-0001.html>
More information about the debian-med-commit
mailing list