Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/Ontology/Term.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: Term.pm,v 1.8.2.3 2003/05/27 22:00:52 lapp Exp $ | |
2 # | |
3 # BioPerl module for Bio::Ontology::Term | |
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 # You may distribute this module under the same terms as perl itself | |
20 | |
21 # POD documentation - main docs before the code | |
22 | |
23 | |
24 =head1 NAME | |
25 | |
26 Term - interface for ontology terms | |
27 | |
28 =head1 SYNOPSIS | |
29 | |
30 #get Bio::Ontology::TermI somehow. | |
31 | |
32 print $term->identifier(), "\n"; | |
33 print $term->name(), "\n"; | |
34 print $term->definition(), "\n"; | |
35 print $term->is_obsolete(), "\n"; | |
36 print $term->comment(), "\n"; | |
37 | |
38 foreach my $synonym ( $term->each_synonym() ) { | |
39 print $synonym, "\n"; | |
40 } | |
41 | |
42 =head1 DESCRIPTION | |
43 | |
44 This is "dumb" interface for ontology terms providing basic methods | |
45 (it provides no functionality related to graphs). It implements the | |
46 L<Bio::Ontology::TermI> interface. | |
47 | |
48 This class also implements L<Bio::IdentifiableI> and | |
49 L<Bio::DescribableI>. | |
50 | |
51 =head1 FEEDBACK | |
52 | |
53 =head2 Mailing Lists | |
54 | |
55 User feedback is an integral part of the evolution of this and other | |
56 Bioperl modules. Send your comments and suggestions preferably to one | |
57 of the Bioperl mailing lists. Your participation is much appreciated. | |
58 | |
59 bioperl-l@bioperl.org - General discussion | |
60 http://bio.perl.org/MailList.html - About the mailing lists | |
61 | |
62 =head2 Reporting Bugs | |
63 | |
64 Report bugs to the Bioperl bug tracking system to help us keep track | |
65 the bugs and their resolution. Bug reports can be submitted via email | |
66 or the web: | |
67 | |
68 bioperl-bugs@bio.perl.org | |
69 http://bugzilla.bioperl.org/ | |
70 | |
71 =head1 AUTHOR | |
72 | |
73 Christian M. Zmasek | |
74 | |
75 Email: czmasek@gnf.org or cmzmasek@yahoo.com | |
76 | |
77 WWW: http://www.genetics.wustl.edu/eddy/people/zmasek/ | |
78 | |
79 Address: | |
80 | |
81 Genomics Institute of the Novartis Research Foundation | |
82 10675 John Jay Hopkins Drive | |
83 San Diego, CA 92121 | |
84 | |
85 =head1 APPENDIX | |
86 | |
87 The rest of the documentation details each of the object | |
88 methods. | |
89 | |
90 =cut | |
91 | |
92 | |
93 # Let the code begin... | |
94 | |
95 package Bio::Ontology::Term; | |
96 use vars qw( @ISA ); | |
97 use strict; | |
98 use Bio::Root::Object; | |
99 use Bio::Ontology::TermI; | |
100 use Bio::Ontology::Ontology; | |
101 use Bio::Ontology::OntologyStore; | |
102 use Bio::IdentifiableI; | |
103 use Bio::DescribableI; | |
104 | |
105 use constant TRUE => 1; | |
106 use constant FALSE => 0; | |
107 | |
108 @ISA = qw( Bio::Root::Root | |
109 Bio::Ontology::TermI | |
110 Bio::IdentifiableI | |
111 Bio::DescribableI | |
112 ); | |
113 | |
114 | |
115 | |
116 =head2 new | |
117 | |
118 Title : new | |
119 Usage : $term = Bio::Ontology::Term->new( -identifier => "16847", | |
120 -name => "1-aminocyclopropane-1-carboxylate synthase", | |
121 -definition => "Catalysis of ...", | |
122 -is_obsolete => 0, | |
123 -comment => "" ); | |
124 Function: Creates a new Bio::Ontology::Term. | |
125 Returns : A new Bio::Ontology::Term object. | |
126 Args : -identifier => the identifier of this term [scalar] | |
127 -name => the name of this term [scalar] | |
128 -definition => the definition of this term [scalar] | |
129 -ontology => the ontology this term lives in | |
130 (a L<Bio::Ontology::OntologyI> object) | |
131 -version => version information [scalar] | |
132 -is_obsolete => the obsoleteness of this term [0 or 1] | |
133 -comment => a comment [scalar] | |
134 | |
135 =cut | |
136 | |
137 sub new { | |
138 | |
139 my( $class,@args ) = @_; | |
140 | |
141 my $self = $class->SUPER::new( @args ); | |
142 | |
143 my ( $identifier, | |
144 $name, | |
145 $definition, | |
146 $category, | |
147 $ont, | |
148 $version, | |
149 $is_obsolete, | |
150 $comment, | |
151 $dblinks) | |
152 = $self->_rearrange( [ qw( IDENTIFIER | |
153 NAME | |
154 DEFINITION | |
155 CATEGORY | |
156 ONTOLOGY | |
157 VERSION | |
158 IS_OBSOLETE | |
159 COMMENT | |
160 DBLINKS | |
161 ) ], @args ); | |
162 | |
163 $self->init(); | |
164 | |
165 $identifier && $self->identifier( $identifier ); | |
166 $name && $self->name( $name ); | |
167 $definition && $self->definition( $definition ); | |
168 $category && $self->category( $category ); | |
169 $ont && $self->ontology( $ont ); | |
170 defined($version) && $self->version( $version ); | |
171 defined($is_obsolete) && $self->is_obsolete( $is_obsolete ); | |
172 $comment && $self->comment( $comment ); | |
173 ref($dblinks) && $self->add_dblink(@$dblinks); | |
174 | |
175 return $self; | |
176 | |
177 } # new | |
178 | |
179 | |
180 | |
181 sub init { | |
182 | |
183 my $self = shift; | |
184 | |
185 $self->identifier(undef); | |
186 $self->name(undef); | |
187 $self->comment(undef); | |
188 $self->definition(undef); | |
189 $self->ontology(undef); | |
190 $self->is_obsolete(0); | |
191 $self->remove_synonyms(); | |
192 $self->remove_dblinks(); | |
193 $self->remove_secondary_ids(); | |
194 | |
195 } # init | |
196 | |
197 | |
198 | |
199 =head2 identifier | |
200 | |
201 Title : identifier | |
202 Usage : $term->identifier( "0003947" ); | |
203 or | |
204 print $term->identifier(); | |
205 Function: Set/get for the identifier of this Term. | |
206 Returns : The identifier [scalar]. | |
207 Args : The identifier [scalar] (optional). | |
208 | |
209 =cut | |
210 | |
211 sub identifier { | |
212 my $self = shift; | |
213 | |
214 return $self->{'identifier'} = shift if @_; | |
215 return $self->{'identifier'}; | |
216 } # identifier | |
217 | |
218 | |
219 | |
220 | |
221 =head2 name | |
222 | |
223 Title : name | |
224 Usage : $term->name( "N-acetylgalactosaminyltransferase" ); | |
225 or | |
226 print $term->name(); | |
227 Function: Set/get for the name of this Term. | |
228 Returns : The name [scalar]. | |
229 Args : The name [scalar] (optional). | |
230 | |
231 =cut | |
232 | |
233 sub name { | |
234 my $self = shift; | |
235 | |
236 return $self->{'name'} = shift if @_; | |
237 return $self->{'name'}; | |
238 } # name | |
239 | |
240 | |
241 | |
242 | |
243 | |
244 =head2 definition | |
245 | |
246 Title : definition | |
247 Usage : $term->definition( "Catalysis of ..." ); | |
248 or | |
249 print $term->definition(); | |
250 Function: Set/get for the definition of this Term. | |
251 Returns : The definition [scalar]. | |
252 Args : The definition [scalar] (optional). | |
253 | |
254 =cut | |
255 | |
256 sub definition { | |
257 my $self = shift; | |
258 | |
259 return $self->{'definition'} = shift if @_; | |
260 return $self->{'definition'}; | |
261 } # definition | |
262 | |
263 | |
264 =head2 ontology | |
265 | |
266 Title : ontology | |
267 Usage : $ont = $term->ontology(); | |
268 or | |
269 $term->ontology( $ont ); | |
270 Function: Get the ontology this term is in. | |
271 | |
272 Note that with the ontology in hand you can query for all | |
273 related terms etc. See L<Bio::Ontology::OntologyI>. | |
274 | |
275 Returns : The ontology of this Term as a L<Bio::Ontology::OntologyI> | |
276 implementing object. | |
277 Args : On set, the ontology of this Term as a L<Bio::Ontology::OntologyI> | |
278 implementing object or a string representing its name. | |
279 | |
280 =cut | |
281 | |
282 sub ontology { | |
283 my $self = shift; | |
284 my $ont; | |
285 | |
286 if(@_) { | |
287 $ont = shift; | |
288 if($ont) { | |
289 $ont = Bio::Ontology::Ontology->new(-name => $ont) if ! ref($ont); | |
290 if(! $ont->isa("Bio::Ontology::OntologyI")) { | |
291 $self->throw(ref($ont)." does not implement ". | |
292 "Bio::Ontology::OntologyI. Bummer."); | |
293 } | |
294 } | |
295 return $self->{"_ontology"} = $ont; | |
296 } | |
297 return $self->{"_ontology"}; | |
298 } # ontology | |
299 | |
300 | |
301 =head2 version | |
302 | |
303 Title : version | |
304 Usage : $term->version( "1.00" ); | |
305 or | |
306 print $term->version(); | |
307 Function: Set/get for version information. | |
308 Returns : The version [scalar]. | |
309 Args : The version [scalar] (optional). | |
310 | |
311 =cut | |
312 | |
313 sub version { | |
314 my $self = shift; | |
315 | |
316 return $self->{'version'} = shift if @_; | |
317 return $self->{'version'}; | |
318 } # version | |
319 | |
320 | |
321 | |
322 =head2 is_obsolete | |
323 | |
324 Title : is_obsolete | |
325 Usage : $term->is_obsolete( 1 ); | |
326 or | |
327 if ( $term->is_obsolete() ) | |
328 Function: Set/get for the obsoleteness of this Term. | |
329 Returns : the obsoleteness [0 or 1]. | |
330 Args : the obsoleteness [0 or 1] (optional). | |
331 | |
332 =cut | |
333 | |
334 sub is_obsolete{ | |
335 my $self = shift; | |
336 | |
337 return $self->{'is_obsolete'} = shift if @_; | |
338 return $self->{'is_obsolete'}; | |
339 } # is_obsolete | |
340 | |
341 | |
342 | |
343 | |
344 | |
345 =head2 comment | |
346 | |
347 Title : comment | |
348 Usage : $term->comment( "Consider the term ..." ); | |
349 or | |
350 print $term->comment(); | |
351 Function: Set/get for an arbitrary comment about this Term. | |
352 Returns : A comment. | |
353 Args : A comment (optional). | |
354 | |
355 =cut | |
356 | |
357 sub comment{ | |
358 my $self = shift; | |
359 | |
360 return $self->{'comment'} = shift if @_; | |
361 return $self->{'comment'}; | |
362 } # comment | |
363 | |
364 | |
365 | |
366 | |
367 =head2 get_synonyms | |
368 | |
369 Title : get_synonyms | |
370 Usage : @aliases = $term->get_synonyms; | |
371 Function: Returns a list of aliases of this Term. | |
372 Returns : A list of aliases [array of [scalar]]. | |
373 Args : | |
374 | |
375 =cut | |
376 | |
377 sub get_synonyms { | |
378 my $self = shift; | |
379 | |
380 return @{ $self->{ "_synonyms" } } if exists($self->{ "_synonyms" }); | |
381 return (); | |
382 } # get_synonyms | |
383 | |
384 | |
385 =head2 add_synonym | |
386 | |
387 Title : add_synonym | |
388 Usage : $term->add_synonym( @asynonyms ); | |
389 or | |
390 $term->add_synonym( $synonym ); | |
391 Function: Pushes one or more synonyms into the list of synonyms. | |
392 Returns : | |
393 Args : One synonym [scalar] or a list of synonyms [array of [scalar]]. | |
394 | |
395 =cut | |
396 | |
397 sub add_synonym { | |
398 my ( $self, @values ) = @_; | |
399 | |
400 return unless( @values ); | |
401 | |
402 # avoid duplicates | |
403 foreach my $syn (@values) { | |
404 next if grep { $_ eq $syn; } @{$self->{ "_synonyms" }}; | |
405 push( @{ $self->{ "_synonyms" } }, $syn ); | |
406 } | |
407 | |
408 } # add_synonym | |
409 | |
410 | |
411 =head2 remove_synonyms | |
412 | |
413 Title : remove_synonyms() | |
414 Usage : $term->remove_synonyms(); | |
415 Function: Deletes (and returns) the synonyms of this Term. | |
416 Returns : A list of synonyms [array of [scalar]]. | |
417 Args : | |
418 | |
419 =cut | |
420 | |
421 sub remove_synonyms { | |
422 my ( $self ) = @_; | |
423 | |
424 my @a = $self->get_synonyms(); | |
425 $self->{ "_synonyms" } = []; | |
426 return @a; | |
427 | |
428 } # remove_synonyms | |
429 | |
430 =head2 get_dblinks | |
431 | |
432 Title : get_dblinks() | |
433 Usage : @ds = $term->get_dblinks(); | |
434 Function: Returns a list of each dblinks of this GO term. | |
435 Returns : A list of dblinks [array of [scalars]]. | |
436 Args : | |
437 | |
438 =cut | |
439 | |
440 sub get_dblinks { | |
441 my $self = shift; | |
442 | |
443 return @{$self->{ "_dblinks" }} if exists($self->{ "_dblinks" }); | |
444 return (); | |
445 } # get_dblinks | |
446 | |
447 | |
448 =head2 add_dblink | |
449 | |
450 Title : add_dblink | |
451 Usage : $term->add_dblink( @dbls ); | |
452 or | |
453 $term->add_dblink( $dbl ); | |
454 Function: Pushes one or more dblinks onto the list of dblinks. | |
455 Returns : | |
456 Args : One dblink [scalar] or a list of | |
457 dblinks [array of [scalars]]. | |
458 | |
459 =cut | |
460 | |
461 sub add_dblink { | |
462 my ( $self, @values ) = @_; | |
463 | |
464 return unless( @values ); | |
465 | |
466 # avoid duplicates | |
467 foreach my $dbl (@values) { | |
468 next if grep { $_ eq $dbl; } @{$self->{ "_dblinks" }}; | |
469 push( @{ $self->{ "_dblinks" } }, $dbl ); | |
470 } | |
471 | |
472 } # add_dblink | |
473 | |
474 | |
475 =head2 remove_dblinks | |
476 | |
477 Title : remove_dblinks() | |
478 Usage : $term->remove_dblinks(); | |
479 Function: Deletes (and returns) the definition references of this GO term. | |
480 Returns : A list of definition references [array of [scalars]]. | |
481 Args : | |
482 | |
483 =cut | |
484 | |
485 sub remove_dblinks { | |
486 my ( $self ) = @_; | |
487 | |
488 my @a = $self->get_dblinks(); | |
489 $self->{ "_dblinks" } = []; | |
490 return @a; | |
491 | |
492 } # remove_dblinks | |
493 | |
494 =head2 get_secondary_ids | |
495 | |
496 Title : get_secondary_ids | |
497 Usage : @ids = $term->get_secondary_ids(); | |
498 Function: Returns a list of secondary identifiers of this Term. | |
499 | |
500 Secondary identifiers mostly originate from merging terms, | |
501 or possibly also from splitting terms. | |
502 | |
503 Returns : A list of secondary identifiers [array of [scalar]] | |
504 Args : | |
505 | |
506 =cut | |
507 | |
508 sub get_secondary_ids { | |
509 my $self = shift; | |
510 | |
511 return @{$self->{"_secondary_ids"}} if exists($self->{"_secondary_ids"}); | |
512 return (); | |
513 } # get_secondary_ids | |
514 | |
515 | |
516 =head2 add_secondary_id | |
517 | |
518 Title : add_secondary_id | |
519 Usage : $term->add_secondary_id( @ids ); | |
520 or | |
521 $term->add_secondary_id( $id ); | |
522 Function: Adds one or more secondary identifiers to this term. | |
523 Returns : | |
524 Args : One or more secondary identifiers [scalars] | |
525 | |
526 =cut | |
527 | |
528 sub add_secondary_id { | |
529 my $self = shift; | |
530 | |
531 return unless @_; | |
532 | |
533 # avoid duplicates | |
534 foreach my $id (@_) { | |
535 next if grep { $_ eq $id; } @{$self->{ "_secondary_ids" }}; | |
536 push( @{ $self->{ "_secondary_ids" } }, $id ); | |
537 } | |
538 | |
539 } # add_secondary_id | |
540 | |
541 | |
542 =head2 remove_secondary_ids | |
543 | |
544 Title : remove_secondary_ids | |
545 Usage : $term->remove_secondary_ids(); | |
546 Function: Deletes (and returns) the secondary identifiers of this Term. | |
547 Returns : The previous list of secondary identifiers [array of [scalars]] | |
548 Args : | |
549 | |
550 =cut | |
551 | |
552 sub remove_secondary_ids { | |
553 my $self = shift; | |
554 | |
555 my @a = $self->get_secondary_ids(); | |
556 $self->{ "_secondary_ids" } = []; | |
557 return @a; | |
558 | |
559 } # remove_secondary_ids | |
560 | |
561 | |
562 # Title :_is_true_or_false | |
563 # Function: Checks whether the argument is TRUE or FALSE. | |
564 # Returns : | |
565 # Args : The value to be checked. | |
566 sub _is_true_or_false { | |
567 my ( $self, $value ) = @_; | |
568 unless ( $value !~ /\D/ && ( $value == TRUE || $value == FALSE ) ) { | |
569 $self->throw( "Found [" . $value | |
570 . "] where " . TRUE . " or " . FALSE . " expected" ); | |
571 } | |
572 } # _is_true_or_false | |
573 | |
574 =head1 Methods implementing L<Bio::IdentifiableI> and L<Bio::DescribableI> | |
575 | |
576 =cut | |
577 | |
578 =head2 object_id | |
579 | |
580 Title : object_id | |
581 Usage : $string = $obj->object_id() | |
582 Function: a string which represents the stable primary identifier | |
583 in this namespace of this object. | |
584 | |
585 This is a synonym for identifier(). | |
586 | |
587 Returns : A scalar | |
588 | |
589 =cut | |
590 | |
591 sub object_id { | |
592 return shift->identifier(@_); | |
593 } | |
594 | |
595 =head2 authority | |
596 | |
597 Title : authority | |
598 Usage : $authority = $obj->authority() | |
599 Function: a string which represents the organisation which | |
600 granted the namespace, written as the DNS name for | |
601 organisation (eg, wormbase.org) | |
602 | |
603 This forwards to ontology()->authority(). Note that you | |
604 cannot set the authority before having set the ontology or | |
605 the namespace (which will set the ontology). | |
606 | |
607 Returns : A scalar | |
608 Args : on set, the new value (a scalar) | |
609 | |
610 =cut | |
611 | |
612 sub authority { | |
613 my $self = shift; | |
614 my $ont = $self->ontology(); | |
615 | |
616 return $ont->authority(@_) if $ont; | |
617 $self->throw("cannot manipulate authority prior to ". | |
618 "setting the namespace or ontology") if @_; | |
619 return undef; | |
620 } | |
621 | |
622 | |
623 =head2 namespace | |
624 | |
625 Title : namespace | |
626 Usage : $string = $obj->namespace() | |
627 Function: A string representing the name space this identifier | |
628 is valid in, often the database name or the name | |
629 describing the collection. | |
630 | |
631 This forwards to ontology() (set mode) and | |
632 ontology()->name() (get mode). I.e., setting the namespace | |
633 will set the ontology to one matching that name in the | |
634 ontology store, or to one newly created. | |
635 | |
636 Returns : A scalar | |
637 Args : on set, the new value (a scalar) | |
638 | |
639 =cut | |
640 | |
641 sub namespace { | |
642 my $self = shift; | |
643 | |
644 $self->ontology(@_) if(@_); | |
645 my $ont = $self->ontology(); | |
646 return defined($ont) ? $ont->name() : undef; | |
647 } | |
648 | |
649 =head2 display_name | |
650 | |
651 Title : display_name | |
652 Usage : $string = $obj->display_name() | |
653 Function: A string which is what should be displayed to the user. | |
654 | |
655 The definition in L<Bio::DescribableI> states that the | |
656 string should not contain spaces. As this isn't very | |
657 sensible for ontology terms, we relax this here. The | |
658 implementation just forwards to name(). | |
659 | |
660 Returns : A scalar | |
661 Args : on set, the new value (a scalar) | |
662 | |
663 =cut | |
664 | |
665 sub display_name { | |
666 return shift->name(@_); | |
667 } | |
668 | |
669 | |
670 =head2 description | |
671 | |
672 Title : description | |
673 Usage : $string = $obj->description() | |
674 Function: A text string suitable for displaying to the user a | |
675 description. This string is likely to have spaces, but | |
676 should not have any newlines or formatting - just plain | |
677 text. | |
678 | |
679 This forwards to definition(). The caveat is that the text | |
680 will often be longer for ontology term definitions than the | |
681 255 characters stated in the definition in | |
682 L<Bio::DescribableI>. | |
683 | |
684 Returns : A scalar | |
685 Args : on set, the new value (a scalar) | |
686 | |
687 =cut | |
688 | |
689 sub description { | |
690 return shift->definition(@_); | |
691 } | |
692 | |
693 ################################################################# | |
694 # aliases or forwards to maintain backward compatibility | |
695 ################################################################# | |
696 | |
697 =head1 Deprecated methods | |
698 | |
699 Used for looking up the methods that supercedes them. | |
700 | |
701 =cut | |
702 | |
703 =head2 category | |
704 | |
705 Title : category | |
706 Usage : | |
707 Function: This method is deprecated. Use ontology() instead. | |
708 Example : | |
709 Returns : | |
710 Args : | |
711 | |
712 | |
713 =cut | |
714 | |
715 sub category { | |
716 my $self = shift; | |
717 | |
718 $self->warn("TermI::category is deprecated and being phased out. ". | |
719 "Use TermI::ontology instead."); | |
720 | |
721 # called in set mode? | |
722 if(@_) { | |
723 # yes; what is incompatible with ontology() is if we were given | |
724 # a TermI object | |
725 my $arg = shift; | |
726 $arg = $arg->name() if ref($arg) && $arg->isa("Bio::Ontology::TermI"); | |
727 return $self->ontology($arg,@_); | |
728 } else { | |
729 # No, called in get mode. This is always incompatible with ontology() | |
730 # since category is supposed to return a TermI. | |
731 my $ont = $self->ontology(); | |
732 my $term; | |
733 if(defined($ont)) { | |
734 $term = Bio::Ontology::Term->new(-name => $ont->name(), | |
735 -identifier =>$ont->identifier()); | |
736 } | |
737 return $term; | |
738 } | |
739 } # category | |
740 | |
741 *each_synonym = \&get_synonyms; | |
742 *add_synonyms = \&add_synonym; | |
743 *each_dblink = \&get_dblinks; | |
744 *add_dblinks = \&add_dblink; | |
745 | |
746 1; |