[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.11, Mon Aug 16 22:10:55 2004 UTC revision 1.18, Thu Jun 9 05:51:06 2005 UTC
# Line 4  Line 4 
4  use FIG;  use FIG;
5  my $fig = new FIG;  my $fig = new FIG;
6    
7  use DBrtns;  use Tracer;
   
8    
9    Trace("Preparing to load features.") if T(2);
10    my ($mode, @genomes) = FIG::parse_genome_args(@ARGV);
11  my $temp_dir = "$FIG_Config::temp";  my $temp_dir = "$FIG_Config::temp";
12  my($organisms_dir) = "$FIG_Config::organisms";  my $organisms_dir = "$FIG_Config::organisms";
13    
14  my($genome,@types,$type,$id,$loc,@aliases,$aliases,$contig);  my($genome,@types,$type,$id,$loc,@aliases,$aliases,$contig);
15    
16  # usage: load_features [G1 G2 G3 ... ]  # usage: load_features [G1 G2 G3 ... ]
17    
18  open(REL,">$temp_dir/tmpfeat$$") || die "could not open $temp_dir/tmpfeat$$";  Open(\*REL, ">$temp_dir/tmpfeat$$");
19  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};  
   
   
   
 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)"  
                         );  
20    
     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"  
                             );  
     }  
