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

Diff of /FigKernelScripts/load_features.pl

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

revision 1.14, Tue Jan 4 22:28:29 2005 UTC revision 1.20, Mon Dec 5 18:56:37 2005 UTC
# Line 1  Line 1 
1  # -*- perl -*-  # -*- perl -*-
2    #
3    # Copyright (c) 2003-2006 University of Chicago and Fellowship
4    # for Interpretations of Genomes. All Rights Reserved.
5    #
6    # This file is part of the SEED Toolkit.
7    #
8    # The SEED Toolkit is free software. You can redistribute
9    # it and/or modify it under the terms of the SEED Toolkit
10    # Public License.
11    #
12    # You should have received a copy of the SEED Toolkit Public License
13    # along with this program; if not write to the University of Chicago
14    # at info@ci.uchicago.edu or the Fellowship for Interpretation of
15    # Genomes at veronika@thefig.info or download a copy from
16    # http://www.theseed.org/LICENSE.TXT.
17    #
18    
19    
20  use strict;  use strict;
21  use FIG;  use FIG;
22  my $fig = new FIG;  my $fig = new FIG;
23    
24  use DBrtns;  use Tracer;
   
25    
26    Trace("Preparing to load features.") if T(2);
27    my ($mode, @genomes) = FIG::parse_genome_args(@ARGV);
28  my $temp_dir = "$FIG_Config::temp";  my $temp_dir = "$FIG_Config::temp";
29  my($organisms_dir) = "$FIG_Config::organisms";  my $organisms_dir = "$FIG_Config::organisms";
30    
31  my($genome,@types,$type,$id,$loc,@aliases,$aliases,$contig);  my($genome,@types,$type,$id,$loc,@aliases,$aliases,$contig);
32    
33  # usage: load_features [G1 G2 G3 ... ]  # usage: load_features [G1 G2 G3 ... ]
34    
35  open(REL,">$temp_dir/tmpfeat$$") || die "could not open $temp_dir/tmpfeat$$";  Open(\*REL, ">$temp_dir/tmpfeat$$");
36  open(ALIAS,"| sort -u > $temp_dir/tmpalias$$") || die "could not open $temp_dir/tmpalias$$";  Open(\*ALIAS, "| sort -T $temp_dir -u > $temp_dir/tmpalias$$");
   
 my $dbf = $fig->{_dbf};  
37    
38    
39    if ($mode eq 'all') {
 my @genomes;  
 if (@ARGV == 0)  
 {  
     $dbf->drop_table( tbl => "features" );  
     $dbf->drop_table( tbl => "ext_alias" );  
   
     $dbf->create_table( tbl => 'ext_alias',  
                         flds => "id varchar(32), alias varchar(32), genome varchar(16)"  
                         );  
   
     if ($FIG_Config::dbms eq "Pg")  
     {  
         $dbf->create_table( tbl  => "features",  
                             flds => "id varchar(32), idN INTEGER, type varchar(16),genome varchar(16),"  .  
                                     "location varchar(5000),"  .  
                                     "contig varchar(96), minloc INTEGER, maxloc INTEGER,"  .  
                                     "aliases TEXT"  
                             );  
     }  
     elsif ($FIG_Config::dbms eq "mysql")  
     {  
         $dbf->create_table( tbl  => "features",  
                             flds => "id varchar(32), idN INTEGER, type varchar(16),genome varchar(16),"  .  
                                     "location TEXT,"  .  
                                     "contig varchar(96), minloc INTEGER, maxloc INTEGER,"  .  
                                     "aliases TEXT"  
                             );  
     }  
   
     @genomes = $fig->genomes;  
40    
41      # Here we extract external aliases from the peg.synonyms table, when they can be inferred      # Here we extract external aliases from the peg.synonyms table, when they can be inferred
42      # accurately.      # accurately.
43      open(SYN,"<$FIG_Config::global/peg.synonyms") || die "could not open $FIG_Config::global/peg.synonyms";          Trace("Extracting external aliases from the peg.synonyms table.") if T(2);
44        open(\*SYN, "<$FIG_Config::global/peg.synonyms");
45      while (defined($_ = <SYN>))      while (defined($_ = <SYN>))
46      {      {
47          chop;          chop;
# Line 74  Line 61 
61              }              }
62          }          }
63    
         my $x;  
