Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/Annotation/OntologyTerm.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: OntologyTerm.pm,v 1.4.2.2 2003/04/04 15:53:20 lapp Exp $ | |
| 2 # | |
| 3 # BioPerl module for Bio::Annotation::OntologyTerm | |
| 4 # | |
| 5 # Cared for by Hilmar Lapp <hlapp at gmx.net> | |
| 6 # | |
| 7 # Copyright Hilmar Lapp | |
| 8 # | |
| 9 # You may distribute this module under the same terms as perl itself | |
| 10 | |
| 11 # | |
| 12 # (c) Hilmar Lapp, hlapp at gmx.net, 2002. | |
| 13 # (c) GNF, Genomics Institute of the Novartis Research Foundation, 2002. | |
| 14 # | |
| 15 # You may distribute this module under the same terms as perl itself. | |
| 16 # Refer to the Perl Artistic License (see the license accompanying this | |
| 17 # software package, or see http://www.perl.com/language/misc/Artistic.html) | |
| 18 # for the terms under which you may use, modify, and redistribute this module. | |
| 19 # | |
| 20 # THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED | |
| 21 # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | |
| 22 # MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
| 23 # | |
| 24 | |
| 25 # POD documentation - main docs before the code | |
| 26 | |
| 27 =head1 NAME | |
| 28 | |
| 29 Bio::Annotation::OntologyTerm - An ontology term adapted to AnnotationI | |
| 30 | |
| 31 =head1 SYNOPSIS | |
| 32 | |
| 33 use Bio::Annotation::OntologyTerm; | |
| 34 use Bio::Annotation::Collection; | |
| 35 use Bio::Ontology::Term; | |
| 36 | |
| 37 my $coll = new Bio::Annotation::Collection; | |
| 38 | |
| 39 # this also implements a tag/value pair, where tag _and_ value are treated | |
| 40 # as ontology terms | |
| 41 my $annterm = new Bio::Annotation::OntologyTerm(-label => 'ABC1', | |
| 42 -tagname => 'Gene Name'); | |
| 43 # ontology terms can be added directly - they implicitly have a tag | |
| 44 $coll->add_Annotation($annterm); | |
| 45 | |
| 46 # implementation is by composition - you can get/set the term object | |
| 47 # e.g. | |
| 48 my $term = $annterm->term(); # term is-a Bio::Ontology::TermI | |
| 49 print "ontology term ",$term->name()," (ID ",$term->identifier(), | |
| 50 "), ontology ",$term->ontology()->name(),"\n"; | |
| 51 $term = Bio::Ontology::Term->new(-name => 'ABC2', -ontology => 'Gene Name'); | |
| 52 $annterm->term($term); | |
| 53 | |
| 54 =head1 DESCRIPTION | |
| 55 | |
| 56 Ontology term annotation object | |
| 57 | |
| 58 =head1 FEEDBACK | |
| 59 | |
| 60 =head2 Mailing Lists | |
| 61 | |
| 62 User feedback is an integral part of the evolution of this and other | |
| 63 Bioperl modules. Send your comments and suggestions preferably to one | |
| 64 of the Bioperl mailing lists. Your participation is much appreciated. | |
| 65 | |
| 66 bioperl-l@bioperl.org - General discussion | |
| 67 http://bio.perl.org/MailList.html - About the mailing lists | |
| 68 | |
| 69 =head2 Reporting Bugs | |
| 70 | |
| 71 Report bugs to the Bioperl bug tracking system to help us keep track | |
| 72 the bugs and their resolution. Bug reports can be submitted via email | |
| 73 or the web: | |
| 74 | |
| 75 bioperl-bugs@bioperl.org | |
| 76 http://bugzilla.bioperl.org/ | |
| 77 | |
| 78 =head1 AUTHOR - Hilmar Lapp | |
| 79 | |
| 80 Email bioperl-l@bio.perl.org | |
| 81 Email hlapp at gmx.net | |
| 82 | |
| 83 | |
| 84 =head1 APPENDIX | |
| 85 | |
| 86 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _ | |
| 87 | |
| 88 =cut | |
| 89 | |
| 90 | |
| 91 # Let the code begin... | |
| 92 | |
| 93 | |
| 94 package Bio::Annotation::OntologyTerm; | |
| 95 use vars qw(@ISA); | |
| 96 use strict; | |
| 97 | |
| 98 # Object preamble - inherits from Bio::Root::Root | |
| 99 | |
| 100 use Bio::AnnotationI; | |
| 101 use Bio::Ontology::TermI; | |
| 102 use Bio::Ontology::Term; | |
| 103 use Bio::Root::Root; | |
| 104 | |
| 105 @ISA = qw(Bio::Root::Root Bio::AnnotationI Bio::Ontology::TermI); | |
| 106 | |
| 107 =head2 new | |
| 108 | |
| 109 Title : new | |
| 110 Usage : my $sv = new Bio::Annotation::OntologyTerm; | |
| 111 Function: Instantiate a new OntologyTerm object | |
| 112 Returns : Bio::Annotation::OntologyTerm object | |
| 113 Args : -term => $term to initialize the term data field [optional] | |
| 114 Most named arguments that Bio::Ontology::Term accepts will work | |
| 115 here too. -label is a synonym for -name, -tagname is a synonym for | |
| 116 -ontology. | |
| 117 | |
| 118 =cut | |
| 119 | |
| 120 sub new{ | |
| 121 my ($class,@args) = @_; | |
| 122 | |
| 123 my $self = $class->SUPER::new(@args); | |
| 124 | |
| 125 my ($term,$name,$label,$identifier,$definition,$ont,$tag) = | |
| 126 $self->_rearrange([qw(TERM | |
| 127 NAME | |
| 128 LABEL | |
| 129 IDENTIFIER | |
| 130 DEFINITION | |
| 131 ONTOLOGY | |
| 132 TAGNAME)], | |
| 133 @args); | |
| 134 if($term) { | |
| 135 $self->term($term); | |
| 136 } else { | |
| 137 $self->name($name || $label) if $name || $label; | |
| 138 $self->identifier($identifier) if $identifier; | |
| 139 $self->definition($definition) if $definition; | |
| 140 } | |
| 141 $self->ontology($ont || $tag) if $ont || $tag; | |
| 142 | |
| 143 return $self; | |
| 144 } | |
| 145 | |
| 146 | |
| 147 =head1 AnnotationI implementing functions | |
| 148 | |
| 149 =cut | |
| 150 | |
| 151 =head2 as_text | |
| 152 | |
| 153 Title : as_text | |
| 154 Usage : my $text = $obj->as_text | |
| 155 Function: return the string "Name: $v" where $v is the name of the term | |
| 156 Returns : string | |
| 157 Args : none | |
| 158 | |
| 159 | |
| 160 =cut | |
| 161 | |
| 162 sub as_text{ | |
| 163 my ($self) = @_; | |
| 164 | |
| 165 return $self->tagname()."|".$self->name()."|".$self->identifier(); | |
| 166 } | |
| 167 | |
| 168 =head2 hash_tree | |
| 169 | |
| 170 Title : hash_tree | |
| 171 Usage : my $hashtree = $value->hash_tree | |
| 172 Function: For supporting the AnnotationI interface just returns the value | |
| 173 as a hashref with the key 'value' pointing to the value | |
| 174 Returns : hashrf | |
| 175 Args : none | |
| 176 | |
| 177 | |
| 178 =cut | |
| 179 | |
| 180 sub hash_tree{ | |
| 181 my ($self) = @_; | |
| 182 | |
| 183 my $h = {}; | |
| 184 $h->{'name'} = $self->name(); | |
| 185 $h->{'identifier'} = $self->identifier(); | |
| 186 $h->{'definition'} = $self->definition(); | |
| 187 $h->{'synonyms'} = [$self->each_synonym()]; | |
| 188 } | |
| 189 | |
| 190 | |
| 191 =head2 tagname | |
| 192 | |
| 193 Title : tagname | |
| 194 Usage : $obj->tagname($newval) | |
| 195 Function: Get/set the tagname for this annotation value. | |
| 196 | |
| 197 Setting this is optional. If set, it obviates the need to provide | |
| 198 a tag to AnnotationCollection when adding this object. | |
| 199 | |
| 200 This is aliased to ontology() here. | |
| 201 Example : | |
| 202 Returns : value of tagname (a scalar) | |
| 203 Args : new value (a scalar, optional) | |
| 204 | |
| 205 | |
| 206 =cut | |
| 207 | |
| 208 sub tagname{ | |
| 209 my $self = shift; | |
| 210 | |
| 211 return $self->ontology(@_) if @_; | |
| 212 # if in get mode we need to get the name from the ontology | |
| 213 my $ont = $self->ontology(); | |
| 214 return ref($ont) ? $ont->name() : $ont; | |
| 215 } | |
| 216 | |
| 217 =head1 Methods for Bio::Ontology::TermI compliance | |
| 218 | |
| 219 =cut | |
| 220 | |
| 221 =head2 term | |
| 222 | |
| 223 Title : term | |
| 224 Usage : $obj->term($newval) | |
| 225 Function: Get/set the Bio::Ontology::TermI implementing object. | |
| 226 | |
| 227 We implement TermI by composition, and this method sets/gets the | |
| 228 object we delegate to. | |
| 229 Example : | |
| 230 Returns : value of term (a Bio::Ontology::TermI compliant object) | |
| 231 Args : new value (a Bio::Ontology::TermI compliant object, optional) | |
| 232 | |
| 233 | |
| 234 =cut | |
| 235 | |
| 236 sub term{ | |
| 237 my ($self,$value) = @_; | |
| 238 if( defined $value) { | |
| 239 $self->{'term'} = $value; | |
| 240 } | |
| 241 if(! exists($self->{'term'})) { | |
| 242 $self->{'term'} = Bio::Ontology::Term->new(); | |
| 243 } | |
| 244 return $self->{'term'}; | |
| 245 } | |
| 246 | |
| 247 =head2 identifier | |
| 248 | |
| 249 Title : identifier | |
| 250 Usage : $term->identifier( "0003947" ); | |
| 251 or | |
| 252 print $term->identifier(); | |
| 253 Function: Set/get for the identifier of this Term. | |
| 254 Returns : The identifier [scalar]. | |
| 255 Args : The identifier [scalar] (optional). | |
| 256 | |
| 257 =cut | |
| 258 | |
| 259 sub identifier { | |
| 260 return shift->term()->identifier(@_); | |
| 261 } # identifier | |
| 262 | |
| 263 =head2 name | |
| 264 | |
| 265 Title : name | |
| 266 Usage : $term->name( "N-acetylgalactosaminyltransferase" ); | |
| 267 or | |
| 268 print $term->name(); | |
| 269 Function: Set/get for the name of this Term. | |
| 270 Returns : The name [scalar]. | |
| 271 Args : The name [scalar] (optional). | |
| 272 | |
| 273 =cut | |
| 274 | |
| 275 sub name { | |
| 276 return shift->term()->name(@_); | |
| 277 } # name | |
| 278 | |
| 279 | |
| 280 =head2 definition | |
| 281 | |
| 282 Title : definition | |
| 283 Usage : $term->definition( "Catalysis of ..." ); | |
| 284 or | |
| 285 print $term->definition(); | |
| 286 Function: Set/get for the definition of this Term. | |
| 287 Returns : The definition [scalar]. | |
| 288 Args : The definition [scalar] (optional). | |
| 289 | |
| 290 =cut | |
| 291 | |
| 292 sub definition { | |
| 293 return shift->term()->definition(@_); | |
| 294 } # definition | |
| 295 | |
| 296 =head2 ontology | |
| 297 | |
| 298 Title : ontology | |
| 299 Usage : $term->ontology( $top ); | |
| 300 or | |
| 301 $top = $term->ontology(); | |
| 302 Function: Set/get for a relationship between this Term and | |
| 303 another Term (e.g. the top level of the ontology). | |
| 304 Returns : The ontology of this Term [TermI]. | |
| 305 Args : The ontology of this Term [TermI or scalar -- which | |
| 306 becomes the name of the catagory term] (optional). | |
| 307 | |
| 308 =cut | |
| 309 | |
| 310 sub ontology { | |
| 311 return shift->term()->ontology(@_); | |
| 312 } | |
| 313 | |
| 314 =head2 is_obsolete | |
| 315 | |
| 316 Title : is_obsolete | |
| 317 Usage : $term->is_obsolete( 1 ); | |
| 318 or | |
| 319 if ( $term->is_obsolete() ) | |
| 320 Function: Set/get for the obsoleteness of this Term. | |
| 321 Returns : the obsoleteness [0 or 1]. | |
| 322 Args : the obsoleteness [0 or 1] (optional). | |
| 323 | |
| 324 =cut | |
| 325 | |
| 326 sub is_obsolete { | |
| 327 return shift->term()->is_obsolete(@_); | |
| 328 } # is_obsolete | |
| 329 | |
| 330 =head2 comment | |
| 331 | |
| 332 Title : comment | |
| 333 Usage : $term->comment( "Consider the term ..." ); | |
| 334 or | |
| 335 print $term->comment(); | |
| 336 Function: Set/get for an arbitrary comment about this Term. | |
| 337 Returns : A comment. | |
| 338 Args : A comment (optional). | |
| 339 | |
| 340 =cut | |
| 341 | |
| 342 sub comment { | |
| 343 return shift->term()->comment(@_); | |
| 344 } # comment | |
| 345 | |
| 346 =head2 get_synonyms | |
| 347 | |
| 348 Title : get_synonyms() | |
| 349 Usage : @aliases = $term->get_synonyms(); | |
| 350 Function: Returns a list of aliases of this Term. | |
| 351 Returns : A list of aliases [array of [scalar]]. | |
| 352 Args : | |
| 353 | |
| 354 =cut | |
| 355 | |
| 356 sub get_synonyms { | |
| 357 return shift->term()->get_synonyms(@_); | |
| 358 } # get_synonyms | |
| 359 | |
| 360 =head2 add_synonym | |
| 361 | |
| 362 Title : add_synonym | |
| 363 Usage : $term->add_synonym( @asynonyms ); | |
| 364 or | |
| 365 $term->add_synonym( $synonym ); | |
| 366 Function: Pushes one or more synonyms into the list of synonyms. | |
| 367 Returns : | |
| 368 Args : One synonym [scalar] or a list of synonyms [array of [scalar]]. | |
| 369 | |
| 370 =cut | |
| 371 | |
| 372 sub add_synonym { | |
| 373 return shift->term()->add_synonym(@_); | |
| 374 } # add_synonym | |
| 375 | |
| 376 | |
| 377 =head2 remove_synonyms | |
| 378 | |
| 379 Title : remove_synonyms() | |
| 380 Usage : $term->remove_synonyms(); | |
| 381 Function: Deletes (and returns) the synonyms of this Term. | |
| 382 Returns : A list of synonyms [array of [scalar]]. | |
| 383 Args : | |
| 384 | |
| 385 =cut | |
| 386 | |
| 387 sub remove_synonyms { | |
| 388 return shift->term()->remove_synonyms(@_); | |
| 389 } # remove_synonyms | |
| 390 | |
| 391 =head2 get_dblinks | |
| 392 | |
| 393 Title : get_dblinks() | |
| 394 Usage : @ds = $term->get_dblinks(); | |
| 395 Function: Returns a list of each dblinks of this GO term. | |
| 396 Returns : A list of dblinks [array of [scalars]]. | |
| 397 Args : | |
| 398 | |
| 399 =cut | |
| 400 | |
| 401 sub get_dblinks { | |
| 402 return shift->term->get_dblinks(@_); | |
| 403 } # get_dblinks | |
| 404 | |
| 405 | |
| 406 =head2 add_dblink | |
| 407 | |
| 408 Title : add_dblink | |
| 409 Usage : $term->add_dblink( @dbls ); | |
| 410 or | |
| 411 $term->add_dblink( $dbl ); | |
| 412 Function: Pushes one or more dblinks | |
| 413 into the list of dblinks. | |
| 414 Returns : | |
| 415 Args : One dblink [scalar] or a list of | |
| 416 dblinks [array of [scalars]]. | |
| 417 | |
| 418 =cut | |
| 419 | |
| 420 sub add_dblink { | |
| 421 return shift->term->add_dblink(@_); | |
| 422 } # add_dblink | |
| 423 | |
| 424 | |
| 425 =head2 remove_dblinks | |
| 426 | |
| 427 Title : remove_dblinks() | |
| 428 Usage : $term->remove_dblinks(); | |
| 429 Function: Deletes (and returns) the definition references of this GO term. | |
| 430 Returns : A list of definition references [array of [scalars]]. | |
| 431 Args : | |
| 432 | |
| 433 =cut | |
| 434 | |
| 435 sub remove_dblinks { | |
| 436 return shift->term->remove_dblinks(@_); | |
| 437 } # remove_dblinks | |
| 438 | |
| 439 =head2 get_secondary_ids | |
| 440 | |
| 441 Title : get_secondary_ids | |
| 442 Usage : @ids = $term->get_secondary_ids(); | |
| 443 Function: Returns a list of secondary identifiers of this Term. | |
| 444 | |
| 445 Secondary identifiers mostly originate from merging terms, | |
| 446 or possibly also from splitting terms. | |
| 447 | |
| 448 Returns : A list of secondary identifiers [array of [scalar]] | |
| 449 Args : | |
| 450 | |
| 451 =cut | |
| 452 | |
| 453 sub get_secondary_ids { | |
| 454 return shift->term->get_secondary_ids(@_); | |
| 455 } # get_secondary_ids | |
| 456 | |
| 457 | |
| 458 =head2 add_secondary_id | |
| 459 | |
| 460 Title : add_secondary_id | |
| 461 Usage : $term->add_secondary_id( @ids ); | |
| 462 or | |
| 463 $term->add_secondary_id( $id ); | |
| 464 Function: Adds one or more secondary identifiers to this term. | |
| 465 Returns : | |
| 466 Args : One or more secondary identifiers [scalars] | |
| 467 | |
| 468 =cut | |
| 469 | |
| 470 sub add_secondary_id { | |
| 471 return shift->term->add_secondary_id(@_); | |
| 472 } # add_secondary_id | |
| 473 | |
| 474 | |
| 475 =head2 remove_secondary_ids | |
| 476 | |
| 477 Title : remove_secondary_ids | |
| 478 Usage : $term->remove_secondary_ids(); | |
| 479 Function: Deletes (and returns) the secondary identifiers of this Term. | |
| 480 Returns : The previous list of secondary identifiers [array of [scalars]] | |
| 481 Args : | |
| 482 | |
| 483 =cut | |
| 484 | |
| 485 sub remove_secondary_ids { | |
| 486 return shift->term->remove_secondary_ids(@_); | |
| 487 } # remove_secondary_ids | |
| 488 | |
| 489 | |
| 490 1; |
