annotate variant_effect_predictor/Bio/Tools/HMMER/Results.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: Results.pm,v 1.22.2.1 2003/01/07 13:58:01 jason Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # Perl Module for HMMResults
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Ewan Birney <birney@sanger.ac.uk>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 #Copyright Genome Research Limited (1997).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 Bio::Tools::HMMER::Results - Object representing HMMER output results
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 # parse a hmmsearch file (can also parse a hmmpfam file)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 $res = new Bio::Tools::HMMER::Results( -file => 'output.hmm' , -type => 'hmmsearch');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18 # print out the results for each sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 foreach $seq ( $res->each_Set ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 print "Sequence bit score is",$seq->bits,"\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 foreach $domain ( $seq->each_Domain ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 print " Domain start ",$domain->start," end ",$domain->end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 " score ",$domain->bits,"\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 # new result object on a sequence/domain cutoff of 25 bits sequence, 15 bits domain
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 $newresult = $res->filter_on_cutoff(25,15);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 # alternative way of getting out all domains directly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 foreach $domain ( $res->each_Domain ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 print "Domain on ",$domain->seq_id," with score ",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 $domain->bits," evalue ",$domain->evalue,"\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 This object represents HMMER output, either from hmmsearch or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 hmmpfam. For hmmsearch, a series of HMMER::Set objects are made, one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 for each sequence, which have the the bits score for the object. For
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 hmmpfam searches, only one Set object is made.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 These objects come from the original HMMResults modules used
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 internally in Pfam, written by Ewan. Ewan then converted them to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 bioperl objects in 1999. That conversion is meant to be backwardly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 compatible, but may not be (caveat emptor).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 User feedback is an integral part of the evolution of this and other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 Bioperl modules. Send your comments and suggestions preferably to one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 of the Bioperl mailing lists. Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 http://www.bioperl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 the bugs and their resolution. Bug reports can be submitted via email
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 http://www.bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 =head1 AUTHOR - Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 Email birney@ebi.ac.uk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 =head1 CONTRIBUTORS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 Jason Stajich, jason@bioperl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 package Bio::Tools::HMMER::Results;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 use Carp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 use Bio::Root::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 use Bio::Root::IO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 use Bio::Tools::HMMER::Domain;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 use Bio::Tools::HMMER::Set;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 use Bio::SeqAnalysisParserI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 use Symbol;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 @ISA = qw(Bio::Root::Root Bio::Root::IO Bio::SeqAnalysisParserI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 my($class,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 my $self = $class->SUPER::new(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 $self->{'domain'} = []; # array of HMMUnits
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 $self->{'seq'} = {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 my ($parsetype) = $self->_rearrange([qw(TYPE)],@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 $self->_initialize_io(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 if( !defined $parsetype ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 $self->throw("No parse type provided. should be hmmsearch or hmmpfam");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 $self->parsetype($parsetype);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 if( defined $self->_fh() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 if( $parsetype eq 'hmmsearch' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 $self->_parse_hmmsearch($self->_fh());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 } elsif ( $parsetype eq 'hmmpfam' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 $self->_parse_hmmpfam($self->_fh());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 $self->throw("Did not recoginise type $parsetype");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 return $self; # success - we hope!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 =head2 next_feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 Title : next_feature
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 Usage : while( my $feat = $res->next_feature ) { # do something }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 Function: SeqAnalysisParserI implementing function
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 Returns : A Bio::SeqFeatureI compliant object, in this case,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 each DomainUnit object, ie, flattening the Sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 aspect of this.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 sub next_feature{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 my ($self) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 if( $self->{'_started_next_feature'} == 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 return shift @{$self->{'_next_feature_array'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 $self->{'_started_next_feature'} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 my @array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 foreach my $seq ( $self->each_Set() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 foreach my $unit ( $seq->each_Domain() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 push(@array,$unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 my $res = shift @array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 $self->{'_next_feature_array'} = \@array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 return $res;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 $self->throw("Should not reach here! Error!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 =head2 number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Title : number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 Usage : print "There are ",$res->number," domains hit\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Function: provides the number of domains in the HMMER report
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 sub number {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 my @val;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 my $ref;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 $ref = $self->{'domain'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 @val = @{$self->{'domain'}};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 return scalar @val;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 =head2 seqfile
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Title : seqfile
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 Usage : $obj->seqfile($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Returns : value of seqfile
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 sub seqfile{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 $self->{'seqfile'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 return $self->{'seqfile'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 =head2 hmmfile
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 Title : hmmfile
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 Usage : $obj->hmmfile($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 Returns : value of hmmfile
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 sub hmmfile{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 $self->{'hmmfile'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 return $self->{'hmmfile'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 =head2 add_Domain
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 Title : add_Domain
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 Usage : $res->add_Domain($unit)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 Function: adds a domain to the results array. Mainly used internally.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 Args : A Bio::Tools::HMMER::Domain
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 sub add_Domain {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 my $unit = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 my $name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 $name = $unit->seq_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 if( ! exists $self->{'seq'}->{$name} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 $self->warn("Adding a domain of $name but with no HMMSequence. Will be kept in domain array but not added to a HMMSequence");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 $self->{'seq'}->{$name}->add_Domain($unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 push(@{$self->{'domain'}},$unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 =head2 each_Domain
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 Title : each_Domain
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 Usage : foreach $domain ( $res->each_Domain() )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 Function: array of Domain units which are held in this report
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 Returns : array
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 sub each_Domain {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 my (@arr,$u);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 foreach $u ( @{$self->{'domain'}} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 push(@arr,$u);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 return @arr;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 =head2 domain_bits_cutoff_from_evalue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 Title : domain_bits_cutoff_from_evalue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 Usage : $cutoff = domain_bits_cutoff_from_evalue(0.01);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 Function: return a bits cutoff from an evalue using the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 scores here. Somewhat interesting logic:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 Find the two bit score which straddle the evalue
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 if( 25 is between these two points) return 25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 else return the midpoint.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 This logic tries to ensure that with large signal to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 noise separation one still has sensible 25 bit cutoff
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 sub domain_bits_cutoff_from_evalue {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 my $eval = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 my ($dom,$prev,@doms,$cutoff,$sep,$seen);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 @doms = $self->each_Domain;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 @doms = map { $_->[0] }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 sort { $b->[1] <=> $a->[1] }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 map { [ $_, $_->bits] } @doms;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 $seen = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 foreach $_ ( @doms ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 if( $_->evalue > $eval ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 $seen = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 $dom = $_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 $prev = $_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 if( ! defined $prev || $seen == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 $self->throw("Evalue is either above or below the list...");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 $sep = $prev->bits - $dom->bits ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 if( $sep < 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 return $prev->bits();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 if( $dom->bits < 25 && $prev->bits > 25 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 return 25;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 return int( $dom->bits + $sep/2 ) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 sub dictate_hmm_acc {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 my $acc = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 my ($unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 foreach $unit ( $self->eachHMMUnit() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 $unit->hmmacc($acc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 =head2 write_FT_output
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 Title : write_FT_output
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 Usage : $res->write_FT_output(\*STDOUT,'DOMAIN')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 Function: writes feature table output ala swissprot
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 sub write_FT_output {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 my $file = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 my $idt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 my ($seq,$unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 if( !defined $idt ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 $idt = "DOMAIN";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 foreach $seq ( $self->each_Set() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 print $file sprintf("ID %s\n",$seq->name());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 foreach $unit ( $seq->each_Domain() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 print $file sprintf("FT %s %d %d %s\n",$idt,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 $unit->start,$unit->end,$unit->hmmname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 print $file "//\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 =head2 filter_on_cutoff
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 Title : filter_on_cutoff
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 Usage : $newresults = $results->filter_on_cutoff(25,15);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 Function: Produces a new HMMER::Results module which has
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 been trimmed at the cutoff.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 Returns : a Bio::Tools::HMMER::Results module
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 Args : sequence cutoff and domain cutoff. in bits score
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 if you want one cutoff, simply use same number both places
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 sub filter_on_cutoff {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386 my $seqthr = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 my $domthr = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 my ($new,$seq,$unit,@array,@narray);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 if( !defined $domthr ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 $self->throw("hmmresults filter on cutoff needs two arguments");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 $new = Bio::Tools::HMMER::Results->new(-type => $self->parsetype);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 foreach $seq ( $self->each_Set()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 next if( $seq->bits() < $seqthr );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 $new->add_Set($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 foreach $unit ( $seq->each_Domain() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 next if( $unit->bits() < $domthr );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 $new->add_Domain($unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 $new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 =head2 write_ascii_out
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 Title : write_ascii_out
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 Usage : $res->write_ascii_out(\*STDOUT)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 Function: writes as
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 seq seq_start seq_end model-acc model_start model_end model_name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 FIXME: Now that we have no modelacc, this is probably a bad thing.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 # writes as seq sstart send modelacc hstart hend modelname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 sub write_ascii_out {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 my $fh = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 my ($unit,$seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 if( !defined $fh) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 $fh = \*STDOUT;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 foreach $seq ( $self->each_Set()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 foreach $unit ( $seq->each_Domain()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 print $fh sprintf("%s %4d %4d %s %4d %4d %4.2f %4.2g %s\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 $unit->seq_id(),$unit->start(),$unit->end(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 $unit->hmmacc,$unit->hstart,$unit->hend,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 $unit->bits,$unit->evalue,$unit->hmmname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 =head2 write_GDF_bits
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 Title : write_GDF_bits
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 Usage : $res->write_GDF_bits(25,15,\*STDOUT)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 Function: writes GDF format with a sequence,domain threshold
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 sub write_GDF_bits {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 my $seqt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 my $domt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 my $file = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458 my $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 my $unit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 my (@array,@narray);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 if( !defined $file ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 $self->throw("Attempting to use write_GDF_bits without passing in correct arguments!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 foreach $seq ( $self->each_Set()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 if( $seq->bits() < $seqt ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 foreach $unit ( $seq->each_Domain() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 if( $unit->bits() < $domt ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 push(@array,$unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 @narray = sort { my ($aa,$bb,$st_a,$st_b);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 $aa = $a->seq_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 $bb = $b->seq_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 if ( $aa eq $bb) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 $st_a = $a->start();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 $st_b = $b->start();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 return $st_a <=> $st_b;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 return $aa cmp $bb;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 } } @array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 foreach $unit ( @narray ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 print $file sprintf("%-24s\t%6d\t%6d\t%15s\t%.1f\t%g\n",$unit->get_nse(),$unit->start(),$unit->end(),$unit->seq_id(),$unit->bits(),$unit->evalue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 sub write_scores_bits {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 my $seqt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 my $domt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 my $file = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 my $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 my $unit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507 my (@array,@narray);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 if( !defined $file ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 carp("Attempting to use write_scores_bits without passing in correct arguments!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 foreach $seq ( $self->eachHMMSequence()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 if( $seq->bits() < $seqt ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 foreach $unit ( $seq->eachHMMUnit() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 if( $unit->bits() < $domt ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 push(@array,$unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 @narray = sort { my ($aa,$bb,$st_a,$st_b);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 $aa = $a->bits();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 $bb = $b->bits();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 return $aa <=> $bb;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 } @array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 foreach $unit ( @narray ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 print $file sprintf("%4.2f %s\n",$unit->bits(),$unit->get_nse());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 sub write_GDF {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 my $file = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 my $unit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 if( !defined $file ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 $file = \*STDOUT;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 foreach $unit ( $self->eachHMMUnit() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 print $file sprintf("%-24s\t%6d\t%6d\t%15s\t%.1f\t%g\n",$unit->get_nse(),$unit->start(),$unit->end(),$unit->seq_id(),$unit->bits(),$unit->evalue);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 sub highest_noise {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 my $seqt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 my $domt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 my ($seq,$unit,$hseq,$hdom,$noiseseq,$noisedom);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 $hseq = $hdom = -100000;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 foreach $seq ( $self->eachHMMSequence()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 if( $seq->bits() < $seqt && $seq->bits() > $hseq ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 $hseq = $seq->bits();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 $noiseseq = $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 foreach $unit ( $seq->eachHMMUnit() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571 if( (($seq->bits() < $seqt) || ($seq->bits() > $seqt && $unit->bits < $domt)) && $unit->bits() > $hdom ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 $hdom = $unit->bits();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573 $noisedom = $unit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579 return ($noiseseq,$noisedom);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 sub lowest_true {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 my $seqt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 my $domt = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588 my ($seq,$unit,$lowseq,$lowdom,$trueseq,$truedom);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590 if( ! defined $domt ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 carp "lowest true needs at least a domain threshold cut-off";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 return (0,0);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 $lowseq = $lowdom = 100000;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 foreach $seq ( $self->eachHMMSequence()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 if( $seq->bits() >= $seqt && $seq->bits() < $lowseq ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600 $lowseq = $seq->bits();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 $trueseq = $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 if( $seq->bits() < $seqt ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 foreach $unit ( $seq->eachHMMUnit() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 if( $unit->bits() >= $domt && $unit->bits() < $lowdom ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 $lowdom = $unit->bits();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 $truedom = $unit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 return ($trueseq,$truedom);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 =head2 add_Set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 Title : add_Set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 Usage : Mainly internal function
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 sub add_Set {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 my $seq = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 my $name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 $name = $seq->name();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 if( exists $self->{'seq'}->{$name} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 $self->throw("You alredy have $name in HMMResults!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 $self->{'seq'}->{$name} = $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647 =head2 each_Set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649 Title : each_Set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 sub each_Set {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 my (@array,$name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 foreach $name ( keys %{$self->{'seq'}} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 push(@array,$self->{'seq'}->{$name});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 return @array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 =head2 get_Set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672 Title : get_Set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 Usage : $set = $res->get_Set('sequence-name');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674 Function: returns the Set for a particular sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 Returns : a HMMER::Set object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 Args : name of the sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681 sub get_Set {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 my $name = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685 return $self->{'seq'}->{$name};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689 =head2 _parse_hmmpfam
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 Title : _parse_hmmpfam
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 Usage : $res->_parse_hmmpfam($filehandle)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700 sub _parse_hmmpfam {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 my $file = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704 my ($id,$sqfrom,$sqto,$hmmf,$hmmt,$sc,$ev,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 $unit,$nd,$seq,$name,$seqname,$from,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 $to,%hash,%acc,$acc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707 my $count = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 while(<$file>) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710 if( /^HMM file:\s+(\S+)/ ) { $self->hmmfile($1); next; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 elsif( /^Sequence file:\s+(\S+)/ ) { $self->seqfile($1); next }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 elsif( /^Query(\s+sequence)?:\s+(\S+)/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 $seqname = $2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 $seq = Bio::Tools::HMMER::Set->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 $seq ->name($seqname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719 $self->add_Set($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 %hash = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 while(<$file>){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 if( /Accession:\s+(\S+)/ ) { $seq->accession($1); next }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725 elsif( s/^Description:\s+// ) { chomp; $seq->desc($_); next }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726 /^Parsed for domains/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 # This is to parse out the accession numbers in old Pfam format.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 # now not support due to changes in HMMER.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731 if( (($id,$acc, $sc, $ev, $nd) = /^\s*(\S+)\s+(\S+).+?\s(\S+)\s+(\S+)\s+(\d+)\s*$/)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732 $hash{$id} = $sc; # we need this for the sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 # core of the domains below!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 $acc {$id} = $acc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 # this is the more common parsing routine
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737 } elsif ( (($id,$sc, $ev, $nd) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738 /^\s*(\S+).+?\s(\S+)\s+(\S+)\s+(\d+)\s*$/) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740 $hash{$id} = $sc; # we need this for the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741 # sequence score of hte domains below!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 while(<$file>) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747 /^Align/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748 /^\/\// && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 # this is meant to match
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751 #Sequence Domain seq-f seq-t hmm-f hmm-t score E-value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752 #-------- ------- ----- ----- ----- ----- ----- -------
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753 #PF00621 1/1 198 372 .. 1 207 [] 281.6 1e-80
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755 if( (($id, $sqfrom, $sqto, $hmmf,$hmmt,$sc, $ev) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756 /(\S+)\s+\S+\s+(\d+)\s+(\d+).+?(\d+)\s+(\d+)\s+\S+\s+(\S+)\s+(\S+)\s*$/)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757 $unit = Bio::Tools::HMMER::Domain->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758 $unit->seq_id ($seqname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759 $unit->hmmname ($id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760 $unit->start ($sqfrom);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761 $unit->end ($sqto);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762 $unit->hstart($hmmf);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763 $unit->hend ($hmmt);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764 $unit->bits ($sc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 $unit->evalue ($ev);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767 if( !exists($hash{$id}) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768 $self->throw("HMMResults parsing error in hmmpfam for $id - can't find sequecne score");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771 $unit->seqbits($hash{$id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773 if( defined $acc{$id} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774 $unit->hmmacc($acc{$id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777 # this should find it's own sequence!
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778 $self->add_Domain($unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781 if( /^\/\// ) { next; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783 $_ = <$file>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 # parses alignment lines. Icky as we have to break on the same line
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785 # that we need to read to place the alignment lines with the unit.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787 while(1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788 (!defined $_ || /^\/\//) && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790 # matches:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791 # PF00621: domain 1 of 1, from 198 to 372
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792 if( /^\s*(\S+):.*from\s+(\d+)\s+to\s+(\d+)/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 $name = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795 $from = $2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796 $to = $3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798 # find the HMMUnit which this alignment is from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800 $unit = $self->get_unit_nse($seqname,$name,$from,$to);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801 if( !defined $unit ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802 $self->warn("Could not find $name $from $to unit even though I am reading it in. ugh!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803 $_ = <$file>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806 while(<$file>) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807 /^\/\// && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 /^\s*\S+:.*from\s+\d+\s+to\s+\d+/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809 $unit->add_alignment_line($_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812 $_ = <$file>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816 # back to main 'Query:' loop
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
820
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
821 # mainly internal function
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
822
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
823 sub get_unit_nse {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
824 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
825 my $seqname = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
826 my $domname = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
827 my $start = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
828 my $end = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
829
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
830 my($seq,$unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
831
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
832 $seq = $self->get_Set($seqname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
833
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
834 if( !defined $seq ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
835 $self->throw("Could not get sequence name $seqname - so can't get its unit");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
836 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
837
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
838 foreach $unit ( $seq->each_Domain() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
839 if( $unit->hmmname() eq $domname && $unit->start() == $start && $unit->end() == $end ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
840 return $unit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
841 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
842 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
843
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
844 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
845 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
846
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
847
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
848 =head2 _parse_hmmsearch
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
849
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
850 Title : _parse_hmmsearch
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
851 Usage : $res->_parse_hmmsearch($filehandle)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
852 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
853 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
854 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
855
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
856
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
857 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
858
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
859 sub _parse_hmmsearch {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
860 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
861 my $file = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
862 my ($id,$sqfrom,$sqto,$sc,$ev,$unit,$nd,$seq,$hmmf,$hmmt,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
863 $hmmfname,$hmmacc, $hmmid, %seqh);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
864 my $count = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
865
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
866 while(<$file>) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
867 /^HMM file:\s+(\S+)/ and do { $self->hmmfile($1); $hmmfname = $1 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
868 /^Accession:\s+(\S+)/ and do { $hmmacc = $1 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
869 /^Query HMM:\s+(\S+)/ and do { $hmmid = $1 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
870 /^Sequence database:\s+(\S+)/ and do { $self->seqfile($1) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
871 /^Scores for complete sequences/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
872 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
873
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
874 $hmmfname = "given" if not $hmmfname;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
875
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
876 while(<$file>) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
877 /^Parsed for domains/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
878 if( (($id, $sc, $ev, $nd) = /(\S+).+?\s(\S+)\s+(\S+)\s+(\d+)\s*$/)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
879 $seq = Bio::Tools::HMMER::Set->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
880 $seq->name($id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
881 $seq->bits($sc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
882 $seqh{$id} = $sc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
883 $seq->evalue($ev);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
884 $self->add_Set($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
885 $seq->accession($hmmacc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
886 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
887 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
888
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
889 while(<$file>) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
890 /^Alignments of top-scoring domains/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
891 if( (($id, $sqfrom, $sqto, $hmmf, $hmmt, $sc, $ev) = /(\S+)\s+\S+\s+(\d+)\s+(\d+).+?(\d+)\s+(\d+)\s+\S+\s+(\S+)\s+(\S+)\s*$/)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
892 $unit = Bio::Tools::HMMER::Domain->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
893
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
894 $unit->seq_id($id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
895 $unit->hmmname($hmmfname);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
896 $unit->start($sqfrom);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
897 $unit->end($sqto);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
898 $unit->bits($sc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
899 $unit->hstart($hmmf);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
900 $unit->hend($hmmt);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
901 $unit->evalue($ev);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
902 $unit->seqbits($seqh{$id});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
903 $self->add_Domain($unit);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
904 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
905 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
906 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
907
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
908 $_ = <$file>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
909
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
910 ## Recognize and store domain alignments
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
911
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
912 while(1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
913 if( !defined $_ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
914 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
915 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
916 /^Histogram of all scores/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
917
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
918 # matches:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
919 # PF00621: domain 1 of 1, from 198 to 372
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
920 if( /^\s*(\S+):.*from\s+(\d+)\s+to\s+(\d+)/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
921 my $name = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
922 my $from = $2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
923 my $to = $3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
924
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
925 # find the HMMUnit which this alignment is from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
926 $unit = $self->get_unit_nse($name,$hmmfname,$from,$to);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
927
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
928 if( !defined $unit ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
929 $self->warn("Could not find $name $from $to unit even though I am reading it in. ugh!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
930 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
931 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
932 while(<$file>) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
933 /^Histogram of all scores/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
934 /^\s*\S+:.*from\s+\d+\s+to\s+\d+/ && last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
935 $unit->add_alignment_line($_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
936 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
937 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
938 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
939 $_ = <$file>;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
940 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
941 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
942
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
943 return $count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
944 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
945
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
946 =head2 parsetype
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
947
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
948 Title : parsetype
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
949 Usage : $obj->parsetype($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
950 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
951 Returns : value of parsetype
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
952 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
953
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
954
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
955 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
956
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
957 sub parsetype{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
958 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
959 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
960 $self->{'_parsetype'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
961 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
962 return $self->{'_parsetype'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
963 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
964
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
965 1; # says use was ok
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
966 __END__
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
967
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
968