Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/Tools/ECnumber.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: ECnumber.pm,v 1.7 2002/12/12 18:27:02 czmasek Exp $ | |
| 2 # | |
| 3 # BioPerl module for Bio::Tools::ECnumber | |
| 4 # | |
| 5 # Cared for by Christian M. Zmasek <czmasek@gnf.org> or <cmzmasek@yahoo.com> | |
| 6 # | |
| 7 # (c) Christian M. Zmasek, czmasek@gnf.org, 2002. | |
| 8 # (c) GNF, Genomics Institute of the Novartis Research Foundation, 2002. | |
| 9 # | |
| 10 # You may distribute this module under the same terms as perl itself. | |
| 11 # Refer to the Perl Artistic License (see the license accompanying this | |
| 12 # software package, or see http://www.perl.com/language/misc/Artistic.html) | |
| 13 # for the terms under which you may use, modify, and redistribute this module. | |
| 14 # | |
| 15 # THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED | |
| 16 # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | |
| 17 # MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
| 18 # | |
| 19 | |
| 20 # POD documentation - main docs before the code | |
| 21 | |
| 22 | |
| 23 =head1 NAME | |
| 24 | |
| 25 ECnumber - representation of EC numbers | |
| 26 | |
| 27 =head1 SYNOPSIS | |
| 28 | |
| 29 use Bio::Tools::ECnumber; | |
| 30 | |
| 31 | |
| 32 # Creation of ECnumber objects | |
| 33 # ---------------------------- | |
| 34 | |
| 35 my $EC1 = Bio::Tools::ECnumber->new( -ec_string => "4.3.2.1" ); | |
| 36 my $EC2 = Bio::Tools::ECnumber->new( -ec_string => "EC 1.1.1.1" ); | |
| 37 my $EC3 = Bio::Tools::ECnumber->new(); | |
| 38 | |
| 39 | |
| 40 # Copying | |
| 41 # ------- | |
| 42 | |
| 43 my $EC4 = $EC1->copy(); | |
| 44 | |
| 45 | |
| 46 # Modification of ECnumber objects | |
| 47 # -------------------------------- | |
| 48 | |
| 49 print $EC3->EC_string( "1.01.01.001" ); # Prints "1.1.1.1". | |
| 50 | |
| 51 | |
| 52 # To string | |
| 53 # --------- | |
| 54 | |
| 55 print $EC3->EC_string(); | |
| 56 | |
| 57 # or: | |
| 58 | |
| 59 print $EC3->to_string(); | |
| 60 | |
| 61 | |
| 62 | |
| 63 # Test for equality | |
| 64 # ----------------- | |
| 65 | |
| 66 # Against ECnumber object: | |
| 67 if ( $EC3->is_equal( $EC2 ) ) { # Prints "equal". | |
| 68 print "equal"; | |
| 69 } | |
| 70 | |
| 71 # Against string representation of EC number: | |
| 72 if ( ! $EC3->is_equal( "1.1.1.-" ) ) { # Prints "not equal". | |
| 73 print "not equal"; | |
| 74 } | |
| 75 | |
| 76 | |
| 77 # Test for membership | |
| 78 # ------------------- | |
| 79 | |
| 80 my $EC5 = Bio::Tools::ECnumber->new( -ec_string => "4.3.2.-" ); | |
| 81 | |
| 82 # Against ECnumber object. | |
| 83 if ( $EC1->is_member( $EC5 ) ) { # Prints "member". | |
| 84 print "member"; | |
| 85 } | |
| 86 | |
| 87 | |
| 88 # Against string representation of EC number. | |
| 89 if ( ! $EC1->is_member( "4.3.1.-" ) ) { # Prints "not member". | |
| 90 print "not member"; | |
| 91 } | |
| 92 | |
| 93 | |
| 94 | |
| 95 =head1 DESCRIPTION | |
| 96 | |
| 97 ECnumber is a representation of EC numbers [http://www.chem.qmul.ac.uk/iubmb/enzyme/]. | |
| 98 | |
| 99 =head1 FEEDBACK | |
| 100 | |
| 101 =head2 Mailing Lists | |
| 102 | |
| 103 User feedback is an integral part of the evolution of this and other | |
| 104 Bioperl modules. Send your comments and suggestions preferably to one | |
| 105 of the Bioperl mailing lists. Your participation is much appreciated. | |
| 106 | |
| 107 bioperl-l@bioperl.org - General discussion | |
| 108 http://bio.perl.org/MailList.html - About the mailing lists | |
| 109 | |
| 110 =head2 Reporting Bugs | |
| 111 | |
| 112 Report bugs to the Bioperl bug tracking system to help us keep track | |
| 113 the bugs and their resolution. Bug reports can be submitted via email | |
| 114 or the web: | |
| 115 | |
| 116 bioperl-bugs@bio.perl.org | |
| 117 http://bugzilla.bioperl.org/ | |
| 118 | |
| 119 =head1 AUTHOR | |
| 120 | |
| 121 Christian M. Zmasek | |
| 122 | |
| 123 Email: czmasek@gnf.org or cmzmasek@yahoo.com | |
| 124 | |
| 125 WWW: http://www.genetics.wustl.edu/eddy/people/zmasek/ | |
| 126 | |
| 127 Address: | |
| 128 | |
| 129 Genomics Institute of the Novartis Research Foundation | |
| 130 10675 John Jay Hopkins Drive | |
| 131 San Diego, CA 92121 | |
| 132 | |
| 133 =head1 APPENDIX | |
| 134 | |
| 135 The rest of the documentation details each of the object | |
| 136 methods. Internal methods are usually preceded with a _ | |
| 137 | |
| 138 =cut | |
| 139 | |
| 140 | |
| 141 # Let the code begin... | |
| 142 | |
| 143 package Bio::Tools::ECnumber; | |
| 144 use vars qw( @ISA ); | |
| 145 use strict; | |
| 146 use Bio::Root::Object; | |
| 147 | |
| 148 use constant DEFAULT => "-"; | |
| 149 use constant TRUE => 1; | |
| 150 use constant FALSE => 0; | |
| 151 | |
| 152 @ISA = qw( Bio::Root::Root ); | |
| 153 | |
| 154 | |
| 155 | |
| 156 | |
| 157 | |
| 158 =head2 new | |
| 159 | |
| 160 Title : new | |
| 161 Usage : $EC1 = Bio::Tools::ECnumber->new( -ec_string => "4.3.2.1" ); | |
| 162 or | |
| 163 $EC2 = Bio::Tools::ECnumber->new( -ec_string => "4.3.2.2", | |
| 164 -comment => "Is EC 4.3.2.2" ); | |
| 165 or | |
| 166 $EC3 = Bio::Tools::ECnumber->new(); # EC3 is now "-.-.-.-" | |
| 167 Function: Creates a new ECnumber object. | |
| 168 Parses a EC number from "x.x.x.x", "EC x.x.x.x", | |
| 169 "ECx.x.x.x", or "EC:x.x.x.x"; | |
| 170 x being either a positive integer or a "-". | |
| 171 Returns : A new Ecnumber object. | |
| 172 Args : A string representing a EC number, e.g. "4.3.2.1" | |
| 173 or "EC 4.3.2.1" or "1.-.-.-". | |
| 174 | |
| 175 =cut | |
| 176 | |
| 177 sub new { | |
| 178 my( $class, @args ) = @_; | |
| 179 | |
| 180 my $self = $class->SUPER::new( @args ); | |
| 181 | |
| 182 my ( $EC_string, $comment ) | |
| 183 = $self->_rearrange( [ qw( EC_STRING COMMENT ) ], @args ); | |
| 184 | |
| 185 $self->init(); | |
| 186 | |
| 187 $EC_string && $self->EC_string( $EC_string ); | |
| 188 $comment && $self->comment( $comment ); | |
| 189 | |
| 190 return $self; | |
| 191 | |
| 192 } # new | |
| 193 | |
| 194 | |
| 195 | |
| 196 =head2 init | |
| 197 | |
| 198 Title : init() | |
| 199 Usage : $EC1->init(); # EC1 is now "-.-.-.-" | |
| 200 Function: Initializes this ECnumber to default values. | |
| 201 Returns : | |
| 202 Args : | |
| 203 | |
| 204 =cut | |
| 205 | |
| 206 sub init { | |
| 207 my( $self ) = @_; | |
| 208 | |
| 209 $self->enzyme_class( DEFAULT ); | |
| 210 $self->sub_class( DEFAULT ); | |
| 211 $self->sub_sub_class( DEFAULT ); | |
| 212 $self->serial_number( DEFAULT ); | |
| 213 $self->comment( "" ); | |
| 214 | |
| 215 } # init | |
| 216 | |
| 217 | |
| 218 | |
| 219 =head2 copy | |
| 220 | |
| 221 Title : copy() | |
| 222 Usage : $EC2 = $EC1->copy(); | |
| 223 Function: Creates a new ECnumber object which is an exact copy | |
| 224 of this ECnumber. | |
| 225 Returns : A copy of this ECnumber. | |
| 226 Args : | |
| 227 | |
| 228 =cut | |
| 229 | |
| 230 sub copy { | |
| 231 my( $self ) = @_; | |
| 232 | |
| 233 my $new_ec = $self->new(); | |
| 234 $new_ec->enzyme_class( $self->enzyme_class() ); | |
| 235 $new_ec->sub_class( $self->sub_class() ); | |
| 236 $new_ec->sub_sub_class( $self->sub_sub_class() ); | |
| 237 $new_ec->serial_number( $self->serial_number() ); | |
| 238 $new_ec->comment( $self->comment() ); | |
| 239 return $new_ec; | |
| 240 | |
| 241 } # copy | |
| 242 | |
| 243 | |
| 244 | |
| 245 =head2 EC_string | |
| 246 | |
| 247 Title : EC_string | |
| 248 Usage : $EC3->EC_string( "1.1.1.-" ); | |
| 249 or | |
| 250 print $EC3->EC_string(); | |
| 251 Function: Set/get for string representations of EC numbers. | |
| 252 Parses a EC number from "x.x.x.x", "EC x.x.x.x", | |
| 253 "ECx.x.x.x", or "EC:x.x.x.x"; | |
| 254 x being either a positive integer or a "-". | |
| 255 Returns : A string representations of a EC number. | |
| 256 Args : A string representations of a EC number. | |
| 257 | |
| 258 =cut | |
| 259 | |
| 260 sub EC_string { | |
| 261 my ( $self, $value ) = @_; | |
| 262 | |
| 263 if ( defined $value) { | |
| 264 $value =~ s/\s+//g; # Removes white space. | |
| 265 $value =~ s/^EC//i; # Removes "EC". | |
| 266 $value =~ s/^://; # Removes ":". | |
| 267 | |
| 268 if ( $value =~ /^([\d-]*)\.([\d-]*)\.([\d-]*)\.([\d-]*)$/ ) { | |
| 269 $self->enzyme_class( $1 ); | |
| 270 $self->sub_class( $2 ); | |
| 271 $self->sub_sub_class( $3 ); | |
| 272 $self->serial_number( $4 ); | |
| 273 } | |
| 274 else { | |
| 275 $self->throw( "Illegal format error [$value]" ); | |
| 276 } | |
| 277 } | |
| 278 | |
| 279 return $self->to_string(); | |
| 280 | |
| 281 } # EC_string | |
| 282 | |
| 283 | |
| 284 | |
| 285 =head2 to_string | |
| 286 | |
| 287 Title : to_string() | |
| 288 Usage : print $EC3->to_string(); | |
| 289 Function: To string method for EC numbers | |
| 290 (equals the "get" functionality of "EC_string"). | |
| 291 Returns : A string representations of a EC number. | |
| 292 Args : | |
| 293 | |
| 294 =cut | |
| 295 | |
| 296 sub to_string { | |
| 297 my ( $self ) = @_; | |
| 298 | |
| 299 my $s = $self->enzyme_class() . "."; | |
| 300 $s .= $self->sub_class() . "."; | |
| 301 $s .= $self->sub_sub_class() . "."; | |
| 302 $s .= $self->serial_number(); | |
| 303 return $s; | |
| 304 | |
| 305 } # to_string | |
| 306 | |
| 307 | |
| 308 | |
| 309 =head2 is_equal | |
| 310 | |
| 311 Title : is_equal | |
| 312 Usage : if ( $EC3->is_equal( $EC2 ) ) | |
| 313 or | |
| 314 if ( $EC3->is_equal( "1.1.1.-" ) ) | |
| 315 Function: Checks whether this ECnumber is equal to the argument | |
| 316 EC number (please note: "1.1.1.1" != "1.1.1.-"). | |
| 317 Returns : True (1) or false (0). | |
| 318 Args : A ECnumber object or a string representation of a EC number. | |
| 319 | |
| 320 =cut | |
| 321 | |
| 322 sub is_equal { | |
| 323 my ( $self, $value ) = @_; | |
| 324 | |
| 325 if ( $self->_is_not_reference( $value ) ) { | |
| 326 $value = $self->new( -ec_string => $value ); | |
| 327 } | |
| 328 else { | |
| 329 $self->_is_ECnumber_object( $value ); | |
| 330 } | |
| 331 | |
| 332 unless ( $self->enzyme_class() eq $value->enzyme_class() ) { | |
| 333 return FALSE; | |
| 334 } | |
| 335 unless ( $self->sub_class() eq $value->sub_class() ) { | |
| 336 return FALSE; | |
| 337 } | |
| 338 unless ( $self->sub_sub_class() eq $value->sub_sub_class() ) { | |
| 339 return FALSE; | |
| 340 } | |
| 341 unless ( $self->serial_number() eq $value->serial_number() ) { | |
| 342 return FALSE; | |
| 343 } | |
| 344 return TRUE; | |
| 345 | |
| 346 } # is_equal | |
| 347 | |
| 348 | |
| 349 | |
| 350 =head2 is_member | |
| 351 | |
| 352 Title : is_member | |
| 353 Usage : if ( $EC1->is_member( $EC5 ) ) | |
| 354 or | |
| 355 if ( $EC1->is_member( "4.3.-.-" ) ) | |
| 356 Function: Checks whether this ECnumber is a member of the (incomplete) | |
| 357 argument EC number (e.g. "1.1.1.1" is a member of "1.1.1.-" | |
| 358 but not of "1.1.1.2"). | |
| 359 Returns : True (1) or false (0). | |
| 360 Args : A ECnumber object or a string representation of a EC number. | |
| 361 | |
| 362 =cut | |
| 363 | |
| 364 sub is_member { | |
| 365 my ( $self, $value ) = @_; | |
| 366 | |
| 367 if ( $self->_is_not_reference( $value ) ) { | |
| 368 $value = $self->new( -ec_string => $value ); | |
| 369 } | |
| 370 else { | |
| 371 $self->_is_ECnumber_object( $value ); | |
| 372 } | |
| 373 $self->_check_for_illegal_defaults(); | |
| 374 $value->_check_for_illegal_defaults(); | |
| 375 | |
| 376 unless ( $value->enzyme_class() eq DEFAULT | |
| 377 || $self->enzyme_class() eq $value->enzyme_class() ) { | |
| 378 return FALSE; | |
| 379 } | |
| 380 unless ( $value->sub_class() eq DEFAULT | |
| 381 || $self->sub_class() eq $value->sub_class() ) { | |
| 382 return FALSE; | |
| 383 } | |
| 384 unless ( $value->sub_sub_class() eq DEFAULT | |
| 385 || $self->sub_sub_class() eq $value->sub_sub_class() ) { | |
| 386 return FALSE; | |
| 387 } | |
| 388 unless ( $value->serial_number() eq DEFAULT | |
| 389 || $self->serial_number() eq $value->serial_number() ) { | |
| 390 return FALSE; | |
| 391 } | |
| 392 return TRUE; | |
| 393 | |
| 394 } # is_member | |
| 395 | |
| 396 | |
| 397 | |
| 398 =head2 enzyme_class | |
| 399 | |
| 400 Title : enzyme_class | |
| 401 Usage : $EC1->enzyme_class( 1 ); | |
| 402 or | |
| 403 print $EC1->enzyme_class(); | |
| 404 Function: Set/get for the enzyme class number of ECnumbers. | |
| 405 Returns : The enzyme class number of this ECnumber. | |
| 406 Args : A positive integer or "-". | |
| 407 | |
| 408 =cut | |
| 409 | |
| 410 sub enzyme_class { | |
| 411 my ( $self, $value ) = @_; | |
| 412 | |
| 413 if ( defined $value) { | |
| 414 $self->{ "_enzyme_class" } = $self->_check_number( $value ); | |
| 415 } | |
| 416 | |
| 417 return $self->{ "_enzyme_class" }; | |
| 418 | |
| 419 } # enzyme_class | |
| 420 | |
| 421 | |
| 422 | |
| 423 =head2 sub_class | |
| 424 | |
| 425 Title : sub_class | |
| 426 Usage : $EC1->sub_class( 4 ); | |
| 427 or | |
| 428 print $EC1->sub_class(); | |
| 429 Function: Set/get for the enzyme sub class number of ECnumbers. | |
| 430 Returns : The enzyme sub class number of this ECnumber. | |
| 431 Args : A positive integer or "-". | |
| 432 | |
| 433 =cut | |
| 434 | |
| 435 sub sub_class { | |
| 436 my ( $self, $value ) = @_; | |
| 437 | |
| 438 if ( defined $value) { | |
| 439 $self->{ "_sub_class" } = $self->_check_number( $value ); | |
| 440 } | |
| 441 | |
| 442 return $self->{ "_sub_class" }; | |
| 443 | |
| 444 } # sub_class | |
| 445 | |
| 446 | |
| 447 | |
| 448 =head2 sub_sub_class | |
| 449 | |
| 450 Title : sub_sub_class | |
| 451 Usage : $EC1->sub_sub_class( 12 ); | |
| 452 or | |
| 453 print $EC1->sub_sub_class(); | |
| 454 Function: Set/get for the enzyme sub sub class number of ECnumbers. | |
| 455 Returns : The enzyme sub sub class number of this ECnumber. | |
| 456 Args : A positive integer or "-". | |
| 457 | |
| 458 =cut | |
| 459 | |
| 460 sub sub_sub_class { | |
| 461 my ( $self, $value ) = @_; | |
| 462 | |
| 463 if ( defined $value) { | |
| 464 $self->{ "_sub_sub_class" } = $self->_check_number( $value ); | |
| 465 } | |
| 466 | |
| 467 return $self->{ "_sub_sub_class" }; | |
| 468 | |
| 469 } # sub_sub_class | |
| 470 | |
| 471 | |
| 472 | |
| 473 =head2 serial_number | |
| 474 | |
| 475 Title : serial_number | |
| 476 Usage : $EC1->serial_number( 482 ); | |
| 477 or | |
| 478 print $EC1->serial_number(); | |
| 479 Function: Set/get for the serial number of ECnumbers. | |
| 480 Returns : The serial number of this ECnumber. | |
| 481 Args : A positive integer or "-". | |
| 482 | |
| 483 =cut | |
| 484 | |
| 485 sub serial_number { | |
| 486 my ( $self, $value ) = @_; | |
| 487 | |
| 488 if ( defined $value) { | |
| 489 $self->{ "_serial_number" } = $self->_check_number( $value ); | |
| 490 } | |
| 491 | |
| 492 return $self->{ "_serial_number" }; | |
| 493 | |
| 494 } # serial_number | |
| 495 | |
| 496 | |
| 497 | |
| 498 =head2 comment | |
| 499 | |
| 500 Title : comment | |
| 501 Usage : $EC1->comment( "deprecated" ); | |
| 502 or | |
| 503 print $EC1->comment(); | |
| 504 Function: Set/get for a arbitrary comment. | |
| 505 Returns : A comment [scalar]. | |
| 506 Args : A comment [scalar]. | |
| 507 | |
| 508 =cut | |
| 509 | |
| 510 sub comment { | |
| 511 my ( $self, $value ) = @_; | |
| 512 | |
| 513 if ( defined $value) { | |
| 514 $self->{ "_comment" } = $value; | |
| 515 } | |
| 516 | |
| 517 return $self->{ "_comment" }; | |
| 518 | |
| 519 } # comment | |
| 520 | |
| 521 | |
| 522 | |
| 523 # Title : _check_number | |
| 524 # Function: Checks and standardizes the individual numbers of a EC number | |
| 525 # (removes leading zeros, removes white spaces). | |
| 526 # Returns : A standardized number. | |
| 527 # Args : A string representing a number in a EC number. | |
| 528 sub _check_number { | |
| 529 my ( $self, $value ) = @_; | |
| 530 | |
| 531 my $original_value = $value; | |
| 532 $value =~ s/\s+//g; # Removes white space. | |
| 533 if ( $value eq "" ) { | |
| 534 $value = DEFAULT; | |
| 535 } | |
| 536 $value =~ s/^0+//; # Removes leading zeros. | |
| 537 if ( $value eq "" ) { # If it was "0" (or "00"), it would be "" now. | |
| 538 $value = "0"; | |
| 539 } | |
| 540 elsif ( $value ne DEFAULT | |
| 541 && $value =~ /\D/ ) { | |
| 542 $self->throw( "Illegal format error [$original_value]" ); | |
| 543 } | |
| 544 return $value; | |
| 545 | |
| 546 } # _check_number | |
| 547 | |
| 548 | |
| 549 | |
| 550 # Title : _check_for_illegal_defaults() | |
| 551 # Function: Checks for situations like "1.-.1.1", which | |
| 552 # are illegal in membership tests. | |
| 553 # Returns : | |
| 554 # Args : | |
| 555 sub _check_for_illegal_defaults { | |
| 556 my ( $self ) = @_; | |
| 557 | |
| 558 if ( ( $self->sub_sub_class() eq DEFAULT | |
| 559 && $self->serial_number() ne DEFAULT ) || | |
| 560 ( $self->sub_class() eq DEFAULT | |
| 561 && $self->sub_sub_class() ne DEFAULT ) || | |
| 562 ( $self->enzyme_class() eq DEFAULT | |
| 563 && $self->sub_class() ne DEFAULT ) ) { | |
| 564 $self->throw( "Illegal format error for comparison [" | |
| 565 . $self->to_string() . "]" ); | |
| 566 } | |
| 567 | |
| 568 } # _check_for_illegal_defaults | |
| 569 | |
| 570 | |
| 571 | |
| 572 # Title : _is_not_reference | |
| 573 # Function: Checks whether the argument is not a reference. | |
| 574 # Returns : True or false. | |
| 575 # Args : A scalar. | |
| 576 sub _is_not_reference { | |
| 577 my ( $self, $value ) = @_; | |
| 578 | |
| 579 return ( ! ref( $value ) ); | |
| 580 | |
| 581 } # _is_not_reference | |
| 582 | |
| 583 | |
| 584 | |
| 585 # Title : _is_ECnumber_object | |
| 586 # Function: Checks whether the arument is a ECnumber. | |
| 587 # Returns : | |
| 588 # Args : A reference. | |
| 589 sub _is_ECnumber_object { | |
| 590 my ( $self, $value ) = @_; | |
| 591 | |
| 592 unless( $value->isa( "Bio::Tools::ECnumber" ) ) { | |
| 593 $self->throw( "Found [". ref( $value ) | |
| 594 ."] where [Bio::Tools::ECnumber] expected" ); | |
| 595 } | |
| 596 | |
| 597 } # _is_ECnumber_object | |
| 598 | |
| 599 | |
| 600 | |
| 601 1; |
