comparison variant_effect_predictor/Bio/Seq/PrimedSeq.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1f6dce3d34e0
1 # BioPerl module for Bio::PrimedSeq
2 #
3 # Cared for by Chad Matsalla <bioinformatics1@dieselwurks.com>
4 #
5 # Copyright Chad Matsalla
6 #
7 # You may distribute this module under the same terms as perl itself
8
9 # POD documentation - main docs before the code
10
11 =head1 Bio::Seq::PrimedSeq
12
13 Bio::Seq::PrimedSeq - A representation of a sequence and two primers flanking a
14 target region for amplification
15
16 =head1 SYNOPSIS
17
18 # create a sequence
19 my $sequence = "ctagctagctagctagctagctagctagctgatcgtagctagctagct";
20 # create left and right primer seqfeatures
21 # unfortunately, I haven't created constructors for these yet.
22 my $left = Bio::SeqFeature::Primer();
23 my $right = Bio::SeqFeature::Primer();
24 # now create the PrimedSeq
25 $primedseq = new Bio::Seq::PrimedSeq(
26 -seq => $sequence,
27 -display_id => "chads_fantastic_sequence",
28 -LEFT_PRIMER => $left,
29 -RIGHT_PRIMER => $right,
30 -TARGET => '513,26'
31 -PRIMER_PRODUCT_SIZE_RANGE => '100-500'
32 -PRIMER_FILE_FLAG => '0'
33 -PRIMER_LIBERAL_BASE => '1'
34 -PRIMER_NUM_RETURN => '1'
35 -PRIMER_FIRST_BASE_INDEX => '1'
36 -PRIMER_EXPLAIN_FLAG => '1'
37 -PRIMER_PRODUCT_SIZE => '185'
38 );
39 # get the amplified region
40 my $amplified_sequence = $primed_seq->get_amplified_sequence();
41
42 =head1 DESCRIPTION
43
44 This module is a slightly glorified capsule containg a primed seqBuence. It was
45 created to address the fact that a primer is more the a seqfeature and there
46 need to be ways to represent the primer-sequence complex and the behaviors and
47 attributes that are associated with the complex.
48
49 =head1 FEEDBACK
50
51 User feedback is an integral part of the evolution of this and other
52 Bioperl modules. Send your comments and suggestions preferably to one
53 of the Bioperl mailing lists. Your participation is much appreciated.
54
55 bioperl-l@bioperl.org - General discussion
56 http://bio.perl.org/MailList.html - About the mailing lists
57
58 =head2 Reporting Bugs
59
60 Report bugs to the Bioperl bug tracking system to help us keep track
61 the bugs and their resolution. Bug reports can be submitted via email
62 or the web:
63
64 bioperl-bugs@bio.perl.org
65 http://bugzilla.bioperl.org/
66
67 =head1 APPENDIX
68
69 The rest of the documentation details each of the object
70 methods. Internal methods are usually preceded with a _
71
72 =cut
73
74
75 # Let the code begin...
76
77
78 package Bio::Seq::PrimedSeq;
79 use vars qw(@ISA);
80 use strict;
81
82 use Bio::RangeI;
83
84 @ISA = qw(Bio::Seq);
85
86
87 =head2 new
88
89 Title : new()
90 Usage : $primed_sequence = new Bio::SeqFeature::Primer( -seq => $sequence,
91 -left_primer => $left_primer,
92 -right_primer => $right_primer);
93 Function: A constructor for an object representing a primed sequence
94 Returns : A Bio::Seq::PrimedSeq object
95 Args :
96 -seq => a Bio::Seq object
97 -left_primer => a Bio::SeqFeature::Primer object
98 -right_primer => a Bio::SeqFeature::Primer object
99 Many other parameters can be included including all of the output
100 parameters from the primer3 program.
101 Developer Notes: This is incomplete and doesn't work. As of ISMB2002 I am working on it.
102
103
104 =cut
105
106 sub new {
107 my($class,@args) = @_;
108 my %arguments = @args;
109 my $self = $class->SUPER::new(@args);
110 # these are the absolute minimum components required to make
111 # a primedseq
112 my $newkey;
113 foreach my $key (sort keys %arguments) {
114 ($newkey = $key) =~ s/-//;
115 $self->{$newkey} = $arguments{$key};
116 push @{$self->{arguments}},$newkey;
117 }
118 # and now the insurance- make sure that things are ok
119 if (!$self->{target_sequence} || !$self->{left_primer} || !$self->{right_primer} ) {
120 $self->throw("You must provide a target_sequence, left_primer, and right_primer to create this object.");
121 }
122 if (ref($self->{target_sequence}) ne "Bio::Seq") {
123 $self->throw("The target_sequence must be a Bio::Seq to create this object.");
124 }
125 if (ref($self->{left_primer}) ne "Bio::SeqFeature::Primer" || ref($self->{right_primer}) ne "Bio::SeqFeature::Primer") {
126 $self->throw("You must provide a left_primer and right_primer, both as Bio::SeqFeature::Primer to create this object.");
127 }
128 return $self;
129 }
130
131
132 =head2 get_left_primer
133
134 Title : get_left_primer();
135 Usage : $left_primer = $primedseq->get_left_primer();
136 Function: A getter for the left primer in thie PrimedSeq object.
137 Returns : A Bio::SeqFeature::Primer object
138 Args : None.
139
140 =cut
141
142 sub get_left_primer() {
143 my $self = shift;
144
145
146
147
148 }
149
150
151
152
153
154
155
156
157
158
159
160
161 =head2 Bio::RangeI methods
162
163 List of interfaces inherited from Bio::RangeI (see L<Bio::RangeI>
164 for details).
165
166 =head2 start
167
168 Title : start
169 Usage : $start = $feat->start
170 Function: Returns the start coordinate of the feature
171 Returns : integer
172 Args : none
173 Developer Notes:
174 This is entirely dependent on the sequence to which this primer is attached!
175 I think that there could be trouble if one takes this primer from sequence 1
176 and naively place it on sequence 2 without updating this
177 ** This is incomplete at this time.
178 =cut
179
180 sub start() {
181 my $self = shift;
182
183
184 }
185
186
187
188
189 =head2 end
190
191 Title : end
192 Usage : $end = $feat->end
193 Function: Returns the end coordinate of the feature
194 Returns : integer
195 Args : none
196 Developer Notes:
197 ** This is incomplete at this time.
198 =cut
199
200 sub end() {
201 my $self = shift;
202
203
204 }
205
206 =head2 strand
207
208 Title : strand
209 Usage : $strand = $feat->strand()
210 Function: Returns strand information, being 1,-1 or 0
211 Returns : -1,1 or 0
212 Args : none
213 Developer Notes:
214 ** This is incomplete at this time.
215
216
217 =cut
218
219 sub strand() {
220 my $self = shift;
221 }
222
223
224 =head2 SeqFeatureI specific methods
225
226 New method interfaces.
227
228 =head2 sub_SeqFeature
229
230 Title : sub_SeqFeature
231 Usage : @feats = $feat->sub_SeqFeature();
232 Function: Returns an array of sub Sequence Features
233 Returns : An array
234 Args : none
235
236 =cut
237
238 sub sub_SeqFeature{
239 my ($self,@args) = @_;
240
241 $self->throw_not_implemented();
242 }
243
244 =head2 display_id
245
246 Title : display_id
247 Usage : $name = $feat->display_id()
248 Function: Returns the human-readable ID of the
249 feature for displays.
250 Returns : a string
251 Args : none
252
253 =cut
254
255 sub display_id {
256 my ($self,@args) = @_;
257 $self->throw_not_implemented();
258 }
259
260 =head2 primary_tag
261
262 Title : primary_tag
263 Usage : $tag = $feat->primary_tag()
264 Function: Returns the primary tag for a feature,
265 eg 'exon'
266 Returns : a string
267 Args : none
268
269
270 =cut
271
272 sub primary_tag{
273 my ($self,@args) = @_;
274
275 $self->throw_not_implemented();
276
277 }
278
279 =head2 source_tag
280
281 Title : source_tag
282 Usage : $tag = $feat->source_tag()
283 Function: Returns the source tag for a feature,
284 eg, 'genscan'
285 Returns : a string
286 Args : none
287
288
289 =cut
290
291 sub source_tag{
292 my ($self,@args) = @_;
293
294 $self->throw_not_implemented();
295 }
296
297 =head2 has_tag
298
299 Title : has_tag
300 Usage : $tag_exists = $self->has_tag('some_tag')
301 Function:
302 Returns : TRUE if the specified tag exists, and FALSE otherwise
303 Args :
304
305
306 =cut
307
308 sub has_tag{
309 my ($self,@args) = @_;
310
311 $self->throw_not_implemented();
312
313 }
314
315 =head2 each_tag_value
316
317 Title : each_tag_value
318 Usage : @values = $self->each_tag_value('some_tag')
319 Function:
320 Returns : An array comprising the values of the specified tag.
321 Args :
322
323
324 =cut
325
326 sub each_tag_value {
327 my ($self,@args) = @_;
328
329 $self->throw_not_implemented();
330 }
331
332 =head2 all_tags
333
334 Title : all_tags
335 Usage : @tags = $feat->all_tags()
336 Function: gives all tags for this feature
337 Returns : an array of strings
338 Args : none
339
340
341 =cut
342
343 sub all_tags{
344 my ($self,@args) = @_;
345
346 $self->throw_not_implemented();
347 }
348
349 =head2 gff_string
350
351 Title : gff_string
352 Usage : $str = $feat->gff_string;
353 $str = $feat->gff_string($gff_formatter);
354 Function: Provides the feature information in GFF format.
355
356 The implementation provided here returns GFF2 by default. If you
357 want a different version, supply an object implementing a method
358 gff_string() accepting a SeqFeatureI object as argument. E.g., to
359 obtain GFF1 format, do the following:
360
361 my $gffio = Bio::Tools::GFF->new(-gff_version => 1);
362 $gff1str = $feat->gff_string($gff1io);
363
364 Returns : A string
365 Args : Optionally, an object implementing gff_string().
366
367
368 =cut
369
370 sub gff_string{
371 my ($self,$formatter) = @_;
372
373 $formatter = $self->_static_gff_formatter unless $formatter;
374 return $formatter->gff_string($self);
375 }
376
377 my $static_gff_formatter = undef;
378
379 =head2 _static_gff_formatter
380
381 Title : _static_gff_formatter
382 Usage :
383 Function:
384 Example :
385 Returns :
386 Args :
387
388
389 =cut
390
391 sub _static_gff_formatter{
392 my ($self,@args) = @_;
393
394 if( !defined $static_gff_formatter ) {
395 $static_gff_formatter = Bio::Tools::GFF->new('-gff_version' => 2);
396 }
397 return $static_gff_formatter;
398 }
399
400
401
402 =head1 RangeI methods
403
404 These methods are inherited from RangeI and can be used
405 directly from a SeqFeatureI interface. Remember that a
406 SeqFeature is-a RangeI, and so wherever you see RangeI you
407 can use a feature ($r in the below documentation).
408
409 =head2 overlaps
410
411 Title : overlaps
412 Usage : if($feat->overlaps($r)) { do stuff }
413 if($feat->overlaps(200)) { do stuff }
414 Function: tests if $feat overlaps $r
415 Args : a RangeI to test for overlap with, or a point
416 Returns : true if the Range overlaps with the feature, false otherwise
417
418
419 =head2 contains
420
421 Title : contains
422 Usage : if($feat->contains($r) { do stuff }
423 Function: tests whether $feat totally contains $r
424 Args : a RangeI to test for being contained
425 Returns : true if the argument is totaly contained within this range
426
427
428 =head2 equals
429
430 Title : equals
431 Usage : if($feat->equals($r))
432 Function: test whether $feat has the same start, end, strand as $r
433 Args : a RangeI to test for equality
434 Returns : true if they are describing the same range
435
436
437 =head1 Geometrical methods
438
439 These methods do things to the geometry of ranges, and return
440 triplets (start, stop, strand) from which new ranges could be built.
441
442 =head2 intersection
443
444 Title : intersection
445 Usage : ($start, $stop, $strand) = $feat->intersection($r)
446 Function: gives the range that is contained by both ranges
447 Args : a RangeI to compare this one to
448 Returns : nothing if they do not overlap, or the range that they do overlap
449
450 =head2 union
451
452 Title : union
453 Usage : ($start, $stop, $strand) = $feat->union($r);
454 : ($start, $stop, $strand) = Bio::RangeI->union(@ranges);
455 Function: finds the minimal range that contains all of the ranges
456 Args : a range or list of ranges to find the union of
457 Returns : the range containing all of the ranges
458
459 =cut
460
461 =head2 location
462
463 Title : location
464 Usage : my $location = $seqfeature->location()
465 Function: returns a location object suitable for identifying location
466 of feature on sequence or parent feature
467 Returns : Bio::LocationI object
468 Args : none
469
470
471 =cut
472
473 sub location {
474 my ($self) = @_;
475
476 $self->throw_not_implemented();
477 }
478
479
480 1;