[Bio] / FigKernelScripts / sphinx_index_genome.pl Repository:
ViewVC logotype

Annotation of /FigKernelScripts/sphinx_index_genome.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : olson 1.7 use Data::Dumper;
2 : olson 1.1
3 : olson 1.8 use SeedSearch;
4 :    
5 : olson 1.1 use strict;
6 :     use Encode;
7 :     use FIG;
8 :     my $fig = new FIG;
9 :    
10 : olson 1.8 @ARGV == 1 or die "Usage: sphinx_index_genome function|attrib|subsystem\n";
11 :    
12 :     my $which = shift;
13 :    
14 :     my @fields;
15 :     my %attr_types;
16 :     if ($which eq 'function')
17 :     {
18 :     @fields = qw(annotation fid genome);
19 :     $attr_types{$_} = "attr=\"string\"" for @fields;
20 :     }
21 :     elsif ($which eq 'genome')
22 :     {
23 : olson 1.9 @fields = qw(genome name taxonomy contigs);
24 : olson 1.8 $attr_types{$_} = "attr=\"string\"" for qw(genome name);
25 :     }
26 :     elsif ($which eq 'attrib')
27 :     {
28 :     @fields = qw(genome alias subsystem annotation fid);
29 :     $attr_types{$_} = 'attr="string"' foreach qw(annotation);
30 :     }
31 :     elsif ($which eq 'subsystem')
32 :     {
33 :     @fields = qw(subsystem curator version classification);
34 :     $attr_types{$_} = "attr=\"string\"" for @fields;
35 :     }
36 :     else
37 :     {
38 :     die "Unknown type $which\n";
39 :     }
40 :    
41 : olson 1.1 print <<END;
42 :     <?xml version="1.0" encoding="utf-8"?>
43 :     <sphinx:docset>
44 :     <sphinx:schema>
45 : olson 1.8 END
46 :     print "<sphinx:field name=\"$_\" $attr_types{$_}/>\n" for @fields;
47 :     print <<END;
48 : olson 1.1 </sphinx:schema>
49 :     END
50 :    
51 :     my %tmap = (peg => 1, rna => 2);
52 :    
53 : olson 1.7 my @genomes;
54 :     if (my $glist = $ENV{SPHINX_INDEX_ONLY})
55 :     {
56 :     @genomes = split(/,/, $glist);
57 :     }
58 :     else
59 :     {
60 : olson 1.10 @genomes = $fig->genomes();
61 : olson 1.7 }
62 :    
63 : olson 1.8 if ($which eq 'subsystem')
64 :     {
65 :     &index_subsystems;
66 :     print "</sphinx:docset>\n";
67 :     exit;
68 :     }
69 :     elsif ($which eq 'genome')
70 :     {
71 :     &index_genomes(\@genomes);
72 :     print "</sphinx:docset>\n";
73 :     exit;
74 :     }
75 :    
76 :    
77 : olson 1.7 #
78 :     # Ingest the subsystem index.
79 :     #
80 :    
81 : olson 1.8 my $next_id = 1;
82 :    
83 : olson 1.7 for my $genome (@genomes)
84 : olson 1.1 {
85 :     print STDERR "$genome\n";
86 : olson 1.8 my $gs = escape($fig->genus_species($genome));
87 :     if ($which eq 'function')
88 :     {
89 :     my @fids = $fig->all_features($genome);
90 :     my $fns = $fig->function_of_bulk(\@fids);
91 : olson 1.7
92 : olson 1.8 for my $fid (keys %$fns)
93 :     {
94 :     my $fn = escape($fns->{$fid});
95 :     my $docid = SeedSearch::fid_to_docid($fid);
96 :     print <<END;
97 :     <sphinx:document id="$docid">
98 :     <genome>$gs</genome>
99 :     <annotation>$fn</annotation>
100 :     </sphinx:document>
101 :     END
102 :     }
103 : olson 1.7 }
104 : olson 1.8 else
105 : olson 1.1 {
106 : olson 1.8 my %ss_info;
107 : olson 1.1
108 : olson 1.8 my $sth = $fig->db_handle->{_dbh}->prepare(qq(SELECT i.protein, i.subsystem
109 :     FROM subsystem_index i LEFT JOIN aux_roles a ON i.role = a.role
110 :     WHERE i.protein LIKE 'fig|$genome.peg.%' AND a.subsystem IS NULL),
111 :     { mysql_use_result => 1});
112 :     $sth->execute();
113 :     while (my $ent = $sth->fetchrow_arrayref())
114 : olson 1.5 {
115 : olson 1.8 my($prot, $ss) = @$ent;
116 :     $ss_info{$prot}->{$ss} = 1;
117 : olson 1.5 }
118 : olson 1.8
119 :     my $gs = escape($fig->genus_species($genome));
120 :    
121 :     my $all_data = $fig->all_features_detailed_fast($genome);
122 :    
123 :     my $ext_aliases_l = $fig->db_handle->SQL(qq(SELECT id, alias
124 :     FROM ext_alias
125 :     WHERE id like 'fig|${genome}.%'));
126 :     my %ext_aliases;
127 :     map { $ext_aliases{$_->[0]}->{$_->[1]}++ } @$ext_aliases_l;
128 :    
129 :     for my $feature (@$all_data)
130 : olson 1.1 {
131 : olson 1.8 my($fid, $loc, $aliases, $type, $b, $e, $func, $who) = @$feature;
132 :    
133 :     # my @ss = $fig->peg_to_subsystems($fid, 1, 1);
134 :     my @ss = keys %{$ss_info{$fid}};
135 :     @ss = map { defined($_) ? encode_utf8($_) : () } @ss;
136 :     my $ss = escape(join("\n", map { s/_/ /g; $_ } @ss));
137 :    
138 :     $func = defined($func) ? escape($func) : "";
139 :     my $efid = escape($fid);
140 :    
141 :     my %aliases = map { $_ => 1 } split(",", $aliases);
142 :     map { $aliases{$_} = 1 } keys %{$ext_aliases{$fid}};
143 :     my @aliases = keys %aliases;
144 :     my $alias_txt = "";
145 :     if (@aliases)
146 :     {
147 :     $alias_txt = escape(join("\n",
148 :     map { s/&/&amp;/g;
149 :     s/</&lt;/g;
150 :     s/>/&gt;/g;
151 :     $_ } @aliases));
152 :     }
153 :     my $docid = SeedSearch::fid_to_docid($fid);
154 : olson 1.1 print <<END;
155 : olson 1.8 <sphinx:document id="$docid">
156 :     <genome>$genome $gs</genome>
157 :     <fid>$efid</fid>
158 : olson 1.1 <annotation>$func</annotation>
159 : olson 1.6 <alias>$alias_txt</alias>
160 : olson 1.5 <subsystem>$ss</subsystem>
161 : olson 1.1 </sphinx:document>
162 :     END
163 :     }
164 :     }
165 :     }
166 :     print "</sphinx:docset>\n";
167 : olson 1.8
168 :     sub index_genomes
169 :     {
170 :     my($genomes) = @_;
171 :     my $i = 1;
172 :     for my $g (@$genomes)
173 :     {
174 :     my $gs = escape($fig->genus_species($g));
175 :     my $tax =escape($fig->taxonomy_of($g));
176 : olson 1.9
177 :     my $contigs = escape(join(" ", $fig->all_contigs($g)));
178 :    
179 : olson 1.8 print "<sphinx:document id=\"$i\">\n";
180 :    
181 :     print "<genome>$g</genome>\n";
182 :     print "<name>$gs</name>\n";
183 : olson 1.9 print "<contigs>$contigs</contigs>\n";
184 : olson 1.8 print "<taxonomy>$tax</taxonomy>\n";
185 :     print "</sphinx:document>\n";
186 :     $i++;
187 :     }
188 :     }
189 :    
190 :     sub index_subsystems
191 :     {
192 :     my $i = 1;
193 :     my @ss = $fig->all_subsystems_detailed();
194 :     for my $ent (@ss)
195 :     {
196 :     print "<sphinx:document id=\"$i\">\n";
197 :     $ent->{subsystem} =~ s/_/ /g;
198 :     for my $f (@fields)
199 :     {
200 :     print "<$f>" . escape($ent->{$f}) . "</$f>\n";
201 :     }
202 :     print "</sphinx:document>\n";
203 :     $i++;
204 :     }
205 :     }
206 :    
207 :     sub escape
208 :     {
209 :     my($s) = @_;
210 :     return "" unless defined($s);
211 :     $s = encode_utf8($s);
212 :     $s =~ s/&/&amp;/g;
213 :     $s =~ s/</&lt;/g;
214 :     $s =~ s/>/&gt;/g;
215 :     return $s;
216 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3