0
|
1 # $Id: GOterm.pm,v 1.12.2.4 2003/07/03 00:41:40 lapp Exp $
|
|
2 #
|
|
3 # BioPerl module for Bio::Ontology::GOterm
|
|
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 GOterm - representation of GO terms
|
|
27
|
|
28 =head1 SYNOPSIS
|
|
29
|
|
30 $term = Bio::Ontology::GOterm->new
|
|
31 ( -go_id => "GO:0016847",
|
|
32 -name => "1-aminocyclopropane-1-carboxylate synthase",
|
|
33 -definition => "Catalysis of ...",
|
|
34 -is_obsolete => 0,
|
|
35 -comment => "" );
|
|
36
|
|
37 $term->add_definition_references( @refs );
|
|
38 $term->add_secondary_GO_ids( @ids );
|
|
39 $term->add_aliases( @aliases );
|
|
40
|
|
41 foreach my $dr ( $term->each_definition_reference() ) {
|
|
42 print $dr, "\n";
|
|
43 }
|
|
44
|
|
45 # etc.
|
|
46
|
|
47 =head1 DESCRIPTION
|
|
48
|
|
49 This is "dumb" class for GO terms (it provides no functionality related to graphs).
|
|
50 Implements Bio::Ontology::TermI.
|
|
51
|
|
52 =head1 FEEDBACK
|
|
53
|
|
54 =head2 Mailing Lists
|
|
55
|
|
56 User feedback is an integral part of the evolution of this and other
|
|
57 Bioperl modules. Send your comments and suggestions preferably to one
|
|
58 of the Bioperl mailing lists. Your participation is much appreciated.
|
|
59
|
|
60 bioperl-l@bioperl.org - General discussion
|
|
61 http://bio.perl.org/MailList.html - About the mailing lists
|
|
62
|
|
63 =head2 Reporting Bugs
|
|
64
|
|
65 Report bugs to the Bioperl bug tracking system to help us keep track
|
|
66 the bugs and their resolution. Bug reports can be submitted via email
|
|
67 or the web:
|
|
68
|
|
69 bioperl-bugs@bio.perl.org
|
|
70 http://bugzilla.bioperl.org/
|
|
71
|
|
72 =head1 AUTHOR
|
|
73
|
|
74 Christian M. Zmasek
|
|
75
|
|
76 Email: czmasek@gnf.org or cmzmasek@yahoo.com
|
|
77
|
|
78 WWW: http://www.genetics.wustl.edu/eddy/people/zmasek/
|
|
79
|
|
80 Address:
|
|
81
|
|
82 Genomics Institute of the Novartis Research Foundation
|
|
83 10675 John Jay Hopkins Drive
|
|
84 San Diego, CA 92121
|
|
85
|
|
86 =head1 APPENDIX
|
|
87
|
|
88 The rest of the documentation details each of the object
|
|
89 methods.
|
|
90
|
|
91 =cut
|
|
92
|
|
93
|
|
94 # Let the code begin...
|
|
95
|
|
96 package Bio::Ontology::GOterm;
|
|
97 use vars qw( @ISA );
|
|
98 use strict;
|
|
99 use Bio::Ontology::Term;
|
|
100
|
|
101 use constant GOID_DEFAULT => "GO:0000000";
|
|
102 use constant TRUE => 1;
|
|
103 use constant FALSE => 0;
|
|
104
|
|
105 @ISA = qw( Bio::Ontology::Term );
|
|
106
|
|
107
|
|
108
|
|
109
|
|
110 =head2 new
|
|
111
|
|
112 Title : new
|
|
113 Usage : $term = Bio::Ontology::GOterm->new( -go_id => "GO:0016847",
|
|
114 -name => "1-aminocyclopropane-1-carboxylate synthase",
|
|
115 -definition => "Catalysis of ...",
|
|
116 -is_obsolete => 0,
|
|
117 -comment => "" );
|
|
118 Function: Creates a new Bio::Ontology::GOterm.
|
|
119 Returns : A new Bio::Ontology::GOterm object.
|
|
120 Args : -go_id => the goid of this GO term [GO:nnnnnnn]
|
|
121 or [nnnnnnn] (nnnnnnn is a zero-padded
|
|
122 integer of seven digits)
|
|
123 -name => the name of this GO term [scalar]
|
|
124 -definition => the definition of this GO term [scalar]
|
|
125 -ontology => the ontology for this term (a
|
|
126 Bio::Ontology::OntologyI compliant object)
|
|
127 -version => version information [scalar]
|
|
128 -is_obsolete => the obsoleteness of this GO term [0 or 1]
|
|
129 -comment => a comment [scalar]
|
|
130
|
|
131 =cut
|
|
132
|
|
133 sub new {
|
|
134
|
|
135 my( $class,@args ) = @_;
|
|
136
|
|
137 my $self = $class->SUPER::new( @args );
|
|
138
|
|
139 my ( $GO_id )
|
|
140 = $self->_rearrange( [ qw( GO_ID ) ], @args );
|
|
141
|
|
142 $GO_id && $self->GO_id( $GO_id );
|
|
143
|
|
144
|
|
145 return $self;
|
|
146
|
|
147 } # new
|
|
148
|
|
149
|
|
150 =head2 init
|
|
151
|
|
152 Title : init()
|
|
153 Usage : $term->init();
|
|
154 Function: Initializes this GOterm to all "" and empty lists.
|
|
155 Returns :
|
|
156 Args :
|
|
157
|
|
158 =cut
|
|
159
|
|
160 sub init {
|
|
161
|
|
162 my $self = shift;
|
|
163
|
|
164 # first call the inherited version to properly chain up the hierarchy
|
|
165 $self->SUPER::init(@_);
|
|
166
|
|
167 # then only initialize what we implement ourselves here
|
|
168 #$self->GO_id( GOID_DEFAULT );
|
|
169
|
|
170 } # init
|
|
171
|
|
172
|
|
173
|
|
174
|
|
175 =head2 GO_id
|
|
176
|
|
177 Title : GO_id
|
|
178 Usage : $term->GO_id( "GO:0003947" );
|
|
179 or
|
|
180 print $term->GO_id();
|
|
181 Function: Set/get for the goid of this GO term.
|
|
182
|
|
183 This is essentially an alias to identifier(), with added
|
|
184 format checking.
|
|
185
|
|
186 Returns : The goid [GO:nnnnnnn].
|
|
187 Args : The goid [GO:nnnnnnn] or [nnnnnnn] (nnnnnnn is a
|
|
188 zero-padded integer of seven digits) (optional).
|
|
189
|
|
190 =cut
|
|
191
|
|
192 sub GO_id {
|
|
193 my $self = shift;
|
|
194 my $value;
|
|
195
|
|
196 if ( @_ ) {
|
|
197 $value = $self->_check_go_id( shift );
|
|
198 unshift(@_, $value);
|
|
199 }
|
|
200
|
|
201 return $self->identifier( @_ );
|
|
202
|
|
203 } # GO_id
|
|
204
|
|
205
|
|
206 =head2 get_secondary_GO_ids
|
|
207
|
|
208 Title : get_secondary_GO_ids
|
|
209 Usage : @ids = $term->get_secondary_GO_ids();
|
|
210 Function: Returns a list of secondary goids of this Term.
|
|
211
|
|
212 This is aliased to remove_secondary_ids().
|
|
213
|
|
214 Returns : A list of secondary goids [array of [GO:nnnnnnn]]
|
|
215 (nnnnnnn is a zero-padded integer of seven digits).
|
|
216 Args :
|
|
217
|
|
218 =cut
|
|
219
|
|
220 sub get_secondary_GO_ids {
|
|
221 return shift->get_secondary_ids(@_);
|
|
222 } # get_secondary_GO_ids
|
|
223
|
|
224
|
|
225 =head2 add_secondary_GO_id
|
|
226
|
|
227 Title : add_secondary_GO_id
|
|
228 Usage : $term->add_secondary_GO_id( @ids );
|
|
229 or
|
|
230 $term->add_secondary_GO_id( $id );
|
|
231 Function: Pushes one or more secondary goids into
|
|
232 the list of secondary goids.
|
|
233
|
|
234 This is aliased to remove_secondary_ids().
|
|
235
|
|
236 Returns :
|
|
237 Args : One secondary goid [GO:nnnnnnn or nnnnnnn] or a list
|
|
238 of secondary goids [array of [GO:nnnnnnn or nnnnnnn]]
|
|
239 (nnnnnnn is a zero-padded integer of seven digits).
|
|
240
|
|
241 =cut
|
|
242
|
|
243 sub add_secondary_GO_id {
|
|
244 return shift->add_secondary_id(@_);
|
|
245 } # add_secondary_GO_id
|
|
246
|
|
247
|
|
248 =head2 remove_secondary_GO_ids
|
|
249
|
|
250 Title : remove_secondary_GO_ids()
|
|
251 Usage : $term->remove_secondary_GO_ids();
|
|
252 Function: Deletes (and returns) the secondary goids of this Term.
|
|
253
|
|
254 This is aliased to remove_secondary_ids().
|
|
255
|
|
256 Returns : A list of secondary goids [array of [GO:nnnnnnn]]
|
|
257 (nnnnnnn is a zero-padded integer of seven digits).
|
|
258 Args :
|
|
259
|
|
260 =cut
|
|
261
|
|
262 sub remove_secondary_GO_ids {
|
|
263 return shift->remove_secondary_ids(@_);
|
|
264 } # remove_secondary_GO_ids
|
|
265
|
|
266
|
|
267
|
|
268
|
|
269 =head2 to_string
|
|
270
|
|
271 Title : to_string()
|
|
272 Usage : print $term->to_string();
|
|
273 Function: to_string method for GO terms.
|
|
274 Returns : A string representation of this GOterm.
|
|
275 Args :
|
|
276
|
|
277 =cut
|
|
278
|
|
279 sub to_string {
|
|
280 my( $self ) = @_;
|
|
281
|
|
282 my $s = "";
|
|
283
|
|
284 $s .= "-- GO id:\n";
|
|
285 $s .= ($self->GO_id() || '')."\n";
|
|
286 $s .= "-- Name:\n";
|
|
287 $s .= ($self->name() || '') ."\n";
|
|
288 $s .= "-- Definition:\n";
|
|
289 $s .= ($self->definition() || '') ."\n";
|
|
290 $s .= "-- Category:\n";
|
|
291 if ( defined( $self->ontology() ) ) {
|
|
292 $s .= $self->ontology()->name()."\n";
|
|
293 }
|
|
294 else {
|
|
295 $s .= "\n";
|
|
296 }
|
|
297 $s .= "-- Version:\n";
|
|
298 $s .= ($self->version() || '') ."\n";
|
|
299 $s .= "-- Is obsolete:\n";
|
|
300 $s .= $self->is_obsolete()."\n";
|
|
301 $s .= "-- Comment:\n";
|
|
302 $s .= ($self->comment() || '') ."\n";
|
|
303 $s .= "-- Definition references:\n";
|
|
304 $s .= $self->_array_to_string( $self->get_dblinks() )."\n";
|
|
305 $s .= "-- Secondary GO ids:\n";
|
|
306 $s .= $self->_array_to_string( $self->get_secondary_GO_ids() )."\n";
|
|
307 $s .= "-- Aliases:\n";
|
|
308 $s .= $self->_array_to_string( $self->get_synonyms() );
|
|
309
|
|
310 return $s;
|
|
311
|
|
312 } # to_string
|
|
313
|
|
314
|
|
315
|
|
316
|
|
317 # Title : _check_go_id
|
|
318 # Function: Checks whether the argument is [GO:nnnnnnn].
|
|
319 # If "GO:" is not present, it adds it.
|
|
320 # Returns : The canonical GO id.
|
|
321 # Args : The value to be checked.
|
|
322 sub _check_go_id {
|
|
323 my ( $self, $value ) = @_;
|
|
324 unless ( $value =~ /^(GO:)?\d{7}$/ || $value eq GOID_DEFAULT ) {
|
|
325 $self->throw( "Found [" . $value
|
|
326 . "] where [GO:nnnnnnn] or [nnnnnnn] expected" );
|
|
327 }
|
|
328 unless ( $value =~ /^GO:/ ) {
|
|
329 $value = "GO:".$value;
|
|
330 }
|
|
331 return $value;
|
|
332 } # _check_go_id
|
|
333
|
|
334
|
|
335
|
|
336 # Title : _array_to_string
|
|
337 # Function:
|
|
338 # Returns :
|
|
339 # Args :
|
|
340 sub _array_to_string {
|
|
341 my( $self, @value ) = @_;
|
|
342
|
|
343 my $s = "";
|
|
344
|
|
345 for ( my $i = 0; $i < scalar( @value ); ++$i ) {
|
|
346 if ( ! ref( $value[ $i ] ) ) {
|
|
347 $s .= "#" . $i . "\n-- " . $value[ $i ] . "\n";
|
|
348 }
|
|
349 }
|
|
350
|
|
351 return $s;
|
|
352
|
|
353 } # _array_to_string
|
|
354
|
|
355 #################################################################
|
|
356 # aliases or forwards to maintain backward compatibility
|
|
357 #################################################################
|
|
358
|
|
359 *each_secondary_GO_id = \&get_secondary_GO_ids;
|
|
360 *add_secondary_GO_ids = \&add_secondary_GO_id;
|
|
361
|
|
362 1;
|