annotate variant_effect_predictor/Bio/OntologyIO/dagflat.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: dagflat.pm,v 1.2.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::OntologyIO::dagflat
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Hilmar Lapp, hlapp at gmx.net
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) Hilmar Lapp, hlapp at gmx.net, 2003.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # (c) GNF, Genomics Institute of the Novartis Research Foundation, 2002.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # You may distribute this module under the same terms as perl itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 # Refer to the Perl Artistic License (see the license accompanying this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 # software package, or see http://www.perl.com/language/misc/Artistic.html)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 # for the terms under which you may use, modify, and redistribute this module.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 # THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 # MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 dagflat - a base class parser for GO flat-file type formats
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 use Bio::OntologyIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 # do not use directly -- use via Bio::OntologyIO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 # e.g., the GO parser is a simple extension of this class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my $parser = Bio::OntologyIO->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 ( -format => "go",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 -defs_file => "/home/czmasek/GO/GO.defs",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 -files => ["/home/czmasek/GO/component.ontology",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 "/home/czmasek/GO/function.ontology",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 "/home/czmasek/GO/process.ontology"] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 my $go_ontology = $parser->next_ontology();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 my $IS_A = Bio::Ontology::RelationshipType->get_instance( "IS_A" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 my $PART_OF = Bio::Ontology::RelationshipType->get_instance( "PART_OF" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 Needs Graph.pm from CPAN.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Bioperl modules. Send your comments and suggestions preferably to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 Bioperl mailing lists Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Christian M. Zmasek
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 Email: czmasek@gnf.org or cmzmasek@yahoo.com
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 WWW: http://www.genetics.wustl.edu/eddy/people/zmasek/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Genomics Institute of the Novartis Research Foundation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 10675 John Jay Hopkins Drive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 San Diego, CA 92121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 =head2 CONTRIBUTOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 Hilmar Lapp, hlapp at gmx.net
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 package Bio::OntologyIO::dagflat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 use vars qw( @ISA );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 use Bio::Root::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 use Bio::Ontology::SimpleGOEngine;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 use Bio::Ontology::Ontology;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 use Bio::Ontology::TermFactory;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 use Bio::OntologyIO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 use constant TRUE => 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 use constant FALSE => 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 @ISA = qw( Bio::OntologyIO );
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 : $parser = Bio::OntologyIO->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 -format => "go",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 -defs_file => "/path/to/GO.defs",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 -files => ["/path/to/component.ontology",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 "/path/to/function.ontology",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 "/path/to/process.ontology"] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Function: Creates a new dagflat parser.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 Returns : A new dagflat parser object, implementing L<Bio::OntologyIO>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Args : -defs_file => the name of the file holding the term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 definitions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 -files => a single ontology flat file holding the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 term relationships, or an array ref holding
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 the file names (for GO, there will usually be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 3 files: component.ontology, function.ontology,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 process.ontology)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 -file => if there is only a single flat file, it may
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 also be specified via the -file parameter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 -ontology_name => the name of the ontology; if not specified the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 parser will auto-discover it by using the term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 that starts with a '$', and converting underscores
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 to spaces
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 -engine => the Bio::Ontology::OntologyEngineI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 to be reused (will be created otherwise); note
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 that every Bio::Ontology::OntologyI will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 qualify as well since that one inherits from the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 former.
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 # in reality, we let OntologyIO::new do the instantiation, and override
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 # _initialize for all initialization work
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 sub _initialize {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 my ($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 $self->SUPER::_initialize( @args );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 my ( $defs_file_name,$files,$name,$eng ) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 $self->_rearrange([qw( DEFS_FILE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 FILES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 ONTOLOGY_NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 ENGINE)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 @args );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 $self->_done( FALSE );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 $self->_not_first_record( FALSE );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->_term( "" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 delete $self->{'_ontologies'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 # ontology engine (and possibly name if it's an OntologyI)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $eng = Bio::Ontology::SimpleGOEngine->new() unless $eng;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 if($eng->isa("Bio::Ontology::OntologyI")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $self->ontology_name($eng->name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $eng = $eng->engine() if $eng->can('engine');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 $self->_ont_engine($eng);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 # flat files to parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $self->defs_file( $defs_file_name );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $self->{_flat_files} = $files ? ref($files) ? $files : [$files] : [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 # ontology name (overrides implicit one through OntologyI engine)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $self->ontology_name($name) if $name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 } # _initialize
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 =head2 ontology_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 Title : ontology_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 Usage : $obj->ontology_name($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Function: Get/set the name of the ontology parsed by this module.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 Returns : value of ontology_name (a scalar)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 Args : on set, new value (a scalar or undef, optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 sub ontology_name{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 return $self->{'ontology_name'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 return $self->{'ontology_name'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 =head2 parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 Title : parse()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 Usage : $parser->parse();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 Function: Parses the files set with "new" or with methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 defs_file and _flat_files.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 Normally you should not need to call this method as it will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 be called automatically upon the first call to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 next_ontology().
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Returns : [Bio::Ontology::OntologyEngineI]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 sub parse {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 # setup the default term factory if not done by anyone yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $self->term_factory(Bio::Ontology::TermFactory->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 -type => "Bio::Ontology::Term"))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 unless $self->term_factory();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 # create the ontology object itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 my $ont = Bio::Ontology::Ontology->new(-name => $self->ontology_name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 -engine => $self->_ont_engine());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 # parse definitions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 while( my $term = $self->_next_term() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $self->_add_term( $term, $ont );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 # set up the ontology of the relationship types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 foreach ($self->_part_of_relationship(), $self->_is_a_relationship()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 $_->ontology($ont);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 # pre-seed the IO system with the first flat file if -file wasn't provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 if(! $self->_fh) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 $self->_initialize_io(-file => shift(@{$self->_flat_files()}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 while($self->_fh) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 $self->_parse_flat_file($ont);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 # advance to next flat file if more are available
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 if(@{$self->_flat_files()}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 $self->close();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 $self->_initialize_io(-file => shift(@{$self->_flat_files()}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 last; # nothing else to parse so terminate the loop
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $self->_add_ontology($ont);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 # not needed anywhere, only because of backward compatibility
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 return $self->_ont_engine();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 } # parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 =head2 next_ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 Title : next_ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 Usage :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 Function: Get the next available ontology from the parser. This is the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 method prescribed by Bio::OntologyIO.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 Returns : An object implementing Bio::Ontology::OntologyI, and undef if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 there is no more ontology in the input.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 sub next_ontology{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 # parse if not done already
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $self->parse() unless exists($self->{'_ontologies'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 # return next available ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 return shift(@{$self->{'_ontologies'}}) if exists($self->{'_ontologies'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 =head2 defs_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 Title : defs_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 Usage : $parser->defs_file( "GO.defs" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 Function: Set/get for the term definitions filename.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 Returns : The term definitions file name [string].
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 Args : On set, the term definitions file name [string] (optional).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 sub defs_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 if ( @_ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 my $f = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $self->{ "_defs_file_name" } = $f;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $self->_defs_io->close() if $self->_defs_io();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 if(defined($f)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $self->_defs_io( Bio::Root::IO->new( -input => $f ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 return $self->{ "_defs_file_name" };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 } # defs_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 =head2 _flat_files
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 Title : _flat_files
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 Usage : $files_to_parse = $parser->_flat_files();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Function: Get the array of ontology flat files that need to be parsed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Note that this array will decrease in elements over the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 parsing process. Therefore, it's value outside of this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 module will be limited. Also, be careful not to alter the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 array unless you know what you are doing.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 Returns : a reference to an array of zero or more strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 sub _flat_files {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $self->{_flat_files} = [] unless exists($self->{_flat_files});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 return $self->{_flat_files};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 # INTERNAL METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 # ----------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 =head2 _defs_io
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Title : _defs_io
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Usage : $obj->_defs_io($newval)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Function: Get/set the Bio::Root::IO instance representing the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 definition file, if provided (see defs_file()).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Returns : value of _defs_io (a Bio::Root::IO object)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Args : on set, new value (a Bio::Root::IO object or undef, optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 sub _defs_io{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 return $self->{'_defs_io'} = shift if @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 return $self->{'_defs_io'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 sub _add_ontology {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 $self->{'_ontologies'} = [] unless exists($self->{'_ontologies'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 foreach my $ont (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 $self->throw(ref($ont)." does not implement Bio::Ontology::OntologyI")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 unless ref($ont) && $ont->isa("Bio::Ontology::OntologyI");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 # the ontology name may have been auto-discovered while parsing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 # the file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $ont->name($self->ontology_name) unless $ont->name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 push(@{$self->{'_ontologies'}}, $ont);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 # This simply delegates. See SimpleGOEngine.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 sub _add_term {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 my ( $self, $term, $ont ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 $term->ontology($ont) if $ont && (! $term->ontology);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 $self->_ont_engine()->add_term( $term );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 } # _add_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 # This simply delegates. See SimpleGOEngine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 sub _part_of_relationship {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 return $self->_ont_engine()->part_of_relationship(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 } # _part_of_relationship
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 # This simply delegates. See SimpleGOEngine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 sub _is_a_relationship {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 return $self->_ont_engine()->is_a_relationship(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 } # _is_a_relationship
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 # This simply delegates. See SimpleGOEngine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 sub _add_relationship {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 my ( $self, $parent, $child, $type, $ont ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 # note the triple terminology (subject,predicate,object) corresponds to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 # (child,type,parent)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 $self->_ont_engine()->add_relationship( $child, $type, $parent, $ont );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 } # _add_relationship
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 # This simply delegates. See SimpleGOEngine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 sub _has_term {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 return $self->_ont_engine()->has_term( @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 } # _add_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 # This parses the relationships files
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 sub _parse_flat_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 my $ont = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 my @stack = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 my $prev_spaces = -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 my $prev_term = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 while( my $line = $self->_readline() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 if ( $line =~ /^!/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 my $current_term = $self->_get_first_termid( $line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 my @isa_parents = $self->_get_isa_termids( $line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 my @partof_parents = $self->_get_partof_termids( $line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 my @syns = $self->_get_synonyms( $line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 my @sec_go_ids = $self->_get_secondary_termids( $line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my @cross_refs = $self->_get_db_cross_refs( $line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 if ( ! $self->_has_term( $current_term ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 my $term =$self->_create_ont_entry($self->_get_name($line,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 $current_term),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 $current_term );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 $self->_add_term( $term, $ont );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 my $current_term_object = $self->_ont_engine()->get_terms( $current_term );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 $current_term_object->add_dblink( @cross_refs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 $current_term_object->add_secondary_id( @sec_go_ids );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $current_term_object->add_synonym( @syns );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 unless ( $line =~ /^\$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 $current_term_object->ontology( $ont );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 foreach my $parent ( @isa_parents ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 if ( ! $self->_has_term( $parent ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 my $term = $self->_create_ont_entry($self->_get_name($line,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 $parent),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 $parent );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 $self->_add_term( $term, $ont );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 $self->_add_relationship( $parent,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $current_term,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 $self->_is_a_relationship(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 $ont);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 foreach my $parent ( @partof_parents ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 if ( ! $self->_has_term( $parent ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 my $term = $self->_create_ont_entry($self->_get_name($line,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 $parent),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 $parent );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 $self->_add_term( $term, $ont );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 $self->_add_relationship( $parent,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $current_term,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 $self->_part_of_relationship(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 $ont);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 my $current_spaces = $self->_count_spaces( $line );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 if ( $current_spaces != $prev_spaces ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 if ( $current_spaces == $prev_spaces + 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 push( @stack, $prev_term );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 elsif ( $current_spaces < $prev_spaces ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 my $n = $prev_spaces - $current_spaces;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 for ( my $i = 0; $i < $n; ++$i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 pop( @stack );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 $self->throw( "format error (file ".$self->file.")" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 my $parent = $stack[ @stack - 1 ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 # add a relationship if the line isn't the one with the root term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 # of the ontology (which is also the name of the ontology)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 if ( index($line,'$') != 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 if ( $line !~ /^\s*[<%]/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 $self->throw( "format error (file ".$self->file.")" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 my $reltype = ($line =~ /^\s*</) ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 $self->_part_of_relationship() :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 $self->_is_a_relationship();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 $self->_add_relationship( $parent, $current_term, $reltype,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 $ont);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 $prev_spaces = $current_spaces;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 $prev_term = $current_term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 return $ont;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 } # _parse_relationships_file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 # Parses the 1st term id number out of line.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 sub _get_first_termid {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 my ( $self, $line ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 if ( $line =~ /;\s*([A-Z]{1,8}:\d{3,})/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 return $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 $self->throw( "format error: no term id in line \"$line\"" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 } # _get_first_termid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 # Parses the name out of line.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 sub _get_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 my ( $self, $line, $termid ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 if ( $line =~ /([^;<%]+);\s*$termid/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 my $name = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 # remove trailing and leading whitespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 $name =~ s/\s+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 $name =~ s/^\s+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 # remove leading dollar character; also we default the name of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 # ontology to this name if preset to something else
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 if(index($name,'$') == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 $name = substr($name,1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 # replace underscores by spaces for setting the ontology name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 $self->ontology_name(join(" ",split(/_/,$name)))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 unless $self->ontology_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 return $name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 } # _get_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 # Parses the synonyms out of line.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 sub _get_synonyms {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 my ( $self, $line ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 my @synonyms = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 while ( $line =~ /synonym\s*:\s*([^;^<^%]+)/g ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 my $syn = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 $syn =~ s/\s+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 $syn =~ s/^\s+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 push( @synonyms, $syn );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 return @synonyms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 } # _get_synonyms
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 # Parses the db cross refs out of line.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 sub _get_db_cross_refs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 my ( $self, $line ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 my @refs = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 while ( $line =~ /;([^;^<^%^:]+:[^;^<^%^:]+)/g ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 my $ref = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 if ( $ref =~ /synonym/ || $ref =~ /[A-Z]{1,8}:\d{3,}/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 $ref =~ s/\s+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 $ref =~ s/^\s+//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 push( @refs, $ref );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 return @refs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 # Parses the secondary go ids out of a line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 sub _get_secondary_termids {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 my ( $self, $line ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 my @secs = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 while ( $line =~ /,\s*([A-Z]{1,8}:\d{3,})/g ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 my $sec = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 push( @secs, $sec );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 return @secs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 } # _get_secondary_termids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 # Parses the is a ids out of a line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 sub _get_isa_termids {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 my ( $self, $line ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 my @ids = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 $line =~ s/[A-Z]{1,8}:\d{3,}//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 while ( $line =~ /%[^<^,]*?([A-Z]{1,8}:\d{3,})/g ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 push( @ids, $1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 return @ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 } # _get_isa_termids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 # Parses the part of ids out of a line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 sub _get_partof_termids {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 my ( $self, $line ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 my @ids = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 $line =~ s/[A-Z]{1,8}:\d{3,}//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 while ( $line =~ /<[^%^,]*?([A-Z]{1,8}:\d{3,})/g ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 push( @ids, $1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 return @ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 } # _get_partof_termids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 # Counts the spaces at the beginning of a line in the relationships files
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 sub _count_spaces {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 my ( $self, $line ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 if ( $line =~ /^(\s+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 return length( $1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 } # _count_spaces
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 # "next" method for parsing the defintions file
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 sub _next_term {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 my ( $self ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 if ( ($self->_done() == TRUE) || (! $self->_defs_io())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 my $line = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 my $termid = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 my $next_term = $self->_term();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 my $def = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 my $comment = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 my @def_refs = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 my $isobsolete;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 while( $line = ( $self->_defs_io->_readline() ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 if ( $line !~ /\S/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 || $line =~ /^\s*!/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 elsif ( $line =~ /^\s*term:\s*(.+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 $self->_term( $1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 last if $self->_not_first_record();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 $next_term = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 $self->_not_first_record( TRUE );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 elsif ( $line =~ /^\s*[a-z]{1,8}id:\s*(.+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 $termid = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 elsif ( $line =~ /^\s*definition:\s*(.+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 $def = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 $isobsolete = 1 if index($def,"OBSOLETE") == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 elsif ( $line =~ /^\s*definition_reference:\s*(.+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 push( @def_refs, $1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 elsif ( $line =~ /^\s*comment:\s*(.+)/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 $comment = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 $self->_done( TRUE ) unless $line; # we'll come back until done
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 return $self->_create_ont_entry( $next_term, $termid, $def,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 $comment, \@def_refs, $isobsolete);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 } # _next_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 # Holds the GO engine to be parsed into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 sub _ont_engine {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 if ( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 $self->{ "_ont_engine" } = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 return $self->{ "_ont_engine" };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 } # _ont_engine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 # Used to create ontology terms.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 # Arguments: name, id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 sub _create_ont_entry {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 my ( $self, $name, $termid, $def, $cmt, $dbxrefs, $obsolete ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 if((!defined($obsolete)) && (index(lc($name),"obsolete") == 0)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 $obsolete = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 my $term = $self->term_factory->create_object(-name => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 -identifier => $termid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 -definition => $def,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 -comment => $cmt,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 -dblinks => $dbxrefs,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 -is_obsolete => $obsolete);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 return $term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 } # _create_ont_entry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 # Holds whether first record or not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 sub _not_first_record {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 if ( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 $self->{ "_not_first_record" } = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 return $self->{ "_not_first_record" };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 } # _not_first_record
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 # Holds whether done or not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 sub _done {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 if ( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 $self->{ "_done" } = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 return $self->{ "_done" };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 } # _done
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 # Holds a term.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 sub _term {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 if ( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 $self->{ "_term" } = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 return $self->{ "_term" };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 } # _term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799