Bio::Tools::Run::Phylo::PAML
Yn00
Toolbar
Summary
Bio::Tools::Run::Phylo::PAML::Yn00 - Wrapper aroud the PAML program yn00
Package variables
No package variables defined.
Included modules
Bio::AlignIO
Bio::Root::Root
Bio::Tools::Phylo::PAML
Bio::Tools::Run::WrapperBase
Bio::TreeIO
Cwd
Inherit
Bio::Root::Root Bio::Tools::Run::WrapperBase
Synopsis
use Bio::Tools::Run::Phylo::PAML::Yn00;
use Bio::AlignIO;
my $alignio = Bio::AlignIO->new(-format => 'phylip',
-file => 't/data/gf-s85.phylip');
my $aln = $alignio->next_aln;
my $yn = Bio::Tools::Run::Phylo::PAML::Yn00->new();
$yn->alignment($aln);
my ($rc,$parser) = $yn->run();
while( my $result = $parser->next_result ) {
my @otus = $result->get_seqs();
my $MLmatrix = $result->get_MLmatrix();
# 0 and 1 correspond to the 1st and 2nd entry in the @otus array
my $dN = $MLmatrix->[0]->[1]->{dN};
my $dS = $MLmatrix->[0]->[1]->{dS};
my $kaks =$MLmatrix->[0]->[1]->{omega};
print "Ka = $dN Ks = $dS Ka/Ks = $kaks\n";
}
Description
This is a wrapper around the yn00 (method of Yang and Nielsen, 2000)
program of PAML (Phylogenetic Analysis by Maximum Likelihood) package
of Ziheng Yang. See
http://abacus.gene.ucl.ac.uk/software/paml.html
for more information.
This module will generate a proper yn00.ctl file and will run the
program in a separate temporary directory to avoid creating temp files
all over the place and will cleanup after itself.
Methods
Methods description
Title : program_name Usage : $yn00->program_name() Function: holds the program name Returns: string Args : None |
Title : program_dir Usage : $yn00->program_dir() Function: returns the program directory, obtained from ENV variable. Returns: string Args : |
Title : new Usage : my $obj = Bio::Tools::Run::Phylo::PAML::Yn00->new(); Function: Builds a new Bio::Tools::Run::Phylo::PAML::Yn00 object Returns : Bio::Tools::Run::Phylo::PAML::Yn00 Args : -alignment => the Bio::Align::AlignI object -save_tempfiles => boolean to save the generated tempfiles and NOT cleanup after onesself (default FALSE) |
Title : run Usage : $yn->run(); Function: run the yn00 analysis using the default or updated parameters the alignment parameter must have been set Returns : 3 values, $rc = 1 for success, 0 for errors hash reference of the Yang calculated Ka/Ks values this is a set of pairwise observations keyed as sequencenameA->sequencenameB->datatype hash reference same as the previous one except it for the Nei and Gojobori calculated Ka,Ks,omega values Args : none |
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) |
Title : get_parameters Usage : my %params = $self->get_parameters(); Function: returns the list of parameters as a hash Returns : associative array keyed on parameter names Args : none |
Title : set_parameter Usage : $codeml->set_parameter($param,$val); Function: Sets a codeml parameter, will be validated against the valid values as set in the %VALIDVALUES class variable. The checks can be ignored if on turns of param checks like this: $codeml->no_param_checks(1) Returns : boolean if set was success, if verbose is set to -1 then no warning will be reported Args : $paramname => name of the parameter $value => value to set the parameter to See also: no_param_checks() |
Title : set_default_parameters Usage : $codeml->set_default_parameters(0); Function: (Re)set the default parameters from the defaults (the first value in each array in the %VALIDVALUES class variable) Returns : none Args : boolean: keep existing parameter values |
Methods code
BEGIN {
$MINNAMELEN = 25;
$PROGRAMNAME = 'yn00' . ($^O =~ /mswin/i ?'.exe':'');
if( defined $ENV{'PAMLDIR'} ) {
$PROGRAM = Bio::Root::IO->catfile($ENV{'PAMLDIR'},$PROGRAMNAME);
}
%VALIDVALUES = (
'noisy' => [ 0..3,9],
'verbose' => [ 0,1,2],
'weighting' => [0,1], 'commonf3x4' => [0,1],
'icode' => [ 0..10],
'ndata' => [1..10],
);} |
sub program_name
{ return $PROGRAMNAME; } |
sub program_dir
{ return Bio::Root::IO->catfile($ENV{PAMLDIR}) if $ENV{PAMLDIR};} |
sub new
{ my($class,@args) = @_;
my $self = $class->SUPER::new(@args);
my ($aln,$st) = $self->_rearrange([qw(ALIGNMENT SAVE_TEMPFILES)],
@args);
defined $aln && $self->alignment($aln);
defined $st && $self->save_tempfiles($st);
$self->set_default_parameters();
return $self; } |
sub run
{ my ($self,$aln) = @_;
($aln) ||= $self->alignment();
if( ! $aln ) {
$self->warn("must have supplied a valid alignment file in order to run yn00");
return 0;
}
my ($tmpdir) = $self->tempdir();
my ($tempseqFH,$tempseqfile);
if( ! ref($aln) && -e $aln ) {
$tempseqfile = $aln;
} else {
($tempseqFH,$tempseqfile) = $self->io->tempfile
('-dir' => $tmpdir,
UNLINK => ($self->save_tempfiles ? 0 : 1));
my $alnout = Bio::AlignIO->new('-format' => 'phylip',
'-fh' => $tempseqFH,
'-interleaved' => 0,
'-idlength' => $MINNAMELEN > $aln->maxdisplayname_length() ? $MINNAMELEN : $aln->maxdisplayname_length() +1);
$alnout->write_aln($aln);
$alnout->close();
undef $alnout;
close($tempseqFH);
undef $tempseqFH;
}
my $yn_ctl = "$tmpdir/yn00.ctl";
open(YN, ">$yn_ctl") or $self->throw("cannot open $yn_ctl for writing");
print YN "seqfile = $tempseqfile\n";
my $outfile = $self->outfile_name;
print YN "outfile = $outfile\n";
my %params = $self->get_parameters;
while( my ($param,$val) = each %params ) {
print YN "$param = $val\n";
}
close(YN);
my ($rc,$parser) = (1);
{
my $cwd = cwd();
my $exit_status;
chdir($tmpdir);
my $ynexe = $self->executable();
$self->throw("unable to find executable for 'yn'") unless $ynexe;
open(RUN, "$ynexe |");
my @output = <RUN>;
$exit_status = close(RUN);
$self->error_string(join('',@output));
if( (grep { /\berr(or)?: /io } @output) || !$exit_status ) {
$self->warn("There was an error - see error_string for the program output");
$rc = 0;
}
eval {
$parser = Bio::Tools::Phylo::PAML->new(-file => "$tmpdir/mlc",
-dir => "$tmpdir");
};
if( $@ ) {
$self->warn($self->error_string);
}
chdir($cwd);
}
if( $self->verbose > 0 ) {
open(IN, "$tmpdir/mlc");
while(<IN>) {
$self->debug($_);
}
}
unless ( $self->save_tempfiles ) {
unlink("$yn_ctl");
$self->cleanup();
}
return ($rc,$parser);} |
sub error_string
{ my ($self,$value) = @_;
if( defined $value) {
$self->{'error_string'} = $value;
}
return $self->{'error_string'};} |
sub alignment
{ my ($self,$aln) = @_;
if( defined $aln ) {
if( !ref($aln) || ! $aln->isa('Bio::Align::AlignI') ) {
$self->warn("Must specify a valid Bio::Align::AlignI object to the alignment function");
return undef;
}
$self->{'_alignment'} = $aln;
}
return $self->{'_alignment'};} |
sub get_parameters
{ my ($self) = @_;
return %{ $self->{'_codemlparams'} }; } |
sub set_parameter
{ my ($self,$param,$value) = @_;
if( ! defined $VALIDVALUES{$param} ) {
$self->warn("unknown parameter $param will not set unless you force by setting no_param_checks to true");
return 0;
}
if( ref( $VALIDVALUES{$param}) =~ /ARRAY/i &&
scalar @{$VALIDVALUES{$param}} > 0 ) {
unless ( grep {$value} @{ $VALIDVALUES{$param} } ) {
$self->warn("parameter $param specified value $value is not recognized, please see the documentation and the code for this module or set the no_param_checks to a true value");
return 0;
}
}
$self->{'_codemlparams'}->{$param} = $value;
return 1;} |
sub set_default_parameters
{ my ($self,$keepold) = @_;
$keepold = 0 unless defined $keepold;
while( my ($param,$val) = each %VALIDVALUES ) {
next if( defined $self->{'_codemlparams'}->{$param} && $keepold);
if(ref($val)=~/ARRAY/i ) {
$self->{'_codemlparams'}->{$param} = $val->[0];
} else {
$self->{'_codemlparams'}->{$param} = $val;
}
}} |
General documentation
User feedback is an integral part of the evolution of this and other
Bioperl modules. Send your comments and suggestions preferably to
the Bioperl mailing list. Your participation is much appreciated.
bioperl-l@bioperl.org - General discussion
http://bioperl.org/wiki/Mailing_lists - About the mailing lists
Please direct usage questions or support issues to the mailing list:
bioperl-l@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.
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:
| AUTHOR - Jason Stajich | Top |
Email jason-at-bioperl.org
Additional contributors names and emails here
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _
| Bio::Tools::Run::Wrapper methods | Top |
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)
Title : save_tempfiles
Usage : $obj->save_tempfiles($newval)
Function:
Returns : value of save_tempfiles
Args : newvalue (optional)
Title : outfile_name
Usage : my $outfile = $codeml->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
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
Title : cleanup
Usage : $codeml->cleanup();
Function: Will cleanup the tempdir directory after a PAML run
Returns : none
Args : none