Mercurial > repos > mahtabm > ensembl
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; |
