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

Diff of /FigKernelScripts/sphinx_index_genome.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7, Mon Feb 14 22:47:40 2011 UTC revision 1.9, Wed May 18 18:49:26 2011 UTC
# Line 1  Line 1 
1  use Data::Dumper;  use Data::Dumper;
2    
3    use SeedSearch;
4    
5  use strict;  use strict;
6  use Encode;  use Encode;
7  use FIG;  use FIG;
8  my $fig = new FIG;  my $fig = new FIG;
9    
10    @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        @fields = qw(genome name taxonomy contigs);
24        $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  print <<END;  print <<END;
42  <?xml version="1.0" encoding="utf-8"?>  <?xml version="1.0" encoding="utf-8"?>
43  <sphinx:docset>  <sphinx:docset>
44  <sphinx:schema>  <sphinx:schema>
45  <sphinx:field name="fid"/>  END
46  <sphinx:field name="annotation"/>  print "<sphinx:field name=\"$_\" $attr_types{$_}/>\n" for @fields;
47  <sphinx:field name="genome"/>  print <<END;
 <sphinx:field name="alias"/>  
 <sphinx:field name="subsystem"/>  
48  </sphinx:schema>  </sphinx:schema>
49  END  END
50    
# Line 29  Line 60 
60      @genomes = $fig->genomes(1);      @genomes = $fig->genomes(1);
61  }  }
62    
63    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  #  #
78  # Ingest the subsystem index.  # Ingest the subsystem index.
79  #  #
80    
81    my $next_id = 1;
82    
83  for my $genome (@genomes)  for my $genome (@genomes)
84  {  {
85      print STDERR "$genome\n";      print STDERR "$genome\n";
86        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    
92            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        }
104        else
105        {
106      my %ss_info;      my %ss_info;
107    
108      my $sth = $fig->db_handle->{_dbh}->prepare(qq(SELECT i.protein, i.subsystem      my $sth = $fig->db_handle->{_dbh}->prepare(qq(SELECT i.protein, i.subsystem
# Line 50  Line 116 
116          $ss_info{$prot}->{$ss} = 1;          $ss_info{$prot}->{$ss} = 1;
117      }      }
118    
119      my $gs = $fig->genus_species($genome);          my $gs = escape($fig->genus_species($genome));
     $gs =~ s/&/&amp;/g;  
     $gs =~ s/</&lt;/g;  
     $gs =~ s/>/&gt;/g;  
120    
121      my $all_data = $fig->all_features_detailed_fast($genome);      my $all_data = $fig->all_features_detailed_fast($genome);
122    
# Line 70  Line 133 
133          # my @ss = $fig->peg_to_subsystems($fid, 1, 1);          # my @ss = $fig->peg_to_subsystems($fid, 1, 1);
134          my @ss = keys %{$ss_info{$fid}};          my @ss = keys %{$ss_info{$fid}};
135          @ss = map { defined($_) ? encode_utf8($_) : () } @ss;          @ss = map { defined($_) ? encode_utf8($_) : () } @ss;
136          my $ss = join("\n", map { s/_/ /g; $_ } @ss);              my $ss = escape(join("\n", map { s/_/ /g; $_ } @ss));
137          $ss =~ s/&/&amp;/g;  
138          $ss =~ s/</&lt;/g;              $func = defined($func) ? escape($func) : "";
139          $ss =~ s/>/&gt;/g;              my $efid = escape($fid);
   
         $func = defined($func) ? encode_utf8($func) : "";  
         $func =~ s/&/&amp;/g;  
         $func =~ s/</&lt;/g;  
         $func =~ s/>/&gt;/g;  
140    
141          my %aliases = map { $_ => 1 } split(",", $aliases);          my %aliases = map { $_ => 1 } split(",", $aliases);
142          map { $aliases{$_} = 1 } keys %{$ext_aliases{$fid}};          map { $aliases{$_} = 1 } keys %{$ext_aliases{$fid}};
# Line 86  Line 144 
144          my $alias_txt = "";          my $alias_txt = "";
145          if (@aliases)          if (@aliases)
146          {          {
147              $alias_txt = join("\n",                  $alias_txt = escape(join("\n",
148                                map { s/&/&amp;/g;                                map { s/&/&amp;/g;
149                                      s/</&lt;/g;                                      s/</&lt;/g;
150                                      s/>/&gt;/g;                                      s/>/&gt;/g;
151                                      $_ } @aliases);                                                 $_ } @aliases));
152          }          }
153          if ($fid =~ /^fig\|(\d+)\.(\d+)\.([^.]+)\.(\d+)$/)              my $docid = SeedSearch::fid_to_docid($fid);
         {  
             my ($g, $ext, $type, $num) = ($1, $2, $3, $4);  
             my $tnum = $tmap{$type};  
             my $enc = $g << 26 | $ext << 18 | $tnum << 16 | $num;  
154              print <<END;              print <<END;
155  <sphinx:document id="$enc">  <sphinx:document id="$docid">
 <fid>$fid</fid>  
 <annotation>$func</annotation>  
156  <genome>$genome $gs</genome>  <genome>$genome $gs</genome>
157    <fid>$efid</fid>
158    <annotation>$func</annotation>
159  <alias>$alias_txt</alias>  <alias>$alias_txt</alias>
160  <subsystem>$ss</subsystem>  <subsystem>$ss</subsystem>
161  </sphinx:document>  </sphinx:document>
# Line 110  Line 164 
164      }      }
165  }  }
166  print "</sphinx:docset>\n";  print "</sphinx:docset>\n";
167    
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    
177            my $contigs = escape(join(" ", $fig->all_contigs($g)));
178    
179            print "<sphinx:document id=\"$i\">\n";
180    
181            print "<genome>$g</genome>\n";
182            print "<name>$gs</name>\n";
183            print "<contigs>$contigs</contigs>\n";
184            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    }

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.9

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3