annotate variant_effect_predictor/Bio/Tools/Phylo/PAML.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # PAML.pm,v 1.3 2002/06/20 18:50:37 amackey Exp
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Tools::Phylo::PAML
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Jason Stajich <jason@bioperl.org>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Jason Stajich, Aaron J Mackey
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::Tools::Phylo::PAML - Parses output from the PAML programs codeml,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 baseml, basemlg, codemlsites and yn00
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 #!/usr/bin/perl -Tw
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 use Bio::Tools::Phylo::PAML;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 # need to specify the output file name (or a fh) (defaults to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 # -file => "codeml.mlc"); also, optionally, the directory in which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # the other result files (rst, 2ML.dS, etc) may be found (defaults
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 # to "./")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $parser = new Bio::Tools::Phylo::PAML
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 (-file => "./results/mlc", -dir => "./results/");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 # get the first/next result; a Bio::Tools::Phylo::PAML::Result object,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 # which isa Bio::SeqAnalysisResultI object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my $result = $parser->next_result();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 # get the sequences used in the analysis; returns Bio::PrimarySeq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # objects (OTU = Operational Taxonomic Unit).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my @otus = $result->get_seqs();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 # codon summary: codon usage of each sequence [ arrayref of {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 # hashref of counts for each codon } for each sequence and the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 # overall sum ], and positional nucleotide distribution [ arrayref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 # of { hashref of frequencies for each nucleotide } for each
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 # sequence and overall frequencies ]:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 my ($codonusage, $ntdist) = $result->get_codon_summary();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 # example manipulations of $codonusage and $ntdist:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 printf "There were %d '%s' codons in the first seq (%s)\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 $codonusage->[0]->{AAA}, 'AAA', $otus[0]->id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 printf "There were %d '%s' codons used in all the sequences\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 $codonusage->[$#{$codonusage}]->{AAA}, 'AAA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 printf "Nucleotide '%c' was present %g of the time in seq %s\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 'A', $ntdist->[1]->{A}, $otus[1]->id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 # get Nei & Gojobori dN/dS matrix:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 my $NGmatrix = $result->get_NGmatrix();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 # get ML-estimated dN/dS matrix, if calculated; this corresponds to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # the runmode = -2, pairwise comparison usage of codeml
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 my $MLmatrix = $result->get_MLmatrix();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 # These matrices are length(@otu) x length(@otu) "strict lower
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 # triangle" 2D-matrices, which means that the diagonal and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 # everything above it is undefined. Each of the defined cells is a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 # hashref of estimates for "dN", "dS", "omega" (dN/dS ratio), "t",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 # "S" and "N". If a ML matrix, "lnL" will also be defined.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 printf "The omega ratio for sequences %s vs %s was: %g\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 $otus[0]->id, $otus[1]->id, $MLmatrix->[0]->[1]->{omega};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 # with a little work, these matrices could also be passed to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 # Bio::Tools::Run::Phylip::Neighbor, or other similar tree-building
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 # method that accepts a matrix of "distances" (using the LOWTRI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 # option):
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 my $distmat = [ map { [ map { $$_{omega} } @$_ ] } @$MLmatrix ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 # for runmode's other than -2, get tree topology with estimated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 # branch lengths; returns a Bio::Tree::TreeI-based tree object with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 # added PAML parameters at each node
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 my $tree = $result->get_tree();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 for my $node ($tree->get_nodes()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 # inspect the tree: the "t" (time) parameter is available via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 # $node->branch_length(); all other branch-specific parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 # ("omega", "dN", etc.) are available via $node->param('omega');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 # get any general model parameters: kappa (the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 # transition/transversion ratio), NSsites model parameters ("p0",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 # "p1", "w0", "w1", etc.), etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 my $params = $result->get_model_params();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 printf "M1 params: p0 = %g\tp1 = %g\n", $params->{p0}, $params->{p1};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 # for NSsites models, obtain arrayrefs of posterior probabilities
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 # for membership in each class for every position; probabilities
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 # correspond to classes w0, w1, ... etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 my @probs = $result->get_posteriors();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 # find, say, positively selected sites!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 if ($params->{w2} > 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 for (my $i = 0; $i < @probs ; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 if ($probs[$i]->[2] > 0.5) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 # assumes model M1: three w's, w0, w1 and w2 (positive selection)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 printf "position %d: (%g prob, %g omega, %g mean w)\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 $i, $probs[$i]->[2], $params->{w2}, $probs[$i]->[3];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 } else { print "No positive selection found!\n"; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 This module is used to parse the output from the PAML programs codeml,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 baseml, basemlg, codemlsites and yn00. You can use the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 Bio::Tools::Run::Phylo::PAML::* modules to actually run some of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 PAML programs, but this module is only useful to parse the output.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 =head1 AUTHOR - Jason Stajich, Aaron Mackey
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Email jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Email amackey@virginia.edu
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 =head1 TODO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 check output from pre 1.12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 package Bio::Tools::Phylo::PAML;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 # Object preamble - inherits from Bio::Root::Root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 use Bio::AnalysisParserI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 use Bio::Root::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 @ISA = qw(Bio::Root::Root Bio::Root::IO Bio::AnalysisParserI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 # other objects used:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 use IO::String;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 use Bio::TreeIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 use Bio::Tools::Phylo::PAML::Result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 use Bio::PrimarySeq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 Usage : my $obj = new Bio::Tools::Phylo::PAML(%args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Function: Builds a new Bio::Tools::Phylo::PAML object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Returns : Bio::Tools::Phylo::PAML
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Args : Hash of options: -file, -fh, -dir
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 -file (or -fh) should contain the contents of the PAML
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 outfile; -dir is the (optional) name of the directory in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 which the PAML program was run (and includes other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 PAML-generated files from which we can try to gather data)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 my ($class, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $self->_initialize_io(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my ($dir) = $self->_rearrange([qw(DIR)], @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 $self->{_dir} = $dir if defined $dir;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =head2 Implement Bio::AnalysisParserI interface
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 =head2 next_result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 Title : next_result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Usage : $result = $obj->next_result();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Function: Returns the next result available from the input, or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 undef if there are no more results.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 Returns : a Bio::Tools::Phylo::PAML::Result object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 sub next_result {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 my %data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 # get the various codon and other sequence summary data, if necessary:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $self->_parse_summary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 unless ($self->{'_summary'} && !$self->{'_summary'}->{'multidata'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 # OK, depending on seqtype and runmode now, one of a few things can happen:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 my $seqtype = $self->{'_summary'}->{'seqtype'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 if ($seqtype eq 'CODONML' || $seqtype eq 'AAML') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 while ($_ = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 if ($seqtype eq 'CODONML' &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 m/^pairwise comparison, codon frequencies:/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 # runmode = -2, CODONML
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 %data = $self->_parse_PairwiseCodon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 } elsif ($seqtype eq 'AAML' && m/^ML distances of aa seqs\.$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 # runmode = -2, AAML
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 -text => "Pairwise AA not yet implemented!"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 # $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 # %data = $self->_parse_PairwiseAA;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 # last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 } elsif (m/^Model \d+: /o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 # NSSitesBatch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 -text => "NSsitesBatch not yet implemented!"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 # $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 # %data = $self->_parse_NSsitesBatch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 # last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 } elsif (m/^TREE/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 # runmode = 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 %data = $self->_parse_Forestry;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 } elsif (m/Heuristic tree search by stepwise addition$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 # runmode = 3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 -text => "StepwiseAddition not yet implemented!"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 # $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 # %data = $self->_parse_StepwiseAddition;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 # last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 } elsif (m/Heuristic tree search by NNI perturbation$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 # runmode = 4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 -text => "NNI Perturbation not yet implemented!"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 # $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 # %data = $self->_parse_Perturbation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 # last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 } elsif (m/^stage 0:/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 # runmode = (1 or 2)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 -text => "StarDecomposition not yet implemented!"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 # $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 # %data = $self->_parse_StarDecomposition;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 # last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 } elsif ($seqtype eq 'BASEML') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 } elsif ($seqtype eq 'YN00') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 while ($_ = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 if( m/^Estimation by the method/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 $self->_pushback($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 %data = $self->_parse_YN_Pairwise;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 if (%data) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $data{'-version'} = $self->{'_summary'}->{'version'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 $data{'-seqs'} = $self->{'_summary'}->{'seqs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 $data{'-patterns'} = $self->{'_summary'}->{'patterns'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $data{'-ngmatrix'} = $self->{'_summary'}->{'ngmatrix'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $data{'-codonpos'} = $self->{'_summary'}->{'codonposition'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $data{'-codonfreq'} = $self->{'_summary'}->{'codonfreqs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 return new Bio::Tools::Phylo::PAML::Result %data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 sub _parse_summary {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 # Depending on whether verbose > 0 or not, and whether the result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 # set comes from a multi-data run, the first few lines could be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 # various things; we're going to throw away any sequence data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 # here, since we'll get it later anyways
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 # multidata ? : \n\nData set 1\n
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 # verbose ? : cleandata ? : \nBefore deleting alignment gaps. \d sites\n
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 # [ sequence printout ]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 # \nAfter deleting gaps. \d sites\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 # : [ sequence printout ]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 # CODONML (in paml 3.12 February 2002) <<-- what we want to see!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 my $SEQTYPES = qr( (?: (?: CODON | AA | BASE | CODON2AA ) ML ) | YN00 )x;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 while ($_ = $self->_readline) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 if ( m/^($SEQTYPES) \s+ # seqtype: CODONML, AAML, BASEML, CODON2AAML, YN00, etc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 (?: \(in \s+ ([^\)]+?) \s* \) \s* )? # version: "paml 3.12 February 2002"; not present < 3.1 or YN00
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 (\S+) \s* # tree filename
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 (?: (.+?) )? # model description (not there in YN00)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 \s* $ # trim any trailing space
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 /ox
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 @{$self->{_summary}}{qw(seqtype version treefile model)} = ($1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 $2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 $3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 $4);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 } elsif (m/^Data set \d$/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 $self->{'_summary'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 $self->{'_summary'}->{'multidata'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 unless (defined $self->{'_summary'}->{'seqtype'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 -text => 'Unknown format of PAML output');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my $seqtype = $self->{'_summary'}->{'seqtype'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 $self->debug( "seqtype is $seqtype\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 if ($seqtype eq "CODONML") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 $self->_parse_inputparams(); # settings from the .ctl file that get printed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 $self->_parse_patterns(); # codon patterns - not very interesting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 $self->_parse_seqs(); # the sequences data used for analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 $self->_parse_codoncts(); # counts and distributions of codon/nt usage
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 $self->_parse_codon_freqs(); # codon frequencies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 $self->_parse_distmat(); # NG distance matrices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 } elsif ($seqtype eq "AAML") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 -text => 'AAML parsing not yet implemented!');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 } elsif ($seqtype eq "CODON2AAML") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 -text => 'CODON2AAML parsing not yet implemented!');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 } elsif ($seqtype eq "BASEML") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 -text => 'BASEML parsing not yet implemented!');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 } elsif ($seqtype eq "YN00") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 $self->_parse_codon_freqs();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $self->_parse_codoncts();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 $self->_parse_distmat(); # NG distance matrices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 $self->throw( -class => 'Bio::Root::NotImplemented',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 -text => 'Unknown seqtype, not yet implemented!',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 -value => $seqtype
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 sub _parse_inputparams {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 sub _parse_codon_freqs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my ($okay,$done) = (0,0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 while( defined($_ = $self->_readline ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 if( /^Nei/ ) { $self->_pushback($_); last }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 last if( $done);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 next if ( /^\s+/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 next unless($okay || /^Codon position x base \(3x4\) table\, overall/ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $okay = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 if( s/^position\s+(\d+):\s+// ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 my $pos = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 s/\s+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 my @bases = split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 foreach my $str ( @bases ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 my ( $base,$freq) = split(/:/,$str,2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $self->{'_summary'}->{'codonposition'}->[$pos-1]->{$base} = $freq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $done = 1 if $pos == 3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 $done = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 while( defined( $_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 if( /^Nei\s\&\sGojobori/ ) { $self->_pushback($_); last }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 last if ( $done );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 if( /^Codon frequencies under model, for use in evolver:/ ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 while( defined( $_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 last if( /^\s+$/ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 s/^\s+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 s/\s+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 push @{$self->{'_summary'}->{'codonfreqs'}},[split];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 $done = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 sub _parse_patterns {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 my ($patternct,@patterns,$ns,$ls);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 while( defined($_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 if( $patternct ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 # last unless ( @patterns == $patternct );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 last if( /^\s+$/ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 s/^\s+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 push @patterns, split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 } elsif( /^ns\s+\=\s*(\d+)\s+ls\s+\=\s*(\d+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 ($ns,$ls) = ($1,$2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 } elsif( /^\# site patterns \=\s*(\d+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 $patternct = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 # $self->debug("Unknown line: $_");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 $self->{'_summary'}->{'patterns'} = { -patterns => \@patterns,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 -ns => $ns,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 -ls => $ls};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 sub _parse_seqs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 # this should in fact be packed into a Bio::SimpleAlign object instead of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 # an array but we'll stay with this for now
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 my (@firstseq,@seqs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 while( defined ($_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 last if( /^\s+$/ && @seqs > 0 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 next if ( /^\s+$/ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 next if( /^\d+\s+$/ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 my ($name,$seqstr) = split(/\s+/,$_,2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 $seqstr =~ s/\s+//g; # remove whitespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 unless( @firstseq) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 @firstseq = split(//,$seqstr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 push @seqs, new Bio::PrimarySeq(-id => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 -seq => $seqstr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 my $i = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 my $v;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 while(($v = index($seqstr,'.',$i)) >= $i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 # replace the '.' with the correct seq from the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 substr($seqstr,$v,1,$firstseq[$v]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 $i = $v;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 $self->debug( "adding seq $seqstr\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 push @seqs, new Bio::PrimarySeq(-id => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 -seq => $seqstr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $self->{'_summary'}->{'seqs'} = \@seqs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 sub _parse_codoncts { }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 sub _parse_distmat {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 my @results;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 while( defined ($_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 next if/^\s+$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 return unless (/^Nei\s*\&\s*Gojobori/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 # skip the next 3 lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 if( $self->{'_summary'}->{'seqtype'} eq 'CODONML' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 $self->_readline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 $self->_readline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 $self->_readline;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 my $seqct = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 while( defined ($_ = $self->_readline ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 last if( /^\s+$/ && exists $self->{'_summary'}->{'ngmatrix'} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 next if( /^\s+$/ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 chomp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 my ($seq,$rest) = split(/\s+/,$_,2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 my $j = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 while( $rest =~
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 /(\-?\d+(\.\d+)?)\s*\(\-?(\d+(\.\d+)?)\s+(\-?\d+(\.\d+)?)\)/g ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 $self->{'_summary'}->{'ngmatrix'}->[$j++]->[$seqct] =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 { 'omega' => $1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 'dN' => $3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 'dS' => $5 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 $seqct++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 sub _parse_PairwiseCodon {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 my @result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 my ($a,$b,$log,$model);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 while( defined( $_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 if( /^pairwise comparison, codon frequencies\:\s*(\S+)\./) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 $model = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 } elsif( /^(\d+)\s+\((\S+)\)\s+\.\.\.\s+(\d+)\s+\((\S+)\)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 ($a,$b) = ($1,$3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 } elsif( /^lnL\s+\=\s*(\-?\d+(\.\d+)?)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 $log = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 } elsif( m/^t\=\s*(\d+(\.\d+)?)\s+
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 S\=\s*(\d+(\.\d+)?)\s+
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 N\=\s*(\d+(\.\d+)?)\s+
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 dN\/dS\=\s*(\d+(\.\d+)?)\s+
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 dN\=\s*(\d+(\.\d+)?)\s+
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 dS\=\s*(\d+(\.\d+)?)/ox ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 $result[$b-1]->[$a-1] = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 'lnL' => $log,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 't' => $1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 'S' => $3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 'N' => $5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 'omega' => $7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 'dN' => $9,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 'dS' => $11 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 } elsif( /^\s+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 } elsif( /^\s+(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+\.\d+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 $self->debug( "unknown line: $_");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 return ( -mlmatrix => \@result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 sub _parse_YN_Pairwise {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 my @result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 while( defined( $_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 last if( /^seq\.\s+seq\./);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 while( defined( $_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 if( m/^\s+(\d+)\s+ # seq #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 (\d+)\s+ # seq #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 (\d+(\.\d+))\s+ # S
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 (\d+(\.\d+))\s+ # N
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 (\d+(\.\d+))\s+ # t
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 (\d+(\.\d+))\s+ # kappa
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 (\d+(\.\d+))\s+ # omega
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 (\d+(\.\d+))\s+ # dN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 \+\-\s+
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 (\d+(\.\d+))\s+ # dN SE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 (\d+(\.\d+))\s+ # dS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 \+\-\s+
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 (\d+(\.\d+))\s+ # dS SE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 /ox
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 $result[$2-1]->[$1-1] = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 'S' => $3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 'N' => $5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 't' => $7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 'kappa' => $9,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 'omega' => $11,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 'dN' => $13,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 'dN_SE' => $15,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 'dS' => $17,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 'dS_SE' => $19,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 } elsif( /^\s+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 return ( -mlmatrix => \@result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 sub _parse_Forestry {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 my %data = (-trees => []);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 return %data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 # parse the mlc file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 sub _parse_mlc {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 my %data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 while( defined( $_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 $self->debug( "mlc parse: $_");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 # Aaron this is where the parsing should begin
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 # I'll do the Tree objects if you like - I'd do it by building
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 # an IO::String for the the tree data or does it make more
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 # sense to parse this out of a collection of files?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 if( /^TREE/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 # ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 while( defined($_ = $self->_readline) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 if( /^\(/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 my $treestr = new IO::String($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 my $treeio = new Bio::TreeIO(-fh => $treestr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 -format => 'newick');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 # this is very tenative here!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 push @{$self->{'_trees'}}, $treeio->next_tree;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 1;