annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/OntologyTermAdaptor.pm @ 2:a5976b2dce6f

changing defualt values for ensembl database
author mahtabm
date Thu, 11 Apr 2013 17:15:42 +1000
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::DBSQL::OntologyTermAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 my $goa =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 $registry->get_adaptor( 'Multi', 'Ontology', 'OntologyTerm' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my $term = $goa->fetch_by_accession('GO:0010885');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 my @children = @{ $goa->fetch_all_by_parent_term($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 my @descendants = @{ $goa->fetch_all_by_ancestor_term($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 my @parents = @{ $goa->fetch_all_by_child_term($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 my @ancestors = @{ $goa->fetch_all_by_descendant_term($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my %ancestor_chart = %{ $goa->_fetch_ancestor_chart($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 An abstract adaptor class for fetching ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 terms, creates Bio::EnsEMBL::OntologyTerm objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 package Bio::EnsEMBL::DBSQL::OntologyTermAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use DBI qw( :sql_types );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use Bio::EnsEMBL::Utils::Exception qw( throw );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use Bio::EnsEMBL::Utils::Scalar qw( assert_ref );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 use Bio::EnsEMBL::OntologyTerm;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 use base qw( Bio::EnsEMBL::DBSQL::BaseAdaptor );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 =head2 fetch_all_by_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 Arg [1] : String, name of term, or SQL pattern
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Arg [2] : (optional) String, name of ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Description : Fetches ontology term(s) given a name, a synonym, or a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 SQL pattern like "%splice_site%"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 my ($term) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 @{ $ot_adaptor->fetch_by_name( 'DNA_binding_site', 'SO' ) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 # Will find terms in both SO and GO:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 my @terms = @{ $ot_adaptor->fetch_by_name('%splice_site%') };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Return type : listref of Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 sub fetch_all_by_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 my ( $this, $pattern, $ontology ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 SELECT DISTINCT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 term.accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 term.subsets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 ontology.namespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 FROM ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 JOIN term USING (ontology_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 LEFT JOIN synonym USING (term_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 WHERE ( term.name LIKE ? OR synonym.name LIKE ? ));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 if ( defined($ontology) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 $statement .= " AND ontology.name = ?";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 $sth->bind_param( 1, $pattern, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $sth->bind_param( 2, $pattern, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 if ( defined($ontology) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 $sth->bind_param( 3, $ontology, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 my ( $dbid, $accession, $name, $definition, $subsets, $namespace );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 $sth->bind_columns(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 \( $dbid, $accession, $name, $definition, $subsets, $namespace ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my @terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 push @terms,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 '-namespace' => $namespace,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 '-definition' => $definition, );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 return \@terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 } ## end sub fetch_all_by_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 =head2 fetch_by_accession
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Arg [1] : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Description : Fetches an ontology term given an accession.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 my $term = $ot_adaptor->fetch_by_accession('GO:0030326');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Return type : Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 sub fetch_by_accession {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 my ( $this, $accession ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 SELECT term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 term.subsets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 ontology.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 ontology.namespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 FROM ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 JOIN term USING (ontology_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 WHERE term.accession = ?);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $sth->bind_param( 1, $accession, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 my ( $dbid, $name, $definition, $subsets, $ontology, $namespace );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $sth->bind_columns(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 \( $dbid, $name, $definition, $subsets, $ontology, $namespace ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $sth->fetch();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 my $term =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 '-ontology' => $ontology,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 '-namespace' => $namespace,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 '-definition' => $definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 '-synonyms' => $this->_fetch_synonyms_by_dbID($dbid)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 return $term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 } ## end sub fetch_by_accession
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 =head2 fetch_all_by_parent_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Arg [1] : Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 The term whose children terms should be fetched.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 Description : Given a parent ontology term, returns a list of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 its immediate children terms.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 my @children =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 @{ $ot_adaptor->fetch_all_by_parent_term($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 Return type : listref of Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 sub fetch_all_by_parent_term {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 my ( $this, $term ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 assert_ref( $term, 'Bio::EnsEMBL::OntologyTerm' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 my @terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 if ( !$term->{'child_terms_fetched'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 SELECT child_term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 child_term.accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 child_term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 child_term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 child_term.subsets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 rt.name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 FROM term child_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 JOIN relation ON (relation.child_term_id = child_term.term_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 JOIN relation_type rt USING (relation_type_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 WHERE relation.parent_term_id = ?);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $sth->bind_param( 1, $term->dbID(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 my ( $dbid, $accession, $name, $definition, $subsets, $relation );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 $sth->bind_columns(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 \( $dbid, $accession, $name, $definition, $subsets, $relation ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 my $child_term =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 '-ontology' => $term->{'ontology'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 '-namespace' => $term->{'namespace'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 '-definition' => $definition, );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 push( @terms, $child_term );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 push( @{ $term->{'children'}{$relation} }, $child_term );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $term->{'child_terms_fetched'} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 foreach my $relation ( values( %{ $term->{'children'} } ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 push( @terms, @{$relation} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 return \@terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 } ## end sub fetch_all_by_parent_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 =head2 fetch_all_by_ancestor_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 Arg [1] : Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 The term whose descendant terms should be fetched.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 Description : Given a parent ontology term, returns a list of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 all its descendant terms, down to and including
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 any leaf terms. Relations of the type 'is_a' and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 'part_of' are followed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 my @descendants =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 @{ $ot_adaptor->fetch_all_by_ancestor_term($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 Return type : listref of Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 sub fetch_all_by_ancestor_term {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my ( $this, $term ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 assert_ref( $term, 'Bio::EnsEMBL::OntologyTerm' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 SELECT DISTINCT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 child_term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 child_term.accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 child_term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 child_term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 child_term.subsets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 FROM term child_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 JOIN closure ON (closure.child_term_id = child_term.term_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 WHERE closure.parent_term_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 AND closure.distance > 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 ORDER BY closure.distance, child_term.accession);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $sth->bind_param( 1, $term->dbID(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 my ( $dbid, $accession, $name, $definition, $subsets );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $sth->bind_columns(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 \( $dbid, $accession, $name, $definition, $subsets ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 my @terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 push( @terms,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 '-ontology' => $term->{'ontology'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 '-namespace' => $term->{'namespace'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 '-definition' => $definition, ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 return \@terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 } ## end sub fetch_all_by_ancestor_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 =head2 fetch_all_by_child_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 Arg [1] : Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 The term whose parent terms should be fetched.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 Description : Given a child ontology term, returns a list of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 its immediate parent terms.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 my @parents = @{ $ot_adaptor->fetch_all_by_child_term($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Return type : listref of Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 sub fetch_all_by_child_term {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 my ( $this, $term ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 assert_ref( $term, 'Bio::EnsEMBL::OntologyTerm' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 my @terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 if ( !$term->{'parent_terms_fetched'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 SELECT parent_term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 parent_term.accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 parent_term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 parent_term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 parent_term.subsets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 rt.name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 FROM term parent_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 JOIN relation ON (relation.parent_term_id = parent_term.term_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 JOIN relation_type rt USING (relation_type_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 WHERE relation.child_term_id = ?);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $sth->bind_param( 1, $term->dbID(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 my ( $dbid, $accession, $name, $definition, $subsets, $relation );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 $sth->bind_columns(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 \( $dbid, $accession, $name, $definition, $subsets, $relation ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 my $parent_term =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 '-ontology' => $term->{'ontology'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 '-namespace' => $term->{'namespace'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 '-definition' => $definition, );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 push( @terms, $parent_term );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 push( @{ $term->{'parents'}{$relation} }, $parent_term );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $term->{'parent_terms_fetched'} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 foreach my $relation ( values( %{ $term->{'parents'} } ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 push( @terms, @{$relation} );
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 return \@terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 } ## end sub fetch_all_by_child_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 =head2 fetch_all_by_descendant_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 Arg [1] : Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 The term whose ancestor terms should be fetched.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 Arg [2] : (optional) String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 The subset within the ontolgy to which the query
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 should be restricted. The subset may be specified as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 a SQL pattern, e.g., "%goslim%" (but "goslim%" might
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 not do what you expect), or as a specific subset name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 e.g., "goslim_generic".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 Arg [3] : (optional) Boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 If true (non-zero), only return the closest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 term(s). If this argument is true, and the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 previous argument is left undefined, this method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 will return the parent(s) of the given term.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 Arg [4] : (optional) Boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 If true we will allow the retrieval of terms whose distance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 to the current term is 0. If false then we will only return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 those which are above the current term in the ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 Description : Given a child ontology term, returns a list of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 all its ancestor terms, up to and including any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 root term. Relations of the type 'is_a' and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 'part_of' are followed. Optionally, only terms in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 a given subset of the ontology may be returned,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 and additionally one may ask to only get the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 closest term(s) to the given child term.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 my @ancestors =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 @{ $ot_adaptor->fetch_all_by_descendant_term($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Return type : listref of Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 sub fetch_all_by_descendant_term {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 my ( $this, $term, $subset, $closest_only, $allow_zero_distance ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 assert_ref( $term, 'Bio::EnsEMBL::OntologyTerm' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 $closest_only ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 SELECT DISTINCT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 parent_term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 parent_term.accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 parent_term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 parent_term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 parent_term.subsets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 closure.distance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 FROM term parent_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 JOIN closure ON (closure.parent_term_id = parent_term.term_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 WHERE closure.child_term_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 AND closure.distance > ?);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 if ( defined($subset) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 if ( index( $subset, '%' ) != -1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 $statement .= q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 AND parent_term.subsets LIKE ?);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $statement .= q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 AND FIND_IN_SET(?, parent_term.subsets) > 0);
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 $statement .= q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 ORDER BY closure.distance, parent_term.accession);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 $sth->bind_param( 1, $term->dbID(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 my $query_distance = ($allow_zero_distance) ? -1 : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 $sth->bind_param( 2, $query_distance, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 if ( defined($subset) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $sth->bind_param( 3, $subset, SQL_VARCHAR );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 my ( $dbid, $accession, $name, $definition, $subsets, $distance );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 $sth->bind_columns(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 \( $dbid, $accession, $name, $definition, $subsets, $distance ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 my @terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 my $min_distance;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 $min_distance ||= $distance;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 if ( !$closest_only || $distance == $min_distance ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 push( @terms,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 '-ontology' => $term->{'ontology'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 '-namespace' => $term->{'namespace'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 '-definition' => $definition, ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 last;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 return \@terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 } ## end sub fetch_all_by_descendant_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 sub _fetch_synonyms_by_dbID {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 my ( $this, $dbID ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 SELECT synonym.name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 FROM synonym
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 WHERE synonym.term_id = ?);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 $sth->bind_param( 1, $dbID, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 my $synonym;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 $sth->bind_col( 1, \$synonym );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 my @synonyms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 push( @synonyms, $synonym );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 return \@synonyms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 =head2 _fetch_ancestor_chart
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Arg [1] : Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 The term whose ancestor terms should be fetched.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 Description : Given a child ontology term, returns a hash
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 structure containing its ancestor terms, up to and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 including any root term. Relations of the type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 'is_a' and 'part_of' are included.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 my %chart = %{ $ot_adaptor->_fetch_ancestor_chart($term) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 Return type : A reference to a hash structure like this:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 'GO:XXXXXXX' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 'term' => # ref to Bio::EnsEMBL::OntologyTerm object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 'is_a' => [...], # listref of Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 'part_of' => [...], # listref of Bio::EnsEMBL::OntologyTerm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 'GO:YYYYYYY' => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 # Similarly for all ancestors,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 # and including the query term itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 sub _fetch_ancestor_chart {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 my ( $this, $term ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 assert_ref( $term, 'Bio::EnsEMBL::OntologyTerm' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 SELECT subparent_term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 parent_term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 relation_type.name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 FROM closure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 JOIN relation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 ON (relation.parent_term_id = closure.parent_term_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 AND relation.child_term_id = closure.subparent_term_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 JOIN relation_type USING (relation_type_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 JOIN term subparent_term
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 ON (subparent_term.term_id = closure.subparent_term_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 JOIN term parent_term ON (parent_term.term_id = closure.parent_term_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 WHERE closure.child_term_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 ORDER BY closure.distance);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 $sth->bind_param( 1, $term->dbID(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 my ( $subparent_id, $parent_id, $relation );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 $sth->bind_columns( \( $subparent_id, $parent_id, $relation ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 my %id_chart;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 my %acc_chart;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 if ( !exists( $id_chart{$parent_id} ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 $id_chart{$parent_id} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 push( @{ $id_chart{$subparent_id}{$relation} }, $parent_id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 my @terms = @{ $this->fetch_all_by_dbID_list( [ keys(%id_chart) ] ) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 foreach my $term (@terms) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 $id_chart{ $term->dbID() }{'term'} = $term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 $acc_chart{ $term->accession() }{'term'} = $term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 foreach my $term (@terms) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 my $accession = $term->accession();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 my $dbID = $term->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 foreach my $relation ( keys( %{ $id_chart{$dbID} } ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 if ( $relation eq 'term' ) { next }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 foreach my $id ( @{ $id_chart{$dbID}{$relation} } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 push( @{ $acc_chart{$accession}{$relation} },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 $id_chart{$id}{'term'} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 return \%acc_chart;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 } ## end sub _fetch_ancestor_chart
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 #-----------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 # Useful public methods that implement functionality not properly
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 # provided by the parent class Bio::EnsEMBL::DBSQL::BaseAdaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 sub fetch_by_dbID {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 my ( $this, $dbid ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 SELECT term.accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 term.subsets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 ontology.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 ontology.namespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 FROM ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 JOIN term USING (ontology_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 WHERE term.term_id = ?);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 $sth->bind_param( 1, $dbid, SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 my ( $accession, $name, $definition, $subsets, $ontology,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 $namespace );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 $sth->bind_columns(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 \( $accession, $name, $definition, $subsets, $ontology, $namespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 $sth->fetch();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 my $term =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 '-ontology' => $ontology,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 '-namespace' => $namespace,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 '-definition' => $definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 '-synonyms' => $this->_fetch_synonyms_by_dbID($dbid)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 return $term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 } ## end sub fetch_by_dbID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 sub fetch_all_by_dbID_list {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 my ( $this, $dbids ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 if ( !@{$dbids} ) { return [] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 my $stmt = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 SELECT term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 term.accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 term.subsets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 ontology.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 ontology.namespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 FROM ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 JOIN term USING (ontology_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 WHERE term.term_id IN (%s));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 my $statement = sprintf(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 $stmt,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 join(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 ',',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 $this->dbc()->db_handle()->quote( $_, SQL_INTEGER )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 } @{$dbids} ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 my ( $dbid, $accession, $name, $definition, $subsets, $ontology,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 $namespace );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 $sth->bind_columns( \( $dbid, $accession, $name, $definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 $subsets, $ontology, $namespace ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 my @terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 push( @terms,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 '-ontology' => $ontology,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 '-namespace' => $namespace,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 '-definition' => $definition, ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 return \@terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 } ## end sub fetch_all_by_dbID_list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 sub fetch_all {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 my ($this) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 my $statement = q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 SELECT term.term_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 term.accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 term.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 term.definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 term.subsets,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 ontology.name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 ontology.namespace
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 FROM ontology
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 JOIN term USING (ontology_id));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 my $sth = $this->prepare($statement);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 my ( $dbid, $accession, $name, $definition, $subsets, $ontology,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 $namespace );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 $sth->bind_columns( \( $dbid, $accession, $name, $definition,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 $subsets, $ontology, $namespace ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 my @terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 $subsets ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 push( @terms,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 Bio::EnsEMBL::OntologyTerm->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 '-dbid' => $dbid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 '-adaptor' => $this,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 '-accession' => $accession,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 '-ontology' => $ontology,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776 '-namespace' => $namespace,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 '-subsets' => [ split( /,/, $subsets ) ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 '-name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 '-definition' => $definition ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 return \@terms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 } ## end sub fetch_all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 1;