annotate variant_effect_predictor/Bio/Seq/PrimaryQual.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: PrimaryQual.pm,v 1.17 2002/10/22 07:38:40 lapp Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # bioperl module for Bio::PrimaryQual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Chad Matsalla <bioinformatics@dieselwurks.com>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Chad Matsalla
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 Bio::Seq::PrimaryQual - Bioperl lightweight Quality Object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 use Bio::Seq::PrimaryQual;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 # you can use either a space-delimited string for quality
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 my $string_quals = "10 20 30 40 50 40 30 20 10";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 my $qualobj = Bio::Seq::PrimaryQual->new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 ( '-qual' => $string_quals,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 '-id' => 'QualityFragment-12',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 '-accession_number' => 'X78121',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 # _or_ you can use an array of quality values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 my @q2 = split/ /,$string_quals;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 $qualobj = Bio::Seq::PrimaryQual->new( '-qual' => \@q2,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 '-primary_id' => 'chads primary_id',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 '-desc' => 'chads desc',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 '-accession_number' => 'chads accession_number',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 '-id' => 'chads id'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 # to get the quality values out:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 my @quals = @{$qualobj->qual()};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 # to give _new_ quality values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 my $newqualstring = "50 90 1000 20 12 0 0";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 $qualobj->qual($newqualstring);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 This module provides a mechanism for storing quality
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 values. Much more useful as part of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 Bio::Seq::SeqWithQuality where these quality values
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 are associated with the sequence information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 User feedback is an integral part of the evolution of this and other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 Bioperl modules. Send your comments and suggestions preferably to one
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 of the Bioperl mailing lists. Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 http://bio.perl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 the bugs and their resolution. Bug reports can be submitted via email
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 =head1 AUTHOR - Chad Matsalla
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 Email bioinformatics@dieselwurks.com
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 package Bio::Seq::PrimaryQual;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 use vars qw(@ISA %valid_type);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 use Bio::Root::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 use Bio::Seq::QualI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 @ISA = qw(Bio::Root::Root Bio::Seq::QualI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 =head2 new()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 Title : new()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 Usage : $qual = Bio::Seq::PrimaryQual->new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 ( -qual => '10 20 30 40 50 50 20 10',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 -id => 'human_id',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 -accession_number => 'AL000012',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 Function: Returns a new Bio::Seq::PrimaryQual object from basic
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 constructors, being a string _or_ a reference to an array for the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 sequence and strings for id and accession_number. Note that you
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 can provide an empty quality string.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 Returns : a new Bio::Seq::PrimaryQual object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 my ($class, @args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 my $self = $class->SUPER::new(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 # default: turn ON the warnings (duh)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 my($qual,$id,$acc,$pid,$desc,$given_id) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 $self->_rearrange([qw(QUAL
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 DISPLAY_ID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 ACCESSION_NUMBER
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 PRIMARY_ID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 DESC
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 ID
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 )],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 @args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 if( defined $id && defined $given_id ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 if( $id ne $given_id ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 $self->throw("Provided both id and display_id constructor functions. [$id] [$given_id]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 if( defined $given_id ) { $id = $given_id; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 # note: the sequence string may be empty
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 $self->qual($qual ? $qual : []);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 $id && $self->display_id($id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 $acc && $self->accession_number($acc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 $pid && $self->primary_id($pid);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 $desc && $self->desc($desc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 =head2 qual()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 Title : qual()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 Usage : @quality_values = @{$obj->qual()};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 Function: Returns the quality as a reference to an array containing the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 quality values. The individual elements of the quality array are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 not validated and can be any numeric value.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 Returns : A reference to an array.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 sub qual {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 if( ! defined $value || length($value) == 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 $self->{'qual'} ||= [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 } elsif( ref($value) =~ /ARRAY/i ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 # if the user passed in a reference to an array
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 $self->{'qual'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 } elsif(! $self->validate_qual($value)){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 $self->throw("Attempting to set the quality to [$value] which does not look healthy");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 $self->{'qual'} = [split(/\s+/,$value)];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 return $self->{'qual'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 =head2 validate_qual($qualstring)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 Title : validate_qual($qualstring)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Usage : print("Valid.") if { &validate_qual($self,$qualities); }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 Function: Make sure that the quality, if it has length > 0, contains at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 least one digit. Note that quality strings are parsed into arrays
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 using split/\d+/,$quality_string, so make sure that your quality
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 scalar looks like this if you want it to be parsed properly.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Returns : 1 for a valid sequence (WHY? Shouldn\'t it return 0? <boggle>)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Args : a scalar (any scalar, why PrimarySeq author?) and a scalar
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 containing the string to validate.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 sub validate_qual {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 # how do I validate quality values?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 # \d+\s+\d+..., I suppose
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 my ($self,$qualstr) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 # why the CORE?? -- (Because Bio::PrimarySeqI namespace has a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 # length method, you have to qualify
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 # which length to use)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 return 0 if (!defined $qualstr || CORE::length($qualstr) <= 0);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 return 1 if( $qualstr =~ /\d/);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 =head2 subqual($start,$end)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 Title : subqual($start,$end)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 Usage : @subset_of_quality_values = @{$obj->subqual(10,40)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 Function: returns the quality values from $start to $end, where the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 first value is 1 and the number is inclusive, ie 1-2 are the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 first two bases of the sequence. Start cannot be larger than
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 end but can be equal.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 Returns : A reference to an array.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 Args : a start position and an end position
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 sub subqual {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 my ($self,$start,$end) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 if( $start > $end ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 $self->throw("in subqual, start [$start] has to be greater than end [$end]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 if( $start <= 0 || $end > $self->length ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 $self->throw("You have to have start positive and length less than the total length of sequence [$start:$end] Total ".$self->length."");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 # remove one from start, and then length is end-start
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 $start--;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 $end--;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 my @sub_qual_array = @{$self->{qual}}[$start..$end];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 # return substr $self->seq(), $start, ($end-$start);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 return \@sub_qual_array;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 =head2 display_id()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 Title : display_id()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 Usage : $id_string = $obj->display_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Function: returns the display id, aka the common name of the Quality
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 The semantics of this is that it is the most likely string to be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 used as an identifier of the quality sequence, and likely to have
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 "human" readability. The id is equivalent to the ID field of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 GenBank/EMBL databanks and the id field of the Swissprot/sptrembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 database. In fasta format, the >(\S+) is presumed to be the id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 though some people overload the id to embed other information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 Bioperl does not use any embedded information in the ID field,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 and people are encouraged to use other mechanisms (accession
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 field for example, or extending the sequence object) to solve
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 this. Notice that $seq->id() maps to this function, mainly for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 legacy/convience issues
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 Returns : A string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 sub display_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 my ($obj,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 $obj->{'display_id'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 return $obj->{'display_id'};
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 accession_number()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 Title : accession_number()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 Usage : $unique_biological_key = $obj->accession_number();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 Function: Returns the unique biological id for a sequence, commonly
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 called the accession_number. For sequences from established
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 databases, the implementors should try to use the correct
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 accession number. Notice that primary_id() provides the unique id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 for the implemetation, allowing multiple objects to have the same
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 accession number in a particular implementation. For sequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 with no accession number, this method should return "unknown".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 Returns : A string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 sub accession_number {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 my( $obj, $acc ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 if (defined $acc) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 $obj->{'accession_number'} = $acc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 $acc = $obj->{'accession_number'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 $acc = 'unknown' unless defined $acc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 return $acc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 =head2 primary_id()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 Title : primary_id()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 Usage : $unique_implementation_key = $obj->primary_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 Function: Returns the unique id for this object in this implementation.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 This allows implementations to manage their own object ids in a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 way the implementaiton can control clients can expect one id to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 map to one object. For sequences with no accession number, this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 method should return a stringified memory location.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 Returns : A string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 Args : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 sub primary_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 my ($obj,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 $obj->{'primary_id'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 return $obj->{'primary_id'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 =head2 desc()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 Title : desc()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 Usage : $qual->desc($newval);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 $description = $qual->desc();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 Function: Get/set description text for a qual object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 Returns : Value of desc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 sub desc {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 my ($obj,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 $obj->{'desc'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 return $obj->{'desc'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 =head2 id()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 Title : id()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 Usage : $id = $qual->id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 Function: Return the ID of the quality. This should normally be (and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 actually is in the implementation provided here) just a synonym
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 for display_id().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 Returns : A string.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 Args : None.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 sub id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 if( defined $value ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 return $self->display_id($value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 return $self->display_id();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 =head2 length()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 Title : length()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 Usage : $length = $qual->length();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 Function: Return the length of the array holding the quality values.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 Under most circumstances, this should match the number of quality
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 values but no validation is done when the PrimaryQual object is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 constructed and non-digits could be put into this array. Is this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 a bug? Just enough rope...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 Returns : A scalar (the number of elements in the quality array).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 Args : None.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 if (ref($self->{qual}) ne "ARRAY") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 $self->warn("{qual} is not an array here. Why? It appears to be ".ref($self->{qual})."(".$self->{qual}."). Good thing this can _never_ happen.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 return scalar(@{$self->{qual}});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 =head2 qualat($position)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 Title : qualat($position)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 Usage : $quality = $obj->qualat(10);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 Function: Return the quality value at the given location, where the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 first value is 1 and the number is inclusive, ie 1-2 are the first
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 two bases of the sequence. Start cannot be larger than end but can
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 be equal.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 Returns : A scalar.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 Args : A position.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 sub qualat {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 my ($self,$val) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 my @qualat = @{$self->subqual($val,$val)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 if (scalar(@qualat) == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 return $qualat[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 $self->throw("AAAH! qualat provided more then one quality.");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 =head2 to_string()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 Title : to_string()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 Usage : $quality = $obj->to_string();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 Function: Return a textual representation of what the object contains.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 For this module, this function will return:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 qual
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 display_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 accession_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 primary_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 desc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 length
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 Returns : A scalar.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 Args : None.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 sub to_string {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 my ($self,$out,$result) = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 $out = "qual: ".join(',',@{$self->qual()});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 foreach (qw(display_id accession_number primary_id desc id)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 $result = $self->$_();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 if (!$result) { $result = "<unset>"; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 $out .= "$_: $result\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 return $out;
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 sub to_string_automatic {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 my ($self,$sub_result,$out) = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 foreach (sort keys %$self) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 print("Working on $_\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 eval { $self->$_(); };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 if ($@) { $sub_result = ref($_); }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 elsif (!($sub_result = $self->$_())) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 $sub_result = "<unset>";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 if (ref($sub_result) eq "ARRAY") {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 print("This thing ($_) is an array!\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 $sub_result = join(',',@$sub_result);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 $out .= "$_: ".$sub_result."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 return $out;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 1;