21    
22      @genomes = $fig->genomes;  if ($mode eq 'all') {
23    
24      # 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
25      # accurately.      # accurately.
26      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);
27        open(\*SYN, "<$FIG_Config::global/peg.synonyms");
28      while (defined($_ = <SYN>))      while (defined($_ = <SYN>))
29      {      {
30          chop;          chop;
31          my($x,$y) = split(/\t/,$_);          my($x,$y) = split(/\t/,$_);
32          my @ids = map { $_ =~ /^([^,]+)/ } ($x,split(/;/,$y));                  my @ids = map { $_ =~ /^([^,]+),(\d+)/; [$1,$2] } ($x,split(/;/,$y));
33          my @fig = ();          my @fig = ();
34          my(@nonfig) = ();          my(@nonfig) = ();
35          foreach $_ (@ids)          foreach $_ (@ids)
36          {          {
37              if ($_ =~ /^fig\|/)                          if ($_->[0] =~ /^fig\|/)
38              {              {
39                  push(@fig,$_);                  push(@fig,$_);
40              }              }
# Line 74  Line 44 
44              }              }
45          }          }
46    
47          if (@fig == 1)                  foreach $x (@fig)
48          {          {
49              my $genome = &FIG::genome_of($fig[0]);                          my($peg,$peg_ln) = @$x;
50                            my $genome = &FIG::genome_of($peg);
51              foreach $_ (@nonfig)              foreach $_ (@nonfig)
52              {              {
53                  print ALIAS "$fig[0]\t$_\t$genome\n";                                  if ((@fig == 1) || ($peg_ln == $_->[1]))
54                                    {
55                                            print ALIAS "$peg\t$_->[0]\t$genome\n";
56                                            Trace("Alias record $peg, $_->[0] for $genome.") if T(4);
57                                    }
58              }              }
59          }          }
60      }      }
61      close(SYN);      close(SYN);
62  }  }
63  else  
64    my $changes = {};
65    if (open(TMP, "<$FIG_Config::global/changed.location.features"))
66  {  {
67      @genomes = @ARGV;      while ($_ = <TMP>)
68      foreach $genome (@genomes)      {
69                    if ($_ =~ /^(fig\|\d+\.\d+\.[a-zA-Z]+\.\d+)/)
70      {      {
71          $dbf->SQL("DELETE FROM features WHERE ( genome = \'$genome\' )");                          $changes->{$1}++;
72          $dbf->SQL("DELETE FROM ext_alias WHERE ( genome = \'$genome\' )");                  }
73      }      }
74        close(TMP);
75  }  }
76    
77  foreach $genome (@genomes)  foreach $genome (@genomes)
78  {  {
79            Trace("Processing $genome.") if T(3);
80      opendir(FEAT,"$organisms_dir/$genome/Features")      opendir(FEAT,"$organisms_dir/$genome/Features")
81          || die "could not open $genome/Features";          || die "could not open $genome/Features";
82      @types = grep { $_ =~ /^[a-zA-Z]+$/ } readdir(FEAT);      @types = grep { $_ =~ /^[a-zA-Z]+$/ } readdir(FEAT);
# Line 107  Line 87 
87          if ((-s "$organisms_dir/$genome/Features/$type/tbl") &&          if ((-s "$organisms_dir/$genome/Features/$type/tbl") &&
88              open(TBL,"<$organisms_dir/$genome/Features/$type/tbl"))              open(TBL,"<$organisms_dir/$genome/Features/$type/tbl"))
89          {          {
90  #           print STDERR "loading $genome/Features/$type/tbl\n";                          Trace("Loading $genome/Features/$type/tbl") if T(4);
91              while (defined($_ = <TBL>))              while (defined($_ = <TBL>))
92              {              {
93                  chop;                  chop;
94                  ($id,$loc,@aliases) = split(/\t/,$_);                  ($id,$loc,@aliases) = split(/\t/,$_);
95    
96                                    if ($id && ($_ = $changes->{$id}))   # check for obsolete entries due to location changes
97                                    {
98                                            $changes->{$id}--;
99                                            next;
100                                    }
101    
102                  if ($id)                  if ($id)
103                  {                  {
104                      my($minloc,$maxloc);                      my($minloc,$maxloc);
# Line 136  Line 123 
123                          my $alias;                          my $alias;
124                          foreach $alias (@aliases)                          foreach $alias (@aliases)
125                          {                          {
126                              if ($alias =~ /^(NP_|gi\||sp\|\tr\||kegg\||uni\|)/)                                                          if ($alias =~ /^([NXYZA]P_|gi\||sp\|\tr\||kegg\||uni\|)/)
127                              {                              {
128    
129                                  print ALIAS "$id\t$alias\t$genome\n";                                                                  print ALIAS "$id\t$alias\t$genome\tOVERRIDE\n";
130                                                                    Trace("$id override alias $alias for $genome") if T(4);
131                              }                              }
132                          }                          }
133                      }                      }
# Line 161  Line 149 
149  }  }
150  close(REL);  close(REL);
151  close(ALIAS);  close(ALIAS);
152    Open(\*ALIASIN, "<$temp_dir/tmpalias$$");
153    Open(\*ALIASOUT, ">$temp_dir/tmpalias$$.1");
154    Trace("Parsing alias file.") if T(2);
155    $_ = <ALIASIN>;
156    while ($_ && ($_ =~ /^(\S+)/))
157    {
158        my @aliases = ();
159        my $curr = $1;
160        while ($_ && ($_ =~ /^(\S+)\t(\S+)(\t(\S+))?/) && ($1 eq $curr))
161        {
162                    push(@aliases,[$2,$3 ? 1 : 0]);
163                    $_ = <ALIASIN>;
164        }
165        my $x;
166        my $genome = &FIG::genome_of($curr);
167        foreach $x (@aliases)
168        {
169                    if ($x->[1])
170                    {
171                            print ALIASOUT "$curr\t$x->[0]\t$genome\n";
172                    }
173                    else
174                    {
175                            my $i;
176                            for ($i=0; ($i < @aliases) && ((! $aliases[$i]->[1]) || (! &same_class($x->[0],$aliases[$i]->[0]))); $i++) {}
177                            if ($i == @aliases)
178                            {
179                                    print ALIASOUT "$curr\t$x->[0]\t$genome\n";
180                            }
181                    }
182        }
183    }
184    close(ALIASIN);
185    close(ALIASOUT);
186    unlink("$temp_dir/tmpalias$$");
187    
188  $dbf->load_table( tbl => "features",  $fig->reload_table($mode, 'features',
189                    file => "$temp_dir/tmpfeat$$" );                                     "id varchar(32), idN INTEGER, type varchar(16),genome varchar(16),"  .
190                                        "location TEXT,"  .
191                                        "contig varchar(96), minloc INTEGER, maxloc INTEGER,"  .
192                                        "aliases TEXT",
193                                            { features_id_ix => "id", features_org_ix => "genome",
194                                              features_type_ix => "type", features_beg_ix => "genome, contig, minloc" },
195                                            "$temp_dir/tmpfeat$$", \@genomes);
196    unlink("$temp_dir/tmpfeat$$");
197    
198  $dbf->load_table( tbl => "ext_alias",  $fig->reload_table($mode, 'ext_alias',
199                    file => "$temp_dir/tmpalias$$" );                                          "id varchar(32), alias varchar(32), genome varchar(16)",
200                                            { ext_alias_alias_ix => "alias", ext_alias_genome_ix => "genome",
201                                              ext_alias_ix_id => "id" },
202                                            "$temp_dir/tmpalias$$.1", \@genomes );
203    
204  if (@ARGV == 0)  unlink("$temp_dir/tmpalias$$.1");
205  {  Trace("Features loaded.") if T(2);
     $dbf->create_index( idx  => "ext_alias_alias_ix",  
                         tbl  => "ext_alias",  
                         type => "btree",  
                         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" );  
206    
207      $dbf->vacuum_it("features")  sub same_class {
208        my($x,$y) = @_;
209    
210        my $class1 = &classA($x);
211        my $class2 = &classA($y);
212        return ($class1 && ($class1 eq $class2));
213    }
214    
215    sub classA {
216        my($alias) = @_;
217    
218        if ($alias =~ /^([^\|]+)\|/)
219        {
220                    return $1;
221        }
222        elsif ($alias =~ /^[NXYZA]P_[0-9\.]+$/)
223        {
224                    return "refseq";
225        }
226        else
227        {
228                    return "";
229        }
230  }  }
 unlink("$temp_dir/tmpfeat$$");  
 unlink("$temp_dir/tmpalias$$");  

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.18

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3