annotate variant_effect_predictor/Bio/Seq/PrimaryQual.pm @ 0:2bc9b66ada89 draft default tip

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