64          foreach $x (@fig)          foreach $x (@fig)
65          {          {
66              my($peg,$peg_ln) = @$x;              my($peg,$peg_ln) = @$x;
# Line 84  Line 70 
70                  if ((@fig == 1) || ($peg_ln == $_->[1]))                  if ((@fig == 1) || ($peg_ln == $_->[1]))
71                  {                  {
72                      print ALIAS "$peg\t$_->[0]\t$genome\n";                      print ALIAS "$peg\t$_->[0]\t$genome\n";
73                      print STDERR "$peg\t$_->[0]\t$genome\n";                                          Trace("Alias record $peg, $_->[0] for $genome.") if T(4);
74                  }                  }
75              }              }
76          }          }
77      }      }
78      close(SYN);      close(SYN);
79  }  }
 else  
 {  
     @genomes = @ARGV;  
     foreach $genome (@genomes)  
     {  
         $dbf->SQL("DELETE FROM features WHERE ( genome = \'$genome\' )");  
         $dbf->SQL("DELETE FROM ext_alias WHERE ( genome = \'$genome\' )");  
     }  
 }  
   
 my $changes = {};  
 if (open(TMP,"<$FIG_Config::global/changed.location.features"))  
 {  
     while ($_ = <TMP>)  
     {  
         if ($_ =~ /^(fig\|\d+\.\d+\.[a-zA-Z]+\.\d+)/)  
         {  
             $changes->{$1}++;  
         }  
     }  
     close(TMP);  
 }  
