annotate variant_effect_predictor/Bio/SeqIO.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
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 # $Id: SeqIO.pm,v 1.59.2.4 2003/09/14 19:16:53 jason Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 # BioPerl module for Bio::SeqIO
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 # Cared for by Ewan Birney <birney@sanger.ac.uk>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # and Lincoln Stein <lstein@cshl.org>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # Copyright Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 # _history
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 # October 18, 1999 Largely rewritten by Lincoln Stein
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 Bio::SeqIO - Handler for SeqIO Formats
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 use Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 $in = Bio::SeqIO->new(-file => "inputfilename" , '-format' => 'Fasta');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 $out = Bio::SeqIO->new(-file => ">outputfilename" , '-format' => 'EMBL');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 # note: we quote -format to keep older Perls from complaining.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 while ( my $seq = $in->next_seq() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 $out->write_seq($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 Now, to actually get at the sequence object, use the standard Bio::Seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 methods (look at L<Bio::Seq> if you don't know what they are)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 use Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 $in = Bio::SeqIO->new(-file => "inputfilename" , '-format' => 'genbank');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 while ( my $seq = $in->next_seq() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 print "Sequence ",$seq->id," first 10 bases ",$seq->subseq(1,10),"\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 The SeqIO system does have a filehandle binding. Most people find this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 a little confusing, but it does mean you write the world's smallest
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 reformatter
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 use Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 $in = Bio::SeqIO->newFh(-file => "inputfilename" , '-format' => 'Fasta');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 $out = Bio::SeqIO->newFh('-format' => 'EMBL');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 # World's shortest Fasta<->EMBL format converter:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 print $out $_ while <$in>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 Bio::SeqIO is a handler module for the formats in the SeqIO set (eg,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 Bio::SeqIO::fasta). It is the officially sanctioned way of getting at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 the format objects, which most people should use.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 The Bio::SeqIO system can be thought of like biological file handles.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 They are attached to filehandles with smart formatting rules (eg,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 genbank format, or EMBL format, or binary trace file format) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 can either read or write sequence objects (Bio::Seq objects, or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 more correctly, Bio::SeqI implementing objects, of which Bio::Seq is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 one such object). If you want to know what to do with a Bio::Seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 object, read L<Bio::Seq>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 The idea is that you request a stream object for a particular format.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 All the stream objects have a notion of an internal file that is read
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 from or written to. A particular SeqIO object instance is configured
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 for either input or output. A specific example of a stream object is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 the Bio::SeqIO::fasta object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 Each stream object has functions
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 $stream->next_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 $stream->write_seq($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 As an added bonus, you can recover a filehandle that is tied to the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 SeqIO object, allowing you to use the standard E<lt>E<gt> and print operations
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 to read and write sequence objects:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 use Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 $stream = Bio::SeqIO->newFh(-format => 'Fasta'); # read from standard input
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 while ( $seq = <$stream> ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 # do something with $seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 print $stream $seq; # when stream is in output mode
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 This makes the simplest ever reformatter
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 #!/usr/local/bin/perl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 $format1 = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 $format2 = shift || die "Usage: reformat format1 format2 < input > output";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 use Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 $in = Bio::SeqIO->newFh(-format => $format1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 $out = Bio::SeqIO->newFh(-format => $format2 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 #note: you might want to quote -format to keep older perl's from complaining.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 print $out $_ while <$in>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 =head1 CONSTRUCTORS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 =head2 Bio::SeqIO-E<gt>new()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 $seqIO = Bio::SeqIO->new(-file => 'filename', -format=>$format);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 $seqIO = Bio::SeqIO->new(-fh => \*FILEHANDLE, -format=>$format);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 $seqIO = Bio::SeqIO->new(-format => $format);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 The new() class method constructs a new Bio::SeqIO object. The
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 returned object can be used to retrieve or print Seq objects. new()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 accepts the following parameters:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 =over 4
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 =item -file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 A file path to be opened for reading or writing. The usual Perl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 conventions apply:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 'file' # open file for reading
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 '>file' # open file for writing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 '>>file' # open file for appending
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 '+<file' # open file read/write
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 'command |' # open a pipe from the command
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 '| command' # open a pipe to the command
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 =item -fh
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 You may provide new() with a previously-opened filehandle. For
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 example, to read from STDIN:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 $seqIO = Bio::SeqIO->new(-fh => \*STDIN);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 Note that you must pass filehandles as references to globs.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 If neither a filehandle nor a filename is specified, then the module
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 will read from the @ARGV array or STDIN, using the familiar E<lt>E<gt>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 semantics.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 A string filehandle is handy if you want to modify the output in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 memory, before printing it out. The following program reads in EMBL
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 formatted entries from a file and prints them out in fasta format with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 some HTML tags:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 use Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 use IO::String;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 my $in = Bio::SeqIO->new('-file' => "emblfile" ,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 '-format' => 'EMBL');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 while ( my $seq = $in->next_seq() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 # the output handle is reset for every file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 my $stringio = IO::String->new($string);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 my $out = Bio::SeqIO->new('-fh' => $stringio,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 '-format' => 'fasta');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 # output goes into $string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 $out->write_seq($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 # modify $string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 $string =~ s|(>)(\w+)|$1<font color="Red">$2</font>|g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 # print into STDOUT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 print $string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 =item -format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Specify the format of the file. Supported formats include:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Fasta FASTA format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 EMBL EMBL format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 GenBank GenBank format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 swiss Swissprot format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 PIR Protein Information Resource format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 GCG GCG format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 raw Raw format (one sequence per line, no ID)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 ace ACeDB sequence format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 game GAME XML format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 phd phred output
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 qual Quality values (get a sequence of quality scores)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 Fastq Fastq format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 SCF SCF tracefile format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 ABI ABI tracefile format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 ALF ALF tracefile format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 CTF CTF tracefile format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 ZTR ZTR tracefile format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 PLN Staden plain tracefile format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 EXP Staden tagged experiment tracefile format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 If no format is specified and a filename is given then the module
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 will attempt to deduce the format from the filename suffix. If this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 is unsuccessful then Fasta format is assumed.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 The format name is case insensitive. 'FASTA', 'Fasta' and 'fasta' are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 all valid suffixes.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 Currently, the tracefile formats (except for SCF) require installation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 of the external Staden "io_lib" package, as well as the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 Bio::SeqIO::staden::read package available from the bioperl-ext
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 repository.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 =item -flush
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 By default, all files (or filehandles) opened for writing sequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 will be flushed after each write_seq() (making the file immediately
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 usable). If you don't need this facility and would like to marginally
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 improve the efficiency of writing multiple sequences to the same file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 (or filehandle), pass the -flush option '0' or any other value that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 evaluates as defined but false:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 my $gb = new Bio::SeqIO -file => "<gball.gbk",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 -format => "gb";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 my $fa = new Bio::SeqIO -file => ">gball.fa",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 -format => "fasta",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 -flush => 0; # go as fast as we can!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 while($seq = $gb->next_seq) { $fa->write_seq($seq) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 =back
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 =head2 Bio::SeqIO-E<gt>newFh()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 $fh = Bio::SeqIO->newFh(-fh => \*FILEHANDLE, -format=>$format);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 $fh = Bio::SeqIO->newFh(-format => $format);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 # etc.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 This constructor behaves like new(), but returns a tied filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 rather than a Bio::SeqIO object. You can read sequences from this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 object using the familiar E<lt>E<gt> operator, and write to it using
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 print(). The usual array and $_ semantics work. For example, you can
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 read all sequence objects into an array like this:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 @sequences = <$fh>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 Other operations, such as read(), sysread(), write(), close(), and printf()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 are not supported.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 =head1 OBJECT METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 See below for more detailed summaries. The main methods are:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 =head2 $sequence = $seqIO-E<gt>next_seq()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 Fetch the next sequence from the stream.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 =head2 $seqIO-E<gt>write_seq($sequence [,$another_sequence,...])
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 Write the specified sequence(s) to the stream.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 =head2 TIEHANDLE(), READLINE(), PRINT()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 These provide the tie interface. See L<perltie> for more details.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 User feedback is an integral part of the evolution of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 and other Bioperl modules. Send your comments and suggestions preferably
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 to one of the Bioperl mailing lists.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 http://bioperl.org/MailList.shtml - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 the bugs and their resolution.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 Bug reports can be submitted via email or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 bioperl-bugs@bioperl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 =head1 AUTHOR - Ewan Birney, Lincoln Stein
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 Email birney@ebi.ac.uk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 #' Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 package Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 use Bio::Root::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 use Bio::Root::IO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 use Bio::Factory::SequenceStreamI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 use Bio::Factory::FTLocationFactory;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 use Bio::Seq::SeqBuilder;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 use Symbol();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 @ISA = qw(Bio::Root::Root Bio::Root::IO Bio::Factory::SequenceStreamI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 sub BEGIN {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 eval { require Bio::SeqIO::staden::read; };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 my %valid_alphabet_cache;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 Title : new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 Usage : $stream = Bio::SeqIO->new(-file => $filename, -format => 'Format')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 Function: Returns a new seqstream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 Returns : A Bio::SeqIO stream initialised with the appropriate format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 Args : Named parameters:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 -file => $filename
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 -fh => filehandle to attach to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 -format => format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 Additional arguments may be used to set factories and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 builders involved in the sequence object creation. None of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 these must be provided, they all have reasonable defaults.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 -seqfactory the L<Bio::Factory::SequenceFactoryI> object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 -locfactory the L<Bio::Factory::LocationFactoryI> object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 -objbuilder the L<Bio::Factory::ObjectBuilderI> object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 See L<Bio::SeqIO::Handler>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 my $entry = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 my ($caller,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 my $class = ref($caller) || $caller;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 # or do we want to call SUPER on an object if $caller is an
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 # object?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 if( $class =~ /Bio::SeqIO::(\S+)/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 my ($self) = $class->SUPER::new(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 $self->_initialize(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 my %param = @args;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 @param{ map { lc $_ } keys %param } = values %param; # lowercase keys
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 my $format = $param{'-format'} ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 $class->_guess_format( $param{-file} || $ARGV[0] ) ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 'fasta';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 $format = "\L$format"; # normalize capitalization to lower case
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 # normalize capitalization
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 return undef unless( $class->_load_format_module($format) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 return "Bio::SeqIO::$format"->new(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 =head2 newFh
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 Title : newFh
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 Usage : $fh = Bio::SeqIO->newFh(-file=>$filename,-format=>'Format')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 Function: does a new() followed by an fh()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 Example : $fh = Bio::SeqIO->newFh(-file=>$filename,-format=>'Format')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 $sequence = <$fh>; # read a sequence object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 print $fh $sequence; # write a sequence object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 Returns : filehandle tied to the Bio::SeqIO::Fh class
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 See L<Bio::SeqIO::Fh>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 sub newFh {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 my $class = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 return unless my $self = $class->new(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 return $self->fh;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 =head2 fh
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 Title : fh
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 Usage : $obj->fh
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 Example : $fh = $obj->fh; # make a tied filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 $sequence = <$fh>; # read a sequence object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 print $fh $sequence; # write a sequence object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 Returns : filehandle tied to Bio::SeqIO class
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 sub fh {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 my $class = ref($self) || $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 my $s = Symbol::gensym;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 tie $$s,$class,$self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 return $s;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 # _initialize is chained for all SeqIO classes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 sub _initialize {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 my($self, @args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 # flush is initialized by the Root::IO init
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 my ($seqfact,$locfact,$objbuilder) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 $self->_rearrange([qw(SEQFACTORY
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 LOCFACTORY
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 OBJBUILDER)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 ], @args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 $locfact = Bio::Factory::FTLocationFactory->new(-verbose => $self->verbose) if ! $locfact;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 $objbuilder = Bio::Seq::SeqBuilder->new(-verbose => $self->verbose) unless $objbuilder;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 $self->sequence_builder($objbuilder);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 $self->location_factory($locfact);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 # note that this should come last because it propagates the sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 # factory to the sequence builder
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 $seqfact && $self->sequence_factory($seqfact);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 # initialize the IO part
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 $self->_initialize_io(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 =head2 next_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 Title : next_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 Usage : $seq = stream->next_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 Function: Reads the next sequence object from the stream and returns it.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 Certain driver modules may encounter entries in the stream that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 are either misformatted or that use syntax not yet understood
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 by the driver. If such an incident is recoverable, e.g., by
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 dismissing a feature of a feature table or some other non-mandatory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 part of an entry, the driver will issue a warning. In the case
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 of a non-recoverable situation an exception will be thrown.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 Do not assume that you can resume parsing the same stream after
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 catching the exception. Note that you can always turn recoverable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 errors into exceptions by calling $stream->verbose(2).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 Returns : a Bio::Seq sequence object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 See L<Bio::Root::RootI>, L<Bio::Factory::SeqStreamI>, L<Bio::Seq>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 sub next_seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 my ($self, $seq) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 $self->throw("Sorry, you cannot read from a generic Bio::SeqIO object.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 =head2 write_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 Title : write_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 Usage : $stream->write_seq($seq)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 Function: writes the $seq object into the stream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 Returns : 1 for success and 0 for error
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 Args : Bio::Seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 sub write_seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 my ($self, $seq) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 $self->throw("Sorry, you cannot write to a generic Bio::SeqIO object.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 =head2 alphabet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 Title : alphabet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 Usage : $self->alphabet($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 Function: Set/get the molecule type for the Seq objects to be created.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 Example : $seqio->alphabet('protein')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 Returns : value of alphabet: 'dna', 'rna', or 'protein'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 Throws : Exception if the argument is not one of 'dna', 'rna', or 'protein'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 sub alphabet {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 my ($self, $value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 if ( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 $value = lc $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 unless ($valid_alphabet_cache{$value}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 # instead of hard-coding the allowed values once more, we check by
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 # creating a dummy sequence object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 eval {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 require Bio::PrimarySeq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 my $seq = Bio::PrimarySeq->new('-verbose' => $self->verbose,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 '-alphabet' => $value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 if ($@) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 $self->throw("Invalid alphabet: $value\n. See Bio::PrimarySeq for allowed values.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 $valid_alphabet_cache{$value} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 $self->{'alphabet'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 return $self->{'alphabet'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 =head2 _load_format_module
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 Title : _load_format_module
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 Usage : *INTERNAL SeqIO stuff*
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 Function: Loads up (like use) a module at run time on demand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 sub _load_format_module {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 my ($self, $format) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 my $module = "Bio::SeqIO::" . $format;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 my $ok;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 eval {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 $ok = $self->_load_module($module);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 if ( $@ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 print STDERR <<END;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 $self: $format cannot be found
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 Exception $@
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 For more information about the SeqIO system please see the SeqIO docs.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 This includes ways of checking for formats at compile time, not run time
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 END
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 return $ok;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 =head2 _concatenate_lines
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 Title : _concatenate_lines
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 Usage : $s = _concatenate_lines($line, $continuation_line)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 Function: Private. Concatenates two strings assuming that the second stems
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 from a continuation line of the first. Adds a space between both
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 unless the first ends with a dash.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 Takes care of either arg being empty.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 Returns : A string.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 sub _concatenate_lines {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 my ($self, $s1, $s2) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 $s1 .= " " if($s1 && ($s1 !~ /-$/) && $s2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 return ($s1 ? $s1 : "") . ($s2 ? $s2 : "");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 =head2 _filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 Title : _filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 Usage : $obj->_filehandle($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 Function: This method is deprecated. Call _fh() instead.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 Returns : value of _filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 sub _filehandle {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 return $self->_fh(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 =head2 _guess_format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 Title : _guess_format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 Usage : $obj->_guess_format($filename)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 Function: guess format based on file suffix
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 Returns : guessed format of filename (lower case)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 Notes : formats that _filehandle() will guess include fasta,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 genbank, scf, pir, embl, raw, gcg, ace, bsml, swissprot,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 fastq and phd/phred
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 sub _guess_format {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 my $class = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 return unless $_ = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 return 'fasta' if /\.(fasta|fast|seq|fa|fsa|nt|aa)$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 return 'genbank' if /\.(gb|gbank|genbank|gbk|gbs)$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 return 'scf' if /\.scf$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 return 'scf' if /\.scf$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 return 'abi' if /\.abi$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 return 'alf' if /\.alf$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 return 'ctf' if /\.ctf$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 return 'ztr' if /\.ztr$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 return 'pln' if /\.pln$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615 return 'exp' if /\.exp$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 return 'pir' if /\.pir$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 return 'embl' if /\.(embl|ebl|emb|dat)$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 return 'raw' if /\.(txt)$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619 return 'gcg' if /\.gcg$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 return 'ace' if /\.ace$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 return 'bsml' if /\.(bsm|bsml)$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 return 'swiss' if /\.(swiss|sp)$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 return 'phd' if /\.(phd|phred)$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 return 'fastq' if /\.fastq$/i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 sub DESTROY {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 $self->close();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 sub TIEHANDLE {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 my ($class,$val) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 return bless {'seqio' => $val}, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 sub READLINE {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 return $self->{'seqio'}->next_seq() unless wantarray;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 my (@list, $obj);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 push @list, $obj while $obj = $self->{'seqio'}->next_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 return @list;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 sub PRINT {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 $self->{'seqio'}->write_seq(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651 =head2 sequence_factory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 Title : sequence_factory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654 Usage : $seqio->sequence_factory($seqfactory)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 Function: Get/Set the Bio::Factory::SequenceFactoryI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 Returns : Bio::Factory::SequenceFactoryI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657 Args : [optional] Bio::Factory::SequenceFactoryI
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 sub sequence_factory{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 my ($self,$obj) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 if( defined $obj ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 if( ! ref($obj) || ! $obj->isa('Bio::Factory::SequenceFactoryI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 $self->throw("Must provide a valid Bio::Factory::SequenceFactoryI object to ".ref($self)."::sequence_factory()");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 $self->{'_seqio_seqfactory'} = $obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669 my $builder = $self->sequence_builder();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 if($builder && $builder->can('sequence_factory') &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 (! $builder->sequence_factory())) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672 $builder->sequence_factory($obj);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 $self->{'_seqio_seqfactory'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 =head2 object_factory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 Title : object_factory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681 Usage : $obj->object_factory($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 Function: This is an alias to sequence_factory with a more generic name.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684 Returns : value of object_factory (a scalar)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685 Args : on set, new value (a scalar or undef, optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690 sub object_factory{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 return shift->sequence_factory(@_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 =head2 sequence_builder
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 Title : sequence_builder
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697 Usage : $seqio->sequence_builder($seqfactory)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 Function: Get/Set the L<Bio::Factory::ObjectBuilderI> used to build sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 objects.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 If you do not set the sequence object builder yourself, it
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 will in fact be an instance of L<Bio::Seq::SeqBuilder>, and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 you may use all methods documented there to configure it.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 Returns : a L<Bio::Factory::ObjectBuilderI> compliant object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 Args : [optional] a L<Bio::Factory::ObjectBuilderI> compliant object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 sub sequence_builder{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 my ($self,$obj) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 if( defined $obj ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 if( ! ref($obj) || ! $obj->isa('Bio::Factory::ObjectBuilderI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 $self->throw("Must provide a valid Bio::Factory::ObjectBuilderI object to ".ref($self)."::sequence_builder()");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 $self->{'_object_builder'} = $obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719 $self->{'_object_builder'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 =head2 location_factory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 Title : location_factory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725 Usage : $seqio->location_factory($locfactory)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726 Function: Get/Set the Bio::Factory::LocationFactoryI object to be used for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727 location string parsing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 Returns : a L<Bio::Factory::LocationFactoryI> implementing object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 Args : [optional] on set, a L<Bio::Factory::LocationFactoryI> implementing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730 object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735 sub location_factory{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 my ($self,$obj) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737 if( defined $obj ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738 if( ! ref($obj) || ! $obj->isa('Bio::Factory::LocationFactoryI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739 $self->throw("Must provide a valid Bio::Factory::LocationFactoryI".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740 " object to ".ref($self)."->location_factory()");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742 $self->{'_seqio_locfactory'} = $obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 $self->{'_seqio_locfactory'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748