Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/SeqFeature/FeaturePair.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: FeaturePair.pm,v 1.17 2002/10/08 08:38:31 lapp Exp $ | |
| 2 # | |
| 3 # BioPerl module for Bio::SeqFeature::FeaturePair | |
| 4 # | |
| 5 # Cared for by Ewan Birney <birney@sanger.ac.uk> | |
| 6 # | |
| 7 # Copyright Ewan Birney | |
| 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::SeqFeature::FeaturePair - hold pair feature information e.g. blast hits | |
| 16 | |
| 17 =head1 SYNOPSIS | |
| 18 | |
| 19 my $feat = new Bio::SeqFeature::FeaturePair(-feature1 => $f1, | |
| 20 -feature2 => $f2, | |
| 21 ); | |
| 22 | |
| 23 # Bio::SeqFeatureI methods can be used | |
| 24 | |
| 25 my $start = $feat->start; | |
| 26 my $end = $feat->end; | |
| 27 | |
| 28 # Bio::FeaturePair methods can be used | |
| 29 my $hstart = $feat->hstart; | |
| 30 my $hend = $feat->hend; | |
| 31 | |
| 32 my $feature1 = $feat->feature1; # returns feature1 object | |
| 33 | |
| 34 =head1 DESCRIPTION | |
| 35 | |
| 36 A sequence feature object where the feature is itself a feature on | |
| 37 another sequence - e.g. a blast hit where residues 1-40 of a protein | |
| 38 sequence SW:HBA_HUMAN has hit to bases 100 - 220 on a genomic sequence | |
| 39 HS120G22. The genomic sequence coordinates are used to create one | |
| 40 sequence feature $f1 and the protein coordinates are used to create | |
| 41 feature $f2. A FeaturePair object can then be made | |
| 42 | |
| 43 my $fp = new Bio::SeqFeature::FeaturePair(-feature1 => $f1, # genomic | |
| 44 -feature2 => $f2, # protein | |
| 45 ); | |
| 46 | |
| 47 This object can be used as a standard Bio::SeqFeatureI in which case | |
| 48 | |
| 49 my $gstart = $fp->start # returns start coord on feature1 - genomic seq. | |
| 50 my $gend = $fp->end # returns end coord on feature1. | |
| 51 | |
| 52 In general standard Bio::SeqFeatureI method calls return information | |
| 53 in feature1. | |
| 54 | |
| 55 Data in the feature 2 object are generally obtained using the standard | |
| 56 methods prefixed by h (for hit!) | |
| 57 | |
| 58 my $pstart = $fp->hstart # returns start coord on feature2 = protein seq. | |
| 59 my $pend = $fp->hend # returns end coord on feature2. | |
| 60 | |
| 61 If you wish to swap feature1 and feature2 around : | |
| 62 | |
| 63 $feat->invert | |
| 64 | |
| 65 so... | |
| 66 | |
| 67 $feat->start # etc. returns data in $feature2 object | |
| 68 | |
| 69 | |
| 70 No sub_SeqFeatures or tags can be stored in this object directly. Any | |
| 71 features or tags are expected to be stored in the contained objects | |
| 72 feature1, and feature2. | |
| 73 | |
| 74 =head1 CONTACT | |
| 75 | |
| 76 Ewan Birney E<lt>birney@sanger.ac.ukE<gt> | |
| 77 | |
| 78 =head1 APPENDIX | |
| 79 | |
| 80 The rest of the documentation details each of the object | |
| 81 methods. Internal methods are usually preceded with a _ | |
| 82 | |
| 83 =cut | |
| 84 | |
| 85 | |
| 86 # Let the code begin... | |
| 87 | |
| 88 | |
| 89 package Bio::SeqFeature::FeaturePair; | |
| 90 use vars qw(@ISA); | |
| 91 use strict; | |
| 92 | |
| 93 use Bio::SeqFeatureI; | |
| 94 use Bio::SeqFeature::Generic; | |
| 95 | |
| 96 @ISA = qw(Bio::SeqFeature::Generic); | |
| 97 | |
| 98 sub new { | |
| 99 my ($class, @args) = @_; | |
| 100 my $self = $class->SUPER::new(@args); | |
| 101 | |
| 102 my ($feature1,$feature2) = | |
| 103 $self->_rearrange([qw(FEATURE1 | |
| 104 FEATURE2 | |
| 105 )],@args); | |
| 106 | |
| 107 # Store the features in the object | |
| 108 $feature1 && $self->feature1($feature1); | |
| 109 $feature2 && $self->feature2($feature2); | |
| 110 return $self; | |
| 111 } | |
| 112 | |
| 113 =head2 feature1 | |
| 114 | |
| 115 Title : feature1 | |
| 116 Usage : $f = $featpair->feature1 | |
| 117 $featpair->feature1($feature) | |
| 118 Function: Get/set for the query feature | |
| 119 Returns : Bio::SeqFeatureI | |
| 120 Args : Bio::SeqFeatureI | |
| 121 | |
| 122 | |
| 123 =cut | |
| 124 | |
| 125 sub feature1 { | |
| 126 my ($self,$arg) = @_; | |
| 127 if ( defined($arg) || !defined $self->{'feature1'} ) { | |
| 128 $arg = new Bio::SeqFeature::Generic() unless( defined $arg); | |
| 129 $self->throw("Argument [$arg] must be a Bio::SeqFeatureI") | |
| 130 unless (ref($arg) && $arg->isa("Bio::SeqFeatureI")); | |
| 131 $self->{'feature1'} = $arg; | |
| 132 } | |
| 133 return $self->{'feature1'}; | |
| 134 } | |
| 135 | |
| 136 =head2 feature2 | |
| 137 | |
| 138 Title : feature2 | |
| 139 Usage : $f = $featpair->feature2 | |
| 140 $featpair->feature2($feature) | |
| 141 Function: Get/set for the hit feature | |
| 142 Returns : Bio::SeqFeatureI | |
| 143 Args : Bio::SeqFeatureI | |
| 144 | |
| 145 | |
| 146 =cut | |
| 147 | |
| 148 sub feature2 { | |
| 149 my ($self,$arg) = @_; | |
| 150 | |
| 151 if ( defined($arg) || ! defined $self->{'feature2'}) { | |
| 152 $arg = new Bio::SeqFeature::Generic unless( defined $arg); | |
| 153 $self->throw("Argument [$arg] must be a Bio::SeqFeatureI") | |
| 154 unless (ref($arg) && $arg->isa("Bio::SeqFeatureI")); | |
| 155 $self->{'feature2'} = $arg; | |
| 156 } | |
| 157 return $self->{'feature2'}; | |
| 158 } | |
| 159 | |
| 160 =head2 start | |
| 161 | |
| 162 Title : start | |
| 163 Usage : $start = $featpair->start | |
| 164 $featpair->start(20) | |
| 165 Function: Get/set on the start coordinate of feature1 | |
| 166 Returns : integer | |
| 167 Args : [optional] beginning of feature | |
| 168 | |
| 169 =cut | |
| 170 | |
| 171 sub start { | |
| 172 my ($self,$value) = @_; | |
| 173 return $self->feature1->start($value); | |
| 174 } | |
| 175 | |
| 176 =head2 end | |
| 177 | |
| 178 Title : end | |
| 179 Usage : $end = $featpair->end | |
| 180 $featpair->end($end) | |
| 181 Function: get/set on the end coordinate of feature1 | |
| 182 Returns : integer | |
| 183 Args : [optional] ending point of feature | |
| 184 | |
| 185 | |
| 186 =cut | |
| 187 | |
| 188 sub end{ | |
| 189 my ($self,$value) = @_; | |
| 190 return $self->feature1->end($value); | |
| 191 } | |
| 192 | |
| 193 =head2 strand | |
| 194 | |
| 195 Title : strand | |
| 196 Usage : $strand = $feat->strand() | |
| 197 $feat->strand($strand) | |
| 198 Function: get/set on strand information, being 1,-1 or 0 | |
| 199 Returns : -1,1 or 0 | |
| 200 Args : [optional] strand information to set | |
| 201 | |
| 202 | |
| 203 =cut | |
| 204 | |
| 205 sub strand{ | |
| 206 my ($self,$arg) = @_; | |
| 207 return $self->feature1->strand($arg); | |
| 208 } | |
| 209 | |
| 210 =head2 location | |
| 211 | |
| 212 Title : location | |
| 213 Usage : $location = $featpair->location | |
| 214 $featpair->location($location) | |
| 215 Function: Get/set location object (using feature1) | |
| 216 Returns : Bio::LocationI object | |
| 217 Args : [optional] LocationI to store | |
| 218 | |
| 219 =cut | |
| 220 | |
| 221 sub location { | |
| 222 my ($self,$value) = @_; | |
| 223 return $self->feature1->location($value); | |
| 224 } | |
| 225 | |
| 226 =head2 score | |
| 227 | |
| 228 Title : score | |
| 229 Usage : $score = $feat->score() | |
| 230 $feat->score($score) | |
| 231 Function: get/set on score information | |
| 232 Returns : float | |
| 233 Args : none if get, the new value if set | |
| 234 | |
| 235 | |
| 236 =cut | |
| 237 | |
| 238 sub score { | |
| 239 my ($self,$arg) = @_; | |
| 240 return $self->feature1->score($arg); | |
| 241 } | |
| 242 | |
| 243 =head2 frame | |
| 244 | |
| 245 Title : frame | |
| 246 Usage : $frame = $feat->frame() | |
| 247 $feat->frame($frame) | |
| 248 Function: get/set on frame information | |
| 249 Returns : 0,1,2 | |
| 250 Args : none if get, the new value if set | |
| 251 | |
| 252 | |
| 253 =cut | |
| 254 | |
| 255 sub frame { | |
| 256 my ($self,$arg) = @_; | |
| 257 return $self->feature1->frame($arg); | |
| 258 } | |
| 259 | |
| 260 =head2 primary_tag | |
| 261 | |
| 262 Title : primary_tag | |
| 263 Usage : $ptag = $featpair->primary_tag | |
| 264 Function: get/set on the primary_tag of feature1 | |
| 265 Returns : 0,1,2 | |
| 266 Args : none if get, the new value if set | |
| 267 | |
| 268 | |
| 269 =cut | |
| 270 | |
| 271 sub primary_tag{ | |
| 272 my ($self,$arg) = @_; | |
| 273 return $self->feature1->primary_tag($arg); | |
| 274 } | |
| 275 | |
| 276 =head2 source_tag | |
| 277 | |
| 278 Title : source_tag | |
| 279 Usage : $tag = $feat->source_tag() | |
| 280 $feat->source_tag('genscan'); | |
| 281 Function: Returns the source tag for a feature, | |
| 282 eg, 'genscan' | |
| 283 Returns : a string | |
| 284 Args : none | |
| 285 | |
| 286 | |
| 287 =cut | |
| 288 | |
| 289 sub source_tag{ | |
| 290 my ($self,$arg) = @_; | |
| 291 return $self->feature1->source_tag($arg); | |
| 292 } | |
| 293 | |
| 294 =head2 seqname | |
| 295 | |
| 296 Title : seqname | |
| 297 Usage : $obj->seq_id($newval) | |
| 298 Function: There are many cases when you make a feature that you | |
| 299 do know the sequence name, but do not know its actual | |
| 300 sequence. This is an attribute such that you can store | |
| 301 the seqname. | |
| 302 | |
| 303 This attribute should *not* be used in GFF dumping, as | |
| 304 that should come from the collection in which the seq | |
| 305 feature was found. | |
| 306 Returns : value of seqname | |
| 307 Args : newvalue (optional) | |
| 308 | |
| 309 | |
| 310 =cut | |
| 311 | |
| 312 sub seqname{ | |
| 313 my ($self,$arg) = @_; | |
| 314 return $self->feature1->seq_id($arg); | |
| 315 } | |
| 316 | |
| 317 =head2 hseqname | |
| 318 | |
| 319 Title : hseqname | |
| 320 Usage : $featpair->hseqname($newval) | |
| 321 Function: Get/set method for the name of | |
| 322 feature2. | |
| 323 Returns : value of $feature2->seq_id | |
| 324 Args : newvalue (optional) | |
| 325 | |
| 326 | |
| 327 =cut | |
| 328 | |
| 329 sub hseqname { | |
| 330 my ($self,$arg) = @_; | |
| 331 return $self->feature2->seq_id($arg); | |
| 332 } | |
| 333 | |
| 334 | |
| 335 =head2 hstart | |
| 336 | |
| 337 Title : hstart | |
| 338 Usage : $start = $featpair->hstart | |
| 339 $featpair->hstart(20) | |
| 340 Function: Get/set on the start coordinate of feature2 | |
| 341 Returns : integer | |
| 342 Args : none | |
| 343 | |
| 344 =cut | |
| 345 | |
| 346 sub hstart { | |
| 347 my ($self,$value) = @_; | |
| 348 return $self->feature2->start($value); | |
| 349 } | |
| 350 | |
| 351 =head2 hend | |
| 352 | |
| 353 Title : hend | |
| 354 Usage : $end = $featpair->hend | |
| 355 $featpair->hend($end) | |
| 356 Function: get/set on the end coordinate of feature2 | |
| 357 Returns : integer | |
| 358 Args : none | |
| 359 | |
| 360 | |
| 361 =cut | |
| 362 | |
| 363 sub hend{ | |
| 364 my ($self,$value) = @_; | |
| 365 return $self->feature2->end($value); | |
| 366 } | |
| 367 | |
| 368 | |
| 369 =head2 hstrand | |
| 370 | |
| 371 Title : hstrand | |
| 372 Usage : $strand = $feat->strand() | |
| 373 $feat->strand($strand) | |
| 374 Function: get/set on strand information, being 1,-1 or 0 | |
| 375 Returns : -1,1 or 0 | |
| 376 Args : none | |
| 377 | |
| 378 | |
| 379 =cut | |
| 380 | |
| 381 sub hstrand{ | |
| 382 my ($self,$arg) = @_; | |
| 383 return $self->feature2->strand($arg); | |
| 384 } | |
| 385 | |
| 386 =head2 hscore | |
| 387 | |
| 388 Title : hscore | |
| 389 Usage : $score = $feat->score() | |
| 390 $feat->score($score) | |
| 391 Function: get/set on score information | |
| 392 Returns : float | |
| 393 Args : none if get, the new value if set | |
| 394 | |
| 395 | |
| 396 =cut | |
| 397 | |
| 398 sub hscore { | |
| 399 my ($self,$arg) = @_; | |
| 400 return $self->feature2->score($arg); | |
| 401 } | |
| 402 | |
| 403 =head2 hframe | |
| 404 | |
| 405 Title : hframe | |
| 406 Usage : $frame = $feat->frame() | |
| 407 $feat->frame($frame) | |
| 408 Function: get/set on frame information | |
| 409 Returns : 0,1,2 | |
| 410 Args : none if get, the new value if set | |
| 411 | |
| 412 | |
| 413 =cut | |
| 414 | |
| 415 sub hframe { | |
| 416 my ($self,$arg) = @_; | |
| 417 return $self->feature2->frame($arg); | |
| 418 } | |
| 419 | |
| 420 =head2 hprimary_tag | |
| 421 | |
| 422 Title : hprimary_tag | |
| 423 Usage : $ptag = $featpair->hprimary_tag | |
| 424 Function: Get/set on the primary_tag of feature2 | |
| 425 Returns : 0,1,2 | |
| 426 Args : none if get, the new value if set | |
| 427 | |
| 428 | |
| 429 =cut | |
| 430 | |
| 431 sub hprimary_tag{ | |
| 432 my ($self,$arg) = @_; | |
| 433 return $self->feature2->primary_tag($arg); | |
| 434 } | |
| 435 | |
| 436 =head2 hsource_tag | |
| 437 | |
| 438 Title : hsource_tag | |
| 439 Usage : $tag = $feat->hsource_tag() | |
| 440 $feat->source_tag('genscan'); | |
| 441 Function: Returns the source tag for a feature, | |
| 442 eg, 'genscan' | |
| 443 Returns : a string | |
| 444 Args : none | |
| 445 | |
| 446 | |
| 447 =cut | |
| 448 | |
| 449 sub hsource_tag{ | |
| 450 my ($self,$arg) = @_; | |
| 451 return $self->feature2->source_tag($arg); | |
| 452 } | |
| 453 | |
| 454 =head2 invert | |
| 455 | |
| 456 Title : invert | |
| 457 Usage : $tag = $feat->invert | |
| 458 Function: Swaps feature1 and feature2 around | |
| 459 Returns : Nothing | |
| 460 Args : none | |
| 461 | |
| 462 | |
| 463 =cut | |
| 464 | |
| 465 sub invert { | |
| 466 my ($self) = @_; | |
| 467 | |
| 468 my $tmp = $self->feature1; | |
| 469 | |
| 470 $self->feature1($self->feature2); | |
| 471 $self->feature2($tmp); | |
| 472 return undef; | |
| 473 } | |
| 474 | |
| 475 1; |
