annotate variant_effect_predictor/Bio/Ontology/SimpleGOEngine.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: SimpleGOEngine.pm,v 1.3.2.6 2003/06/30 05:04:06 lapp Exp $
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Ontology::SimpleGOEngine
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Christian M. Zmasek <czmasek@gnf.org> or <cmzmasek@yahoo.com>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7 # (c) Christian M. Zmasek, czmasek@gnf.org, 2002.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8 # (c) GNF, Genomics Institute of the Novartis Research Foundation, 2002.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10 # You may distribute this module under the same terms as perl itself.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 # Refer to the Perl Artistic License (see the license accompanying this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12 # software package, or see http://www.perl.com/language/misc/Artistic.html)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 # for the terms under which you may use, modify, and redistribute this module.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15 # THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16 # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17 # MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19 # You may distribute this module under the same terms as perl itself
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21 # POD documentation - main docs before the code
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25 SimpleGOEngine - a Ontology Engine for GO implementing OntologyEngineI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 use Bio::Ontology::SimpleGOEngine;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31 my $parser = Bio::Ontology::SimpleGOEngine->new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32 ( -defs_file => "/home/czmasek/GO/GO.defs",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 -files => ["/home/czmasek/GO/component.ontology",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34 "/home/czmasek/GO/function.ontology",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35 "/home/czmasek/GO/process.ontology"] );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 my $engine = $parser->parse();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39 my $IS_A = Bio::Ontology::RelationshipType->get_instance( "IS_A" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 my $PART_OF = Bio::Ontology::RelationshipType->get_instance( "PART_OF" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45 Needs Graph.pm from CPAN.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 =head1 FEEDBACK
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 =head2 Mailing Lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51 User feedback is an integral part of the evolution of this and other
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52 Bioperl modules. Send your comments and suggestions preferably to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53 Bioperl mailing lists Your participation is much appreciated.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55 bioperl-l@bioperl.org - General discussion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56 http://bio.perl.org/MailList.html - About the mailing lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58 =head2 Reporting Bugs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60 report bugs to the Bioperl bug tracking system to help us keep track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61 the bugs and their resolution. Bug reports can be submitted via
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 email or the web:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64 bioperl-bugs@bio.perl.org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65 http://bugzilla.bioperl.org/
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 =head1 AUTHOR
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69 Christian M. Zmasek
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 Email: czmasek@gnf.org or cmzmasek@yahoo.com
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73 WWW: http://www.genetics.wustl.edu/eddy/people/zmasek/
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75 Address:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77 Genomics Institute of the Novartis Research Foundation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 10675 John Jay Hopkins Drive
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79 San Diego, CA 92121
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81 =head1 APPENDIX
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83 The rest of the documentation details each of the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84 methods. Internal methods are usually preceded with a _
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 # Let the code begin...
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 package Bio::Ontology::SimpleGOEngine;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 use Graph::Directed;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 use vars qw( @ISA );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 use Bio::Root::Root;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 use Bio::Ontology::RelationshipType;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 use Bio::Ontology::RelationshipFactory;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 use Bio::Ontology::OntologyEngineI;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 use constant TRUE => 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105 use constant FALSE => 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 use constant IS_A => "IS_A";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107 use constant PART_OF => "PART_OF";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 use constant TERM => "TERM";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109 use constant TYPE => "TYPE";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 use constant ONTOLOGY => "ONTOLOGY";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112 @ISA = qw( Bio::Root::Root
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113 Bio::Ontology::OntologyEngineI );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117 =head2 new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 Title : new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120 Usage : $engine = Bio::Ontology::SimpleGOEngine->new()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 Function: Creates a new SimpleGOEngine
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122 Returns : A new SimpleGOEngine object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 sub new {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128 my( $class, @args ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 my $self = $class->SUPER::new( @args );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 $self->init();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 return $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135 } # new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 =head2 init
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141 Title : init()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 Usage : $engine->init();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143 Function: Initializes this Engine.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 Returns :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149 sub init {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 my ( $self ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152 $self->{ "_is_a_relationship" } = Bio::Ontology::RelationshipType->get_instance( IS_A );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 $self->{ "_part_of_relationship" } = Bio::Ontology::RelationshipType->get_instance( PART_OF );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155 $self->graph( Graph::Directed->new() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157 # set defaults for the factories
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158 $self->relationship_factory(Bio::Ontology::RelationshipFactory->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 -type => "Bio::Ontology::Relationship"));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 } # init
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165 =head2 is_a_relationship
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167 Title : is_a_relationship()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 Usage : $IS_A = $engine->is_a_relationship();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 Function: Returns a Bio::Ontology::RelationshipType object for "is-a"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 Returns : Bio::Ontology::RelationshipType set to "IS_A"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176 sub is_a_relationship {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177 my ( $self, $value ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179 if ( defined $value ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 $self->throw( "Attempted to change immutable field" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 return $self->{ "_is_a_relationship" };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184 } # is_a_relationship
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 =head2 part_of_relationship
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 Title : part_of_relationship()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191 Usage : $PART_OF = $engine->part_of_relationship();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192 Function: Returns a Bio::Ontology::RelationshipType object for "part-of"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 Returns : Bio::Ontology::RelationshipType set to "PART_OF"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 sub part_of_relationship {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200 my ( $self, $value ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202 if ( defined $value ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 $self->throw( "Attempted to change immutable field" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206 return $self->{ "_part_of_relationship" };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207 } # part_of_relationship
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212 =head2 add_term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214 Title : add_term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 Usage : $engine->add_term( $term_obj );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216 Function: Adds a Bio::Ontology::TermI to this engine
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 Returns : true if the term was added and false otherwise (e.g., if the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218 term already existed in the ontology engine)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 Args : Bio::Ontology::TermI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 sub add_term {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225 my ( $self, $term ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227 return FALSE if $self->has_term( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229 my $goid = $self->_get_id($term);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 $self->graph()->add_vertex( $goid );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232 $self->graph()->set_attribute( TERM, $goid, $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 return TRUE;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 } # add_term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240 =head2 has_term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 Title : has_term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 Usage : $engine->has_term( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 Function: Checks whether this engine contains a particular term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245 Returns : true or false
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246 Args : Bio::Ontology::TermI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 erm identifier (e.g. "GO:0012345")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 sub has_term {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254 my ( $self, $term ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255 $term = $self->_get_id( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256 if ( $self->graph()->has_vertex( $term ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 return TRUE;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260 return FALSE;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 } # has_term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267 =head2 add_relationship
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269 Title : add_relationship
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 Usage : $engine->add_relationship( $relationship );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271 $engine->add_relatioship( $subject_term, $predicate_term, $object_term, $ontology );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 $engine->add_relatioship( $subject_id, $predicate_id, $object_id, $ontology);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 Function: Adds a relationship to this engine
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274 Returns : true if successfully added, false otherwise
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275 Args : term id, Bio::Ontology::TermI (rel.type), term id, ontology
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277 Bio::Ontology::TermI, Bio::Ontology::TermI (rel.type), Bio::Ontology::TermI, ontology
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279 Bio::Ontology::RelationshipI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283 # term objs or term ids
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284 sub add_relationship {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285 my ( $self, $child, $type, $parent, $ont ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287 if ( scalar( @_ ) == 2 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288 $self->_check_class( $child, "Bio::Ontology::RelationshipI" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289 $type = $child->predicate_term();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290 $parent = $child->object_term();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291 $ont = $child->ontology();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292 $child = $child->subject_term();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296 $self->_check_class( $type, "Bio::Ontology::TermI" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298 my $parentid = $self->_get_id( $parent );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 my $childid = $self->_get_id( $child );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301 my $g = $self->graph();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303 $self->add_term($child) unless $g->has_vertex( $childid );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304 $self->add_term($parent) unless $g->has_vertex( $parentid );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306 # This prevents multi graphs.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307 if ( $g->has_edge( $parentid, $childid ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 return FALSE;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311 $g->add_edge( $parentid, $childid );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 $g->set_attribute( TYPE, $parentid, $childid, $type );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313 $g->set_attribute( ONTOLOGY, $parentid, $childid, $ont );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315 return TRUE;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 } # add_relationship
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322 =head2 get_relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325 Title : get_relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326 Usage : $engine->get_relationships( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327 Function: Returns all relationships of a term, or all relationships in
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 the graph if no term is specified.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329 Returns : Relationship[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330 Args : term id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332 Bio::Ontology::TermI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 sub get_relationships {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337 my ( $self, $term ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 my $g = $self->graph();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341 # obtain the ID if term provided
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342 my $termid;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 if($term) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344 $termid = $self->_get_id( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 # check for presence in the graph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 if ( ! $g->has_vertex( $termid ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 $self->throw( "no term with identifier \"$termid\" in ontology" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351 # now build the relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352 my $relfact = $self->relationship_factory();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 # we'll build the relationships from edges
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354 my @rels = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355 my @edges = $g->edges($termid);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356 while(@edges) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357 my $startid = shift(@edges);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358 my $endid = shift(@edges);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359 my $rel = $relfact->create_object(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360 -subject_term => $self->get_terms($endid),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361 -object_term => $self->get_terms($startid),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 -predicate_term => $g->get_attribute(TYPE,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363 $startid, $endid),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 -ontology => $g->get_attribute(ONTOLOGY,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365 $startid, $endid));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366 push( @rels, $rel );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369 return @rels;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371 } # get_relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373 =head2 get_all_relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376 Title : get_all_relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377 Usage : @rels = $engine->get_all_relationships();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378 Function: Returns all relationships in the graph.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379 Returns : Relationship[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384 sub get_all_relationships {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 return shift->get_relationships(@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 } # get_all_relationships
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390 =head2 get_predicate_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392 Title : get_predicate_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393 Usage : $engine->get_predicate_terms();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394 Function: Returns the types of relationships this engine contains
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395 Returns : Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401 sub get_predicate_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402 my ( $self ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404 my @a = ( $self->is_a_relationship(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405 $self->part_of_relationship() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 return @a;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408 } # get_predicate_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413 =head2 get_child_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415 Title : get_child_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416 Usage : $engine->get_child_terms( $term_obj, @rel_types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417 $engine->get_child_terms( $term_id, @rel_types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 Function: Returns the children of this term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419 Returns : Bio::Ontology::TermI[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420 Args : Bio::Ontology::TermI, Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422 term id, Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424 if NO Bio::Ontology::RelationshipType[] is indicated: children
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425 of ALL types are returned
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
428
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
429 sub get_child_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
430 my ( $self, $term, @types ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
431
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
432 return $self->_get_child_parent_terms_helper( $term, TRUE, @types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
433
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
434 } # get_child_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
435
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
436
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
437 =head2 get_descendant_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
438
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
439 Title : get_descendant_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
440 Usage : $engine->get_descendant_terms( $term_obj, @rel_types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
441 $engine->get_descendant_terms( $term_id, @rel_types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
442 Function: Returns the descendants of this term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
443 Returns : Bio::Ontology::TermI[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
444 Args : Bio::Ontology::TermI, Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
445 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
446 term id, Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
447
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
448 if NO Bio::Ontology::RelationshipType[] is indicated: descendants
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
449 of ALL types are returned
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
450
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
451 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
452
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
453 sub get_descendant_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
454 my ( $self, $term, @types ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
455
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
456 my %ids = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
457 my @ids = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
458
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
459 $term = $self->_get_id( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
460
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
461 if ( ! $self->graph()->has_vertex( $term ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
462 $self->throw( "Ontology does not contain a term with an identifier of \"$term\"" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
463 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
464
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
465 $self->_get_descendant_terms_helper( $term, \%ids, \@types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
466
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
467 while( ( my $id ) = each ( %ids ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
468 push( @ids, $id );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
469 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
470
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
471 return $self->get_terms( @ids );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
472
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
473 } # get_descendant_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
474
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
475
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
476
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
477
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
478 =head2 get_parent_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
479
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
480 Title : get_parent_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
481 Usage : $engine->get_parent_terms( $term_obj, @rel_types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
482 $engine->get_parent_terms( $term_id, @rel_types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
483 Function: Returns the parents of this term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
484 Returns : Bio::Ontology::TermI[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
485 Args : Bio::Ontology::TermI, Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
486 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
487 term id, Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
488
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
489 if NO Bio::Ontology::RelationshipType[] is indicated: parents
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
490 of ALL types are returned
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
491
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
492 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
493
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
494 sub get_parent_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
495 my ( $self, $term, @types ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
496
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
497 return $self->_get_child_parent_terms_helper( $term, FALSE, @types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
498
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
499 } # get_parent_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
500
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
501
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
502
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
503 =head2 get_ancestor_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
504
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
505 Title : get_ancestor_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
506 Usage : $engine->get_ancestor_terms( $term_obj, @rel_types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
507 $engine->get_ancestor_terms( $term_id, @rel_types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
508 Function: Returns the ancestors of this term
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
509 Returns : Bio::Ontology::TermI[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
510 Args : Bio::Ontology::TermI, Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
511 or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
512 term id, Bio::Ontology::RelationshipType[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
513
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
514 if NO Bio::Ontology::RelationshipType[] is indicated: ancestors
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
515 of ALL types are returned
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
516
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
517 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
518
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
519 sub get_ancestor_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
520 my ( $self, $term, @types ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
521
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
522 my %ids = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
523 my @ids = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
524
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
525 $term = $self->_get_id( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
526
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
527 if ( ! $self->graph()->has_vertex( $term ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
528 $self->throw( "Ontology does not contain a term with an identifier of \"$term\"" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
529 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
530
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
531 $self->_get_ancestor_terms_helper( $term, \%ids, \@types );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
532
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
533 while( ( my $id ) = each ( %ids ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
534 push( @ids, $id );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
535 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
536
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
537 return $self->get_terms( @ids );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
538
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
539 } # get_ancestor_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
540
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
541
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
542
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
543
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
544
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
545 =head2 get_leaf_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
546
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
547 Title : get_leaf_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
548 Usage : $engine->get_leaf_terms();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
549 Function: Returns the leaf terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
550 Returns : Bio::Ontology::TermI[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
551 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
552
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
553 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
554
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
555 sub get_leaf_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
556 my ( $self ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
557
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
558 my @a = $self->graph()->sink_vertices();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
559
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
560 return $self->get_terms( @a );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
561
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
562 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
563
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
564
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
565
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
566 =head2 get_root_terms()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
567
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
568 Title : get_root_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
569 Usage : $engine->get_root_terms();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
570 Function: Returns the root terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
571 Returns : Bio::Ontology::TermI[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
572 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
573
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
574 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
575
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
576 sub get_root_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
577 my ( $self ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
578
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
579
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
580 my @a = $self->graph()->source_vertices();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
581
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
582 return $self->get_terms( @a );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
583
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
584 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
585
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
586
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
587 =head2 get_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
588
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
589 Title : get_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
590 Usage : @terms = $engine->get_terms( "GO:1234567", "GO:2234567" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
591 Function: Returns term objects with given identifiers
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
592 Returns : Bio::Ontology::TermI[], or the term corresponding to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
593 first identifier if called in scalar context
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
594 Args : term ids[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
595
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
596
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
597 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
598
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
599 sub get_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
600 my ( $self, @ids ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
601
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
602 my @terms = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
603
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
604 foreach my $id ( @ids ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
605 if ( $self->graph()->has_vertex( $id ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
606 push( @terms, $self->graph()->get_attribute( TERM, $id ) );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
607 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
608 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
609
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
610 return wantarray ? @terms : shift(@terms);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
611
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
612 } # get_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
613
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
614
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
615 =head2 get_all_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
616
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
617 Title : get_all_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
618 Usage : $engine->get_all_terms();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
619 Function: Returns all terms in this engine
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
620 Returns : Bio::Ontology::TermI[]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
621 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
622
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
623 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
624
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
625 sub get_all_terms {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
626 my ( $self ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
627
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
628 return( $self->get_terms( $self->graph()->vertices() ) );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
629
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
630 } # get_all_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
631
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
632
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
633 =head2 find_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
634
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
635 Title : find_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
636 Usage : ($term) = $oe->find_terms(-identifier => "SO:0000263");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
637 Function: Find term instances matching queries for their attributes.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
638
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
639 This implementation can efficiently resolve queries by
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
640 identifier.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
641
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
642 Example :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
643 Returns : an array of zero or more Bio::Ontology::TermI objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
644 Args : Named parameters. The following parameters should be recognized
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
645 by any implementations:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
646
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
647 -identifier query by the given identifier
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
648 -name query by the given name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
649
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
650
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
651 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
652
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
653 sub find_terms{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
654 my ($self,@args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
655 my @terms;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
656
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
657 my ($id,$name) = $self->_rearrange([qw(IDENTIFIER NAME)],@args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
658
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
659 if(defined($id)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
660 @terms = $self->get_terms($id);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
661 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
662 @terms = $self->get_all_terms();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
663 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
664 if(defined($name)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
665 @terms = grep { $_->name() eq $name; } @terms;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
666 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
667 return @terms;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
668 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
669
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
670 =head2 relationship_factory
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
671
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
672 Title : relationship_factory
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
673 Usage : $fact = $obj->relationship_factory()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
674 Function: Get/set the object factory to be used when relationship
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
675 objects are created by the implementation on-the-fly.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
676
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
677 Example :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
678 Returns : value of relationship_factory (a Bio::Factory::ObjectFactoryI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
679 compliant object)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
680 Args : on set, a Bio::Factory::ObjectFactoryI compliant object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
681
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
682
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
683 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
684
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
685 sub relationship_factory{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
686 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
687
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
688 return $self->{'relationship_factory'} = shift if @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
689 return $self->{'relationship_factory'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
690 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
691
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
692 =head2 term_factory
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
693
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
694 Title : term_factory
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
695 Usage : $fact = $obj->term_factory()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
696 Function: Get/set the object factory to be used when term objects are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
697 created by the implementation on-the-fly.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
698
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
699 Note that this ontology engine implementation does not
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
700 create term objects on the fly, and therefore setting this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
701 attribute is meaningless.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
702
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
703 Example :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
704 Returns : value of term_factory (a Bio::Factory::ObjectFactoryI
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
705 compliant object)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
706 Args : on set, a Bio::Factory::ObjectFactoryI compliant object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
707
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
708
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
709 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
710
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
711 sub term_factory{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
712 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
713
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
714 if(@_) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
715 $self->warn("setting term factory, but ".ref($self).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
716 " does not create terms on-the-fly");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
717 return $self->{'term_factory'} = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
718 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
719 return $self->{'term_factory'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
720 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
721
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
722 =head2 graph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
723
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
724 Title : graph()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
725 Usage : $engine->graph();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
726 Function: Returns the Graph this engine is based on
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
727 Returns : Graph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
728 Args :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
729
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
730 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
731
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
732 sub graph {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
733 my ( $self, $value ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
734
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
735 if ( defined $value ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
736 $self->_check_class( $value, "Graph::Directed" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
737 $self->{ "_graph" } = $value;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
738 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
739
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
740 return $self->{ "_graph" };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
741 } # graph
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
742
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
743
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
744
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
745 # Internal methods
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
746 # ----------------
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
747
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
748
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
749 # Checks the correct format of a GOBO-formatted id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
750 # Gets the id out of a term or id string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
751 sub _get_id {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
752 my ( $self, $term ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
753
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
754 if(ref($term)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
755 return $term->GO_id() if $term->isa("Bio::Ontology::GOterm");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
756 # if not a GOterm, use standard API
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
757 $self->throw("Object doesn't implement Bio::Ontology::TermI. ".
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
758 "Bummer.")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
759 unless $term->isa("Bio::Ontology::TermI");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
760 $term = $term->identifier();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
761 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
762 # don't fuss if it looks remotely standard
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
763 return $term if $term =~ /^[A-Z]{1,8}:\d{3,}$/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
764 # prefix with something if only numbers
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
765 if($term =~ /^\d+$/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
766 $self->warn(ref($self).": identifier [$term] is only numbers - ".
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
767 "prefixing with 'GO:'");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
768 return "GO:" . $term;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
769 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
770 # we shouldn't have gotten here if it's at least a remotely decent ID
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
771 $self->warn(ref($self).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
772 ": Are you sure '$term' is a valid identifier? ".
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
773 "If you see problems, this may be the cause.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
774 return $term;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
775 } # _get_id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
776
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
777
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
778 # Helper for getting children and parent terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
779 sub _get_child_parent_terms_helper {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
780 my ( $self, $term, $do_get_child_terms, @types ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
781
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
782 foreach my $type ( @types ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
783 $self->_check_class( $type, "Bio::Ontology::TermI" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
784 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
785
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
786 my @relative_terms = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
787
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
788 $term = $self->_get_id( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
789 if ( ! $self->graph()->has_vertex( $term ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
790 $self->throw( "Ontology does not contain a term with an identifier of \"$term\"" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
791 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
792
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
793 my @all_relative_terms = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
794 if ( $do_get_child_terms ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
795 @all_relative_terms = $self->graph()->successors( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
796 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
797 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
798 @all_relative_terms = $self->graph()->predecessors( $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
799 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
800
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
801 foreach my $relative ( @all_relative_terms ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
802 if ( scalar( @types ) > 0 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
803 foreach my $type ( @types ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
804 my $relative_type;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
805 if ( $do_get_child_terms ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
806 $relative_type = $self->graph()->get_attribute( TYPE, $term, $relative );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
807 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
808 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
809 $relative_type = $self->graph()->get_attribute( TYPE, $relative, $term );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
810 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
811 if ( $relative_type->equals( $type ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
812 push( @relative_terms, $relative );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
813 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
814 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
815 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
816 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
817 push( @relative_terms, $relative );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
818 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
819 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
820
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
821 return $self->get_terms( @relative_terms );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
822
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
823 } # get_child_terms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
824
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
825
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
826 # Recursive helper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
827 sub _get_descendant_terms_helper {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
828 my ( $self, $term, $ids_ref, $types_ref ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
829
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
830 my @child_terms = $self->get_child_terms( $term, @$types_ref );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
831
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
832 if ( scalar( @child_terms ) < 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
833 return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
834 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
835
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
836 foreach my $child_term ( @child_terms ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
837 my $child_term_id = $child_term->identifier();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
838 $ids_ref->{ $child_term_id } = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
839 $self->_get_descendant_terms_helper( $child_term_id, $ids_ref, $types_ref );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
840 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
841
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
842 } # _get_descendant_terms_helper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
843
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
844
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
845 # Recursive helper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
846 sub _get_ancestor_terms_helper {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
847 my ( $self, $term, $ids_ref, $types_ref ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
848
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
849 my @parent_terms = $self->get_parent_terms( $term, @$types_ref );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
850
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
851 if ( scalar( @parent_terms ) < 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
852 return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
853 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
854
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
855 foreach my $parent_term ( @parent_terms ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
856 my $parent_term_id = $parent_term->identifier();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
857 $ids_ref->{ $parent_term_id } = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
858 $self->_get_ancestor_terms_helper( $parent_term_id, $ids_ref, $types_ref );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
859 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
860
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
861 } # get_ancestor_terms_helper
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
862
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
863
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
864
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
865 sub _check_class {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
866 my ( $self, $value, $expected_class ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
867
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
868 if ( ! defined( $value ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
869 $self->throw( "Found [undef] where [$expected_class] expected" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
870 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
871 elsif ( ! ref( $value ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
872 $self->throw( "Found [scalar] where [$expected_class] expected" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
873 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
874 elsif ( ! $value->isa( $expected_class ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
875 $self->throw( "Found [" . ref( $value ) . "] where [$expected_class] expected" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
876 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
877
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
878 } # _check_class
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
879
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
880
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
881 #################################################################
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
882 # aliases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
883 #################################################################
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
884
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
885 *get_relationship_types = \&get_predicate_terms;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
886
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
887
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
888 1;