80    
81  foreach $genome (@genomes)  foreach $genome (@genomes)
82  {  {
83            Trace("Processing $genome.") if T(3);
84      opendir(FEAT,"$organisms_dir/$genome/Features")      opendir(FEAT,"$organisms_dir/$genome/Features")
85          || die "could not open $genome/Features";          || die "could not open $genome/Features";
86      @types = grep { $_ =~ /^[a-zA-Z]+$/ } readdir(FEAT);      @types = grep { $_ =~ /^[a-zA-Z]+$/ } readdir(FEAT);
# Line 126  Line 91 
91          if ((-s "$organisms_dir/$genome/Features/$type/tbl") &&          if ((-s "$organisms_dir/$genome/Features/$type/tbl") &&
92              open(TBL,"<$organisms_dir/$genome/Features/$type/tbl"))              open(TBL,"<$organisms_dir/$genome/Features/$type/tbl"))
93          {          {
94  #           print STDERR "loading $genome/Features/$type/tbl\n";              Trace("Loading $genome/Features/$type/tbl") if T(4);
95              while (defined($_ = <TBL>))              my @tbl = <TBL>;
96                close(TBL);
97                my %seen;
98    
99                while ($_ = pop @tbl)
100              {              {
101                  chop;                  chop;
102                  ($id,$loc,@aliases) = split(/\t/,$_);                  ($id,$loc,@aliases) = split(/\t/,$_);
103    
104                  if ($id && ($_ = $changes->{$id}))   # check for obsolete entries due to location changes                  if ($id && (! $seen{$id}))
                 {  
                     $changes->{$id}--;  
                     next;  
                 }  
   
                 if ($id)  
105                  {                  {
106                        $seen{$id} = 1;
107                      my($minloc,$maxloc);                      my($minloc,$maxloc);
108                      if ($loc)                      if ($loc)
109                      {                      {
# Line 162  Line 126 
126                          my $alias;                          my $alias;
127                          foreach $alias (@aliases)                          foreach $alias (@aliases)
128                          {                          {
129                              if ($alias =~ /^(NP_|gi\||sp\|\tr\||kegg\||uni\|)/)                              if ($alias =~ /^([NXYZA]P_|gi\||sp\|\tr\||kegg\||uni\|)/)
130                              {                              {
131    
132                                  print ALIAS "$id\t$alias\t$genome\tOVERRIDE\n";                                  print ALIAS "$id\t$alias\t$genome\tOVERRIDE\n";
133                                  print STDERR "$id\t$alias\t$genome\tOVERRIDE\n";                                  Trace("$id override alias $alias for $genome") if T(4);
134                              }                              }
135                          }                          }
136                      }                      }
# Line 182  Line 146 
146                      }                      }
147                  }                  }
148              }              }
             close(TBL);  
149          }          }
150      }      }
151  }  }
152  close(REL);  close(REL);
153  close(ALIAS);  close(ALIAS);
154  open(ALIASIN,"<$temp_dir/tmpalias$$") || die "could not open $temp_dir/tmpalias$$";  Open(\*ALIASIN, "<$temp_dir/tmpalias$$");
155  open(ALIASOUT,">$temp_dir/tmpalias$$.1") || die "could not open $temp_dir/tmpalias$$.1";  Open(\*ALIASOUT, ">$temp_dir/tmpalias$$.1");
156    Trace("Parsing alias file.") if T(2);
157  $_ = <ALIASIN>;  $_ = <ALIASIN>;
158  while ($_ && ($_ =~ /^(\S+)/))  while ($_ && ($_ =~ /^(\S+)/))
159  {  {
# Line 223  Line 187 
187  close(ALIASOUT);  close(ALIASOUT);
188  unlink("$temp_dir/tmpalias$$");  unlink("$temp_dir/tmpalias$$");
189    
190  $dbf->load_table( tbl => "features",  $fig->reload_table($mode, 'features',
191                    file => "$temp_dir/tmpfeat$$" );                                     "id varchar(32), idN INTEGER, type varchar(16),genome varchar(16),"  .
192                                        "location TEXT,"  .
193  $dbf->load_table( tbl => "ext_alias",                                      "contig varchar(96), minloc INTEGER, maxloc INTEGER,"  .
194                    file => "$temp_dir/tmpalias$$.1" );                                      "aliases TEXT",
195                                            { features_id_ix => "id", features_org_ix => "genome",
196                                              features_type_ix => "type", features_beg_ix => "genome, contig, minloc" },
197                                            "$temp_dir/tmpfeat$$", \@genomes);
198    unlink("$temp_dir/tmpfeat$$");
199    
200  if (@ARGV == 0)  $fig->reload_table($mode, 'ext_alias',
201  {                                          "id varchar(32), alias varchar(32), genome varchar(16)",
202      $dbf->create_index( idx  => "ext_alias_alias_ix",                                          { ext_alias_alias_ix => "alias", ext_alias_genome_ix => "genome",
203                          tbl  => "ext_alias",                                            ext_alias_ix_id => "id" },
204                          type => "btree",                                          "$temp_dir/tmpalias$$.1", \@genomes );
                         flds => "alias" );  
   
     $dbf->create_index( idx  => "ext_alias_genome_ix",  
                         tbl  => "ext_alias",  
                         type => "btree",  
                         flds => "genome" );  
   
     $dbf->create_index( idx  => "ext_alias_id_ix",  
                         tbl  => "ext_alias",  
                         type => "btree",  
                         flds => "id" );  
   
     $dbf->create_index( idx  => "features_id_ix",  
                         tbl  => "features",  
                         type => "btree",  
                         flds => "id" );  
     $dbf->create_index( idx  => "features_org_ix",  
                         tbl  => "features",  
                         type => "btree",  
                         flds => "genome" );  
     $dbf->create_index( idx  => "features_type_ix",  
                         type => "btree",  
                         tbl  => "features",  
                         flds => "type" );  
     $dbf->create_index( idx  => "features_beg_ix",  
                         type => "btree",  
                         tbl  => "features",  
                         flds => "genome,contig,minloc" );  
205    
     $dbf->vacuum_it("features")  
 }  
 unlink("$temp_dir/tmpfeat$$");  
206  unlink("$temp_dir/tmpalias$$.1");  unlink("$temp_dir/tmpalias$$.1");
207    Trace("Features loaded.") if T(2);
208    
209  sub same_class {  sub same_class {
210      my($x,$y) = @_;      my($x,$y) = @_;

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.20

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3