annotate variant_effect_predictor/Bio/Structure/IO.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: IO.pm,v 1.3 2002/10/22 07:45:21 lapp Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Structure::IO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Ewan Birney <birney@sanger.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 # and Lincoln Stein <lstein@cshl.org>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # and Kris Boulez <kris.boulez@algonomics.com>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # Copyright 2001, 2002 Kris Boulez
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 # _history
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 # October 18, 1999 Largely rewritten by Lincoln Stein
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 # November 16, 2001 Copied Bio::SeqIO to Bio::Structure::IO and modified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 # where needed. Factoring out common methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 # (to Bio::Root::IO) might be a good idea.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::Structure::IO - Handler for Structure Formats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::Structure::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 $in = Bio::Structure::IO->new(-file => "inputfilename" , '-format' => 'pdb');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $out = Bio::Structure::IO->new(-file => ">outputfilename" , '-format' => 'pdb');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 # note: we quote -format to keep older perl's from complaining.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 while ( my $struc = $in->next_structure() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 $out->write_structure($struc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 now, to actually get at the structure object, use the standard Bio::Structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 methods (look at L<Bio::Structure> if you don't know what they are)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 use Bio::Structure::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 $in = Bio::Structure::IO->new(-file => "inputfilename" , '-format' => 'pdb');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 while ( my $struc = $in->next_structure() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 print "Structure ",$struc->id," number of models: ",scalar $struc->model,"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 [ The following description is a copy-paste from the Bio::SeqIO description.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 This is not surprising as the code is also mostly a copy. ]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Bio::Structure::IO is a handler module for the formats in the Structure::IO set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 (eg, Bio::Structure::IO::pdb). It is the officially sanctioned way of getting at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 the format objects, which most people should use.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 The Bio::Structure::IO system can be thought of like biological file handles.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 They are attached to filehandles with smart formatting rules (eg, PDB format)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 and can either read or write structure objects (Bio::Structure objects, or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 more correctly, Bio::Structure::StructureI implementing objects, of which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Bio::Structure is one such object). If you want to know what to do with a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Bio::Structure object, read L<Bio::Structure>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 The idea is that you request a stream object for a particular format.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 All the stream objects have a notion of an internal file that is read
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 from or written to. A particular Structure::IO object instance is configured
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 for either input or output. A specific example of a stream object is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 the Bio::Structure::IO::pdb object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Each stream object has functions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 $stream->next_structure();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 $stream->write_structure($struc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 also
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 $stream->type() # returns 'INPUT' or 'OUTPUT'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 As an added bonus, you can recover a filehandle that is tied to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Structure::IOIO object, allowing you to use the standard E<lt>E<gt> and print operations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 to read and write structure::IOuence objects:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 use Bio::Structure::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 $stream = Bio::Structure::IO->newFh(-format => 'pdb'); # read from standard input
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 while ( $structure = <$stream> ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 # do something with $structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 print $stream $structure; # when stream is in output mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 =head1 CONSTRUCTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 =head2 Bio::Structure::IO-E<gt>new()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $stream = Bio::Structure::IO->new(-file => 'filename', -format=>$format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 $stream = Bio::Structure::IO->new(-fh => \*FILEHANDLE, -format=>$format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 $stream = Bio::Structure::IO->new(-format => $format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 The new() class method constructs a new Bio::Structure::IO object. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 returned object can be used to retrieve or print Bio::Structure objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 new() accepts the following parameters:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 =over 4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 =item -file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 A file path to be opened for reading or writing. The usual Perl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 conventions apply:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 'file' # open file for reading
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 '>file' # open file for writing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 '>>file' # open file for appending
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 '+<file' # open file read/write
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 'command |' # open a pipe from the command
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 '| command' # open a pipe to the command
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 =item -fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 You may provide new() with a previously-opened filehandle. For
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 example, to read from STDIN:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 $strucIO = Bio::Structure::IO->new(-fh => \*STDIN);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 Note that you must pass filehandles as references to globs.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 If neither a filehandle nor a filename is specified, then the module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 will read from the @ARGV array or STDIN, using the familiar E<lt>E<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 semantics.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 A string filehandle is handy if you want to modify the output in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 memory, before printing it out. The following program reads in EMBL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 formatted entries from a file and prints them out in fasta format with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 some HTML tags:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 [ not relevant for Bio::Structure::IO as only one format is supported
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 at the moment ]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 use Bio::SeqIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 use IO::String;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $in = Bio::SeqIO->new('-file' => "emblfile" ,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 '-format' => 'EMBL');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 while ( my $seq = $in->next_seq() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 # the output handle is reset for every file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my $stringio = IO::String->new($string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 my $out = Bio::SeqIO->new('-fh' => $stringio,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 '-format' => 'fasta');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 # output goes into $string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 $out->write_seq($seq);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 # modify $string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $string =~ s|(>)(\w+)|$1<font color="Red">$2</font>|g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 # print into STDOUT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 print $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 =item -format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 Specify the format of the file. Supported formats include:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 PDB Protein Data Bank format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 If no format is specified and a filename is given, then the module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 will attempt to deduce it from the filename. If this is unsuccessful,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 PDB format is assumed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 The format name is case insensitive. 'PDB', 'Pdb' and 'pdb' are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 all supported.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 =head2 Bio::Structure::IO-E<gt>newFh()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $fh = Bio::Structure::IO->newFh(-fh => \*FILEHANDLE, -format=>$format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $fh = Bio::Structure::IO->newFh(-format => $format);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 # etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 This constructor behaves like new(), but returns a tied filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 rather than a Bio::Structure::IO object. You can read structures from this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 object using the familiar E<lt>E<gt> operator, and write to it using
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 print(). The usual array and $_ semantics work. For example, you can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 read all structure objects into an array like this:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 @structures = <$fh>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Other operations, such as read(), sysread(), write(), close(), and printf()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 are not supported.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 =head1 OBJECT METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 See below for more detailed summaries. The main methods are:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =head2 $structure = $structIO-E<gt>next_structure()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Fetch the next structure from the stream.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 =head2 $structIO-E<gt>write_structure($struc [,$another_struc,...])
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 Write the specified structure(s) to the stream.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 =head2 TIEHANDLE(), READLINE(), PRINT()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 These provide the tie interface. See L<perltie> for more details.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 User feedback is an integral part of the evolution of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 and other Bioperl modules. Send your comments and suggestions preferably
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 to one of the Bioperl mailing lists.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 the bugs and their resolution.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 Bug reports can be submitted via email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 =head1 AUTHOR - Ewan Birney, Lincoln Stein, Kris Boulez
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 Email birney@ebi.ac.uk, kris.boulez@algonomics
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 Describe contact details here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 package Bio::Structure::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 use Bio::Root::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 use Bio::PrimarySeq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 use Symbol();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 @ISA = qw(Bio::Root::Root Bio::Root::IO);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 Usage : $stream = Bio::Structure::IO->new(-file => $filename, -format => 'Format')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 Function: Returns a new structIOstream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 Returns : A Bio::Structure::IO handler initialised with the appropriate format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 Args : -file => $filename
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 -format => format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 -fh => filehandle to attach to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 my $entry = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 my ($caller,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 # or do we want to call SUPER on an object if $caller is an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 # object?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 if( $class =~ /Bio::Structure::IO::(\S+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my ($self) = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $self->_initialize(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 my %param = @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 @param{ map { lc $_ } keys %param } = values %param; # lowercase keys
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my $format = $param{'-format'} ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $class->_guess_format( $param{-file} || $ARGV[0] ) ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 'pdb';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $format = "\L$format"; # normalize capitalization to lower case
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 # normalize capitalization
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 return undef unless( &_load_format_module($format) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 return "Bio::Structure::IO::$format"->new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 =head2 newFh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 Title : newFh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Usage : $fh = Bio::Structure::IO->newFh(-file=>$filename,-format=>'Format')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 Function: does a new() followed by an fh()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 Example : $fh = Bio::Structure::IO->newFh(-file=>$filename,-format=>'Format')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $structure = <$fh>; # read a structure object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 print $fh $structure; # write a structure object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 Returns : filehandle tied to the Bio::Structure::IO::Fh class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 sub newFh {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 return unless my $self = $class->new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 return $self->fh;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 =head2 fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Title : fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 Usage : $obj->fh
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Example : $fh = $obj->fh; # make a tied filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $structure = <$fh>; # read a structure object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 print $fh $structure; # write a structure object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 Returns : filehandle tied to the Bio::Structure::IO::Fh class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 sub fh {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 my $class = ref($self) || $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 my $s = Symbol::gensym;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 tie $$s,$class,$self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 return $s;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 # _initialize is chained for all SeqIO classes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 sub _initialize {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 my($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 # not really necessary unless we put more in RootI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $self->SUPER::_initialize(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 # initialize the IO part
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $self->_initialize_io(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 =head2 next_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 Title : next_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 Usage : $structure = stream->next_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 Function: Reads the next structure object from the stream and returns it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Certain driver modules may encounter entries in the stream that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 are either misformatted or that use syntax not yet understood
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 by the driver. If such an incident is recoverable, e.g., by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 dismissing a feature of a feature table or some other non-mandatory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 part of an entry, the driver will issue a warning. In the case
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 of a non-recoverable situation an exception will be thrown.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Do not assume that you can resume parsing the same stream after
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 catching the exception. Note that you can always turn recoverable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 errors into exceptions by calling $stream->verbose(2) (see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Bio::RootI POD page).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Returns : a Bio::Structure structure object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 sub next_structure {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 my ($self, $struc) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 $self->throw("Sorry, you cannot read from a generic Bio::Structure::IO object.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 # Do we want people to read out the sequence directly from a $structIO stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 ##=head2 next_primary_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 ## Title : next_primary_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 ## Usage : $seq = $stream->next_primary_seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 ## Function: Provides a primaryseq type of sequence object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 ## Returns : A Bio::PrimarySeqI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 ## Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 ##=cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 ##sub next_primary_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 ## my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 ## # in this case, we default to next_seq. This is because
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 ## # Bio::Seq's are Bio::PrimarySeqI objects. However we
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 ## # expect certain sub classes to override this method to provide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 ## # less parsing heavy methods to retrieving the objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 ## return $self->next_seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 ##}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 =head2 write_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 Title : write_structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Usage : $stream->write_structure($structure)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Function: writes the $structure object into the stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Returns : 1 for success and 0 for error
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 Args : Bio::Structure object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 sub write_seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 my ($self, $struc) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 $self->throw("Sorry, you cannot write to a generic Bio::Structure::IO object.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 # De we need this here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 ##=head2 alphabet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 ## Title : alphabet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 ## Usage : $self->alphabet($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 ## Function: Set/get the molecule type for the Seq objects to be created.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 ## Example : $seqio->alphabet('protein')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 ## Returns : value of alphabet: 'dna', 'rna', or 'protein'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 ## Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 ## Throws : Exception if the argument is not one of 'dna', 'rna', or 'protein'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 ##=cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 ##sub alphabet {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 ## my ($self, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 ## if ( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 ## # instead of hard-coding the allowed values once more, we check by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 ## # creating a dummy sequence object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 ## eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 ## my $seq = Bio::PrimarySeq->new('-alphabet' => $value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 ## };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 ## if($@) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 ## $self->throw("Invalid alphabet: $value\n. See Bio::PrimarySeq for allowed values.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 ## }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 ## $self->{'alphabet'} = "\L$value";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 ## }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 ## return $self->{'alphabet'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 ##}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 =head2 _load_format_module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 Title : _load_format_module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 Usage : *INTERNAL Structure::IO stuff*
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 Function: Loads up (like use) a module at run time on demand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 Returns :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 sub _load_format_module {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 my ($format) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my ($module, $load, $m);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 $module = "_<Bio/Structure/IO/$format.pm";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 $load = "Bio/Structure/IO/$format.pm";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 return 1 if $main::{$module};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 require $load;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 if ( $@ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 print STDERR <<END;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $load: $format cannot be found
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Exception $@
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 For more information about the Structure::IO system please see the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 Bio::Structure::IO docs. This includes ways of checking for formats at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 compile time, not run time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 END
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 =head2 _concatenate_lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 Title : _concatenate_lines
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 Usage : $s = _concatenate_lines($line, $continuation_line)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 Function: Private. Concatenates two strings assuming that the second stems
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 from a continuation line of the first. Adds a space between both
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 unless the first ends with a dash.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Takes care of either arg being empty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 Returns : A string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 sub _concatenate_lines {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 my ($self, $s1, $s2) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 $s1 .= " " if($s1 && ($s1 !~ /-$/) && $s2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 return ($s1 ? $s1 : "") . ($s2 ? $s2 : "");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 =head2 _filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 Title : _filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 Usage : $obj->_filehandle($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 Function: This method is deprecated. Call _fh() instead.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 Returns : value of _filehandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 sub _filehandle {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 return $self->_fh(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 =head2 _guess_format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 Title : _guess_format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 Usage : $obj->_guess_format($filename)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Returns : guessed format of filename (lower case)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 sub _guess_format {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 return unless $_ = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 return 'fasta' if /\.(fasta|fast|seq|fa|fsa|nt|aa)$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 return 'genbank' if /\.(gb|gbank|genbank)$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 return 'scf' if /\.scf$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 return 'pir' if /\.pir$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 return 'embl' if /\.(embl|ebl|emb|dat)$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 return 'raw' if /\.(txt)$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 return 'gcg' if /\.gcg$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 return 'ace' if /\.ace$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 return 'bsml' if /\.(bsm|bsml)$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 return 'pdb' if /\.(ent|pdb)$/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 sub DESTROY {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 $self->close();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 sub TIEHANDLE {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 my ($class,$val) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 return bless {'structio' => $val}, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 sub READLINE {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 return $self->{'structio'}->next_seq() unless wantarray;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 my (@list, $obj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 push @list, $obj while $obj = $self->{'structio'}->next_seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 return @list;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 sub PRINT {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 $self->{'structio'}->write_seq(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575