annotate variant_effect_predictor/Bio/PrimarySeqI.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: PrimarySeqI.pm,v 1.50.2.3 2003/08/29 15:37:39 birney Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # BioPerl module for Bio::PrimarySeqI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Ewan Birney <birney@sanger.ac.uk>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 Bio::PrimarySeqI [Developers] - Interface definition for a Bio::PrimarySeq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 # Bio::PrimarySeqI is the interface class for sequences.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 # If you are a newcomer to bioperl, you should
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 # start with Bio::Seq documentation. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 # documentation is mainly for developers using
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 # Bioperl.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 # to test this is a seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 $obj->isa("Bio::PrimarySeqI") ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 $obj->throw("$obj does not implement the Bio::PrimarySeqI interface");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 # accessors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 $string = $obj->seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 $substring = $obj->subseq(12,50);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 $display = $obj->display_id(); # for human display
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 $id = $obj->primary_id(); # unique id for this object,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 # implementation defined
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 $unique_key= $obj->accession_number();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 # unique biological id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 # object manipulation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 eval {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 $rev = $obj->revcom();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 if( $@ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 $obj->throw("Could not reverse complement. ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 "Probably not DNA. Actual exception\n$@\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 $trunc = $obj->trunc(12,50);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 # $rev and $trunc are Bio::PrimarySeqI compliant objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 This object defines an abstract interface to basic sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 information - for most users of the package the documentation (and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 methods) in this class are not useful - this is a developers only
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 class which defines what methods have to be implmented by other Perl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 objects to comply to the Bio::PrimarySeqI interface. Go "perldoc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 Bio::Seq" or "man Bio::Seq" for more information on the main class for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 sequences.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 PrimarySeq is an object just for the sequence and its name(s), nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 more. Seq is the larger object complete with features. There is a pure
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 perl implementation of this in Bio::PrimarySeq. If you just want to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 use Bio::PrimarySeq objects, then please read that module first. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 module defines the interface, and is of more interest to people who
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 want to wrap their own Perl Objects/RDBs/FileSystems etc in way that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 they "are" bioperl sequence objects, even though it is not using Perl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 to store the sequence etc.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 This interface defines what bioperl consideres necessary to "be" a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 sequence, without providing an implementation of this. (An
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 implementation is provided in Bio::PrimarySeq). If you want to provide
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 a Bio::PrimarySeq 'compliant' object which in fact wraps another
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 object/database/out-of-perl experience, then this is the correct thing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 to wrap, generally by providing a wrapper class which would inheriet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 from your object and this Bio::PrimarySeqI interface. The wrapper class
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 then would have methods lists in the "Implementation Specific
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 Functions" which would provide these methods for your object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 User feedback is an integral part of the evolution of this and other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 Bioperl modules. Send your comments and suggestions preferably to one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 of the Bioperl mailing lists. Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 http://bio.perl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 the bugs and their resolution. Bug reports can be submitted via email
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 =head1 AUTHOR - Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 Email birney@sanger.ac.uk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 package Bio::PrimarySeqI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 use vars qw(@ISA );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 use Bio::Root::RootI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 use Bio::Tools::CodonTable;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 @ISA = qw(Bio::Root::RootI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 =head1 Implementation Specific Functions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 These functions are the ones that a specific implementation must
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 define.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 =head2 seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 Title : seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 Usage : $string = $obj->seq()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 Function: Returns the sequence as a string of letters. The
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 case of the letters is left up to the implementer.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 Suggested cases are upper case for proteins and lower case for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 DNA sequence (IUPAC standard),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 but implementations are suggested to keep an open mind about
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 case (some users... want mixed case!)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 Returns : A scalar
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 Status : Virtual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 sub seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 $self->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 =head2 subseq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 Title : subseq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 Usage : $substring = $obj->subseq(10,40);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 Function: returns the subseq from start to end, where the first base
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 is 1 and the number is inclusive, ie 1-2 are the first two
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 bases of the sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Start cannot be larger than end but can be equal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Returns : a string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 Status : Virtual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 sub subseq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 $self->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 =head2 display_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 Title : display_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 Usage : $id_string = $obj->display_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Function: returns the display id, aka the common name of the Sequence object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 The semantics of this is that it is the most likely string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 to be used as an identifier of the sequence, and likely to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 have "human" readability. The id is equivalent to the ID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 field of the GenBank/EMBL databanks and the id field of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Swissprot/sptrembl database. In fasta format, the >(\S+) is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 presumed to be the id, though some people overload the id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 to embed other information. Bioperl does not use any
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 embedded information in the ID field, and people are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 encouraged to use other mechanisms (accession field for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 example, or extending the sequence object) to solve this.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 Notice that $seq->id() maps to this function, mainly for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 legacy/convience issues
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 Returns : A string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 Status : Virtual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 sub display_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 $self->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 =head2 accession_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 Title : accession_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 Usage : $unique_biological_key = $obj->accession_number;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 Function: Returns the unique biological id for a sequence, commonly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 called the accession_number. For sequences from established
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 databases, the implementors should try to use the correct
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 accession number. Notice that primary_id() provides the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 unique id for the implemetation, allowing multiple objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 to have the same accession number in a particular implementation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 For sequences with no accession number, this method should return
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 "unknown".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 Returns : A string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 Status : Virtual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 sub accession_number {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 $self->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 =head2 primary_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 Title : primary_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 Usage : $unique_implementation_key = $obj->primary_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 Function: Returns the unique id for this object in this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 implementation. This allows implementations to manage their
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 own object ids in a way the implementaiton can control
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 clients can expect one id to map to one object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 For sequences with no accession number, this method should
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 return a stringified memory location.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 [Note this method name is likely to change in 1.3]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 Returns : A string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 Status : Virtual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 sub primary_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 $self->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 =head2 can_call_new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 Title : can_call_new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 Usage : if( $obj->can_call_new ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 $newobj = $obj->new( %param );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 Function: can_call_new returns 1 or 0 depending
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 on whether an implementation allows new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 constructor to be called. If a new constructor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 is allowed, then it should take the followed hashed
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 constructor list.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 $myobject->new( -seq => $sequence_as_string,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 -display_id => $id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 -accession_number => $accession
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 -alphabet => 'dna',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 Returns : 1 or 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 sub can_call_new{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 # we default to 0 here
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 =head2 alphabet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 Title : alphabet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 Usage : if( $obj->alphabet eq 'dna' ) { /Do Something/ }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 Function: Returns the type of sequence being one of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 'dna', 'rna' or 'protein'. This is case sensitive.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 This is not called <type> because this would cause
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 upgrade problems from the 0.5 and earlier Seq objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 Returns : a string either 'dna','rna','protein'. NB - the object must
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 make a call of the type - if there is no type specified it
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 has to guess.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 Status : Virtual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 sub alphabet{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 my ( $self ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 $self->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 sub moltype{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 $self->warn("moltype: pre v1.0 method. Calling alphabet() instead...");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 $self->alphabet(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 =head1 Optional Implementation Functions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 The following functions rely on the above functions. An
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 implementing class does not need to provide these functions, as they
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 will be provided by this class, but is free to override these
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 functions.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 All of revcom(), trunc(), and translate() create new sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 objects. They will call new() on the class of the sequence object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 instance passed as argument, unless can_call_new() returns FALSE. In
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 the latter case a Bio::PrimarySeq object will be created. Implementors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 which really want to control how objects are created (eg, for object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 persistence over a database, or objects in a CORBA framework), they
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 are encouraged to override these methods
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 =head2 revcom
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 Title : revcom
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 Usage : $rev = $seq->revcom()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 Function: Produces a new Bio::PrimarySeqI implementing object which
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 is the reversed complement of the sequence. For protein
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 sequences this throws an exception of "Sequence is a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 protein. Cannot revcom"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 The id is the same id as the original sequence, and the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 accession number is also indentical. If someone wants to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 track that this sequence has be reversed, it needs to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 define its own extensions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 To do an inplace edit of an object you can go:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 $seq = $seq->revcom();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 This of course, causes Perl to handle the garbage
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 collection of the old object, but it is roughly speaking as
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 efficient as an inplace edit.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 Returns : A new (fresh) Bio::PrimarySeqI object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 sub revcom{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 # check the type is good first.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 my $t = $self->alphabet;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 if( $t eq 'protein' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 $self->throw("Sequence is a protein. Cannot revcom");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 if( $t ne 'dna' && $t ne 'rna' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 if( $self->can('warn') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 $self->warn("Sequence is not dna or rna, but [$t]. ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 "Attempting to revcom, but unsure if this is right");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 warn("[$self] Sequence is not dna or rna, but [$t]. ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 "Attempting to revcom, but unsure if this is right");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 # yank out the sequence string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 my $str = $self->seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 # if is RNA - map to DNA then map back
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 if( $t eq 'rna' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 $str =~ tr/uU/tT/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 # revcom etc...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 $str =~ tr/acgtrymkswhbvdnxACGTRYMKSWHBVDNX/tgcayrkmswdvbhnxTGCAYRKMSWDVBHNX/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 my $revseq = CORE::reverse $str;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 if( $t eq 'rna' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 $revseq =~ tr/tT/uU/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 my $seqclass;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 if($self->can_call_new()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 $seqclass = ref($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 $seqclass = 'Bio::PrimarySeq';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 $self->_attempt_to_load_Seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 my $out = $seqclass->new( '-seq' => $revseq,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 '-display_id' => $self->display_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 '-accession_number' => $self->accession_number,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 '-alphabet' => $self->alphabet,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 '-desc' => $self->desc(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 '-verbose' => $self->verbose
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 return $out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 =head2 trunc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 Title : trunc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 Usage : $subseq = $myseq->trunc(10,100);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 Function: Provides a truncation of a sequence,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 Returns : a fresh Bio::PrimarySeqI implementing object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 Args : Two integers denoting first and last base of the sub-sequence.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 sub trunc{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 my ($self,$start,$end) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 my $str;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 if( defined $start && ref($start) &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 $start->isa('Bio::LocationI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 $str = $self->subseq($start); # start is a location actually
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 } elsif( !$end ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 $self->throw("trunc start,end -- there was no end for $start");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 } elsif( $end < $start ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 my $msg = "start [$start] is greater than end [$end]. \n".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 "If you want to truncated and reverse complement, \n".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 "you must call trunc followed by revcom. Sorry.";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 $self->throw($msg);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 $str = $self->subseq($start,$end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 my $seqclass;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 if($self->can_call_new()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 $seqclass = ref($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 $seqclass = 'Bio::PrimarySeq';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 $self->_attempt_to_load_Seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 my $out = $seqclass->new( '-seq' => $str,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 '-display_id' => $self->display_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 '-accession_number' => $self->accession_number,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 '-alphabet' => $self->alphabet,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 '-desc' => $self->desc(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 '-verbose' => $self->verbose
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 return $out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 =head2 translate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 Title : translate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 Usage : $protein_seq_obj = $dna_seq_obj->translate
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 #if full CDS expected:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 $protein_seq_obj = $cds_seq_obj->translate(undef,undef,undef,undef,1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 Provides the translation of the DNA sequence using full
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 IUPAC ambiguities in DNA/RNA and amino acid codes.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 The full CDS translation is identical to EMBL/TREMBL
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 database translation. Note that the trailing terminator
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 character is removed before returning the translation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 Note: if you set $dna_seq_obj->verbose(1) you will get a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 warning if the first codon is not a valid initiator.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497 Returns : A Bio::PrimarySeqI implementing object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 Args : character for terminator (optional) defaults to '*'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 character for unknown amino acid (optional) defaults to 'X'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 frame (optional) valid values 0, 1, 2, defaults to 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 codon table id (optional) defaults to 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 complete coding sequence expected, defaults to 0 (false)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 boolean, throw exception if not complete CDS (true) or defaults to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 warning (false)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 coding sequence expected to be complete at 5', defaults to false
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 coding sequence expected to be complete at 3', defaults to false
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 sub translate {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 my($self) = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 my($stop, $unknown, $frame, $tableid, $fullCDS, $throw, $complete5,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 $complete3) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 my($i, $len, $output) = (0,0,'');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 my($codon) = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 my $aa;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 ## User can pass in symbol for stop and unknown codons
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 unless(defined($stop) and $stop ne '') { $stop = "*"; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 unless(defined($unknown) and $unknown ne '') { $unknown = "X"; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 unless(defined($frame) and $frame ne '') { $frame = 0; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 ## the codon table ID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 unless(defined($tableid) and $tableid ne '') { $tableid = 1; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 ##Error if monomer is "Amino"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 $self->throw("Can't translate an amino acid sequence.") if
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528 ($self->alphabet eq 'protein');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 ##Error if frame is not 0, 1 or 2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 $self->throw("Valid values for frame are 0, 1, 2, not [$frame].") unless
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 ($frame == 0 or $frame == 1 or $frame == 2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 #warns if ID is invalid
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 my $codonTable = Bio::Tools::CodonTable->new( -id => $tableid);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537 my ($seq) = $self->seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 # deal with frame offset.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 if( $frame ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 $seq = substr ($seq,$frame);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 # Translate it
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 $output = $codonTable->translate($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 # Use user-input stop/unknown
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 $output =~ s/\*/$stop/g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 $output =~ s/X/$unknown/g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 # $complete5 and $complete3 indicate completeness of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 # the coding sequence at the 5' and 3' ends. Complete
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 # if true, default to false. These are in addition to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 # $fullCDS, for backwards compatibility
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 defined($complete5) or ($complete5 = $fullCDS ? 1 : 0);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 defined($complete3) or ($complete3 = $fullCDS ? 1 : 0);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 my $id = $self->display_id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 # only if we are expecting to be complete at the 5' end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 if($complete5) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 # if the initiator codon is not ATG, the amino acid needs to changed into M
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 if(substr($output,0,1) ne 'M') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 if($codonTable->is_start_codon(substr($seq, 0, 3)) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 $output = 'M' . substr($output, 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 elsif($throw) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 $self->throw("Seq [$id]: Not using a valid initiator codon!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 $self->warn("Seq [$id]: Not using a valid initiator codon!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 # only if we are expecting to be complete at the 3' end
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 if($complete3) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 #remove the stop character
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 if(substr($output, -1, 1) eq $stop) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 chop $output;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 $throw && $self->throw("Seq [$id]: Not using a valid terminator codon!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 $self->warn("Seq [$id]: Not using a valid terminator codon!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 # only if we are expecting to translate a complete coding region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 if($complete5 and $complete3) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 # test if there are terminator characters inside the protein sequence!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 if($output =~ /\*/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 $throw && $self->throw("Seq [$id]: Terminator codon inside CDS!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590 $self->warn("Seq [$id]: Terminator codon inside CDS!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 my $seqclass;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 if($self->can_call_new()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 $seqclass = ref($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 $seqclass = 'Bio::PrimarySeq';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 $self->_attempt_to_load_Seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 my $out = $seqclass->new( '-seq' => $output,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602 '-display_id' => $self->display_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 '-accession_number' => $self->accession_number,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 # is there anything wrong with retaining the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 # description?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 '-desc' => $self->desc(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 '-alphabet' => 'protein',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 '-verbose' => $self->verbose
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 return $out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 =head2 id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 Title : id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 Usage : $id = $seq->id()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 Function: ID of the sequence. This should normally be (and actually is in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619 the implementation provided here) just a synonym for display_id().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 Returns : A string.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 sub id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 return shift->display_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 =head2 length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 Title : length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 Usage : $len = $seq->length()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 Returns : integer representing the length of the sequence.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645 shift->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 =head2 desc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 Title : desc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651 Usage : $seq->desc($newval);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 $description = $seq->desc();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 Function: Get/set description text for a seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 Returns : value of desc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 sub desc {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 $self->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667 =head2 is_circular
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669 Title : is_circular
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 Usage : if( $obj->is_circular) { /Do Something/ }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 Function: Returns true if the molecule is circular
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672 Returns : Boolean value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 sub is_circular{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 shift->throw_not_implemented();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681 =head1 Private functions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 These are some private functions for the PrimarySeqI interface. You do not
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684 need to implement these functions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 =head2 _attempt_to_load_Seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 Title : _attempt_to_load_Seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 sub _attempt_to_load_Seq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 if( $main::{'Bio::PrimarySeq'} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704 eval {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 require Bio::PrimarySeq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707 if( $@ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708 my $text = "Bio::PrimarySeq could not be loaded for [$self]\n".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 "This indicates that you are using Bio::PrimarySeqI ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710 "without Bio::PrimarySeq loaded or without providing a ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 "complete implementation.\nThe most likely problem is that there ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 "has been a misconfiguration of the bioperl environment\n".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 "Actual exception:\n\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 $self->throw("$text$@\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 1;