annotate variant_effect_predictor/Bio/Align/DNAStatistics.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: DNAStatistics.pm,v 1.4 2002/10/22 07:45:10 lapp Exp $
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Align::DNAStatistics
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Jason Stajich <jason@bioperl.org>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Jason Stajich
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15 Bio::Align::DNAStatistics - Calculate some statistics for a DNA alignment
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19 use Bio::Align::DNAStatistics;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20 use Bio::AlignIO;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22 my $stats = new Bio::Align::PairwiseStatistics;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23 my $alignin = new Bio::AlignIO(-format => 'emboss',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24 -file => 't/data/insulin.water');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25 my $jc = $stats->distance($aln, 'Jukes-Cantor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26 foreach my $r ( @$jc ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27 print "\t";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28 foreach my $r ( @$d ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 print "$r\t";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31 print "\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36 This object contains routines for calculating various statistics and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 distances for DNA alignments. The routines are not well tested and do
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38 contain errors at this point. Work is underway to correct them, but
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39 do not expect this code to give you the right answer currently! Use
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 dnadist/distmat in the PHLYIP or EMBOSS packages to calculate the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41 distances.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 =head1 FEEDBACK
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45 =head2 Mailing Lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 User feedback is an integral part of the evolution of this and other
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48 Bioperl modules. Send your comments and suggestions preferably to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 the Bioperl mailing list. Your participation is much appreciated.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51 bioperl-l@bioperl.org - General discussion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52 http://bioperl.org/MailList.shtml - About the mailing lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54 =head2 Reporting Bugs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56 Report bugs to the Bioperl bug tracking system to help us keep track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57 of the bugs and their resolution. Bug reports can be submitted via
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58 email or the web:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60 bioperl-bugs@bioperl.org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61 http://bugzilla.bioperl.org/
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63 =head1 AUTHOR - Jason Stajich
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65 Email jason@bioperl.org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 Describe contact details here
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69 =head1 CONTRIBUTORS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 Additional contributors names and emails here
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73 =head1 APPENDIX
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75 The rest of the documentation details each of the object methods.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76 Internal methods are usually preceded with a _
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81 # Let the code begin...
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84 package Bio::Align::DNAStatistics;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85 use vars qw(@ISA %DNAChanges @Nucleotides %NucleotideIndexes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86 $GapChars $SeqCount $DefaultGapPenalty %DistanceMethods);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88 use Bio::Align::PairwiseStatistics;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 use Bio::Root::Root;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91 BEGIN {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92 $GapChars = '(\.|\-)';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 @Nucleotides = qw(A G T C);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94 $SeqCount = 2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 # these values come from EMBOSS distmat implementation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96 %NucleotideIndexes = ( 'A' => 0,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 'T' => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98 'C' => 2,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 'G' => 3,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 'AT' => 0,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 'AC' => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103 'AG' => 2,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 'CT' => 3,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105 'GT' => 4,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 'CG' => 5,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 # these are wrong now
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109 # 'S' => [ 1, 3],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 # 'W' => [ 0, 4],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111 # 'Y' => [ 2, 3],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112 # 'R' => [ 0, 1],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113 # 'M' => [ 0, 3],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 # 'K' => [ 1, 2],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115 # 'B' => [ 1, 2, 3],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116 # 'H' => [ 0, 2, 3],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117 # 'V' => [ 0, 1, 3],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 # 'D' => [ 0, 1, 2],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 $DefaultGapPenalty = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122 # could put ambiguities here?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 %DNAChanges = ( 'Transversions' => { 'A' => [ 'T', 'C'],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 'T' => [ 'A', 'G'],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 'C' => [ 'A', 'G'],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126 'G' => [ 'C', 'T'],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 },
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128 'Transitions' => { 'A' => [ 'G' ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129 'G' => [ 'A' ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 'C' => [ 'T' ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131 'T' => [ 'C' ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 },
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 %DistanceMethods = ( 'jc|jukes|jukes-cantor' => 'JukesCantor',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135 'f81' => 'F81',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136 'k2|k2p|k80|kimura' => 'Kimura',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137 't92|tamura|tamura92' => 'Tamura',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138 'f84' => 'F84',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 'tajimanei|tajima-nei' => 'TajimaNei' );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 @ISA = qw( Bio::Root::Root Bio::Align::StatisticsI );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 =head2 new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 Title : new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147 Usage : my $obj = new Bio::Align::DNAStatistics();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 Function: Builds a new Bio::Align::DNAStatistics object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149 Returns : Bio::Align::DNAStatistics
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155 sub new {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156 my ($class,@args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157 my $self = $class->SUPER::new(@args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 $self->pairwise_stats( new Bio::Align::PairwiseStatistics());
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 return $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165 =head2 distance
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167 Title : distance
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 Usage : my $distance_mat = $stats->distance(-align => $aln,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 -method => $method);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 Function: Calculates a distance matrix for all pairwise distances of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 sequences in an alignment.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 Returns : Array ref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173 Args : -align => Bio::Align::AlignI object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174 -method => String specifying specific distance method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175 (implementing class may assume a default)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179 sub distance{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 my ($self,@args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 my ($aln,$method) = $self->_rearrange([qw(ALIGN METHOD)],@args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182 if( ! defined $aln || ! ref ($aln) || ! $aln->isa('Bio::Align::AlignI') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 $self->throw("Must supply a valid Bio::Align::AlignI for the -align parameter in distance");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185 $method ||= 'JukesCantor';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186 foreach my $m ( keys %DistanceMethods ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187 if(defined $m && $method =~ /$m/i ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 my $mtd = "D_$DistanceMethods{$m}";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189 return $self->$mtd($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192 $self->warn("Unrecognized distance method $method must be one of [".
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 join(',',$self->available_distance_methods())."]");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 return undef;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197 =head2 available_distance_methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 Title : available_distance_methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200 Usage : my @methods = $stats->available_distance_methods();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201 Function: Enumerates the possible distance methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202 Returns : Array of strings
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208 sub available_distance_methods{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 my ($self,@args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 return values %DistanceMethods;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213 =head2 D - distance methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 =head2 D_JukesCantor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 Title : D_JukesCantor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 Usage : my $d = $stat->D_JukesCantor($aln)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221 Function: Calculates D (pairwise distance) between 2 sequences in an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 alignment using the Jukes-Cantor 1 parameter model.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223 Returns : ArrayRef of all pairwise distances of all sequence pairs in the alignment
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 Args : Bio::Align::AlignI of DNA sequences
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225 double - gap penalty
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230 sub D_JukesCantor{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 my ($self,$aln,$gappenalty) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232 return 0 unless $self->_check_arg($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233 $gappenalty = $DefaultGapPenalty unless defined $gappenalty;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 # ambiguities ignored at this point
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 my (@seqs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237 foreach my $seq ( $aln->each_seq) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 push @seqs, [ split(//,uc $seq->seq())];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240 my $seqct = scalar @seqs;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241 my @DVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 for(my $i = 1; $i <= $seqct; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 for( my $j = $i+1; $j <= $seqct; $j++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 my ($matrix,$pfreq,$gaps) = $self->_build_nt_matrix($seqs[$i-1],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245 $seqs[$j-1]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246 # just want diagonals
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 my $m = ( $matrix->[0]->[0] + $matrix->[1]->[1] +
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 $matrix->[2]->[2] + $matrix->[3]->[3] );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249 my $D = 1 - ( $m / ($aln->length - $gaps + ( $gaps * $gappenalty)));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250 my $d = (- 3 / 4) * log ( 1 - (4 * $D/ 3));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 $DVals[$i]->[$j] = $DVals[$j]->[$i] = $d;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254 return \@DVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 =head2 D_F81
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 Title : D_F81
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260 Usage : my $d = $stat->D_F81($aln)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 Function: Calculates D (pairwise distance) between 2 sequences in an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262 alignment using the Felsenstein 1981 distance model.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 Returns : ArrayRef of a 2d array of all pairwise distances in the alignment
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264 Args : Bio::Align::AlignI of DNA sequences
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269 sub D_F81{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271 return 0 unless $self->_check_arg($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 $self->throw("This isn't implemented yet - sorry");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 # M Kimura, J. Mol. Evol., 1980, 16, 111.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278 =head2 D_Kimura
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280 Title : D_Kimura
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281 Usage : my $d = $stat->D_Kimura($aln)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282 Function: Calculates D (pairwise distance) between 2 sequences in an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283 alignment using the Kimura 2 parameter model.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284 Returns : ArrayRef of pairwise distances between all sequences in alignment
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285 Args : Bio::Align::AlignI of DNA sequences
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290 sub D_Kimura{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292 return 0 unless $self->_check_arg($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 my $seqct = $aln->no_sequences;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294 my @KVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295 for( my $i = 1; $i <= $seqct; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296 for( my $j = $i+1; $j <= $seqct; $j++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297 my $pairwise = $aln->select_noncont($i,$j);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298 my $L = $self->pairwise_stats->number_of_comparable_bases($pairwise);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 my $P = $self->transitions($pairwise) / $L;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300 my $Q = $self->transversions($pairwise) / $L;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302 my $a = 1 / ( 1 - (2 * $P) - $Q);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303 my $b = 1 / ( 1 - 2 * $Q );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304 my $K = (1/2) * log ( $a ) + (1/4) * log($b);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305 $KVals[$i]->[$j] = $K;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306 $KVals[$j]->[$i] = $K;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309 return \@KVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 # K Tamura, Mol. Biol. Evol. 1992, 9, 678.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314 =head2 D_Tamura
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316 Title : D_Tamura
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 Usage :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318 Function:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325 sub D_Tamura{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327 my $seqct = $aln->no_sequences;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 my @KVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329 for( my $i = 1; $i <= $seqct; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330 for( my $j = $i+1; $j <= $seqct; $j++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333 my $O = 0.25;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334 my $t = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335 my $a = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 my $b = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 my $d = 4 * $O * ( 1 - $O ) * $a * $t + 2 * $b * $t;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340 return $d;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 =head2 D_F84
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 Title : D_F84
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 Usage : my $d = $stat->D_F84($aln)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 Function: Calculates D (pairwise distance) between 2 sequences in an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 alignment using the Felsenstein 1984 distance model.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 Returns : Distance value
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350 Args : Bio::Align::AlignI of DNA sequences
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351 double - gap penalty
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355 sub D_F84{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357 return 0 unless $self->_check_arg($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360 # Tajima and Nei, Mol. Biol. Evol. 1984, 1, 269.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 =head2 D_TajimaNei
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 Title : D_TajimaNei
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365 Usage : my $d = $stat->D_TajimaNei($aln)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366 Function: Calculates D (pairwise distance) between 2 sequences in an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367 alignment using the TajimaNei 1984 distance model.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368 Returns : Distance value
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369 Args : Bio::Align::AlignI of DNA sequences
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374 sub D_TajimaNei{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376 $self->warn("The result from this method is not correct right now");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377 my (@seqs);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378 foreach my $seq ( $aln->each_seq) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379 push @seqs, [ split(//,uc $seq->seq())];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381 my $seqct = scalar @seqs;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382 my @DVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383 for(my $i = 1; $i <= $seqct; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384 for( my $j = $i+1; $j <= $seqct; $j++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 my ($matrix,$pfreq,$gaps) = $self->_build_nt_matrix($seqs[$i-1],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 $seqs[$j-1]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387 my $fij2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388 my $slen = $aln->length - $gaps;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389 for( my $bs = 0; $bs < 4; $bs++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390 my $fi = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391 map {$fi += $matrix->[$bs]->[$_] } 0..3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392 my $fj = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393 map { $fj += $matrix->[$_]->[$bs] } 0..3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394 my $fij = ( $fi && $fj ) ? ($fi + $fj) /( 2 * $slen) : 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395 $fij2 += $fij**2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397 my ($pair,$h) = (0,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398 for( my $bs = 0; $bs < 3; $bs++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399 for( my $bs1 = $bs+1; $bs1 <= 3; $bs1++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400 my $fij = $pfreq->[$pair++] / $slen;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401 if( $fij ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403 my ($ci1,$ci2,$cj1,$cj2) = (0,0,0,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405 map { $ci1 += $matrix->[$_]->[$bs] } 0..3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406 map { $cj1 += $matrix->[$bs]->[$_] } 0..3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 map { $ci2 += $matrix->[$_]->[$bs1] } 0..3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408 map { $cj2 += $matrix->[$bs1]->[$_] } 0..3;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410 $h += ( $fij*$fij / 2 ) /
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411 ( ( ( $ci1 + $cj1 ) / 2 * $slen ) *
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412 ( ( $ci2 + $cj2 ) /2 * $slen )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414 $self->debug( "h is $h fij = $fij ci1 =$ci1 cj1=$cj1 ci2=$ci2 cj2=$cj2\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 # just want diagonals first
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420 my $m = ( $matrix->[0]->[0] + $matrix->[1]->[1] +
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 $matrix->[2]->[2] + $matrix->[3]->[3] );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422 my $D = 1 - ( $m / $slen);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424 my $b = (1-$fij2+(($D**2)/$h)) / 2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425 $self->debug("h is $h fij2 is $fij2 b is $b\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427 my $d = (-1 * $b) * log ( 1 - $D/ $b);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
428 $DVals[$i]->[$j] = $DVals[$j]->[$i] = $d;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
429 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
430 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
431 return \@DVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
432
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
433
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
434 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
435
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
436 # HKY -- HASEGAWA, M., H. KISHINO, and T. YANO. 1985
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
437 # Tamura and Nei 1993?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
438 # GTR?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
439
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
440 =head2 K - sequence substitution methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
441
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
442 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
443
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
444 =head2 K_JukesCantor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
445
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
446 Title : K_JukesCantor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
447 Usage : my $k = $stats->K_JukesCantor($aln)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
448 Function: Calculates K - the number of nucleotide substitutions between
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
449 2 seqs - according to the Jukes-Cantor 1 parameter model
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
450 This only involves the number of changes between two sequences.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
451 Returns : double
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
452 Args : Bio::Align::AlignI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
453
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
454
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
455 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
456
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
457 sub K_JukesCantor{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
458 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
459 return 0 unless $self->_check_arg($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
460 my $seqct = $aln->no_sequences;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
461 my @KVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
462 for( my $i = 1; $i <= $seqct; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
463 for( my $j = $i+1; $j <= $seqct; $j++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
464 my $pairwise = $aln->select_noncont($i,$j);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
465 my $L = $self->pairwise_stats->number_of_comparable_bases($pairwise);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
466 my $N = $self->pairwise_stats->number_of_differences($pairwise);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
467 my $p = $N / $L;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
468 my $K = - ( 3 / 4) * log ( 1 - (( 4 * $p) / 3 ));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
469 $KVals[$i]->[$j] = $KVals[$j]->[$i] = $K;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
470 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
471 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
472 return \@KVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
473 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
474
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
475 =head2 K_TajimaNei
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
476
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
477 Title : K_TajimaNei
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
478 Usage : my $k = $stats->K_TajimaNei($aln)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
479 Function: Calculates K - the number of nucleotide substitutions between
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
480 2 seqs - according to the Kimura 2 parameter model.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
481 This does not assume equal frequencies among all the nucleotides.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
482 Returns : ArrayRef of 2d matrix which contains pairwise K values for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
483 all sequences in the alignment
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
484 Args : Bio::Align::AlignI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
485
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
486 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
487
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
488 sub K_TajimaNei {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
489 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
490 return 0 unless $self->_check_arg($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
491
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
492 my @seqs;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
493 foreach my $seq ( $aln->each_seq) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
494 push @seqs, [ split(//,uc $seq->seq())];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
495 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
496 my @KVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
497 my $L = $self->pairwise_stats->number_of_comparable_bases($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
498 my $seqct = scalar @seqs;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
499 for( my $i = 1; $i <= $seqct; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
500 for( my $j = $i+1; $j <= $seqct; $j++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
501 my (%q,%y);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
502 my ($first,$second) = ($seqs[$i-1],$seqs[$j-1]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
503
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
504 for (my $k = 0;$k<$aln->length; $k++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
505 next if( $first->[$k] =~ /^$GapChars$/ ||
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
506 $second->[$k] =~ /^$GapChars$/);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
507
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
508 $q{$second->[$k]}++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
509 $q{$first->[$k]}++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
510 if( $first->[$k] ne $second->[$k] ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
511 $y{$first->[$k]}->{$second->[$k]}++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
512 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
513 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
514
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
515 my $q_sum = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
516 foreach my $let ( @Nucleotides ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
517 # ct is the number of sequences compared (2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
518 # L is the length of the alignment without gaps
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
519 # $ct * $L = total number of nt compared
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
520 my $avg = $q{$let} / ( $SeqCount * $L );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
521 $q_sum += $avg**2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
522 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
523 my $b1 = 1 - $q_sum;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
524 my $h = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
525 for( my $i = 0; $i <= 2; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
526 for( my $j = $i+1; $j <= 3; $j++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
527 $y{$Nucleotides[$i]}->{$Nucleotides[$j]} ||= 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
528 $y{$Nucleotides[$j]}->{$Nucleotides[$i]} ||= 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
529 my $x = ($y{$Nucleotides[$i]}->{$Nucleotides[$j]} +
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
530 $y{$Nucleotides[$j]}->{$Nucleotides[$i]}) / $L;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
531 $h += ($x ** 2) / ( 2 * $q{$Nucleotides[$i]} *
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
532 $q{$Nucleotides[$j]} );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
533 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
534 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
535 my $N = $self->pairwise_stats->number_of_differences($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
536 my $p = $N / $L;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
537 my $b = ( $b1 + $p ** 2 / $h ) / 2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
538 my $K = - $b * log ( 1 - $p / $b );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
539 $KVals[$i]->[$j] = $KVals[$j]->[$i] = $K;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
540 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
541 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
542 return \@KVals;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
543 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
544
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
545
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
546
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
547 =head2 transversions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
548
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
549 Title : transversions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
550 Usage : my $transversions = $stats->transversion($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
551 Function: Calculates the number of transversions between two sequences in
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
552 an alignment
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
553 Returns : integer
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
554 Args : Bio::Align::AlignI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
555
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
556
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
557 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
558
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
559 sub transversions{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
560 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
561 return $self->_trans_count_helper($aln, $DNAChanges{'Transversions'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
562 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
563
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
564 =head2 transitions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
565
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
566 Title : transitions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
567 Usage : my $transitions = Bio::Align::DNAStatistics->transitions($aln);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
568 Function: Calculates the number of transitions in a given DNA alignment
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
569 Returns : integer representing the number of transitions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
570 Args : Bio::Align::AlignI object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
571
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
572
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
573 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
574
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
575 sub transitions{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
576 my ($self,$aln) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
577 return $self->_trans_count_helper($aln, $DNAChanges{'Transitions'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
578 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
579
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
580
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
581 sub _trans_count_helper {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
582 my ($self,$aln,$type) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
583 return 0 unless( $self->_check_arg($aln) );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
584 if( ! $aln->is_flush ) { $self->throw("must be flush") }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
585 my (@seqs,@tcount);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
586 foreach my $seq ( $aln->get_seq_by_pos(1), $aln->get_seq_by_pos(2) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
587 push @seqs, [ split(//,$seq->seq())];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
588 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
589 my ($first,$second) = @seqs;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
590
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
591 for (my $i = 0;$i<$aln->length; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
592 next if( $first->[$i] =~ /^$GapChars$/ ||
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
593 $second->[$i] =~ /^$GapChars$/);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
594 if( $first->[$i] ne $second->[$i] ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
595 foreach my $nt ( @{$type->{$first->[$i]}} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
596 if( $nt eq $second->[$i]) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
597 $tcount[$i]++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
598 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
599 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
600 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
601 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
602 my $sum = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
603 map { if( $_) { $sum += $_} } @tcount;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
604 return $sum;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
605 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
606
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
607 # this will generate a matrix which records across the row, the number
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
608 # of DNA subst
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
609 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
610 sub _build_nt_matrix {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
611 my ($self,$seqa,$seqb) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
612
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
613
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
614 my $basect_matrix = [ [ qw(0 0 0 0) ], # number of bases that match
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
615 [ qw(0 0 0 0) ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
616 [ qw(0 0 0 0) ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
617 [ qw(0 0 0 0) ] ];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
618 my $gaps = 0; # number of gaps
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
619 my $pfreq = [ qw( 0 0 0 0 0 0)]; # matrix for pair frequency
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
620
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
621 for( my $i = 0; $i < scalar @$seqa; $i++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
622
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
623 my ($ti,$tj) = ($seqa->[$i],$seqb->[$i]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
624 $ti =~ tr/U/T/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
625 $tj =~ tr/U/T/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
626
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
627 if( $ti =~ /^$GapChars$/) { $gaps++; next; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
628 if( $tj =~ /^$GapChars$/) { $gaps++; next }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
629
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
630 my $ti_index = $NucleotideIndexes{$ti};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
631 my $tj_index = $NucleotideIndexes{$tj};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
632
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
633 if( ! defined $ti_index ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
634 print "ti_index not defined for $ti\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
635 next;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
636 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
637
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
638 $basect_matrix->[$ti_index]->[$tj_index]++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
639
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
640 if( $ti ne $tj ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
641 $pfreq->[$NucleotideIndexes{join('',sort ($ti,$tj))}]++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
642 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
643 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
644 return ($basect_matrix,$pfreq,$gaps);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
645 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
646
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
647 sub _check_arg {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
648 my($self,$aln ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
649 if( ! defined $aln || ! $aln->isa('Bio::Align::AlignI') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
650 $self->warn("Must provide a Bio::Align::AlignI compliant object to Bio::Align::DNAStatistics");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
651 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
652 } elsif( $aln->get_seq_by_pos(1)->alphabet ne 'dna' ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
653 $self->warn("Must provide a DNA alignment to Bio::Align::DNAStatistics, you provided a " . $aln->get_seq_by_pos(1)->alphabet);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
654 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
655 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
656 return 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
657 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
658
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
659 =head2 Data Methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
660
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
661 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
662
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
663 =head2 pairwise_stats
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
664
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
665 Title : pairwise_stats
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
666 Usage : $obj->pairwise_stats($newval)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
667 Function:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
668 Returns : value of pairwise_stats
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
669 Args : newvalue (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
670
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
671
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
672 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
673
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
674 sub pairwise_stats{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
675 my ($self,$value) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
676 if( defined $value) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
677 $self->{'_pairwise_stats'} = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
678 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
679 return $self->{'_pairwise_stats'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
680
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
681 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
682
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
683 1;