annotate variant_effect_predictor/Bio/Variation/IO.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: IO.pm,v 1.14 2002/11/04 09:07:45 heikki Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Variation::IO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::Variation::IO - Handler for sequence variation IO Formats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 use Bio::Variation::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 $in = Bio::Variation::IO->new(-file => "inputfilename" , '-format' => 'flat');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 $out = Bio::Variation::IO->new(-file => ">outputfilename" , '-format' => 'xml');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 # note: we quote -format to keep older perl's from complaining.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 while ( my $seq = $in->next() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 $out->write($seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 use Bio::Variation::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 #input file format can be read from the file extension (dat|xml)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 $in = Bio::Variation::IO->newFh(-file => "inputfilename");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 $out = Bio::Variation::IO->newFh('-format' => 'xml');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # World's shortest flat<->xml format converter:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 print $out $_ while <$in>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 Bio::Variation::IO is a handler module for the formats in the Variation IO set (eg,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 Bio::Variation::IO::flat). It is the officially sanctioned way of getting at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 the format objects, which most people should use.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 The structure, conventions and most of the code is inherited from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 L<Bio::SeqIO> module. The main difference is that instead of using
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 methods next_seq and write_seq, you drop '_seq' from the method names.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 The idea is that you request a stream object for a particular format.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 All the stream objects have a notion of an internal file that is read
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 from or written to. A particular SeqIO object instance is configured
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 for either input or output. A specific example of a stream object is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 the Bio::Variation::IO::flat object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 Each stream object has functions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 $stream->next();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 $stream->write($seqDiff);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 also
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 $stream->type() # returns 'INPUT' or 'OUTPUT'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 As an added bonus, you can recover a filehandle that is tied to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 SeqIO object, allowing you to use the standard E<lt>E<gt> and print operations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 to read and write sequence objects:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 use Bio::Variation::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 $stream = Bio::Variation::IO->newFh(-format => 'flat'); # read from standard input
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 while ( $seq = <$stream> ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 # do something with $seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 print $stream $seq; # when stream is in output mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 This makes the simplest ever reformatter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 #!/usr/local/bin/perl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 $format1 = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 $format2 = shift || die "Usage: reformat format1 format2 < input > output";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 use Bio::Variation::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 $in = Bio::Variation::IO->newFh(-format => $format1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 $out = Bio::Variation::IO->newFh(-format => $format2 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 #note: you might want to quote -format to keep older perl's from complaining.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 print $out $_ while <$in>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 =head1 CONSTRUCTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 =head2 Bio::Variation::IO-E<gt>new()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 $seqIO = Bio::Variation::IO->new(-file => 'filename', -format=>$format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $seqIO = Bio::Variation::IO->new(-fh => \*FILEHANDLE, -format=>$format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 $seqIO = Bio::Variation::IO->new(-format => $format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 The new() class method constructs a new Bio::Variation::IO object. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 returned object can be used to retrieve or print BioSeq objects. new()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 accepts the following parameters:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 =over 4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 =item -file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 A file path to be opened for reading or writing. The usual Perl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 conventions apply:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 'file' # open file for reading
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 '>file' # open file for writing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 '>>file' # open file for appending
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 '+<file' # open file read/write
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 'command |' # open a pipe from the command
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 '| command' # open a pipe to the command
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 =item -fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 You may provide new() with a previously-opened filehandle. For
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 example, to read from STDIN:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 $seqIO = Bio::Variation::IO->new(-fh => \*STDIN);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 Note that you must pass filehandles as references to globs.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 If neither a filehandle nor a filename is specified, then the module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 will read from the @ARGV array or STDIN, using the familiar E<lt>E<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 semantics.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 =item -format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Specify the format of the file. Supported formats include:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 flat pseudo EMBL format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 xml seqvar xml format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 If no format is specified and a filename is given, then the module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 will attempt to deduce it from the filename. If this is unsuccessful,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Fasta format is assumed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 The format name is case insensitive. 'FLAT', 'Flat' and 'flat' are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 all supported.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 =head2 Bio::Variation::IO-E<gt>newFh()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 $fh = Bio::Variation::IO->newFh(-fh => \*FILEHANDLE, -format=>$format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $fh = Bio::Variation::IO->newFh(-format => $format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 # etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 #e.g.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 $out = Bio::Variation::IO->newFh( '-FORMAT' => 'flat');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 print $out $seqDiff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 This constructor behaves like new(), but returns a tied filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 rather than a Bio::Variation::IO object. You can read sequences from this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 object using the familiar E<lt>E<gt> operator, and write to it using print().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 The usual array and $_ semantics work. For example, you can read all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 sequence objects into an array like this:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 @mutations = <$fh>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 Other operations, such as read(), sysread(), write(), close(), and printf()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 are not supported.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 =head1 OBJECT METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 See below for more detailed summaries. The main methods are:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 =head2 $sequence = $seqIO-E<gt>next()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 Fetch the next sequence from the stream.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 =head2 $seqIO-E<gt>write($sequence [,$another_sequence,...])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Write the specified sequence(s) to the stream.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 =head2 TIEHANDLE(), READLINE(), PRINT()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 These provide the tie interface. See L<perltie> for more details.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Bioperl modules. Send your comments and suggestions preferably to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Bioperl mailing lists Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 =head1 AUTHOR - Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 Email: heikki@ebi.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 EMBL Outstation, European Bioinformatics Institute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Wellcome Trust Genome Campus, Hinxton
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Cambs. CB10 1SD, United Kingdom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 package Bio::Variation::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 my $VERSION=1.0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 use vars '@ISA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 use Bio::SeqIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 @ISA = 'Bio::SeqIO';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Usage : $stream = Bio::Variation::IO->new(-file => $filename, -format => 'Format')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Function: Returns a new seqstream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Returns : A Bio::Variation::IO::Handler initialised with the appropriate format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Args : -file => $filename
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 -format => format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 -fh => filehandle to attach to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my ($class, %param) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 my ($format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 @param{ map { lc $_ } keys %param } = values %param; # lowercase keys
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $format = $param{'-format'}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 || $class->_guess_format( $param{-file} || $ARGV[0] )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 || 'flat';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $format = "\L$format"; # normalize capitalization to lower case
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 return undef unless $class->_load_format_module($format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 return "Bio::Variation::IO::$format"->new(%param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 sub _load_format_module {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 my ($class, $format) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 my $module = "Bio::Variation::IO::" . $format;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 my $ok;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 $ok = $class->_load_module($module);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 if ( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 print STDERR <<END;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $class: $format cannot be found
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 Exception $@
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 For more information about the IO system please see the IO docs.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 This includes ways of checking for formats at compile time, not run time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 END
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 return $ok;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 =head2 next
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 Title : next
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 Usage : $seqDiff = $stream->next
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 Function: reads the next $seqDiff object from the stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 Returns : a Bio::Variation::SeqDiff object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 sub next {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 my ($self, $seq) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $self->throw("Sorry, you cannot read from a generic Bio::Variation::IO object.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 sub next_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my ($self, $seq) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $self->throw("These are not sequence objects. Use method 'next' instead of 'next_seq'.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $self->next($seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 =head2 write
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 Title : write
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 Usage : $stream->write($seq)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 Function: writes the $seq object into the stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 Returns : 1 for success and 0 for error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 Args : Bio::Variation::SeqDiff object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 sub write {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my ($self, $seq) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 $self->throw("Sorry, you cannot write to a generic Bio::Variation::IO object.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 sub write_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 my ($self, $seq) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $self->warn("These are not sequence objects. Use method 'write' instead of 'write_seq'.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 $self->write($seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 =head2 _guess_format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 Title : _guess_format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 Usage : $obj->_guess_format($filename)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Returns : guessed format of filename (lower case)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 sub _guess_format {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 return unless $_ = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 return 'flat' if /\.dat$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 return 'xml' if /\.xml$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 1;