Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/EnsEMBL/IdentityXref.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 =head1 LICENSE | |
| 2 | |
| 3 Copyright (c) 1999-2012 The European Bioinformatics Institute and | |
| 4 Genome Research Limited. All rights reserved. | |
| 5 | |
| 6 This software is distributed under a modified Apache license. | |
| 7 For license details, please see | |
| 8 | |
| 9 http://www.ensembl.org/info/about/code_licence.html | |
| 10 | |
| 11 =head1 CONTACT | |
| 12 | |
| 13 Please email comments or questions to the public Ensembl | |
| 14 developers list at <dev@ensembl.org>. | |
| 15 | |
| 16 Questions may also be sent to the Ensembl help desk at | |
| 17 <helpdesk@ensembl.org>. | |
| 18 | |
| 19 =cut | |
| 20 | |
| 21 =head1 NAME | |
| 22 | |
| 23 Bio::EnsEMBL::IdentityXref | |
| 24 | |
| 25 =head1 SYNOPSIS | |
| 26 | |
| 27 my $xref = Bio::EnsEMBL::IdentityXref->new( | |
| 28 -XREF_IDENTITY => 80.4, | |
| 29 -ENSEMBL_IDENTITY => 90.1, | |
| 30 -SCORE => 90, | |
| 31 -EVALUE => 12, | |
| 32 -CIGAR_LINE => '23MD3M2I40M', | |
| 33 -XREF_START => 1, | |
| 34 -XREF_END => 68, | |
| 35 -ENSEMBL_START => 10, | |
| 36 -ENSEMBL_END => 77, | |
| 37 -ADAPTOR => $adaptor, | |
| 38 -PRIMARY_ID => $primary_id, | |
| 39 -DBNAME => 'SwissProt' | |
| 40 ); | |
| 41 | |
| 42 =head1 METHODS | |
| 43 | |
| 44 =cut | |
| 45 | |
| 46 package Bio::EnsEMBL::IdentityXref; | |
| 47 use vars qw(@ISA $AUTOLOAD); | |
| 48 use strict; | |
| 49 use Bio::EnsEMBL::Utils::Argument qw( rearrange ); | |
| 50 use Bio::EnsEMBL::Utils::Exception qw( deprecate ); | |
| 51 | |
| 52 @ISA = qw( Bio::EnsEMBL::DBEntry ); | |
| 53 | |
| 54 | |
| 55 =head2 new | |
| 56 | |
| 57 Arg [...] : XREF_IDENTITY ENSEMBL_IDENTITY SCORE EVALUE CIGAR_LINE | |
| 58 : XREF_START XREF_END ENSEMBL_START ENSEMBL_END | |
| 59 : ANALYSIS pairs | |
| 60 Example : see synopsis | |
| 61 Description: Create a new Bio::EnsEMBL::IdentityXref object | |
| 62 Returntype : Bio::EnsEMBL::IdentityXref | |
| 63 Exceptions : none | |
| 64 Caller : general | |
| 65 Status : Stable | |
| 66 | |
| 67 =cut | |
| 68 | |
| 69 my $error_shown = 0; | |
| 70 | |
| 71 sub new { | |
| 72 my ($class, @args) = @_; | |
| 73 my $self = $class->SUPER::new(@args); | |
| 74 my ($query_identity, $target_identity, $score, $evalue, | |
| 75 $cigar_line, $query_start, $query_end, $translation_start, | |
| 76 $translation_end, $analysis, $xref_identity, $ensembl_identity, | |
| 77 $xref_start, $xref_end, $ensembl_start, $ensembl_end) = rearrange( | |
| 78 [qw(QUERY_IDENTITY TARGET_IDENTITY SCORE EVALUE CIGAR_LINE | |
| 79 QUERY_START QUERY_END TRANSLATION_START TRANSLATION_END | |
| 80 ANALYSIS XREF_IDENTITY ENSEMBL_IDENTITY XREF_START XREF_END ENSEMBL_START ENSEMBL_END)], @args); | |
| 81 | |
| 82 if((defined($query_identity) or defined($target_identity) or defined($query_start) or defined ($query_end) or | |
| 83 defined($translation_start) or defined($translation_end)) and !$error_shown){ | |
| 84 print STDERR "Arguments have now been changed to stop confusion so please replace the following\n"; | |
| 85 print STDERR "\tQUERY_IDENTITY\t->\tXREF_IDENTITY\n"; | |
| 86 print STDERR "\tTARGET_IDENTITY\t->\tENSEMBL_IDENTITY\n"; | |
| 87 print STDERR "\tQUERY_START\t->\tXREF_START\n"; | |
| 88 print STDERR "\tQUERY_END\t->\tXREF_END\n"; | |
| 89 print STDERR "\tTRANSLATION_START\t->\tENSEMBL_START\n"; | |
| 90 print STDERR "\tTRANSLATION_END\t->\tENSEMBL_END\n"; | |
| 91 print STDERR "The old arguments will be removed in a futute release so please change your code to the new names\n"; | |
| 92 $error_shown = 1; | |
| 93 } | |
| 94 $self->{'xref_identity'} = $query_identity || $xref_identity; | |
| 95 $self->{'ensembl_identity'} = $target_identity || $ensembl_identity; | |
| 96 $self->{'score'} = $score; | |
| 97 $self->{'evalue'} = $evalue; | |
| 98 $self->{'cigar_line'} = $cigar_line; | |
| 99 $self->{'xref_start'} = $query_start || $xref_start; | |
| 100 $self->{'xref_end'} = $query_end || $xref_start; | |
| 101 $self->{'ensembl_start'} = $translation_start || $ensembl_start; | |
| 102 $self->{'ensembl_end'} = $translation_end || $ensembl_end; | |
| 103 $self->{'analysis'} = $analysis; | |
| 104 | |
| 105 return $self; | |
| 106 } | |
| 107 | |
| 108 =head2 xref_identity | |
| 109 | |
| 110 Arg [1] : (optional) string $value | |
| 111 Example : $xref_identity = $id_xref->xref_identity; | |
| 112 Description: Getter/Setter for xref identity | |
| 113 Returntype : string | |
| 114 Exceptions : none | |
| 115 Caller : general | |
| 116 Status : Stable | |
| 117 | |
| 118 =cut | |
| 119 | |
| 120 sub xref_identity{ | |
| 121 my $obj = shift; | |
| 122 if( @_ ) { | |
| 123 my $value = shift; | |
| 124 $obj->{'xref_identity'} = $value; | |
| 125 } | |
| 126 return $obj->{'xref_identity'}; | |
| 127 | |
| 128 } | |
| 129 | |
| 130 | |
| 131 =head2 ensembl_identity | |
| 132 | |
| 133 Arg [1] : (optional) string $value | |
| 134 Example : $ensembl_identity = $id_xref->ensembl_identity; | |
| 135 Description: Getter/Setter for ensembl identity | |
| 136 Returntype : string | |
| 137 Exceptions : none | |
| 138 Caller : general | |
| 139 Status : Stable | |
| 140 | |
| 141 =cut | |
| 142 | |
| 143 sub ensembl_identity{ | |
| 144 my $obj = shift; | |
| 145 if( @_ ) { | |
| 146 my $value = shift; | |
| 147 $obj->{'ensembl_identity'} = $value; | |
| 148 } | |
| 149 return $obj->{'ensembl_identity'}; | |
| 150 | |
| 151 } | |
| 152 | |
| 153 | |
| 154 | |
| 155 =head2 cigar_line | |
| 156 | |
| 157 Arg [1] : string $cigar_line | |
| 158 Example : none | |
| 159 Description: get/set for attribute cigar_line | |
| 160 Returntype : string | |
| 161 Exceptions : none | |
| 162 Caller : general | |
| 163 Status : Stable | |
| 164 | |
| 165 =cut | |
| 166 | |
| 167 sub cigar_line { | |
| 168 my $self = shift; | |
| 169 $self->{'cigar_line'} = shift if( @_ ); | |
| 170 return $self->{'cigar_line'}; | |
| 171 } | |
| 172 | |
| 173 | |
| 174 =head2 ensembl_start | |
| 175 | |
| 176 Arg [1] : string $ensembl_start | |
| 177 Example : none | |
| 178 Description: get/set for attribute ensembl_start | |
| 179 Returntype : string | |
| 180 Exceptions : none | |
| 181 Caller : general | |
| 182 Status : Stable | |
| 183 | |
| 184 =cut | |
| 185 | |
| 186 sub ensembl_start { | |
| 187 my $self = shift; | |
| 188 $self->{'ensembl_start'} = shift if( @_ ); | |
| 189 return $self->{'ensembl_start'}; | |
| 190 } | |
| 191 | |
| 192 | |
| 193 =head2 ensembl_end | |
| 194 | |
| 195 Arg [1] : string $ensembl_end | |
| 196 Example : none | |
| 197 Description: get/set for attribute ensembl_end | |
| 198 Returntype : string | |
| 199 Exceptions : none | |
| 200 Caller : general | |
| 201 Status : Stable | |
| 202 | |
| 203 =cut | |
| 204 | |
| 205 sub ensembl_end { | |
| 206 my $self = shift; | |
| 207 $self->{'ensembl_end'} = shift if( @_ ); | |
| 208 return $self->{'ensembl_end'}; | |
| 209 } | |
| 210 | |
| 211 | |
| 212 =head2 xref_start | |
| 213 | |
| 214 Arg [1] : string $xref_start | |
| 215 Example : none | |
| 216 Description: get/set for attribute xref_start | |
| 217 Returntype : string | |
| 218 Exceptions : none | |
| 219 Caller : general | |
| 220 Status : Stable | |
| 221 | |
| 222 =cut | |
| 223 | |
| 224 sub xref_start { | |
| 225 my $self = shift; | |
| 226 $self->{'xref_start'} = shift if( @_ ); | |
| 227 return $self->{'xref_start'}; | |
| 228 } | |
| 229 | |
| 230 | |
| 231 =head2 xref_end | |
| 232 | |
| 233 Arg [1] : string $xref_end | |
| 234 Example : none | |
| 235 Description: get/set for attribute xref_end | |
| 236 Returntype : string | |
| 237 Exceptions : none | |
| 238 Caller : general | |
| 239 Status : Stable | |
| 240 | |
| 241 =cut | |
| 242 | |
| 243 sub xref_end { | |
| 244 my $self = shift; | |
| 245 $self->{'xref_end'} = shift if( @_ ); | |
| 246 return $self->{'xref_end'}; | |
| 247 } | |
| 248 | |
| 249 | |
| 250 =head2 score | |
| 251 | |
| 252 Arg [1] : string $score | |
| 253 Example : none | |
| 254 Description: get/set for attribute score | |
| 255 Returntype : string | |
| 256 Exceptions : none | |
| 257 Caller : general | |
| 258 Status : Stable | |
| 259 | |
| 260 =cut | |
| 261 | |
| 262 sub score { | |
| 263 my $self = shift; | |
| 264 $self->{'score'} = shift if( @_ ); | |
| 265 return $self->{'score'}; | |
| 266 } | |
| 267 | |
| 268 | |
| 269 =head2 evalue | |
| 270 | |
| 271 Arg [1] : string $evalue | |
| 272 Example : none | |
| 273 Description: get/set for attribute evalue | |
| 274 Returntype : string | |
| 275 Exceptions : none | |
| 276 Caller : general | |
| 277 Status : Stable | |
| 278 | |
| 279 =cut | |
| 280 | |
| 281 sub evalue { | |
| 282 my $self = shift; | |
| 283 $self->{'evalue'} = shift if( @_ ); | |
| 284 return $self->{'evalue'}; | |
| 285 } | |
| 286 | |
| 287 | |
| 288 | |
| 289 | |
| 290 =head2 get_mapper | |
| 291 | |
| 292 Args : none | |
| 293 Example : none | |
| 294 Description: produces a mapper object that takes coordinates from one side | |
| 295 of the alignment to the other side. "ensembl" and "external" | |
| 296 are the two coordinate systems contained. | |
| 297 Returntype : Bio::EnsEMBL::Mapper | |
| 298 Exceptions : none | |
| 299 Caller : general, ProteinDAS subsystem | |
| 300 Status : Stable | |
| 301 | |
| 302 =cut | |
| 303 | |
| 304 | |
| 305 sub get_mapper { | |
| 306 my ( $self ) = @_; | |
| 307 # parse the cigar_line and create a mapper ... | |
| 308 if( exists $self->{'_cached_mapper'} ) { | |
| 309 return $self->{'_cached_mapper'}; | |
| 310 } | |
| 311 | |
| 312 my ( @lens, @chars ); | |
| 313 | |
| 314 # if there is no cigar line, nothing is going to be loaded | |
| 315 if( $self->cigar_line() ) { | |
| 316 my @pre_lens = split( '[DMI]', $self->cigar_line() ); | |
| 317 @lens = map { if( ! $_ ) { 1 } else { $_ }} @pre_lens; | |
| 318 @chars = grep { /[DMI]/ } split( //, $self->cigar_line() ); | |
| 319 } | |
| 320 my $translation_start = $self->ensembl_start(); | |
| 321 my $translation_end = $self->ensembl_end(); | |
| 322 my $query_start = $self->xref_start(); | |
| 323 my $query_end = $self->xref_end(); | |
| 324 | |
| 325 # my $hit_id = $self->display_id(); | |
| 326 my $ensembl_id = "ensembl_id"; | |
| 327 my $external_id = "external_id"; | |
| 328 # now build the mapper | |
| 329 my $mapper = Bio::EnsEMBL::Mapper->new( "external", "ensembl" ); | |
| 330 | |
| 331 | |
| 332 for( my $i=0; $i<=$#lens; $i++ ) { | |
| 333 my $length = $lens[$i]; | |
| 334 my $char = $chars[$i]; | |
| 335 if( $char eq "M" ) { | |
| 336 $mapper->add_map_coordinates( $external_id, $query_start, | |
| 337 $query_start + $length - 1, 1, | |
| 338 $ensembl_id, $translation_start, | |
| 339 $translation_start + $length - 1); | |
| 340 $query_start += $length; | |
| 341 $translation_start += $length; | |
| 342 | |
| 343 } elsif( $char eq "D" ) { | |
| 344 $translation_start += $length; | |
| 345 } elsif( $char eq "I" ) { | |
| 346 $query_start += $length; | |
| 347 } | |
| 348 } | |
| 349 | |
| 350 $self->{'_cached_mapper'} = $mapper; | |
| 351 | |
| 352 return $mapper; | |
| 353 } | |
| 354 | |
| 355 | |
| 356 | |
| 357 =head2 transform_feature | |
| 358 | |
| 359 Arg [1] : a feature type with start and end $feature | |
| 360 This doesnt need to be a Bio::EnsEMBL::Feature as it doesnt | |
| 361 need an attached slice. We may have to introduce an appropriate | |
| 362 object type. | |
| 363 Example : my $ens_prot_feature_list = | |
| 364 $ident_xref->transform_feature( $swiss_prot_feature ); | |
| 365 Description: a list of potential partial features which represent all | |
| 366 mappable places | |
| 367 of the original feature in ensembl translation coordinates. | |
| 368 Returntype : listref of whatever was put in | |
| 369 Exceptions : none | |
| 370 Caller : general, ProteinDAS subsystem | |
| 371 Status : Stable | |
| 372 | |
| 373 =cut | |
| 374 | |
| 375 | |
| 376 sub transform_feature { | |
| 377 my $self= shift; | |
| 378 my $feature = shift; | |
| 379 | |
| 380 my $fstart = $feature->start(); | |
| 381 my $fend = $feature->end(); | |
| 382 | |
| 383 my $mapper = $self->get_mapper(); | |
| 384 my @result; | |
| 385 | |
| 386 my @coords = $mapper->map_coordinates( "external_id", $fstart, $fend, | |
| 387 1, "external" ); | |
| 388 | |
| 389 for my $coord ( @coords ) { | |
| 390 if( $coord->isa( "Bio::EnsEMBL::Mapper::Coordinate" )) { | |
| 391 my $new_feature; | |
| 392 %{$new_feature} = %$feature; | |
| 393 bless $new_feature, ref( $feature ); | |
| 394 $new_feature->start( $coord->start() ); | |
| 395 $new_feature->end( $coord->end() ); | |
| 396 | |
| 397 push( @result, $new_feature ); | |
| 398 } | |
| 399 } | |
| 400 | |
| 401 return \@result; | |
| 402 } | |
| 403 | |
| 404 | |
| 405 | |
| 406 =head2 map_feature | |
| 407 | |
| 408 Arg [1] : a start,end capable feature object | |
| 409 Example : none | |
| 410 Description: | |
| 411 Returntype : list of Coordinates/Gaps which represents the mapping | |
| 412 Exceptions : none | |
| 413 Caller : another way of doing ProteinDAS | |
| 414 Status : Stable | |
| 415 | |
| 416 =cut | |
| 417 | |
| 418 sub map_feature { | |
| 419 my $self = shift; | |
| 420 my $feature = shift; | |
| 421 | |
| 422 | |
| 423 my $fstart = $feature->start(); | |
| 424 my $fend = $feature->end(); | |
| 425 | |
| 426 my $mapper = $self->get_mapper(); | |
| 427 my @coords = $mapper->map_coordinates( "external_id", $fstart, $fend, 1, | |
| 428 "external" ); | |
| 429 | |
| 430 return @coords; | |
| 431 } | |
| 432 | |
| 433 | |
| 434 ########################### | |
| 435 # DEPRECATED METHODS FOLLOW | |
| 436 ########################### | |
| 437 | |
| 438 =head2 query_identity | |
| 439 | |
| 440 Description: DEPRECATED. Use xref_identity() instead. | |
| 441 Status : At Risk | |
| 442 | |
| 443 =cut | |
| 444 | |
| 445 sub query_identity{ | |
| 446 deprecate("Use xref_identity instead"); | |
| 447 xref_identity(@_); | |
| 448 } | |
| 449 | |
| 450 | |
| 451 =head2 target_identity | |
| 452 | |
| 453 Description: DEPRECATED. Use ensembl_identity() instead. | |
| 454 Status : At Risk | |
| 455 | |
| 456 =cut | |
| 457 | |
| 458 sub target_identity{ | |
| 459 deprecate("Use ensembl_identity instead"); | |
| 460 ensembl_identity(@_); | |
| 461 } | |
| 462 | |
| 463 | |
| 464 | |
| 465 =head2 translation_start | |
| 466 | |
| 467 Description: DEPRECATED. Use ensembl_start() instead. | |
| 468 Status : At Risk | |
| 469 | |
| 470 =cut | |
| 471 | |
| 472 sub translation_start { | |
| 473 deprecate("Use ensembl_start instead"); | |
| 474 ensembl_start(@_); | |
| 475 | |
| 476 } | |
| 477 | |
| 478 | |
| 479 =head2 translation_end | |
| 480 | |
| 481 Description: DEPRECATED. Use ensembl_end() instead. | |
| 482 Status : At Risk | |
| 483 | |
| 484 =cut | |
| 485 | |
| 486 sub translation_end { | |
| 487 deprecate("Use ensembl_end instead"); | |
| 488 ensembl_end(@_); | |
| 489 } | |
| 490 | |
| 491 | |
| 492 | |
| 493 =head2 query_start | |
| 494 | |
| 495 Description: DEPRECATED. Use xref_start() instead. | |
| 496 Status : At Risk | |
| 497 | |
| 498 =cut | |
| 499 | |
| 500 sub query_start { | |
| 501 deprecate("Use xref_start instead"); | |
| 502 xref_start(@_); | |
| 503 | |
| 504 } | |
| 505 | |
| 506 | |
| 507 | |
| 508 =head2 query_end | |
| 509 | |
| 510 Description: DEPRECATED. Use xref_end() instead. | |
| 511 Status : At Risk | |
| 512 | |
| 513 =cut | |
| 514 | |
| 515 sub query_end { | |
| 516 deprecate("Use xref_end instead"); | |
| 517 xref_end(@_); | |
| 518 | |
| 519 } | |
| 520 | |
| 521 | |
| 522 1; |
