annotate variant_effect_predictor/Bio/Tools/SeqStats.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 # $Id: SeqStats.pm,v 1.16.2.1 2003/02/28 13:17:06 heikki Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Tools::SeqStats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Peter Schattner
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::SeqStats - Object holding statistics for one particular sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 # build a primary nucleic acid or protein sequence object somehow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 # then build a statistics object from the sequence object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 $seqobj = Bio::PrimarySeq->new(-seq=>'ACTGTGGCGTCAACTG',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 -alphabet=>'dna',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 -id=>'test');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 $seq_stats = Bio::Tools::SeqStats->new(-seq=>$seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # obtain a hash of counts of each type of monomer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 # (ie amino or nucleic acid)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 print "\nMonomer counts using statistics object\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $seq_stats = Bio::Tools::SeqStats->new(-seq=>$seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 $hash_ref = $seq_stats->count_monomers(); # eg for DNA sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 foreach $base (sort keys %$hash_ref) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 print "Number of bases of type ", $base, "= ", %$hash_ref->{$base},"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 # or obtain the count directly without creating a new statistics object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 print "\nMonomer counts without statistics object\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $hash_ref = Bio::Tools::SeqStats->count_monomers($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 foreach $base (sort keys %$hash_ref) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 print "Number of bases of type ", $base, "= ", %$hash_ref->{$base},"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 # obtain hash of counts of each type of codon in a nucleic acid sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 print "\nCodon counts using statistics object\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 $hash_ref = $seq_stats-> count_codons(); # for nucleic acid sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 foreach $base (sort keys %$hash_ref) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 print "Number of codons of type ", $base, "= ", %$hash_ref->{$base},"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 # or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 print "\nCodon counts without statistics object\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 $hash_ref = Bio::Tools::SeqStats->count_codons($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 foreach $base (sort keys %$hash_ref) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 print "Number of codons of type ", $base, "= ", %$hash_ref->{$base},"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 # Obtain the molecular weight of a sequence. Since the sequence may contain
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 # ambiguous monomers, the molecular weight is returned as a (reference to) a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # two element array containing greatest lower bound (GLB) and least upper bound
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 # (LUB) of the molecular weight
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 $weight = $seq_stats->get_mol_wt();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 print "\nMolecular weight (using statistics object) of sequence ", $seqobj->id(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 " is between ", $$weight[0], " and " ,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 $$weight[1], "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 # or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 $weight = Bio::Tools::SeqStats->get_mol_wt($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 print "\nMolecular weight (without statistics object) of sequence ", $seqobj->id(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 " is between ", $$weight[0], " and " ,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 $$weight[1], "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 Bio::Tools::SeqStats is a lightweight object for the calculation of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 simple statistical and numerical properties of a sequence. By
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 "lightweight" I mean that only "primary" sequences are handled by the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 object. The calling script needs to create the appropriate primary
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 sequence to be passed to SeqStats if statistics on a sequence feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 are required. Similarly if a codon count is desired for a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 frame-shifted sequence and/or a negative strand sequence, the calling
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 script needs to create that sequence and pass it to the SeqStats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Nota that nucleotide sequences in bioperl do not strictly separate RNA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 and DNA sequences. By convension, sequences from RNA molecules are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 shown as is they were DNA. Objects are supposed to make the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 distinction when needed. This class is one of the few where this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 distinctions needs to be made. Internally, it changes all Ts into Us
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 before weight and monomer count.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 SeqStats can be called in two distinct manners. If only a single
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 computation is required on a given sequence object, the method can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 called easily using the SeqStats object directly:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 $weight = Bio::Tools::SeqStats->get_mol_wt($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Alternately, if several computations will be required on a given
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 sequence object, an "instance" statistics object can be constructed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 and used for the method calls:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 $seq_stats = Bio::Tools::SeqStats->new($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $monomers = $seq_stats->count_monomers();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 $codons = $seq_stats->count_codons();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 $weight = $seq_stats->get_mol_wt();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 As currently implemented the object can return the following values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 from a sequence:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 =over 3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 =item *
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 The molecular weight of the sequence: get_mol_wt()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 =item *
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 The number of each type of monomer present: count_monomers()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 =item *
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 The number of each codon present in a nucleic acid sequence:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 count_codons()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 For dna (and rna) sequences, single-stranded weights are returned. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 molecular weights are calculated for neutral - ie not ionized -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 nucleic acids. The returned weight is the sum of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 base-sugar-phosphate residues of the chain plus one weight of water to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 to account for the additional OH on the phosphate of the 5' residue
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 and the additional H on the sugar ring of the 3' residue. Note that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 this leads to a difference of 18 in calculated molecular weights
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 compared to some other available programs (eg Informax VectorNTI).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Note that since sequences may contain ambiguous monomers (eg "M"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 meaning "A" or "C" in a nucleic acid sequence), the method get_mol_wt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 returns a two-element array containing the greatest lower bound and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 least upper bound of the molecule. (For a sequence with no ambiguous
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 monomers, the two elements of the returned array will be equal.) The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 method count_codons() handles ambiguous bases by simply counting all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 ambiguous codons together and issuing a warning to that effect.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 =head1 DEVELOPERS NOTES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 Ewan moved it from Bio::SeqStats to Bio::Tools::SeqStats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 Bioperl modules. Send your comments and suggestions preferably to one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 of the Bioperl mailing lists. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 the bugs and their resolution.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 Bug reports can be submitted via email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 =head1 AUTHOR - Peter Schattner
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 Email schattner@alum.mit.edu
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 package Bio::Tools::SeqStats;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 use vars qw(@ISA %Alphabets %Alphabets_strict $amino_weights
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $rna_weights $dna_weights %Weights );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 use Bio::Seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 @ISA = qw(Bio::Root::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 %Alphabets = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 'dna' => [ qw(A C G T R Y M K S W H B V D X N) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 'rna' => [ qw(A C G U R Y M K S W H B V D X N) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 'protein' => [ qw(A R N D C Q E G H I L K M F
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 P S T W X Y V B Z *) ], # sac: added B, Z
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 # SAC: new strict alphabet: doesn't allow any ambiguity characters.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 %Alphabets_strict = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 'dna' => [ qw( A C G T ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 'rna' => [ qw( A C G U ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 'protein' => [ qw(A R N D C Q E G H I L K M F
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 P S T W Y V) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 # IUPAC-IUB SYMBOLS FOR NUCLEOTIDE NOMENCLATURE:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 # Cornish-Bowden (1985) Nucl. Acids Res. 13: 3021-3030.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 # Amino Acid alphabet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 # ------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 # Symbol Meaning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 # ------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my $amino_A_wt = 89.09;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my $amino_C_wt = 121.15;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $amino_D_wt = 133.1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 my $amino_E_wt = 147.13;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 my $amino_F_wt = 165.19;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my $amino_G_wt = 75.07;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 my $amino_H_wt = 155.16;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 my $amino_I_wt = 131.18;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 my $amino_K_wt = 146.19;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 my $amino_L_wt = 131.18;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 my $amino_M_wt = 149.22;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my $amino_N_wt = 132.12;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 my $amino_P_wt = 115.13;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $amino_Q_wt = 146.15;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 my $amino_R_wt = 174.21;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 my $amino_S_wt = 105.09;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 my $amino_T_wt = 119.12;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 my $amino_V_wt = 117.15;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 my $amino_W_wt = 204.22;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 my $amino_Y_wt = 181.19;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $amino_weights = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 'A' => [$amino_A_wt, $amino_A_wt], # Alanine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 'B' => [$amino_N_wt, $amino_D_wt], # Aspartic Acid, Asparagine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 'C' => [$amino_C_wt, $amino_C_wt], # Cystine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 'D' => [$amino_D_wt, $amino_D_wt], # Aspartic Acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 'E' => [$amino_E_wt, $amino_E_wt], # Glutamic Acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 'F' => [$amino_F_wt, $amino_F_wt], # Phenylalanine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 'G' => [$amino_G_wt, $amino_G_wt], # Glycine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 'H' => [$amino_H_wt, $amino_H_wt], # Histidine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 'I' => [$amino_I_wt, $amino_I_wt], # Isoleucine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 'K' => [$amino_K_wt, $amino_K_wt], # Lysine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 'L' => [$amino_L_wt, $amino_L_wt], # Leucine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 'M' => [$amino_M_wt, $amino_M_wt], # Methionine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 'N' => [$amino_N_wt, $amino_N_wt], # Asparagine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 'P' => [$amino_P_wt, $amino_P_wt], # Proline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 'Q' => [$amino_Q_wt, $amino_Q_wt], # Glutamine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 'R' => [$amino_R_wt, $amino_R_wt], # Arginine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 'S' => [$amino_S_wt, $amino_S_wt], # Serine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 'T' => [$amino_T_wt, $amino_T_wt], # Threonine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 'V' => [$amino_V_wt, $amino_V_wt], # Valine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 'W' => [$amino_W_wt, $amino_W_wt], # Tryptophan
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 'X' => [$amino_G_wt, $amino_W_wt], # Unknown
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 'Y' => [$amino_Y_wt, $amino_Y_wt], # Tyrosine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 'Z' => [$amino_Q_wt, $amino_E_wt], # Glutamic Acid, Glutamine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 # Extended Dna / Rna alphabet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 use vars ( qw($C $O $N $H $P $water) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 use vars ( qw($adenine $guanine $cytosine $thymine $uracil));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 use vars ( qw($ribose_phosphate $deoxyribose_phosphate $ppi));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 use vars ( qw($dna_A_wt $dna_C_wt $dna_G_wt $dna_T_wt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $rna_A_wt $rna_C_wt $rna_G_wt $rna_U_wt));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 use vars ( qw($dna_weights $rna_weights %Weights));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 $C = 12.01;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $O = 16.00;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 $N = 14.01;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 $H = 1.01;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 $P = 30.97;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 $water = 18.015;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $adenine = 5 * $C + 5 * $N + 5 * $H;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $guanine = 5 * $C + 5 * $N + 1 * $O + 5 * $H;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 $cytosine = 4 * $C + 3 * $N + 1 * $O + 5 * $H;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $thymine = 5 * $C + 2 * $N + 2 * $O + 6 * $H;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $uracil = 4 * $C + 2 * $N + 2 * $O + 4 * $H;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $ribose_phosphate = 5 * $C + 7 * $O + 9 * $H + 1 * $P; #neutral (unionized) form
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $deoxyribose_phosphate = 5 * $C + 6 * $O + 9 * $H + 1 * $P;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 # the following are single strand molecular weights / base
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $dna_A_wt = $adenine + $deoxyribose_phosphate - $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $dna_C_wt = $cytosine + $deoxyribose_phosphate - $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $dna_G_wt = $guanine + $deoxyribose_phosphate - $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $dna_T_wt = $thymine + $deoxyribose_phosphate - $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $rna_A_wt = $adenine + $ribose_phosphate - $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 $rna_C_wt = $cytosine + $ribose_phosphate - $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $rna_G_wt = $guanine + $ribose_phosphate - $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 $rna_U_wt = $uracil + $ribose_phosphate - $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $dna_weights = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 'A' => [$dna_A_wt,$dna_A_wt], # Adenine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 'C' => [$dna_C_wt,$dna_C_wt], # Cytosine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 'G' => [$dna_G_wt,$dna_G_wt], # Guanine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 'T' => [$dna_T_wt,$dna_T_wt], # Thymine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 'M' => [$dna_C_wt,$dna_A_wt], # A or C
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 'R' => [$dna_A_wt,$dna_G_wt], # A or G
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 'W' => [$dna_T_wt,$dna_A_wt], # A or T
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 'S' => [$dna_C_wt,$dna_G_wt], # C or G
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 'Y' => [$dna_C_wt,$dna_T_wt], # C or T
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 'K' => [$dna_T_wt,$dna_G_wt], # G or T
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 'V' => [$dna_C_wt,$dna_G_wt], # A or C or G
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 'H' => [$dna_C_wt,$dna_A_wt], # A or C or T
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 'D' => [$dna_T_wt,$dna_G_wt], # A or G or T
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 'B' => [$dna_C_wt,$dna_G_wt], # C or G or T
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 'X' => [$dna_C_wt,$dna_G_wt], # G or A or T or C
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 'N' => [$dna_C_wt,$dna_G_wt], # G or A or T or C
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 $rna_weights = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 'A' => [$rna_A_wt,$rna_A_wt], # Adenine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 'C' => [$rna_C_wt,$rna_C_wt], # Cytosine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 'G' => [$rna_G_wt,$rna_G_wt], # Guanine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 'U' => [$rna_U_wt,$rna_U_wt], # Uracil
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 'M' => [$rna_C_wt,$rna_A_wt], # A or C
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 'R' => [$rna_A_wt,$rna_G_wt], # A or G
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 'W' => [$rna_U_wt,$rna_A_wt], # A or U
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 'S' => [$rna_C_wt,$rna_G_wt], # C or G
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 'Y' => [$rna_C_wt,$rna_U_wt], # C or U
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 'K' => [$rna_U_wt,$rna_G_wt], # G or U
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 'V' => [$rna_C_wt,$rna_G_wt], # A or C or G
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 'H' => [$rna_C_wt,$rna_A_wt], # A or C or U
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 'D' => [$rna_U_wt,$rna_G_wt], # A or G or U
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 'B' => [$rna_C_wt,$rna_G_wt], # C or G or U
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 'X' => [$rna_C_wt,$rna_G_wt], # G or A or U or C
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 'N' => [$rna_C_wt,$rna_G_wt], # G or A or U or C
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 %Weights = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 'dna' => $dna_weights,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 'rna' => $rna_weights,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 'protein' => $amino_weights,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 my ($seqobj) = $self->_rearrange([qw(SEQ)],@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 unless ($seqobj->isa("Bio::PrimarySeqI")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $self->throw(" SeqStats works only on PrimarySeqI objects \n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 if ( !defined $seqobj->alphabet || ! defined $Alphabets{$seqobj->alphabet}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 $self->throw("Must have a valid alphabet defined for seq (".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 join(",",keys %Alphabets));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $self->{'_seqref'} = $seqobj;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 # check the letters in the sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 $self->{'_is_strict'} = _is_alphabet_strict($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 =head2 count_monomers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Title : count_monomers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Usage : $rcount = $seq_stats->count_monomers();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 or $rcount = $seq_stats->Bio::Tools::SeqStats->($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Function: Counts the number of each type of monomer (amino acid or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 base) in the sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Ts are counted as Us in RNA sequences.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Returns : Reference to a hash in which keys are letters of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 genetic alphabet used and values are number of occurrences
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 of the letter in the sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Args : None or reference to sequence object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 Throws : Throws an exception if type of sequence is unknown (ie amino
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 or nucleic)or if unknown letter in alphabet. Ambiguous
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 elements are allowed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 sub count_monomers{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 my %count = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 my $seqobj;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 my $_is_strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 my $element = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 my $_is_instance = 1 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 my $self = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 my $object_argument = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 # First we need to determine if the present object is an instance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 # object or if the sequence object has been passed as an argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 if (defined $object_argument) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 $_is_instance = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 # If we are using an instance object...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 if ($_is_instance) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 if ($self->{'_monomer_count'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 return $self->{'_monomer_count'}; # return count if previously calculated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 $_is_strict = $self->{'_is_strict'}; # retrieve "strictness"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 $seqobj = $self->{'_seqref'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 # otherwise...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 $seqobj = $object_argument;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 # Following two lines lead to error in "throw" routine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 $seqobj->isa("Bio::PrimarySeqI") ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 $self->throw(" SeqStats works only on PrimarySeqI objects \n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 # is alphabet OK? Is it strict?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 $_is_strict = _is_alphabet_strict($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 my $alphabet = $_is_strict ? $Alphabets_strict{$seqobj->alphabet} :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 $Alphabets{$seqobj->alphabet} ; # get array of allowed letters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 # convert everything to upper case to be safe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 my $seqstring = uc $seqobj->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 # Since T is used in RichSeq RNA sequences, do conversion locally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 $seqstring =~ s/T/U/g if $seqobj->alphabet eq 'rna';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 # For each letter, count the number of times it appears in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 # the sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 LETTER:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 foreach $element (@$alphabet) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 # skip terminator symbol which may confuse regex
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 next LETTER if $element eq '*';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 $count{$element} = ( $seqstring =~ s/$element/$element/g);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 if ($_is_instance) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 $self->{'_monomer_count'} = \%count; # Save in case called again later
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 return \%count;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 =head2 get_mol_wt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 Title : get_mol_wt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Usage : $wt = $seqobj->get_mol_wt() or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 $wt = Bio::Tools::SeqStats ->get_mol_wt($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Function: Calculate molecular weight of sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Ts are counted as Us in RNA sequences.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Returns : Reference to two element array containing lower and upper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 bounds of molecule molecular weight. (For dna (and rna)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 sequences, single-stranded weights are returned.) If
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 sequence contains no ambiguous elements, both entries in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 array are equal to molecular weight of molecule.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 Args : None or reference to sequence object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 Throws : Exception if type of sequence is unknown (ie not amino or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 nucleic) or if unknown letter in alphabet. Ambiguous
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 elements are allowed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 sub get_mol_wt {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my $seqobj;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 my $_is_strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 my $element = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 my $_is_instance = 1 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 my $self = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 my $object_argument = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 my ($weight_array, $rcount);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 if (defined $object_argument) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $_is_instance = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 if ($_is_instance) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 if ($weight_array = $self->{'_mol_wt'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 # return mol. weight if previously calculated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 return $weight_array;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 $seqobj = $self->{'_seqref'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 $rcount = $self->count_monomers();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 $seqobj = $object_argument;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 $seqobj->isa("Bio::PrimarySeqI") ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 die("Error: SeqStats works only on PrimarySeqI objects \n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $_is_strict = _is_alphabet_strict($seqobj); # is alphabet OK?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 $rcount = $self->count_monomers($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 # We will also need to know what type of monomer we are dealing with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 my $moltype = $seqobj->alphabet();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 # In general,the molecular weight is bounded below by the sum of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 # weights of lower bounds of each alphabet symbol times the number of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 # occurrences of the symbol in the sequence. A similar upper bound on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 # the weight is also calculated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 # Note that for "strict" (ie unambiguous) sequences there is an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 # inefficiency since the upper bound = the lower bound (and is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 # calculated twice). However, this decrease in performance will be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 # minor and leads to (IMO) significantly more readable code.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 my $weight_lower_bound = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 my $weight_upper_bound = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 my $weight_table = $Weights{$moltype};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 # compute weight of all the residues
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 foreach $element (keys %$rcount) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 $weight_lower_bound += $$rcount{$element} * $$weight_table{$element}->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 $weight_upper_bound += $$rcount{$element} * $$weight_table{$element}->[1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 if ($moltype =~ /protein/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 # remove of H2O during peptide bond formation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 $weight_lower_bound -= $water * ($seqobj->length - 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 $weight_upper_bound -= $water * ($seqobj->length - 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 # Correction because phosphate of 5' residue has additional OH and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 # sugar ring of 3' residue has additional H
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 $weight_lower_bound += $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 $weight_upper_bound += $water;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 $weight_lower_bound = sprintf("%.0f", $weight_lower_bound);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 $weight_upper_bound = sprintf("%.0f", $weight_upper_bound);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 $weight_array = [$weight_lower_bound, $weight_upper_bound];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 if ($_is_instance) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 $self->{'_mol_wt'} = $weight_array; # Save in case called again later
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 return $weight_array;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 =head2 count_codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 Title : count_codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 Usage : $rcount = $seqstats->count_codons (); or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 $rcount = Bio::Tools::SeqStats->count_codons($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 Function: Counts the number of each type of codons in a given frame
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 for a dna or rna sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 Returns : Reference to a hash in which keys are codons of the genetic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 alphabet used and values are number of occurrences of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 codons in the sequence. All codons with "ambiguous" bases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 are counted together.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Args : None or reference to sequence object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 Throws : an exception if type of sequence is unknown or protein.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 sub count_codons {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 my $rcount = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 my $codon ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 my $seqobj;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 my $_is_strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 my $element = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 my $_is_instance = 1 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 my $self = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 my $object_argument = shift @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 if (defined $object_argument) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 $_is_instance = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 if ($_is_instance) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 if ($rcount = $self->{'_codon_count'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 return $rcount; # return count if previously calculated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 $_is_strict = $self->{'_is_strict'}; # retrieve "strictness"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 $seqobj = $self->{'_seqref'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 $seqobj = $object_argument;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 $seqobj->isa("Bio::PrimarySeqI") ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 die(" Error: SeqStats works only on PrimarySeqI objects \n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 $_is_strict = _is_alphabet_strict($seqobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 # Codon counts only make sense for nucleic acid sequences
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 my $alphabet = $seqobj->alphabet();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 unless ($alphabet =~ /[dr]na/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 $seqobj->throw(" Codon counts only meaningful for dna or rna, ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 "not for $alphabet sequences. \n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 # If sequence contains ambiguous bases, warn that codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 # containing them will all be lumped together in the count.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 if (!$_is_strict ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 $seqobj->warn(" Sequence $seqobj contains ambiguous bases. \n".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 " All codons with ambiguous bases will be added together in count. \n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 my $seq = $seqobj->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 # Now step through the string by threes and count the codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 CODON:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 while (length($seq) > 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 $codon = substr($seq,0,3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 $seq = substr($seq,3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 if ($codon =~ /[^ACTGU]/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 $$rcount{'ambiguous'}++; #lump together ambiguous codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 next CODON;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 if (!defined $$rcount{$codon}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 $$rcount{$codon}= 1 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 next CODON;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 $$rcount{$codon}++; # default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 if ($_is_instance) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 $self->{'_codon_count'} = $rcount; # Save in case called again later
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 return $rcount;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 =head2 _is_alphabet_strict
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 Title : _is_alphabet_strict
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 Function: internal function to determine whether there are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 any ambiguous elements in the current sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 Returns : 1 if strict alphabet is being used,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 0 if ambiguous elements are present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 Throws : an exception if type of sequence is unknown (ie amino or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 nucleic) or if unknown letter in alphabet. Ambiguous
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 monomers are allowed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 sub _is_alphabet_strict {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 my ($seqobj) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 my $moltype = $seqobj->alphabet();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 # convert everything to upper case to be safe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 my $seqstring = uc $seqobj->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 # Since T is used in RichSeq RNA sequences, do conversion locally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 $seqstring =~ s/T/U/g if $seqobj->alphabet eq 'rna';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 # First we check if only the 'strict' letters are present in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 # sequence string If not, we check whether the remaining letters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 # are ambiguous monomers or whether there are illegal letters in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 # the string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 # $alpha_array is a ref to an array of the 'strictly' allowed letters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 my $alpha_array = $Alphabets_strict{$moltype} ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 # $alphabet contains the allowed letters in string form
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 my $alphabet = join ('', @$alpha_array) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 unless ($seqstring =~ /[^$alphabet]/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 return 1 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 # Next try to match with the alphabet's ambiguous letters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 $alpha_array = $Alphabets{$moltype} ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 $alphabet = join ('', @$alpha_array) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 unless ($seqstring =~ /[^$alphabet]/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 return 0 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 # If we got here there is an illegal letter in the sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 $seqobj->throw(" Alphabet not OK for $seqobj \n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 =head2 _print_data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 Title : _print_data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 Usage : $seqobj->_print_data() or Bio::Tools::SeqStats->_print_data();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 Function: Displays dna / rna parameters (used for debugging)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 Returns : 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 Args : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 Used for debugging.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 sub _print_data {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 print "\n adenine = : $adenine \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 print "\n guanine = : $guanine \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 print "\n cytosine = : $cytosine \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 print "\n thymine = : $thymine \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 print "\n uracil = : $uracil \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 print "\n dna_A_wt = : $dna_A_wt \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 print "\n dna_C_wt = : $dna_C_wt \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 print "\n dna_G_wt = : $dna_G_wt \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 print "\n dna_T_wt = : $dna_T_wt \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 print "\n rna_A_wt = : $rna_A_wt \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 print "\n rna_C_wt = : $rna_C_wt \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 print "\n rna_G_wt = : $rna_G_wt \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 print "\n rna_U_wt = : $rna_U_wt \n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 }