0
|
1 #-------------------------------------------------------------------------------
|
|
2 # PACKAGE : Bio::Tools::SeqAnal
|
|
3 # PURPOSE : To provide a base class for different sequence analysis tools.
|
|
4 # AUTHOR : Steve Chervitz (sac@bioperl.org)
|
|
5 # CREATED : 27 Mar 1998
|
|
6 # REVISION: $Id: SeqAnal.pm,v 1.12 2002/10/22 07:38:46 lapp Exp $
|
|
7 # STATUS : Alpha
|
|
8 #
|
|
9 # For documentation, run this module through pod2html
|
|
10 # (preferably from Perl v5.004 or better).
|
|
11 #-------------------------------------------------------------------------------
|
|
12
|
|
13 package Bio::Tools::SeqAnal;
|
|
14
|
|
15 use Bio::Root::Object ();
|
|
16 use Bio::Root::Global qw(:std);
|
|
17
|
|
18 use strict;
|
|
19 use vars qw($ID $VERSION @ISA);
|
|
20
|
|
21 @ISA = qw( Bio::Root::Object );
|
|
22 $ID = 'Bio::Tools::SeqAnal';
|
|
23 $VERSION = 0.011;
|
|
24
|
|
25
|
|
26 ## POD Documentation:
|
|
27
|
|
28 =head1 NAME
|
|
29
|
|
30 Bio::Tools::SeqAnal - Bioperl sequence analysis base class.
|
|
31
|
|
32 =head1 SYNOPSIS
|
|
33
|
|
34 =head2 Object Creation
|
|
35
|
|
36 This module is an abstract base class. Perl will let you instantiate it,
|
|
37 but it provides little functionality on its own. This module
|
|
38 should be used via a specialized subclass. See L<_initialize()|_initialize>
|
|
39 for a description of constructor parameters.
|
|
40
|
|
41 require Bio::Tools::SeqAnal;
|
|
42
|
|
43 To run and parse a new report:
|
|
44
|
|
45 $hit = new Bio::Tools::SeqAnal ( -run => \%runParams,
|
|
46 -parse => 1);
|
|
47
|
|
48 To parse an existing report:
|
|
49
|
|
50 $hit = new Bio::Tools::SeqAnal ( -file => 'filename.data',
|
|
51 -parse => 1);
|
|
52
|
|
53 To run a report without parsing:
|
|
54
|
|
55 $hit = new Bio::Tools::SeqAnal ( -run => \%runParams
|
|
56 );
|
|
57
|
|
58 To read an existing report without parsing:
|
|
59
|
|
60 $hit = new Bio::Tools::SeqAnal ( -file => 'filename.data',
|
|
61 -read => 1);
|
|
62
|
|
63
|
|
64 =head1 INSTALLATION
|
|
65
|
|
66 This module is included with the central Bioperl distribution:
|
|
67
|
|
68 http://bio.perl.org/Core/Latest
|
|
69 ftp://bio.perl.org/pub/DIST
|
|
70
|
|
71 Follow the installation instructions included in the README file.
|
|
72
|
|
73
|
|
74 =head1 DESCRIPTION
|
|
75
|
|
76 Bio::Tools::SeqAnal.pm is a base class for specialized
|
|
77 sequence analysis modules such as B<Bio::Tools::Blast> and B<Bio::Tools::Fasta>.
|
|
78 It provides some basic data and functionalities that are not unique to
|
|
79 a specialized module such as:
|
|
80
|
|
81 =over 4
|
|
82
|
|
83 =item * reading raw data into memory.
|
|
84
|
|
85 =item * storing name and version of the program.
|
|
86
|
|
87 =item * storing name of the query sequence.
|
|
88
|
|
89 =item * storing name and version of the database.
|
|
90
|
|
91 =item * storing & determining the date on which the analysis was performed.
|
|
92
|
|
93 =item * basic file manipulations (compress, uncompress, delete).
|
|
94
|
|
95 =back
|
|
96
|
|
97 Some of these functionalities (reading, file maipulation) are inherited from
|
|
98 B<Bio::Root::Object>, from which Bio::Tools::SeqAnal.pm derives.
|
|
99
|
|
100
|
|
101
|
|
102 =head1 RUN, PARSE, and READ
|
|
103
|
|
104 A SeqAnal.pm object can be created using one of three modes: run, parse, or read.
|
|
105
|
|
106 MODE DESCRIPTION
|
|
107 ----- -----------
|
|
108 run Run a new sequence analysis report. New results can then
|
|
109 be parsed or saved for analysis later.
|
|
110
|
|
111 parse Parse the data from a sequence analysis report loading it
|
|
112 into the SeqAnal.pm object.
|
|
113
|
|
114 read Read in data from an existing raw analysis report without
|
|
115 parsing it. In the future, this may also permit persistent
|
|
116 SeqAnal.pm objects. This mode is considered experimental.
|
|
117
|
|
118 The mode is set by supplying switches to the constructor, see L<_initialize()|_initialize>.
|
|
119
|
|
120
|
|
121
|
|
122 A key feature of SeqAnal.pm is the ability to access raw data in a
|
|
123 generic fashion. Regardless of what sequence analysis method is used,
|
|
124 the raw data always need to be read into memory. The SeqAnal.pm class
|
|
125 utilizes the L<Bio::Root::Object::read()|Bio::Root::Object> method inherited from
|
|
126 B<Bio::Root::Object> to permit the following:
|
|
127
|
|
128 =over 4
|
|
129
|
|
130 =item * read from a file or STDIN.
|
|
131
|
|
132 =item * read a single record or a stream containing multiple records.
|
|
133
|
|
134 =item * specify a record separator.
|
|
135
|
|
136 =item * store all input data in memory or process the data stream as it is being read.
|
|
137
|
|
138 =back
|
|
139
|
|
140 By permitting the parsing of data as it is being read, each record can be
|
|
141 analyzed as it is being read and saved or discarded as necessary.
|
|
142 This can be useful when cruching through thousands of reports.
|
|
143 For examples of this, see the L<parse()|parse> methods defined in B<Bio::Tools::Blast> and
|
|
144 B<Bio::Tools::Fasta>.
|
|
145
|
|
146
|
|
147 =head2 Parsing & Running
|
|
148
|
|
149 Parsing and running of sequence analysis reports must be implemented for each
|
|
150 specific subclass of SeqAnal.pm. No-op stubs ("virtual methods") are provided here for
|
|
151 the L<parse()|parse> and L<run()|run> methods. See B<Bio::Tools::Blast> and B<Bio::Tools::Fasta>
|
|
152 for examples.
|
|
153
|
|
154
|
|
155 =head1 DEPENDENCIES
|
|
156
|
|
157 Bio::Tools::SeqAnal.pm is a concrete class that inherits from B<Bio::Root::Object>.
|
|
158 This module also makes use of a number of functionalities inherited from
|
|
159 B<Bio::Root::Object> (file manipulations such as reading, compressing, decompressing,
|
|
160 deleting, and obtaining date.
|
|
161
|
|
162
|
|
163 =head1 FEEDBACK
|
|
164
|
|
165 =head2 Mailing Lists
|
|
166
|
|
167 User feedback is an integral part of the evolution of this and other Bioperl modules.
|
|
168 Send your comments and suggestions preferably to one of the Bioperl mailing lists.
|
|
169 Your participation is much appreciated.
|
|
170
|
|
171 bioperl-l@bioperl.org - General discussion
|
|
172 http://bio.perl.org/MailList.html - About the mailing lists
|
|
173
|
|
174 =head2 Reporting Bugs
|
|
175
|
|
176 Report bugs to the Bioperl bug tracking system to help us keep track the bugs and
|
|
177 their resolution. Bug reports can be submitted via email or the web:
|
|
178
|
|
179 bioperl-bugs@bio.perl.org
|
|
180 http://bugzilla.bioperl.org/
|
|
181
|
|
182 =head1 AUTHOR
|
|
183
|
|
184 Steve Chervitz, sac@bioperl.org
|
|
185
|
|
186 See the L<FEEDBACK | FEEDBACK> section for where to send bug reports and comments.
|
|
187
|
|
188 =head1 VERSION
|
|
189
|
|
190 Bio::Tools::SeqAnal.pm, 0.011
|
|
191
|
|
192 =head1 COPYRIGHT
|
|
193
|
|
194 Copyright (c) 1998 Steve Chervitz. All Rights Reserved.
|
|
195 This module is free software; you can redistribute it and/or
|
|
196 modify it under the same terms as Perl itself.
|
|
197
|
|
198
|
|
199 =head1 SEE ALSO
|
|
200
|
|
201 http://bio.perl.org/Projects/modules.html - Online module documentation
|
|
202 http://bio.perl.org/Projects/Blast/ - Bioperl Blast Project
|
|
203 http://bio.perl.org/ - Bioperl Project Homepage
|
|
204
|
|
205
|
|
206 =cut
|
|
207
|
|
208
|
|
209
|
|
210 #
|
|
211 ##
|
|
212 ###
|
|
213 #### END of main POD documentation.
|
|
214 ###
|
|
215 ##
|
|
216 #
|
|
217
|
|
218 =head1 APPENDIX
|
|
219
|
|
220 Methods beginning with a leading underscore are considered private
|
|
221 and are intended for internal use by this module. They are
|
|
222 B<not> considered part of the public interface and are described here
|
|
223 for documentation purposes only.
|
|
224
|
|
225 =cut
|
|
226
|
|
227 ##############################################################################
|
|
228 ## CONSTRUCTOR ##
|
|
229 ##############################################################################
|
|
230
|
|
231
|
|
232 =head2 _initialize
|
|
233
|
|
234 Usage : n/a; automatically called by Bio::Root::Object::new()
|
|
235 Purpose : Calls private methods to extract the raw report data,
|
|
236 : Calls superclass constructor first (Bio::Root::Object.pm).
|
|
237 Returns : string containing the make parameter value.
|
|
238 Argument : Named parameters (TAGS CAN BE ALL UPPER OR ALL LOWER CASE).
|
|
239 : The SeqAnal.pm constructor only processes the following
|
|
240 : parameters passed from new()
|
|
241 : -RUN => hash reference for named parameters to be used
|
|
242 : for running a sequence analysis program.
|
|
243 : These are dereferenced and passed to the run() method.
|
|
244 : -PARSE => boolean,
|
|
245 : -READ => boolean,
|
|
246 :
|
|
247 : If -RUN is HASH ref, the run() method will be called with the
|
|
248 : dereferenced hash.
|
|
249 : If -PARSE is true, all parameters passed from new() are passed
|
|
250 : to the parse() method. This occurs after the run method call
|
|
251 : to enable combined running + parsing.
|
|
252 : If -READ is true, all parameters passed from new() are passed
|
|
253 : to the read() method.
|
|
254 : Either -PARSE or -READ should be true, not both.
|
|
255 Comments : Does not calls _rearrange() to handle parameters since only
|
|
256 : a few are required and there may be potentially many.
|
|
257
|
|
258 See Also : B<Bio::Root::Object::new()>, B<Bio::Root::Object::_rearrange()>
|
|
259
|
|
260 =cut
|
|
261
|
|
262 #-----------------
|
|
263 sub _initialize {
|
|
264 #-----------------
|
|
265 my( $self, %param ) = @_;
|
|
266
|
|
267 my $make = $self->SUPER::_initialize(%param);
|
|
268
|
|
269 my($read, $parse, $runparam) = (
|
|
270 ($param{-READ}||$param{'-read'}), ($param{-PARSE}||$param{'-parse'}),
|
|
271 ($param{-RUN}||$param{'-run'})
|
|
272 );
|
|
273
|
|
274 # $self->_rearrange([qw(READ PARSE RUN)], @param);
|
|
275
|
|
276 # Issue: How to keep all the arguments for running the analysis
|
|
277 # separate from other arguments needed for parsing the results, etc?
|
|
278 # Solution: place all the run arguments in a separate hash.
|
|
279
|
|
280 $self->run(%$runparam) if ref $runparam eq 'HASH';
|
|
281
|
|
282 if($parse) { $self->parse(%param); }
|
|
283 elsif($read) { $self->read(%param) }
|
|
284
|
|
285 $make;
|
|
286 }
|
|
287
|
|
288 #--------------
|
|
289 sub destroy {
|
|
290 #--------------
|
|
291 my $self=shift;
|
|
292 $DEBUG==2 && print STDERR "DESTROYING $self ${\$self->name}";
|
|
293 undef $self->{'_rawData'};
|
|
294 $self->SUPER::destroy;
|
|
295 }
|
|
296
|
|
297
|
|
298 ###############################################################################
|
|
299 # ACCESSORS
|
|
300 ###############################################################################
|
|
301
|
|
302 # The mode of the SeqAnal object is no longer explicitly set.
|
|
303 # This simplifies the interface somewhat.
|
|
304
|
|
305 ##----------------------------------------------------------------------
|
|
306 #=head2 mode()
|
|
307
|
|
308 # Usage : $object->mode();
|
|
309 # :
|
|
310 # Purpose : Set/Get the mode for the sequence analysis object.
|
|
311 # :
|
|
312 # Returns : String
|
|
313 # :
|
|
314 # Argument : n/a
|
|
315 # :
|
|
316 # :
|
|
317 # Comments : The mode specifies how much detail to extract from the
|
|
318 # : sequence analysis report. There are three modes:
|
|
319 # :
|
|
320 # : 'parse' -- Parse the sequence analysis output data.
|
|
321 # :
|
|
322 # : 'read' -- Reads in the raw report but does not
|
|
323 # : attempt to parse it. Useful when you just
|
|
324 # : want to work with the output as-is
|
|
325 # : (e.g., create HTML-formatted output).
|
|
326 # :
|
|
327 # : 'run' -- Generates a new report.
|
|
328 # :
|
|
329 # : Allowable modes are defined by the exported package global array
|
|
330 # : @SeqAnal_modes.
|
|
331 #
|
|
332 #See Also : _set_mode()
|
|
333 #=cut
|
|
334 ##----------------------------------------------------------------------
|
|
335 #sub mode {
|
|
336 # my $self = shift;
|
|
337 # if(@_) { $self->{'_mode'} = lc(shift); }
|
|
338 # $self->{'_mode'};
|
|
339 #}
|
|
340 #
|
|
341
|
|
342
|
|
343 =head2 best
|
|
344
|
|
345 Usage : $object->best();
|
|
346 Purpose : Set/Get the indicator for processing only the best match.
|
|
347 Returns : Boolean (1 | 0)
|
|
348 Argument : n/a
|
|
349
|
|
350 =cut
|
|
351
|
|
352 #----------
|
|
353 sub best {
|
|
354 #----------
|
|
355 my $self = shift;
|
|
356 if(@_) { $self->{'_best'} = shift; }
|
|
357 $self->{'_best'};
|
|
358 }
|
|
359
|
|
360
|
|
361
|
|
362 =head2 _set_db_stats
|
|
363
|
|
364 Usage : $object->_set_db_stats(<named parameters>);
|
|
365 Purpose : Set stats about the database searched.
|
|
366 Returns : String
|
|
367 Argument : named parameters:
|
|
368 : -LETTERS => <int> (number of letters in db)
|
|
369 : -SEQS => <int> (number of sequences in db)
|
|
370
|
|
371 =cut
|
|
372
|
|
373 #-------------------
|
|
374 sub _set_db_stats {
|
|
375 #-------------------
|
|
376 my ($self, %param) = @_;
|
|
377
|
|
378 $self->{'_db'} ||= $param{-NAME} || '';
|
|
379 $self->{'_dbRelease'} = $param{-RELEASE} || '';
|
|
380 ($self->{'_dbLetters'} = $param{-LETTERS} || 0) =~ s/,//g;
|
|
381 ($self->{'_dbSeqs'} = $param{-SEQS} || 0) =~ s/,//g;
|
|
382
|
|
383 }
|
|
384
|
|
385
|
|
386 =head2 database
|
|
387
|
|
388 Usage : $object->database();
|
|
389 Purpose : Set/Get the name of the database searched.
|
|
390 Returns : String
|
|
391 Argument : n/a
|
|
392
|
|
393 =cut
|
|
394
|
|
395 #---------------
|
|
396 sub database {
|
|
397 #---------------
|
|
398 my $self = shift;
|
|
399 if(@_) { $self->{'_db'} = shift; }
|
|
400 $self->{'_db'};
|
|
401 }
|
|
402
|
|
403
|
|
404
|
|
405 =head2 database_release
|
|
406
|
|
407 Usage : $object->database_release();
|
|
408 Purpose : Set/Get the release date of the queried database.
|
|
409 Returns : String
|
|
410 Argument : n/a
|
|
411
|
|
412 =cut
|
|
413
|
|
414 #-----------------------
|
|
415 sub database_release {
|
|
416 #-----------------------
|
|
417 my $self = shift;
|
|
418 if(@_) { $self->{'_dbRelease'} = shift; }
|
|
419 $self->{'_dbRelease'};
|
|
420 }
|
|
421
|
|
422
|
|
423 =head2 database_letters
|
|
424
|
|
425 Usage : $object->database_letters();
|
|
426 Purpose : Set/Get the number of letters in the queried database.
|
|
427 Returns : Integer
|
|
428 Argument : n/a
|
|
429
|
|
430 =cut
|
|
431
|
|
432 #----------------------
|
|
433 sub database_letters {
|
|
434 #----------------------
|
|
435 my $self = shift;
|
|
436 if(@_) { $self->{'_dbLetters'} = shift; }
|
|
437 $self->{'_dbLetters'};
|
|
438 }
|
|
439
|
|
440
|
|
441
|
|
442 =head2 database_seqs
|
|
443
|
|
444 Usage : $object->database_seqs();
|
|
445 Purpose : Set/Get the number of sequences in the queried database.
|
|
446 Returns : Integer
|
|
447 Argument : n/a
|
|
448
|
|
449 =cut
|
|
450
|
|
451 #------------------
|
|
452 sub database_seqs {
|
|
453 #------------------
|
|
454 my $self = shift;
|
|
455 if(@_) { $self->{'_dbSeqs'} = shift; }
|
|
456 $self->{'_dbSeqs'};
|
|
457 }
|
|
458
|
|
459
|
|
460
|
|
461 =head2 set_date
|
|
462
|
|
463 Usage : $object->set_date([<string>]);
|
|
464 Purpose : Set the name of the date on which the analysis was performed.
|
|
465 Argument : The optional string argument ca be the date or the
|
|
466 : string 'file' in which case the date will be obtained from
|
|
467 : the report file
|
|
468 Returns : String
|
|
469 Throws : Exception if no date is supplied and no file exists.
|
|
470 Comments : This method attempts to set the date in either of two ways:
|
|
471 : 1) using data passed in as an argument,
|
|
472 : 2) using the Bio::Root::Utilities.pm file_date() method
|
|
473 : on the output file.
|
|
474 : Another way is to extract the date from the contents of the
|
|
475 : raw output data. Such parsing will have to be specialized
|
|
476 : for different seq analysis reports. Override this method
|
|
477 : to create such custom parsing code if desired.
|
|
478
|
|
479 See Also : L<date()|date>, B<Bio::Root::Object::file_date()>
|
|
480
|
|
481 =cut
|
|
482
|
|
483 #---------------
|
|
484 sub set_date {
|
|
485 #---------------
|
|
486 my $self = shift;
|
|
487 my $date = shift;
|
|
488 my ($file);
|
|
489
|
|
490 if( !$date and ($file = $self->file)) {
|
|
491 # If no date is passed and a file exists, determine date from the file.
|
|
492 # (provided by superclass Bio::Root::Object.pm)
|
|
493 eval {
|
|
494 $date = $self->SUPER::file_date(-FMT => 'd m y');
|
|
495 };
|
|
496 if($@) {
|
|
497 $date = 'UNKNOWN';
|
|
498 $self->warn("Can't set date of report.");
|
|
499 }
|
|
500 }
|
|
501 $self->{'_date'} = $date;
|
|
502 }
|
|
503
|
|
504
|
|
505
|
|
506 =head2 date
|
|
507
|
|
508 Usage : $object->date();
|
|
509 Purpose : Get the name of the date on which the analysis was performed.
|
|
510 Returns : String
|
|
511 Argument : n/a
|
|
512 Comments : This method is not a combination set/get, it only gets.
|
|
513
|
|
514 See Also : L<set_date()|set_date>
|
|
515
|
|
516 =cut
|
|
517
|
|
518 #----------
|
|
519 sub date { my $self = shift; $self->{'_date'}; }
|
|
520 #----------
|
|
521
|
|
522
|
|
523
|
|
524
|
|
525 =head2 length
|
|
526
|
|
527 Usage : $object->length();
|
|
528 Purpose : Set/Get the length of the query sequence (number of monomers).
|
|
529 Returns : Integer
|
|
530 Argument : n/a
|
|
531 Comments : Developer note: when using the built-in length function within
|
|
532 : this module, call it as CORE::length().
|
|
533
|
|
534 =cut
|
|
535
|
|
536 #------------
|
|
537 sub length {
|
|
538 #------------
|
|
539 my $self = shift;
|
|
540 if(@_) { $self->{'_length'} = shift; }
|
|
541 $self->{'_length'};
|
|
542 }
|
|
543
|
|
544 =head2 program
|
|
545
|
|
546 Usage : $object->program();
|
|
547 Purpose : Set/Get the name of the sequence analysis (BLASTP, FASTA, etc.)
|
|
548 Returns : String
|
|
549 Argument : n/a
|
|
550
|
|
551 =cut
|
|
552
|
|
553 #-------------
|
|
554 sub program {
|
|
555 #-------------
|
|
556 my $self = shift;
|
|
557 if(@_) { $self->{'_prog'} = shift; }
|
|
558 $self->{'_prog'};
|
|
559 }
|
|
560
|
|
561
|
|
562
|
|
563 =head2 program_version
|
|
564
|
|
565 Usage : $object->program_version();
|
|
566 Purpose : Set/Get the version number of the sequence analysis program.
|
|
567 : (e.g., 1.4.9MP, 2.0a19MP-WashU).
|
|
568 Returns : String
|
|
569 Argument : n/a
|
|
570
|
|
571 =cut
|
|
572
|
|
573 #---------------------
|
|
574 sub program_version {
|
|
575 #---------------------
|
|
576 my $self = shift;
|
|
577 if(@_) { $self->{'_progVersion'} = shift; }
|
|
578 $self->{'_progVersion'};
|
|
579 }
|
|
580
|
|
581
|
|
582 =head2 query
|
|
583
|
|
584 Usage : $name = $object->query();
|
|
585 Purpose : Get the name of the query sequence used to generate the report.
|
|
586 Argument : n/a
|
|
587 Returns : String
|
|
588 Comments : Equivalent to $object->name().
|
|
589
|
|
590 =cut
|
|
591
|
|
592 #--------
|
|
593 sub query { my $self = shift; $self->name; }
|
|
594 #--------
|
|
595
|
|
596
|
|
597 =head2 query_desc
|
|
598
|
|
599 Usage : $object->desc();
|
|
600 Purpose : Set/Get the description of the query sequence for the analysis.
|
|
601 Returns : String
|
|
602 Argument : n/a
|
|
603
|
|
604 =cut
|
|
605
|
|
606 #--------------
|
|
607 sub query_desc {
|
|
608 #--------------
|
|
609 my $self = shift;
|
|
610 if(@_) { $self->{'_qDesc'} = shift; }
|
|
611 $self->{'_qDesc'};
|
|
612 }
|
|
613
|
|
614
|
|
615
|
|
616
|
|
617 =head2 display
|
|
618
|
|
619 Usage : $object->display(<named parameters>);
|
|
620 Purpose : Display information about Bio::Tools::SeqAnal.pm data members.
|
|
621 : Overrides Bio::Root::Object::display().
|
|
622 Example : $object->display(-SHOW=>'stats');
|
|
623 Argument : Named parameters: -SHOW => 'file' | 'stats'
|
|
624 : -WHERE => filehandle (default = STDOUT)
|
|
625 Returns : n/a
|
|
626 Status : Experimental
|
|
627
|
|
628 See Also : L<_display_stats()|_display_stats>, L<_display_file()|_display_file>, B<Bio::Root::Object::display()>
|
|
629
|
|
630 =cut
|
|
631
|
|
632 #---------------
|
|
633 sub display {
|
|
634 #---------------
|
|
635 my( $self, %param ) = @_;
|
|
636
|
|
637 $self->SUPER::display(%param);
|
|
638
|
|
639 my $OUT = $self->fh();
|
|
640 $self->show =~ /file/i and $self->_display_file($OUT);
|
|
641 1;
|
|
642 }
|
|
643
|
|
644
|
|
645
|
|
646 =head2 _display_file
|
|
647
|
|
648 Usage : n/a; called automatically by display()
|
|
649 Purpose : Print the contents of the raw report file.
|
|
650 Example : n/a
|
|
651 Argument : one argument = filehandle object.
|
|
652 Returns : true (1)
|
|
653 Status : Experimental
|
|
654
|
|
655 See Also : L<display()|display>
|
|
656
|
|
657 =cut
|
|
658
|
|
659 #------------------
|
|
660 sub _display_file {
|
|
661 #------------------
|
|
662 my( $self, $OUT) = @_;
|
|
663
|
|
664 print $OUT scalar($self->read);
|
|
665 1;
|
|
666 }
|
|
667
|
|
668
|
|
669
|
|
670 =head2 _display_stats
|
|
671
|
|
672 Usage : n/a; called automatically by display()
|
|
673 Purpose : Display information about Bio::Tools::SeqAnal.pm data members.
|
|
674 : Prints the file name, program, program version, database name,
|
|
675 : database version, query name, query length,
|
|
676 Example : n/a
|
|
677 Argument : one argument = filehandle object.
|
|
678 Returns : printf call.
|
|
679 Status : Experimental
|
|
680
|
|
681 See Also : B<Bio::Root::Object::display()>
|
|
682
|
|
683 =cut
|
|
684
|
|
685 #--------------------
|
|
686 sub _display_stats {
|
|
687 #--------------------
|
|
688 my( $self, $OUT ) = @_;
|
|
689
|
|
690 printf( $OUT "\n%-15s: %s\n", "QUERY NAME", $self->query ||'UNKNOWN' );
|
|
691 printf( $OUT "%-15s: %s\n", "QUERY DESC", $self->query_desc || 'UNKNOWN');
|
|
692 printf( $OUT "%-15s: %s\n", "LENGTH", $self->length || 'UNKNOWN');
|
|
693 printf( $OUT "%-15s: %s\n", "FILE", $self->file || 'STDIN');
|
|
694 printf( $OUT "%-15s: %s\n", "DATE", $self->date || 'UNKNOWN');
|
|
695 printf( $OUT "%-15s: %s\n", "PROGRAM", $self->program || 'UNKNOWN');
|
|
696 printf( $OUT "%-15s: %s\n", "VERSION", $self->program_version || 'UNKNOWN');
|
|
697 printf( $OUT "%-15s: %s\n", "DB-NAME", $self->database || 'UNKNOWN');
|
|
698 printf( $OUT "%-15s: %s\n", "DB-RELEASE", ($self->database_release || 'UNKNOWN'));
|
|
699 printf( $OUT "%-15s: %s\n", "DB-LETTERS", ($self->database_letters) ? $self->database_letters : 'UNKNOWN');
|
|
700 printf( $OUT "%-15s: %s\n", "DB-SEQUENCES", ($self->database_seqs) ? $self->database_seqs : 'UNKNOWN');
|
|
701 }
|
|
702
|
|
703
|
|
704 #####################################################################################
|
|
705 ## VIRTUAL METHODS ##
|
|
706 #####################################################################################
|
|
707
|
|
708 =head1 VIRTUAL METHODS
|
|
709
|
|
710 =head2 parse
|
|
711
|
|
712 Usage : $object->parse( %named_parameters )
|
|
713 Purpose : Parse a raw sequence analysis report.
|
|
714 Returns : Integer (number of sequence analysis reports parsed).
|
|
715 Argument : Named parameters.
|
|
716 Throws : Exception: virtual method not defined.
|
|
717 : Propagates any exception thrown by read()
|
|
718 Status : Virtual
|
|
719 Comments : This is virtual method that should be overridden to
|
|
720 : parse a specific type of data.
|
|
721
|
|
722 See Also : B<Bio::Root::Object::read()>
|
|
723
|
|
724 =cut
|
|
725
|
|
726 #---------
|
|
727 sub parse {
|
|
728 #---------
|
|
729 my ($self, @param) = @_;
|
|
730
|
|
731 $self->throw("Virtual method parse() not defined ${ref($self)} objects.");
|
|
732
|
|
733 # The first step in parsing is reading in the data:
|
|
734 $self->read(@param);
|
|
735 }
|
|
736
|
|
737
|
|
738
|
|
739 =head2 run
|
|
740
|
|
741 Usage : $object->run( %named_parameters )
|
|
742 Purpose : Run a sequence analysis program on one or more sequences.
|
|
743 Returns : n/a
|
|
744 : Run mode should be configurable to return a parsed object or
|
|
745 : the raw results data.
|
|
746 Argument : Named parameters:
|
|
747 Throws : Exception: virtual method not defined.
|
|
748 Status : Virtual
|
|
749
|
|
750 =cut
|
|
751
|
|
752 #--------
|
|
753 sub run {
|
|
754 #--------
|
|
755 my ($self, %param) = @_;
|
|
756 $self->throw("Virtual method run() not defined ${ref($self)} objects.");
|
|
757 }
|
|
758
|
|
759
|
|
760 1;
|
|
761 __END__
|
|
762
|
|
763 #####################################################################################
|
|
764 # END OF CLASS #
|
|
765 #####################################################################################
|
|
766
|
|
767
|
|
768 =head1 FOR DEVELOPERS ONLY
|
|
769
|
|
770 =head2 Data Members
|
|
771
|
|
772 Information about the various data members of this module is provided for those
|
|
773 wishing to modify or understand the code. Two things to bear in mind:
|
|
774
|
|
775 =over 4
|
|
776
|
|
777 =item 1 Do NOT rely on these in any code outside of this module.
|
|
778
|
|
779 All data members are prefixed with an underscore to signify that they are private.
|
|
780 Always use accessor methods. If the accessor doesn't exist or is inadequate,
|
|
781 create or modify an accessor (and let me know, too!).
|
|
782
|
|
783 =item 2 This documentation may be incomplete and out of date.
|
|
784
|
|
785 It is easy for these data member descriptions to become obsolete as
|
|
786 this module is still evolving. Always double check this info and search
|
|
787 for members not described here.
|
|
788
|
|
789 =back
|
|
790
|
|
791 An instance of Bio::Tools::SeqAnal.pm is a blessed reference to a hash containing
|
|
792 all or some of the following fields:
|
|
793
|
|
794 FIELD VALUE
|
|
795 --------------------------------------------------------------
|
|
796 _file Full path to file containing raw sequence analysis report.
|
|
797
|
|
798 _mode Affects how much detail to extract from the raw report.
|
|
799 Future mode will also distinguish 'running' from 'parsing'
|
|
800
|
|
801
|
|
802 THE FOLLOWING MAY BE EXTRACTABLE FROM THE RAW REPORT FILE:
|
|
803
|
|
804 _prog Name of the sequence analysis program.
|
|
805
|
|
806 _progVersion Version number of the program.
|
|
807
|
|
808 _db Database searched.
|
|
809
|
|
810 _dbRelease Version or date of the database searched.
|
|
811
|
|
812 _dbLetters Total number of letters in the database.
|
|
813
|
|
814 _dbSequences Total number of sequences in the database.
|
|
815
|
|
816 _query Name of query sequence.
|
|
817
|
|
818 _length Length of the query sequence.
|
|
819
|
|
820 _date Date on which the analysis was performed.
|
|
821
|
|
822
|
|
823 INHERITED DATA MEMBERS
|
|
824
|
|
825 _name From Bio::Root::Object.pm. String representing the name of the query sequence.
|
|
826 Typically obtained from the report file.
|
|
827
|
|
828 _parent From Bio::Root::Object.pm. This member contains a reference to the
|
|
829 object to which this seq anal report belongs. Optional & experimenta.
|
|
830 (E.g., a protein object could create and own a Blast object.)
|
|
831
|
|
832 =cut
|
|
833
|
|
834 1;
|