annotate variant_effect_predictor/Bio/Ontology/SimpleGOEngine.pm @ 3:d30fa12e4cc5 default tip

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