[Bioperl-l] Error calling alignment method
Jason Stajich
jason.stajich at gmail.com
Fri May 27 19:45:41 UTC 2011
Lorenzo -
The problem is not that $dna_alignment is not defined - that is not
what the error message is saying.
It is saying you can't call 'alignment' on an undefined value
This is the line:
my $kaks_factory->alignment($dna_aln);
Should be
$ks_factory->alignment($dna_aln);
If you star with the simple code in the perldoc you can see how the
steps are intended to be run.
my $codeml = Bio::Tools::Run::Phylo::PAML::Codeml->new();
$codeml->alignment($aln);
my ($rc,$parser) = $codeml->run();
my $result = $parser->next_result;
my $MLmatrix = $result->get_MLmatrix();
print "Ka = ", $MLmatrix->[0]->[1]->{'dN'},"\n";
You can also initialize the Codeml object with the alignment directly
my $ks_factory = new Bio::Tools::Run::Phylo::PAML::Codeml(-alignment
=> $dna_aln,
-params => .... ); # as you did before
On May 25, 10:58 am, Lorenzo Carretero Paulet <locar... at upvnet.upv.es>
wrote:
> Hi all,
> I'm trying to create the following subroutine but I get the error message:
> "Can't call method "alignment" on an undefined value at
> /Users/marioafares/Documents/workspace/PlantEvolGen/test.pl line 80,
> <GEN1> line 2."
> which indicates $dna_aln is undefined. However, I manage to print it
> using Dumper, so I guess it is actually defined.
> Can anyone see where the problem is?
> I attach the two files I'm using in the test.
> Thanks in advance,
> Lorenzo
>
> #!/usr/local/bin/perl -w
> use 5.010;
> use strict;
> use Data::Dumper;
> # definition of the environmental variable CLUSTALDIR
> BEGIN {$ENV{CLUSTALDIR} =
> '/Applications/Bioinformatics/clustalw-2.1-macosx/'}
> use Bio::Tools::Run::Alignment::Clustalw;
> use Bio::Align::Utilities qw(aa_to_dna_aln);
>
> BEGIN {$ENV{PAMLDIR} = '/Applications/Bioinformatics/paml44/bin/'}
> use Bio::Tools::Run::Phylo::PAML::Codeml;
>
> my $sequencesfilenameAA =
> "/Users/marioafares/Documents/SequenceDatabase/plaza_public_02_Apr27/plaza_ public_02/BLAST_Parsed_results/PerSpecies/test_vs_test.par.aa.1.fas";
>
> my $sequencesfilenameNT =
> "/Users/marioafares/Documents/SequenceDatabase/plaza_public_02_Apr27/plaza_ public_02/BLAST_Parsed_results/PerSpecies/test_vs_test.par.nt.1.fas";
>
> my $format = 'fasta';
>
> GettingBioperlAlignmentAAtoDNAplusPAMLcalculation
> ($sequencesfilenameAA, $sequencesfilenameNT, $format);
>
> sub GettingBioperlAlignmentAAtoDNAplusPAMLcalculation
> {
> my ( $sequencesfilenameAA, $sequencesfilenameNT, $format, $ktuple,
> $matrix ) = @_;
> my %hashNTseqs = ();
> my $likelihood;
> my $Ks;
> my $Ka;
> my $omega;
> my $factory = Bio::Tools::Run::Alignment::Clustalw->new (); #use
> default parameters in here
> my $pep_aln = $factory->align($sequencesfilenameAA);
>
> my $inseq = Bio::SeqIO->new(-file => "<$sequencesfilenameNT",
> -format => $format );
> while (my $seq = $inseq->next_seq)
> {
> my $seq_id = $seq->display_id();
> $hashNTseqs{$seq_id} = $seq;
> }
> my $dna_aln = aa_to_dna_aln($pep_aln, \%hashNTseqs);
> say Dumper \%hashNTseqs;
> say Dumper $dna_aln;
> ###########################################################
> #my $codeml_runs = 5;
> my $ks_factory = new Bio::Tools::Run::Phylo::PAML::Codeml
> ( -params => {
> #'verbose' => 0,
> #'noisy' => 0,
> 'runmode' => -2,
> 'seqtype' => 1,
> #'model' => 0,
> #'NSsites' => 0,
> #'icode' => 0,
> #'fix_alpha' => 0,
> #'fix_kappa' => 0,
> #'RateAncestor' => 0,
> 'CodonFreq' => 2,
> 'cleandata' => 1,
> 'ndata' => 1
> },
>
> );
>
> my $kaks_factory->alignment($dna_aln);
>
> say "\nCalculating Ks-values of current cluster ...";
>
> # The estimation of the Ks-values is repeated $codeml_runs
> times ...
> # for(my $k=1;$k <= $codeml_runs;$k++)
> # {
> # print "\nCodeml-Run $k:\n\n";
>
> # Ka and Ks-vlaues are calculated using codeml
> my ($rc,$parser) = $kaks_factory->run();
> #$kaks_factory->cleanup();
> # If the calculation was succsessful ...
> # if($rc != 0)
> # {
> my $result = $parser->next_result;#not sure what it
> does here
> #my $NGmatrix = $result->get_MLmatrix();
> my $MLmatrix = $result->get_MLmatrix();
> $likelihood = $MLmatrix->[0]->[1]->{'lnL'};
> $Ks = $MLmatrix->[0]->[1]->{'dS'};
> $Ka = $MLmatrix->[0]->[1]->{'dA'};
> $omega = $MLmatrix->[0]->[1]->{'omega'};
> print " likelihood = $likelihood, Ka = $Ka, Ks =
> $Ks, Ka/Ks = $omega\n";
> # }
> # else # If an error occured during the Ks-calculation ...
> # {
> # return (-1);
> # }
> # }
> return ( $likelihood, $Ks, $Ka, $omega );
> }
>
> --
> *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
> Lorenzo Carretero Paulet
> Institute for Plant Molecular and Cell Biology - IBMCP (CSIC-UPV)
> Integrative Systems Biology Group
> C/ Ingeniero Fausto Elio s/n.
> 46022 Valencia, Spain
>
> Phone: +34 963879934
> Fax: +34 963877859
> e-mail:locar... at upvnet.upv.es
> *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
>
> test_vs_test.par.nt.1.fas
> 3KViewDownload
>
> test_vs_test.par.aa.1.fas
> 1KViewDownload
>
> _______________________________________________
> Bioperl-l mailing list
> Bioper... at lists.open-bio.orghttp://lists.open-bio.org/mailman/listinfo/bioperl-l
More information about the Bioperl-l
mailing list