File Coverage

blib/lib/Bio/Tools/Phylo/PAML/Result.pm
Criterion Covered Total %
statement 221 266 83.0
branch 96 146 65.7
condition 16 50 32.0
subroutine 47 52 90.3
pod 48 48 100.0
total 428 562 76.1


line stmt bran cond sub pod time code
1             package Bio::Tools::Phylo::PAML::Result;
2             $Bio::Tools::Phylo::PAML::Result::VERSION = '1.7.2';
3 2     2   28 use utf8;
  2         5  
  2         18  
4 2     2   65 use strict;
  2         5  
  2         46  
5 2     2   21 use warnings;
  2         4  
  2         68  
6              
7 2     2   12 use base qw(Bio::Root::Root Bio::AnalysisResultI);
  2         4  
  2         714  
8              
9             # ABSTRACT: A PAML result set object
10             # AUTHOR: Jason Stajich
11             # AUTHOR: Aaron Mackey
12             # OWNER: Jason Stajich
13             # OWNER: Aaron Mackey
14             # LICENSE: Perl_5
15              
16             # AUTHOR: Albert Vilella
17              
18              
19              
20             sub new {
21 20     20 1 99 my($class,@args) = @_;
22              
23 20         87 my $self = $class->SUPER::new(@args);
24 20         686 my ($trees,$mlmat,$seqs,$ngmatrix,
25             $codonpos,$codonfreq,$version,
26             $model,$patterns, $stats,
27             $aafreq, $aadistmat,
28             $aamldistmat,
29             $ntfreqs, $seqfile, $kappa_mat, $alpha_mat,
30             $NSSitesresults,$input_params,$rst,$rst_persite,$rst_trees ) =
31             $self->_rearrange([qw
32             (TREES MLMATRIX
33             SEQS NGMATRIX
34             CODONPOS CODONFREQ
35             VERSION MODEL PATTERNS
36             STATS AAFREQ AADISTMAT
37             AAMLDISTMAT
38             NTFREQ SEQFILE
39             KAPPA_DISTMAT
40             ALPHA_DISTMAT
41             NSSITESRESULTS
42             INPUT_PARAMS
43             RST RST_PERSITE RST_TREES)],
44             @args);
45 20         1725 $self->reset_seqs;
46 20 100       53 if( $trees ) {
47 3 50       18 if(ref($trees) !~ /ARRAY/i ) {
48 0         0 $self->warn("Must provide a valid array reference to initialize trees");
49             } else {
50 3         9 foreach my $t ( @$trees ) {
51 3         13 $self->add_tree($t);
52             }
53             }
54             }
55 20         37 $self->{'_treeiterator'} = 0;
56              
57 20 100       45 if( $mlmat ) {
58 10 50       52 if( ref($mlmat) !~ /ARRAY/i ) {
59 0         0 $self->warn("Must provide a valid array reference to initialize MLmatrix");
60             } else {
61 10         31 $self->set_MLmatrix($mlmat);
62             }
63             }
64 20 100       52 if( $seqs ) {
65 15 50       51 if( ref($seqs) !~ /ARRAY/i ) {
66 0         0 $self->warn("Must provide a valid array reference to initialize seqs");
67             } else {
68 15         42 foreach my $s ( @$seqs ) {
69 80         139 $self->add_seq($s);
70             }
71             }
72             }
73 20 100       51 if( $ngmatrix ) {
74 16 50       61 if( ref($ngmatrix) !~ /ARRAY/i ) {
75 0         0 $self->warn("Must provide a valid array reference to initialize NGmatrix");
76             } else {
77 16         47 $self->set_NGmatrix($ngmatrix);
78             }
79             }
80 20 100       60 if( $codonfreq ) {
81 8 50       36 if( ref($codonfreq) =~ /ARRAY/i ) {
82 8         31 $self->set_CodonFreqs($codonfreq);
83             } else {
84 0         0 $self->warn("Must provide a valid array reference to initialize codonfreq");
85             }
86             }
87              
88 20 100       49 if( $codonpos ) {
89 14 50       44 if( ref($codonpos) !~ /ARRAY/i ) {
90 0         0 $self->warn("Must provide a valid array reference to initialize codonpos");
91             } else {
92 14         84 $self->set_codon_pos_basefreq(@$codonpos);
93             }
94             }
95              
96 20 100       82 $self->version($version) if defined $version;
97 20 50       79 $self->seqfile($seqfile) if defined $seqfile;
98 20 100       78 $self->model($model) if defined $model;
99 20 100       44 if( defined $patterns ) {
100 18 50       55 if( ref($patterns) =~ /HASH/i ) {
101 18         41 $self->patterns($patterns);
102             } else {
103 0         0 $self->warn("Must provide a valid array reference to initialize patterns");
104             }
105             }
106              
107 20         50 $self->{'_aafreqs'} = {};
108 20 100       52 if( $aafreq ) {
109 2 50       7 if( ref($aafreq) =~ /HASH/i ) {
110 2         5 $self->set_AAFreqs($aafreq);
111             } else {
112 0         0 $self->warn("Must provide a valid hash reference to initialize aafreq");
113             }
114             }
115 20 100       58 if( $stats ) {
116 4 50       14 if( ref($stats) =~ /HASH/i ) {
117 4         49 while( my ($stat,$val) = each %$stats) {
118 11         24 $self->add_stat($stat,$val);
119             }
120             } else {
121 0         0 $self->warn("Must provide a valid hash reference initialize stats");
122             }
123             }
124 20 100       45 $self->set_AADistMatrix($aadistmat) if defined $aadistmat;
125 20 100       43 $self->set_AAMLDistMatrix($aamldistmat) if defined $aamldistmat;
126              
127 20 100       45 if( defined $NSSitesresults ) {
128 5 50       27 if( ref($NSSitesresults) !~ /ARRAY/i ) {
129 0         0 $self->warn("expected an arrayref for -NSSitesresults");
130             } else {
131 5         12 foreach my $m ( @$NSSitesresults ) {
132 9         22 $self->add_NSSite_result($m);
133             }
134             }
135             }
136              
137 20         35 $self->{'_ntfreqs'} = {};
138 20 100       43 if( $ntfreqs ) {
139 2 50       8 if( ref($ntfreqs) =~ /HASH/i ) {
140 2         5 $self->set_NTFreqs($ntfreqs);
141             } else {
142 0         0 $self->warn("Must provide a valid hash reference to initialize ntfreq");
143             }
144             }
145              
146 20 100       42 if( $kappa_mat ) {
147 2         8 $self->set_KappaMatrix($kappa_mat);
148             }
149 20 100       36 if( $alpha_mat ) {
150 2         9 $self->set_AlphaMatrix($alpha_mat);
151             }
152              
153 20 100       34 if( $input_params ) {
154 8 50       27 if( ref($input_params) !~ /HASH/i ) {
155 0         0 $self->warn("Must provide a valid hash object for input_params\n");
156             } else {
157 8         38 while( my ($p,$v) = each %$input_params ) {
158 10         35 $self->set_input_parameter($p,$v);
159             }
160             }
161              
162             }
163 20         68 $self->reset_rst_seqs;
164 20 100       46 if( $rst ) {
165 1 50       5 if( ref($rst) =~ /ARRAY/i ) {
166 1         3 for ( @$rst ) {
167 20         29 $self->add_rst_seq($_);
168             }
169             } else {
170 0         0 $self->warn("Need a valid array ref for -rst option\n");
171             }
172             }
173 20 100       45 if( defined $rst_persite ) {
174 1         4 $self->set_rst_persite($rst_persite);
175             }
176 20         59 $self->reset_rst_trees;
177 20 100       42 if( $rst_trees ) {
178 1 50       6 if( ref($rst_trees) =~ /ARRAY/i ) {
179 1         20 for ( @$rst_trees ) {
180 1         4 $self->add_rst_tree($_);
181             }
182             } else {
183 0         0 $self->warn("Need a valid array ref for -rst_trees option\n");
184             }
185             }
186              
187 20         196 return $self;
188             }
189              
190              
191             sub next_tree{
192 0     0 1 0 my ($self,@args) = @_;
193 0   0     0 return $self->{'_trees'}->[$self->{'_treeiterator'}++] || undef;
194             }
195              
196              
197             sub get_trees{
198 2     2 1 54 my ($self) = @_;
199 2 50       4 return @{$self->{'_trees'} || []};
  2         12  
200             }
201              
202              
203             sub rewind_tree_iterator {
204 0     0 1 0 shift->{'_treeiterator'} = 0;
205             }
206              
207              
208             sub add_tree{
209 3     3 1 8 my ($self,$tree) = @_;
210 3 50 33     32 if( $tree && ref($tree) && $tree->isa('Bio::Tree::TreeI') ) {
      33        
211 3         6 push @{$self->{'_trees'}},$tree;
  3         10  
212             }
213 3         7 return scalar @{$self->{'_trees'}};
  3         9  
214             }
215              
216              
217              
218             sub set_MLmatrix{
219 10     10 1 31 my ($self,$mat) = @_;
220 10 50       23 return unless ( defined $mat );
221 10 50       38 if( ref($mat) !~ /ARRAY/i ) {
222 0         0 $self->warn("Did not provide a valid 2D Array reference for set_MLmatrix");
223 0         0 return;
224             }
225 10         35 $self->{'_mlmatrix'} = $mat;
226             }
227              
228              
229             sub get_MLmatrix{
230 8     8 1 1215 my ($self,@args) = @_;
231 8         110 return $self->{'_mlmatrix'};
232             }
233              
234              
235             sub set_NGmatrix{
236 16     16 1 41 my ($self,$mat) = @_;
237 16 50       36 return unless ( defined $mat );
238 16 50       49 if( ref($mat) !~ /ARRAY/i ) {
239 0         0 $self->warn("Did not provide a valid 2D Array reference for set_NGmatrix");
240 0         0 return;
241             }
242 16         40 $self->{'_ngmatrix'} = $mat;
243             }
244              
245              
246             sub get_NGmatrix{
247 9     9 1 38 my ($self,@args) = @_;
248 9         47 return $self->{'_ngmatrix'};
249             }
250              
251              
252              
253             sub add_seq{
254 80     80 1 120 my ($self,$seq) = @_;
255 80 50       146 if( $seq ) {
256 80 50       195 unless( $seq->isa("Bio::PrimarySeqI") ) {
257 0         0 $self->warn("Must provide a valid Bio::PrimarySeqI to add_seq");
258 0         0 return;
259             }
260 80         93 push @{$self->{'_seqs'}},$seq;
  80         179  
261             }
262              
263             }
264              
265              
266             sub reset_seqs{
267 20     20 1 41 my ($self) = @_;
268 20         50 $self->{'_seqs'} = [];
269             }
270              
271              
272             sub get_seqs{
273 5     5 1 2236 my ($self) = @_;
274 5         8 return @{$self->{'_seqs'}};
  5         18  
275             }
276              
277              
278             sub set_codon_pos_basefreq {
279 14     14 1 36 my ($self,@codonpos) = @_;
280 14 50       39 if( scalar @codonpos != 3 ) {
281 0         0 $self->warn("invalid array to set_codon_pos_basefreq, must be an array of length 3");
282 0         0 return;
283             }
284 14         29 foreach my $pos ( @codonpos ) {
285 42 50 33     178 if( ref($pos) !~ /HASH/i ||
286             ! exists $pos->{'A'} ) {
287 0         0 $self->warn("invalid array to set_codon_pos_basefreq, must be an array with hashreferences keyed on DNA bases, C,A,G,T");
288             }
289             }
290 14         38 $self->{'_codonposbasefreq'} = [@codonpos];
291             }
292              
293              
294             sub get_codon_pos_basefreq{
295 1     1 1 7274 my ($self) = @_;
296 1         2 return @{$self->{'_codonposbasefreq'}};
  1         5  
297             }
298              
299              
300             sub version{
301 24     24 1 43 my $self = shift;
302 24 100       75 $self->{'_version'} = shift if @_;
303 24         71 return $self->{'_version'};
304             }
305              
306              
307             sub seqfile{
308 20     20 1 32 my $self = shift;
309 20 50       61 $self->{'_seqfile'} = shift if @_;
310 20         36 return $self->{'_seqfile'};
311             }
312              
313              
314             sub model{
315 27     27 1 2760 my $self = shift;
316              
317 27 100       71 return $self->{'_model'} = shift if @_;
318 9         53 return $self->{'_model'};
319             }
320              
321              
322              
323             sub patterns{
324 20     20 1 47 my $self = shift;
325 20 100       58 return $self->{'_patterns'} = shift if @_;
326 2         7 return $self->{'_patterns'};
327             }
328              
329              
330             sub set_AAFreqs{
331 2     2 1 5 my ($self,$aafreqs) = @_;
332              
333 2 50 33     19 if( $aafreqs && ref($aafreqs) =~ /HASH/i ) {
334 2         4 foreach my $seqname ( keys %{$aafreqs} ) {
  2         9  
335 13         26 $self->{'_aafreqs'}->{$seqname} = $aafreqs->{$seqname};
336             }
337             }
338             }
339              
340              
341             sub get_AAFreqs{
342 6     6 1 3424 my ($self,$seqname) = @_;
343 6 100       14 if( $seqname ) {
344 5   50     45 return $self->{'_aafreqs'}->{$seqname} || {};
345             } else {
346 1         6 return $self->{'_aafreqs'};
347             }
348             }
349              
350              
351             sub set_NTFreqs{
352 2     2 1 6 my ($self,$freqs) = @_;
353              
354 2 50 33     9 if( $freqs && ref($freqs) =~ /HASH/i ) {
355 2         4 foreach my $seqname ( keys %{$freqs} ) {
  2         7  
356 8         14 $self->{'_ntfreqs'}->{$seqname} = $freqs->{$seqname};
357             }
358             }
359             }
360              
361              
362             sub get_NTFreqs{
363 1     1 1 1387 my ($self,$seqname) = @_;
364 1 50       3 if( $seqname ) {
365 0   0     0 return $self->{'_ntfreqs'}->{$seqname} || {};
366             } else {
367 1         3 return $self->{'_ntfreqs'};
368             }
369             }
370              
371              
372             sub add_stat{
373 11     11 1 23 my ($self,$stat,$value) = @_;
374 11 50 33     47 return if( ! defined $stat || !defined $value );
375 11         22 $self->{'_stats'}->{$stat} = $value;
376 11         31 return;
377             }
378              
379              
380             sub get_stat{
381 8     8 1 32 my ($self,$statname) = @_;
382 8         36 return $self->{'_stats'}->{$statname};
383             }
384              
385              
386             sub get_stat_names{
387 1     1 1 1214 my ($self) = @_;
388 1 50       2 return keys %{$self->{'_stats'} || {}};
  1         10  
389             }
390              
391              
392             sub get_AADistMatrix{
393 2     2 1 5 my $self = shift;
394 2         9 return $self->{'_AADistMatix'};
395             }
396              
397              
398             sub set_AADistMatrix{
399 2     2 1 3 my ($self,$d) = @_;
400 2 50 33     28 if( ! $d ||
      33        
401             ! ref($d) ||
402             ! $d->isa('Bio::Matrix::PhylipDist') ) {
403 0         0 $self->warn("Must provide a valid Bio::Matrix::MatrixI for set_AADistMatrix");
404             }
405 2         5 $self->{'_AADistMatix'} = $d;
406 2         4 return;
407             }
408              
409              
410             sub get_AAMLDistMatrix{
411 1     1 1 1102 my $self = shift;
412 1         3 return $self->{'_AAMLDistMatix'};
413             }
414              
415              
416             sub set_AAMLDistMatrix{
417 1     1 1 2 my ($self,$d) = @_;
418 1 50 33     20 if( ! $d ||
      33        
419             ! ref($d) ||
420             ! $d->isa('Bio::Matrix::PhylipDist') ) {
421 0         0 $self->warn("Must provide a valid Bio::Matrix::MatrixI for set_AAMLDistMatrix");
422             }
423 1         4 $self->{'_AAMLDistMatix'} = $d;
424 1         1 return;
425             }
426              
427              
428             sub add_NSSite_result{
429 9     9 1 22 my ($self,$model) = @_;
430 9 50       19 if( defined $model ) {
431 9         13 push @{$self->{'_nssiteresult'}}, $model;
  9         19  
432             }
433 9         19 return scalar @{$self->{'_nssiteresult'}};
  9         20  
434             }
435              
436              
437             sub get_NSSite_results{
438 5     5 1 5730 my ($self) = @_;
439 5 50       9 return @{$self->{'_nssiteresult'} || []};
  5         21  
440             }
441              
442              
443             sub set_CodonFreqs{
444 8     8 1 18 my $self = shift;
445              
446 8 50       31 return $self->{'_codonfreqs'} = shift if @_;
447 0         0 return $self->{'_codonfreqs'};
448             }
449              
450              
451             sub get_CodonFreqs{
452 0     0 1 0 my ($self) = @_;
453 0 0       0 return @{$self->{'_codonfreqs'} || []};
  0         0  
454             }
455              
456              
457              
458             sub get_KappaMatrix{
459 1     1 1 1057 my $self = shift;
460 1         2 return $self->{'_KappaMatix'};
461             }
462              
463              
464             sub set_KappaMatrix{
465 2     2 1 4 my ($self,$d) = @_;
466 2 50 33     15 if( ! $d ||
      33        
467             ! ref($d) ||
468             ! $d->isa('Bio::Matrix::PhylipDist') ) {
469 0         0 $self->warn("Must provide a valid Bio::Matrix::MatrixI for set_NTDistMatrix");
470             }
471 2         4 $self->{'_KappaMatix'} = $d;
472 2         4 return;
473             }
474              
475              
476              
477             sub get_AlphaMatrix{
478 1     1 1 1531 my $self = shift;
479 1         3 return $self->{'_AlphaMatix'};
480             }
481              
482              
483             sub set_AlphaMatrix{
484 2     2 1 6 my ($self,$d) = @_;
485 2 50 33     14 if( ! $d ||
      33        
486             ! ref($d) ||
487             ! $d->isa('Bio::Matrix::PhylipDist') ) {
488 0         0 $self->warn("Must provide a valid Bio::Matrix::MatrixI for set_NTDistMatrix");
489             }
490 2         3 $self->{'_AlphaMatix'} = $d;
491 2         3 return;
492             }
493              
494              
495             sub set_input_parameter{
496 10     10 1 23 my ($self,$p,$v) = @_;
497 10 50       23 return unless defined $p;
498 10         41 $self->{'_input_parameters'}->{$p} = $v;
499             }
500              
501              
502             sub get_input_parameters{
503 0     0 1 0 my ($self) = @_;
504 0 0       0 return %{$self->{'_input_parameters'} || {}};
  0         0  
505             }
506              
507              
508             sub reset_input_parameters{
509 0     0 1 0 my ($self) = @_;
510 0         0 $self->{'_input_parameters'} = {};
511             }
512              
513              
514             sub add_rst_seq{
515 20     20 1 32 my ($self,$seq) = @_;
516 20 50       28 if( $seq ) {
517 20 50       38 unless( $seq->isa("Bio::PrimarySeqI") ) {
518 0         0 $self->warn("Must provide a valid Bio::PrimarySeqI to add_rst_seq");
519 0         0 return;
520             }
521 20         22 push @{$self->{'_rstseqs'}},$seq;
  20         37  
522             }
523              
524             }
525              
526              
527             sub reset_rst_seqs{
528 20     20 1 34 my ($self) = @_;
529 20         42 $self->{'_rstseqs'} = [];
530             }
531              
532              
533             sub get_rst_seqs{
534 1     1 1 1449 my ($self) = @_;
535 1 50       2 return @{$self->{'_rstseqs'} || []};
  1         6  
536             }
537              
538              
539              
540             sub add_rst_tree{
541 1     1 1 3 my ($self,$tree) = @_;
542 1 50       3 if( $tree ) {
543 1 50       4 unless( $tree->isa("Bio::Tree::TreeI") ) {
544 0         0 $self->warn("Must provide a valid Bio::Tree::TreeI to add_rst_tree not $tree");
545 0         0 return;
546             }
547 1         3 push @{$self->{'_rsttrees'}},$tree;
  1         4  
548             }
549             }
550              
551              
552             sub reset_rst_trees{
553 20     20 1 46 my ($self) = @_;
554 20         44 $self->{'_rsttrees'} = [];
555             }
556              
557              
558             sub get_rst_trees{
559 1     1 1 1051 my ($self) = @_;
560 1 50       2 return @{$self->{'_rsttrees'} || []};
  1         4  
561             }
562              
563              
564             sub set_rst_persite{
565 1     1 1 3 my $self = shift;
566              
567 1 50       5 return $self->{'_rstpersite'} = shift if @_;
568 0         0 return $self->{'_rstpersite'};
569             }
570              
571              
572             sub get_rst_persite{
573 1     1 1 3813 my ($self) = @_;
574 1   50     7 return $self->{'_rstpersite'} || [];
575             }
576              
577              
578              
579             1;
580              
581             __END__