Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/Seq/SequenceTrace.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 # $Id: SequenceTrace.pm,v 1.1.2.1 2003/03/25 12:32:16 heikki Exp $ | |
| 2 # | |
| 3 # BioPerl module for Bio::Seq::SeqWithQuality | |
| 4 # | |
| 5 # Cared for by Chad Matsalla <bioinformatics@dieselwurks.com | |
| 6 # | |
| 7 # Copyright Chad Matsalla | |
| 8 # | |
| 9 # You may distribute this module under the same terms as perl itself | |
| 10 | |
| 11 # POD documentation - main docs before the code | |
| 12 | |
| 13 =head1 NAME | |
| 14 | |
| 15 Bio::Seq::SequenceTrace - Bioperl object packaging a sequence with its trace | |
| 16 | |
| 17 =head1 SYNOPSIS | |
| 18 | |
| 19 # example code here | |
| 20 | |
| 21 =head1 DESCRIPTION | |
| 22 | |
| 23 This object stores a sequence with its trace. | |
| 24 | |
| 25 =head1 FEEDBACK | |
| 26 | |
| 27 =head2 Mailing Lists | |
| 28 | |
| 29 User feedback is an integral part of the evolution of this and other | |
| 30 Bioperl modules. Send your comments and suggestions preferably to one | |
| 31 of the Bioperl mailing lists. Your participation is much appreciated. | |
| 32 | |
| 33 bioperl-l@bioperl.org - General discussion | |
| 34 http://bio.perl.org/MailList.html - About the mailing lists | |
| 35 | |
| 36 =head2 Reporting Bugs | |
| 37 | |
| 38 Report bugs to the Bioperl bug tracking system to help us keep track | |
| 39 the bugs and their resolution. Bug reports can be submitted via email | |
| 40 or the web: | |
| 41 | |
| 42 bioperl-bugs@bio.perl.org | |
| 43 http://bugzilla.bioperl.org/ | |
| 44 | |
| 45 =head1 AUTHOR - Chad Matsalla | |
| 46 | |
| 47 Email bioinformatics@dieselwurks.com | |
| 48 | |
| 49 =head1 CONTRIBUTORS | |
| 50 | |
| 51 Jason Stajich, jason@bioperl.org | |
| 52 | |
| 53 =head1 APPENDIX | |
| 54 | |
| 55 The rest of the documentation details each of the object methods. | |
| 56 Internal methods are usually preceded with a _ | |
| 57 | |
| 58 =cut | |
| 59 | |
| 60 | |
| 61 package Bio::Seq::SequenceTrace; | |
| 62 | |
| 63 use vars qw(@ISA); | |
| 64 | |
| 65 use strict; | |
| 66 use Bio::Root::Root; | |
| 67 use Bio::Seq::QualI; | |
| 68 use Bio::PrimarySeqI; | |
| 69 use Bio::PrimarySeq; | |
| 70 use Bio::Seq::PrimaryQual; | |
| 71 use Bio::Seq::TraceI; | |
| 72 | |
| 73 @ISA = qw(Bio::Root::Root Bio::Seq::SeqWithQuality Bio::Seq::TraceI); | |
| 74 | |
| 75 =head2 new() | |
| 76 | |
| 77 Title : new() | |
| 78 Usage : $st = Bio::Seq::SequenceTrace->new | |
| 79 ( -sequencewithquality => Bio::Seq::SequenceWithQuality, | |
| 80 -trace_a => \@trace_values_for_a_channel, | |
| 81 -trace_t => \@trace_values_for_t_channel, | |
| 82 -trace_g => \@trace_values_for_g_channel, | |
| 83 -trace_c => \@trace_values_for_c_channel, | |
| 84 -trace_indices => '0 5 10 15 20 25 30 35' | |
| 85 ); | |
| 86 Function: Returns a new Bio::Seq::SequenceTrace object from basic | |
| 87 constructors. | |
| 88 Returns : a new Bio::Seq::SequenceTrace object | |
| 89 Arguments: I think that these are all describes in the usage above. | |
| 90 | |
| 91 =cut | |
| 92 | |
| 93 sub new { | |
| 94 my ($class, @args) = @_; | |
| 95 my $self = $class->SUPER::new(@args); | |
| 96 # default: turn OFF the warnings | |
| 97 $self->{supress_warnings} = 1; | |
| 98 my($sequence_with_quality,$trace_indices,$trace_a,$trace_t, | |
| 99 $trace_g,$trace_c) = | |
| 100 $self->_rearrange([qw( | |
| 101 SEQUENCEWITHQUALITY | |
| 102 TRACE_INDICES | |
| 103 TRACE_A | |
| 104 TRACE_T | |
| 105 TRACE_G)], @args); | |
| 106 # first, deal with the sequence and quality information | |
| 107 if ($sequence_with_quality && ref($sequence_with_quality) eq "Bio::Seq::SeqWithQuality") { | |
| 108 $self->{swq} = $sequence_with_quality; | |
| 109 } | |
| 110 else { | |
| 111 $self->throw("A Bio::Seq::SequenceTrace object must be created with a | |
| 112 Bio::Seq::SeqWithQuality object."); | |
| 113 } | |
| 114 $self->{trace_a} = $trace_a ? $trace_a : undef; | |
| 115 $self->{trace_t} = $trace_t ? $trace_t : undef; | |
| 116 $self->{trace_g} = $trace_g ? $trace_g : undef; | |
| 117 $self->{trace_c} = $trace_c ? $trace_c : undef; | |
| 118 $self->{trace_indices} = $trace_indices ? $trace_indices : undef; | |
| 119 return $self; | |
| 120 } | |
| 121 | |
| 122 =head2 trace($base,\@new_values) | |
| 123 | |
| 124 Title : trace($base,\@new_values) | |
| 125 Usage : @trace_Values = @{$obj->trace($base,\@new_values)}; | |
| 126 Function: Returns the trace values as a reference to an array containing the | |
| 127 trace values. The individual elements of the trace array are not validated | |
| 128 and can be any numeric value. | |
| 129 Returns : A reference to an array. | |
| 130 Status : | |
| 131 Arguments: $base : which color channel would you like the trace values for? | |
| 132 - $base must be one of "A","T","G","C" | |
| 133 \@new_values : a reference to an array of values containing trace | |
| 134 data for this base | |
| 135 | |
| 136 =cut | |
| 137 | |
| 138 sub trace { | |
| 139 my ($self,$base_channel,$values) = @_; | |
| 140 $base_channel =~ tr/A-Z/a-z/; | |
| 141 if (length($base_channel) > 1 && $base_channel !~ /a|t|g|c/) { | |
| 142 $self->throw("The base channel must be a, t, g, or c"); | |
| 143 } | |
| 144 if ( $values && ref($values) eq "ARRAY") { | |
| 145 $self->{trace_$base_channel} = $values; | |
| 146 } | |
| 147 elsif ($values) { | |
| 148 $self->warn("You tried to change the traces for the $base_channel but | |
| 149 the values you wave were not a reference to an array."); | |
| 150 } | |
| 151 return $self->{trace_$base_channel}; | |
| 152 } | |
| 153 | |
| 154 | |
| 155 =head2 trace_indices($new_indices) | |
| 156 | |
| 157 Title : trace_indices($new_indices) | |
| 158 Usage : $indices = $obj->trace_indices($new_indices); | |
| 159 Function: Return the trace iindex points for this object. | |
| 160 Returns : A scalar | |
| 161 Args : If used, the trace indices will be set to the provided value. | |
| 162 | |
| 163 =cut | |
| 164 | |
| 165 sub trace_indices { | |
| 166 my ($self,$trace_indices)= @_; | |
| 167 if ($trace_indices) { $self->{trace_indices} = $trace_indices; } | |
| 168 return $self->{trace_indices}; | |
| 169 } | |
| 170 | |
| 171 | |
| 172 | |
| 173 | |
| 174 | |
| 175 | |
| 176 | |
| 177 | |
| 178 | |
| 179 | |
| 180 | |
| 181 | |
| 182 | |
| 183 =head2 _common_id() | |
| 184 | |
| 185 Title : _common_id() | |
| 186 Usage : $common_id = $self->_common_id(); | |
| 187 Function: Compare the display_id of {qual_ref} and {seq_ref}. | |
| 188 Returns : Nothing if they don't match. If they do return | |
| 189 {seq_ref}->display_id() | |
| 190 Args : None. | |
| 191 | |
| 192 =cut | |
| 193 | |
| 194 #' | |
| 195 sub _common_id { | |
| 196 my $self = shift; | |
| 197 return if (!$self->{seq_ref} || !$self->{qual_ref}); | |
| 198 my $sid = $self->{seq_ref}->display_id(); | |
| 199 return if (!$sid); | |
| 200 return if (!$self->{qual_ref}->display_id()); | |
| 201 return $sid if ($sid eq $self->{qual_ref}->display_id()); | |
| 202 # should this become a warning? | |
| 203 # print("ids $sid and $self->{qual_ref}->display_id() do not match. Bummer.\n"); | |
| 204 } | |
| 205 | |
| 206 =head2 _common_display_id() | |
| 207 | |
| 208 Title : _common_id() | |
| 209 Usage : $common_id = $self->_common_display_id(); | |
| 210 Function: Compare the display_id of {qual_ref} and {seq_ref}. | |
| 211 Returns : Nothing if they don't match. If they do return | |
| 212 {seq_ref}->display_id() | |
| 213 Args : None. | |
| 214 | |
| 215 =cut | |
| 216 | |
| 217 #' | |
| 218 sub _common_display_id { | |
| 219 my $self = shift; | |
| 220 $self->common_id(); | |
| 221 } | |
| 222 | |
| 223 =head2 _common_accession_number() | |
| 224 | |
| 225 Title : _common_accession_number() | |
| 226 Usage : $common_id = $self->_common_accession_number(); | |
| 227 Function: Compare the accession_number() of {qual_ref} and {seq_ref}. | |
| 228 Returns : Nothing if they don't match. If they do return | |
| 229 {seq_ref}->accession_number() | |
| 230 Args : None. | |
| 231 | |
| 232 =cut | |
| 233 | |
| 234 #' | |
| 235 sub _common_accession_number { | |
| 236 my $self = shift; | |
| 237 return if ($self->{seq_ref} || $self->{qual_ref}); | |
| 238 my $acc = $self->{seq_ref}->accession_number(); | |
| 239 # if (!$acc) { print("the seqref has no acc.\n"); } | |
| 240 return if (!$acc); | |
| 241 # if ($acc eq $self->{qual_ref}->accession_number()) { print("$acc matches ".$self->{qual_ref}->accession_number()."\n"); } | |
| 242 return $acc if ($acc eq $self->{qual_ref}->accession_number()); | |
| 243 # should this become a warning? | |
| 244 # print("accession numbers $acc and $self->{qual_ref}->accession_number() do not match. Bummer.\n"); | |
| 245 } | |
| 246 | |
| 247 =head2 _common_primary_id() | |
| 248 | |
| 249 Title : _common_primary_id() | |
| 250 Usage : $common_primard_id = $self->_common_primary_id(); | |
| 251 Function: Compare the primary_id of {qual_ref} and {seq_ref}. | |
| 252 Returns : Nothing if they don't match. If they do return | |
| 253 {seq_ref}->primary_id() | |
| 254 Args : None. | |
| 255 | |
| 256 =cut | |
| 257 | |
| 258 #' | |
| 259 sub _common_primary_id { | |
| 260 my $self = shift; | |
| 261 return if ($self->{seq_ref} || $self->{qual_ref}); | |
| 262 my $pid = $self->{seq_ref}->primary_id(); | |
| 263 return if (!$pid); | |
| 264 return $pid if ($pid eq $self->{qual_ref}->primary_id()); | |
| 265 # should this become a warning? | |
| 266 # print("primary_ids $pid and $self->{qual_ref}->primary_id() do not match. Bummer.\n"); | |
| 267 | |
| 268 } | |
| 269 | |
| 270 =head2 _common_desc() | |
| 271 | |
| 272 Title : _common_desc() | |
| 273 Usage : $common_desc = $self->_common_desc(); | |
| 274 Function: Compare the desc of {qual_ref} and {seq_ref}. | |
| 275 Returns : Nothing if they don't match. If they do return | |
| 276 {seq_ref}->desc() | |
| 277 Args : None. | |
| 278 | |
| 279 =cut | |
| 280 | |
| 281 #' | |
| 282 sub _common_desc { | |
| 283 my $self = shift; | |
| 284 return if ($self->{seq_ref} || $self->{qual_ref}); | |
| 285 my $des = $self->{seq_ref}->desc(); | |
| 286 return if (!$des); | |
| 287 return $des if ($des eq $self->{qual_ref}->desc()); | |
| 288 # should this become a warning? | |
| 289 # print("descriptions $des and $self->{qual_ref}->desc() do not match. Bummer.\n"); | |
| 290 | |
| 291 } | |
| 292 | |
| 293 =head2 set_common_descriptors() | |
| 294 | |
| 295 Title : set_common_descriptors() | |
| 296 Usage : $self->set_common_descriptors(); | |
| 297 Function: Compare the descriptors (id,accession_number,display_id, | |
| 298 primary_id, desc) for the PrimarySeq and PrimaryQual objects | |
| 299 within the SeqWithQuality object. If they match, make that | |
| 300 descriptor the descriptor for the SeqWithQuality object. | |
| 301 Returns : Nothing. | |
| 302 Args : None. | |
| 303 | |
| 304 =cut | |
| 305 | |
| 306 sub set_common_descriptors { | |
| 307 my $self = shift; | |
| 308 return if ($self->{seq_ref} || $self->{qual_ref}); | |
| 309 &_common_id(); | |
| 310 &_common_display_id(); | |
| 311 &_common_accession_number(); | |
| 312 &_common_primary_id(); | |
| 313 &_common_desc(); | |
| 314 } | |
| 315 | |
| 316 =head2 alphabet() | |
| 317 | |
| 318 Title : alphabet(); | |
| 319 Usage : $molecule_type = $obj->alphabet(); | |
| 320 Function: Get the molecule type from the PrimarySeq object. | |
| 321 Returns : What what PrimarySeq says the type of the sequence is. | |
| 322 Args : None. | |
| 323 | |
| 324 =cut | |
| 325 | |
| 326 sub alphabet { | |
| 327 my $self = shift; | |
| 328 return $self->{seq_ref}->alphabet(); | |
| 329 } | |
| 330 | |
| 331 =head2 display_id() | |
| 332 | |
| 333 Title : display_id() | |
| 334 Usage : $id_string = $obj->display_id(); | |
| 335 Function: Returns the display id, aka the common name of the Quality | |
| 336 object. | |
| 337 The semantics of this is that it is the most likely string to be | |
| 338 used as an identifier of the quality sequence, and likely to have | |
| 339 "human" readability. The id is equivalent to the ID field of the | |
| 340 GenBank/EMBL databanks and the id field of the Swissprot/sptrembl | |
| 341 database. In fasta format, the >(\S+) is presumed to be the id, | |
| 342 though some people overload the id to embed other information. | |
| 343 Bioperl does not use any embedded information in the ID field, | |
| 344 and people are encouraged to use other mechanisms (accession | |
| 345 field for example, or extending the sequence object) to solve | |
| 346 this. Notice that $seq->id() maps to this function, mainly for | |
| 347 legacy/convience issues. | |
| 348 This method sets the display_id for the SeqWithQuality object. | |
| 349 Returns : A string | |
| 350 Args : If a scalar is provided, it is set as the new display_id for | |
| 351 the SeqWithQuality object. | |
| 352 Status : Virtual | |
| 353 | |
| 354 =cut | |
| 355 | |
| 356 sub display_id { | |
| 357 my ($obj,$value) = @_; | |
| 358 if( defined $value) { | |
| 359 $obj->{'display_id'} = $value; | |
| 360 } | |
| 361 return $obj->{'display_id'}; | |
| 362 | |
| 363 } | |
| 364 | |
| 365 =head2 accession_number() | |
| 366 | |
| 367 Title : accession_number() | |
| 368 Usage : $unique_biological_key = $obj->accession_number(); | |
| 369 Function: Returns the unique biological id for a sequence, commonly | |
| 370 called the accession_number. For sequences from established | |
| 371 databases, the implementors should try to use the correct | |
| 372 accession number. Notice that primary_id() provides the unique id | |
| 373 for the implemetation, allowing multiple objects to have the same | |
| 374 accession number in a particular implementation. For sequences | |
| 375 with no accession number, this method should return "unknown". | |
| 376 This method sets the accession_number for the SeqWithQuality | |
| 377 object. | |
| 378 Returns : A string (the value of accession_number) | |
| 379 Args : If a scalar is provided, it is set as the new accession_number | |
| 380 for the SeqWithQuality object. | |
| 381 Status : Virtual | |
| 382 | |
| 383 | |
| 384 =cut | |
| 385 | |
| 386 sub accession_number { | |
| 387 my( $obj, $acc ) = @_; | |
| 388 | |
| 389 if (defined $acc) { | |
| 390 $obj->{'accession_number'} = $acc; | |
| 391 } else { | |
| 392 $acc = $obj->{'accession_number'}; | |
| 393 $acc = 'unknown' unless defined $acc; | |
| 394 } | |
| 395 return $acc; | |
| 396 } | |
| 397 | |
| 398 =head2 primary_id() | |
| 399 | |
| 400 Title : primary_id() | |
| 401 Usage : $unique_implementation_key = $obj->primary_id(); | |
| 402 Function: Returns the unique id for this object in this implementation. | |
| 403 This allows implementations to manage their own object ids in a | |
| 404 way the implementaiton can control clients can expect one id to | |
| 405 map to one object. For sequences with no accession number, this | |
| 406 method should return a stringified memory location. | |
| 407 This method sets the primary_id for the SeqWithQuality | |
| 408 object. | |
| 409 Returns : A string. (the value of primary_id) | |
| 410 Args : If a scalar is provided, it is set as the new primary_id for | |
| 411 the SeqWithQuality object. | |
| 412 | |
| 413 =cut | |
| 414 | |
| 415 sub primary_id { | |
| 416 my ($obj,$value) = @_; | |
| 417 if ($value) { | |
| 418 $obj->{'primary_id'} = $value; | |
| 419 } | |
| 420 return $obj->{'primary_id'}; | |
| 421 | |
| 422 } | |
| 423 | |
| 424 =head2 desc() | |
| 425 | |
| 426 Title : desc() | |
| 427 Usage : $qual->desc($newval); _or_ | |
| 428 $description = $qual->desc(); | |
| 429 Function: Get/set description text for this SeqWithQuality object. | |
| 430 Returns : A string. (the value of desc) | |
| 431 Args : If a scalar is provided, it is set as the new desc for the | |
| 432 SeqWithQuality object. | |
| 433 | |
| 434 =cut | |
| 435 | |
| 436 sub desc { | |
| 437 # a mechanism to set the disc for the SeqWithQuality object. | |
| 438 # probably will be used most often by set_common_features() | |
| 439 my ($obj,$value) = @_; | |
| 440 if( defined $value) { | |
| 441 $obj->{'desc'} = $value; | |
| 442 } | |
| 443 return $obj->{'desc'}; | |
| 444 } | |
| 445 | |
| 446 =head2 id() | |
| 447 | |
| 448 Title : id() | |
| 449 Usage : $id = $qual->id(); | |
| 450 Function: Return the ID of the quality. This should normally be (and | |
| 451 actually is in the implementation provided here) just a synonym | |
| 452 for display_id(). | |
| 453 Returns : A string. (the value of id) | |
| 454 Args : If a scalar is provided, it is set as the new id for the | |
| 455 SeqWithQuality object. | |
| 456 | |
| 457 =cut | |
| 458 | |
| 459 sub id { | |
| 460 my ($self,$value) = @_; | |
| 461 if (!$self) { $self->throw("no value for self in $value"); } | |
| 462 if( defined $value ) { | |
| 463 return $self->display_id($value); | |
| 464 } | |
| 465 return $self->display_id(); | |
| 466 } | |
| 467 | |
| 468 =head2 seq | |
| 469 | |
| 470 Title : seq() | |
| 471 Usage : $string = $obj->seq(); _or_ | |
| 472 $obj->seq("atctatcatca"); | |
| 473 Function: Returns the sequence that is contained in the imbedded in the | |
| 474 PrimarySeq object within the SeqWithQuality object | |
| 475 Returns : A scalar (the seq() value for the imbedded PrimarySeq object.) | |
| 476 Args : If a scalar is provided, the SeqWithQuality object will | |
| 477 attempt to set that as the sequence for the imbedded PrimarySeq | |
| 478 object. Otherwise, the value of seq() for the PrimarySeq object | |
| 479 is returned. | |
| 480 Notes : This is probably not a good idea because you then should call | |
| 481 length() to make sure that the sequence and quality are of the | |
| 482 same length. Even then, how can you make sure that this sequence | |
| 483 belongs with that quality? I provided this to give you rope to | |
| 484 hang yourself with. Tie it to a strong device and use a good | |
| 485 knot. | |
| 486 | |
| 487 =cut | |
| 488 | |
| 489 sub seq { | |
| 490 my ($self,$value) = @_; | |
| 491 if( defined $value) { | |
| 492 $self->{seq_ref}->seq($value); | |
| 493 $self->length(); | |
| 494 } | |
| 495 return $self->{seq_ref}->seq(); | |
| 496 } | |
| 497 | |
| 498 =head2 qual() | |
| 499 | |
| 500 Title : qual() | |
| 501 Usage : @quality_values = @{$obj->qual()}; _or_ | |
| 502 $obj->qual("10 10 20 40 50"); | |
| 503 Function: Returns the quality as imbedded in the PrimaryQual object | |
| 504 within the SeqWithQuality object. | |
| 505 Returns : A reference to an array containing the quality values in the | |
| 506 PrimaryQual object. | |
| 507 Args : If a scalar is provided, the SeqWithQuality object will | |
| 508 attempt to set that as the quality for the imbedded PrimaryQual | |
| 509 object. Otherwise, the value of qual() for the PrimaryQual | |
| 510 object is returned. | |
| 511 Notes : This is probably not a good idea because you then should call | |
| 512 length() to make sure that the sequence and quality are of the | |
| 513 same length. Even then, how can you make sure that this sequence | |
| 514 belongs with that quality? I provided this to give you a strong | |
| 515 board with which to flagellate yourself. | |
| 516 | |
| 517 =cut | |
| 518 | |
| 519 sub qual { | |
| 520 my ($self,$value) = @_; | |
| 521 | |
| 522 if( defined $value) { | |
| 523 $self->{qual_ref}->qual($value); | |
| 524 # update the lengths | |
| 525 $self->length(); | |
| 526 } | |
| 527 return $self->{qual_ref}->qual(); | |
| 528 } | |
| 529 | |
| 530 | |
| 531 | |
| 532 | |
| 533 =head2 length() | |
| 534 | |
| 535 Title : length() | |
| 536 Usage : $length = $seqWqual->length(); | |
| 537 Function: Get the length of the SeqWithQuality sequence/quality. | |
| 538 Returns : Returns the length of the sequence and quality if they are | |
| 539 both the same. Returns "DIFFERENT" if they differ. | |
| 540 Args : None. | |
| 541 | |
| 542 =cut | |
| 543 | |
| 544 sub length { | |
| 545 my $self = shift; | |
| 546 # what do I return here? Whew. Ambiguity... | |
| 547 ######## | |
| 548 | |
| 549 } | |
| 550 | |
| 551 | |
| 552 =head2 qual_obj | |
| 553 | |
| 554 Title : qual_obj($different_obj) | |
| 555 Usage : $qualobj = $seqWqual->qual_obj(); _or_ | |
| 556 $qualobj = $seqWqual->qual_obj($ref_to_primaryqual_obj); | |
| 557 Function: Get the PrimaryQual object that is imbedded in the | |
| 558 SeqWithQuality object or if a reference to a PrimaryQual object | |
| 559 is provided, set this as the PrimaryQual object imbedded in the | |
| 560 SeqWithQuality object. | |
| 561 Returns : A reference to a Bio::Seq::SeqWithQuality object. | |
| 562 | |
| 563 =cut | |
| 564 | |
| 565 sub qual_obj { | |
| 566 my ($self,$value) = @_; | |
| 567 return $self->{swq}->qual_obj($value); | |
| 568 } | |
| 569 | |
| 570 | |
| 571 =head2 seq_obj | |
| 572 | |
| 573 Title : seq_obj() | |
| 574 Usage : $seqobj = $seqWqual->qual_obj(); _or_ | |
| 575 $seqobj = $seqWqual->seq_obj($ref_to_primary_seq_obj); | |
| 576 Function: Get the PrimarySeq object that is imbedded in the | |
| 577 SeqWithQuality object or if a reference to a PrimarySeq object is | |
| 578 provided, set this as the PrimarySeq object imbedded in the | |
| 579 SeqWithQuality object. | |
| 580 Returns : A reference to a Bio::PrimarySeq object. | |
| 581 | |
| 582 =cut | |
| 583 | |
| 584 sub seq_obj { | |
| 585 my ($self,$value) = @_; | |
| 586 return $self->{swq}->seq_obj($value); | |
| 587 } | |
| 588 | |
| 589 =head2 _set_descriptors | |
| 590 | |
| 591 Title : _set_descriptors() | |
| 592 Usage : $seqWqual->_qual_obj($qual,$seq,$id,$acc,$pid,$desc,$given_id, | |
| 593 $alphabet); | |
| 594 Function: Set the descriptors for the SeqWithQuality object. Try to | |
| 595 match the descriptors in the PrimarySeq object and in the | |
| 596 PrimaryQual object if descriptors were not provided with | |
| 597 construction. | |
| 598 Returns : Nothing. | |
| 599 Args : $qual,$seq,$id,$acc,$pid,$desc,$given_id,$alphabet as found | |
| 600 in the new() method. | |
| 601 Notes : Really only intended to be called by the new() method. If | |
| 602 you want to invoke a similar function try | |
| 603 set_common_descriptors(). | |
| 604 | |
| 605 =cut | |
| 606 | |
| 607 | |
| 608 sub _set_descriptors { | |
| 609 my ($self,$qual,$seq,$id,$acc,$pid,$desc,$given_id,$alphabet) = @_; | |
| 610 $self->{swq}->_seq_descriptors($qual,$seq,$id,$acc,$pid,$desc,$given_id,$alphabet); | |
| 611 } | |
| 612 | |
| 613 =head2 subseq($start,$end) | |
| 614 | |
| 615 Title : subseq($start,$end) | |
| 616 Usage : $subsequence = $obj->subseq($start,$end); | |
| 617 Function: Returns the subseq from start to end, where the first base | |
| 618 is 1 and the number is inclusive, ie 1-2 are the first two | |
| 619 bases of the sequence. | |
| 620 Returns : A string. | |
| 621 Args : Two positions. | |
| 622 | |
| 623 =cut | |
| 624 | |
| 625 sub subseq { | |
| 626 my ($self,@args) = @_; | |
| 627 # does a single value work? | |
| 628 return $self->{swq}->subseq(@args); | |
| 629 } | |
| 630 | |
| 631 =head2 baseat($position) | |
| 632 | |
| 633 Title : baseat($position) | |
| 634 Usage : $base_at_position_6 = $obj->baseat("6"); | |
| 635 Function: Returns a single base at the given position, where the first | |
| 636 base is 1 and the number is inclusive, ie 1-2 are the first two | |
| 637 bases of the sequence. | |
| 638 Returns : A scalar. | |
| 639 Args : A position. | |
| 640 | |
| 641 =cut | |
| 642 | |
| 643 sub baseat { | |
| 644 my ($self,$val) = @_; | |
| 645 return $self->{swq}->subseq($val,$val); | |
| 646 } | |
| 647 | |
| 648 =head2 subqual($start,$end) | |
| 649 | |
| 650 Title : subqual($start,$end) | |
| 651 Usage : @qualities = @{$obj->subqual(10,20); | |
| 652 Function: returns the quality values from $start to $end, where the | |
| 653 first value is 1 and the number is inclusive, ie 1-2 are the | |
| 654 first two bases of the sequence. Start cannot be larger than | |
| 655 end but can be equal. | |
| 656 Returns : A reference to an array. | |
| 657 Args : a start position and an end position | |
| 658 | |
| 659 =cut | |
| 660 | |
| 661 sub subqual { | |
| 662 my ($self,@args) = @_; | |
| 663 return $self->{swq}->subqual(@args); | |
| 664 } | |
| 665 | |
| 666 =head2 qualat($position) | |
| 667 | |
| 668 Title : qualat($position) | |
| 669 Usage : $quality = $obj->qualat(10); | |
| 670 Function: Return the quality value at the given location, where the | |
| 671 first value is 1 and the number is inclusive, ie 1-2 are the | |
| 672 first two bases of the sequence. Start cannot be larger than | |
| 673 end but can be equal. | |
| 674 Returns : A scalar. | |
| 675 Args : A position. | |
| 676 | |
| 677 =cut | |
| 678 | |
| 679 sub qualat { | |
| 680 my ($self,$val) = @_; | |
| 681 return $self->{swq}->qualat($val); | |
| 682 } | |
| 683 | |
| 684 =head2 sub_trace_index($start,$end) | |
| 685 | |
| 686 Title : sub_trace_index($start,$end) | |
| 687 Usage : @trace_indices = @{$obj->sub_trace_index(10,20); | |
| 688 Function: returns the trace index values from $start to $end, where the | |
| 689 first value is 1 and the number is inclusive, ie 1-2 are the | |
| 690 first two bases of the sequence. Start cannot be larger than | |
| 691 end but can be e_trace_index. | |
| 692 Returns : A reference to an array. | |
| 693 Args : a start position and an end position | |
| 694 | |
| 695 =cut | |
| 696 | |
| 697 sub sub_trace_index { | |
| 698 my ($self,$start,$end) = @_; | |
| 699 | |
| 700 if( $start > $end ){ | |
| 701 $self->throw("in sub_trace_index, start [$start] has to be greater than end [$end]"); | |
| 702 } | |
| 703 | |
| 704 if( $start <= 0 || $end > $self->length ) { | |
| 705 $self->throw("You have to have start positive and length less than the total length of sequence [$start:$end] Total ".$self->length.""); | |
| 706 } | |
| 707 | |
| 708 # remove one from start, and then length is end-start | |
| 709 | |
| 710 $start--; | |
| 711 $end--; | |
| 712 my @sub_trace_index_array = @{$self->{trace_indices}}[$start..$end]; | |
| 713 | |
| 714 # return substr $self->seq(), $start, ($end-$start); | |
| 715 return \@sub_trace_index_array; | |
| 716 | |
| 717 } | |
| 718 | |
| 719 | |
| 720 | |
| 721 | |
| 722 =head2 trace_index_at($position) | |
| 723 | |
| 724 Title : trace_index_at($position) | |
| 725 Usage : $trace_index = $obj->trace_index_at(10); | |
| 726 Function: Return the trace_index value at the given location, where the | |
| 727 first value is 1 and the number is inclusive, ie 1-2 are the | |
| 728 first two bases of the sequence. Start cannot be larger than | |
| 729 end but can be etrace_index_. | |
| 730 Returns : A scalar. | |
| 731 Args : A position. | |
| 732 | |
| 733 =cut | |
| 734 | |
| 735 sub trace_index_at { | |
| 736 my ($self,$val) = @_; | |
| 737 my @trace_index_at = @{$self->sub_trace_index($val,$val)}; | |
| 738 if (scalar(@trace_index_at) == 1) { | |
| 739 return $trace_index_at[0]; | |
| 740 } | |
| 741 else { | |
| 742 $self->throw("AAAH! trace_index_at provided more then one quality."); | |
| 743 } | |
| 744 } | |
| 745 | |
| 746 | |
| 747 1; |
