[Bio] / FigKernelPackages / MgRastSims.pm Repository:
ViewVC logotype

Annotation of /FigKernelPackages/MgRastSims.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download) (as text)

1 : redwards 1.1
2 :     use strict;
3 :     package MgRastSims;
4 :     use DBI;
5 :    
6 :     =pod
7 :    
8 :     =head1 MgRastSims
9 :    
10 :     A generic module to access the MG Rast Sims. This only really access the data and returns it in a couple of simple ways. Intended to simplify and clarify the data access for downstream analysis.
11 :    
12 :     =cut
13 :    
14 :    
15 :     my $self;
16 :    
17 :     END {
18 :     $self->{dbh}->disconnect if (defined $self->{dbh});
19 :     }
20 :    
21 :     sub new {
22 :     # connect to the database
23 :     my ($class) = @_;
24 :     # connect to database
25 :     my $dbh;
26 :     eval {
27 :    
28 :     my $dbms = $FIG_Config::mgrast_dbms;
29 :     my $host = $FIG_Config::mgrast_dbhost;
30 :     my $database = $FIG_Config::mgrast_db;
31 :     my $user = $FIG_Config::mgrast_dbuser;
32 :     my $password = $FIG_Config::mgrast_dbpass;
33 :    
34 :     if ($dbms eq 'Pg')
35 :     {
36 :     $dbh = DBI->connect("DBI:Pg:dbname=$database;host=$host", $user, $password,
37 :     { RaiseError => 1, AutoCommit => 0, PrintError => 0 }) ||
38 :     die "database connect error.";
39 :     }
40 :     elsif ($dbms eq 'mysql' or $dbms eq '') # Default to mysql
41 :     {
42 :     $dbh = DBI->connect("DBI:mysql:database=$database;host=$host", $user, $password,
43 :     { RaiseError => 1, AutoCommit => 0, PrintError => 0 }) ||
44 :     die "database connect error.";
45 :     }
46 :     else
47 :     {
48 :     die "MetagenomeAnalysis: unknown dbms '$dbms'";
49 :     }
50 :    
51 :     };
52 :     if ($@) {
53 :     warn "Unable to connect to metagenomics database: $@\n";
54 :     return undef;
55 :     }
56 :    
57 :     # create object
58 :     $self = {
59 :     dbh => $dbh,
60 :     };
61 :     bless $self, $class;
62 :    
63 :    
64 :     return $self;
65 :    
66 :     }
67 :    
68 :     =head1 query
69 :    
70 :     Execute an arbitrary SQL query. For example,
71 :    
72 :     $sims->query('select * from tax_sim_best_by_psc_3650 as t1, (select * from tax_sim_best_by_psc_3650) as t2 where t1.id1=t2.id1 AND t1.dbid=7 and t2.dbid=8;');
73 :    
74 :     =cut
75 :    
76 :     sub query {
77 :     my ($self, $query)=@_;
78 :    
79 :     my $exc = $self->{dbh}->prepare($query);
80 :     $exc->execute;
81 :     return $exc->fetchall_arrayref();
82 :     }
83 :    
84 :     =head1 num_subsystem_hits
85 :    
86 :     Get the number of unique sequences in a database.
87 :    
88 :     usage:
89 :     my $nhits = $mgrastsims->num_subsystem_hits($job, $id);
90 :     $job is the job number
91 :     $id is a boolean. If true, take the hits from the iden table (best hit sorted by percent identity), otherwise the default is to use the best hit by p-score
92 :    
93 :     =cut
94 :    
95 :     sub num_subsystem_hits {
96 :     my ($self, $job, $id)=@_;
97 :    
98 :     my $table = 'tax_sim_best_by_psc_'.$job;
99 :     if ($id) {$table = 'tax_sim_best_by_iden_'.$job};
100 :     my $q = "select count(distinct id1) from $table where dbid = 7 OR dbid = 9";
101 :     my $ref = $self->query($q);
102 :     return $ref->[0]->[0];
103 :     }
104 :    
105 :    
106 :     =head1 subsystem_hits
107 :    
108 :     Return all the hits for the subsystems database for a job. This is (currently) for SEED subsystems tax
109 :    
110 :     usage:
111 :     $mgrastsims->subsystem_hits($job, $id);
112 :    
113 :     $job is the job number
114 :     $id is a boolean. If true, take the hits from the iden table (best hit sorted by percent identity), otherwise the default is to use the best hit by p-score
115 :    
116 :     The elements of the array are :
117 :     dbid; id1; id2; iden; ali_ln; b1; e1; b2; e2; logpsc; bsc; tax_str; tax_group_1; tax_group_2; tax_group_3
118 :    
119 :     0: dbid
120 :     1: id1
121 :     2: id2
122 :     3: iden
123 :     4: ali_ln
124 :     5: b1
125 :     6: e1
126 :     7: b2
127 :     8: e2
128 :     9: logpsc
129 :     10: bsc
130 :     11: tax_str
131 :     12: tax_group_1
132 :     13: tax_group_2
133 :     14: tax_group_3
134 :    
135 :     =cut
136 :    
137 :     sub subsystem_hits {
138 :     my ($self, $job, $id)=@_;
139 :     my $res = $self->raw_subsystem_hits($job, $id);
140 :     map {
141 :     $_->[9] = $self->log2evalue($_->[9]);
142 :     $_->[11] = $self->tax_string($_->[11]);
143 :     $_->[12] = $self->tax_item($_->[12]);
144 :     $_->[13] = $self->tax_item($_->[13]);
145 :     $_->[14] = $self->tax_item($_->[14]);
146 :     } @$res;
147 :    
148 :     return $res;
149 :     }
150 :    
151 :    
152 :     =head1 raw_subsystem_hits
153 :    
154 :     This is the same as subsystem_hits, but the columns etc are not expanded
155 :    
156 :     =cut
157 :    
158 :    
159 :     sub raw_subsystem_hits {
160 :     my ($self, $job, $id)=@_;
161 :    
162 :     my $table = 'tax_sim_best_by_psc_'.$job;
163 :     if ($id) {$table = 'tax_sim_best_by_iden_'.$job};
164 :     my $q = "select * from $table where dbid = 7 OR dbid = 9";
165 :     return $self->query($q);
166 :     }
167 :    
168 :    
169 :     =head1 tax_string
170 :    
171 :     Take a string from the database and return the taxnomy or function that it represents. A tax string is something like
172 :    
173 :     1f:2d:'":3s
174 :    
175 :     =cut
176 :    
177 :     sub tax_string {
178 :     my ($self, $str)=@_;
179 :     my $tax;
180 :     map {$tax .= $self->tax_item($_). "; "} split /\:/, $str;
181 :     $tax =~ s/\; $//;
182 :     return $tax;
183 :     }
184 :    
185 :    
186 :     =head1 tax_item
187 :    
188 :     Take a sinlge taxonomy/function encoding, and return its user-readable name
189 :    
190 :     =cut
191 :    
192 :     sub tax_item {
193 :     my ($self, $id)=@_;
194 :     #print STDERR "Checking for $id\n";
195 :     my $exc = $self->{dbh}->prepare("select str from tax_item where dbkey = ?");
196 :     $exc->bind_param(1, $id);
197 :     $exc->execute || die $self->{dbh}->errstr;
198 :     return $exc->fetchall_arrayref()->[0]->[0];
199 :     }
200 :    
201 :    
202 :    
203 :     =head1 evalue2log
204 :    
205 :     return the log of the evalue
206 :    
207 :     =cut
208 :    
209 :     sub evalue2log {
210 :     return 10 * (log($_[1]) / log(10));
211 :     }
212 :    
213 :     =head1 log2evalue
214 :    
215 :     return the evalue for a log
216 :    
217 :     =cut
218 :    
219 :     sub log2evalue {
220 :     return 10**($_[1]/10);
221 :     }
222 :    
223 :    
224 :    
225 :    
226 :    
227 :     1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3