[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.1, Mon Dec 1 20:46:40 2003 UTC revision 1.13, Sat Jan 1 14:33:50 2005 UTC
# Line 15  Line 15 
15  # usage: load_features [G1 G2 G3 ... ]  # usage: load_features [G1 G2 G3 ... ]
16    
17  open(REL,">$temp_dir/tmpfeat$$") || die "could not open $temp_dir/tmpfeat$$";  open(REL,">$temp_dir/tmpfeat$$") || die "could not open $temp_dir/tmpfeat$$";
18    open(ALIAS,"| sort -u > $temp_dir/tmpalias$$") || die "could not open $temp_dir/tmpalias$$";
19    
20  my $dbf = $fig->{_dbf};  my $dbf = $fig->{_dbf};
21    
# Line 24  Line 25 
25  if (@ARGV == 0)  if (@ARGV == 0)
26  {  {
27      $dbf->drop_table( tbl => "features" );      $dbf->drop_table( tbl => "features" );
28        $dbf->drop_table( tbl => "ext_alias" );
29    
30        $dbf->create_table( tbl => 'ext_alias',
31                            flds => "id varchar(32), alias varchar(32), genome varchar(16)"
32                            );
33    
34      if ($FIG_Config::dbms eq "Pg")      if ($FIG_Config::dbms eq "Pg")
35      {      {
36          $dbf->create_table( tbl  => "features",          $dbf->create_table( tbl  => "features",
37                              flds => "id varchar(32) UNIQUE NOT NULL, type varchar(16),genome varchar(16),"  .                              flds => "id varchar(32), idN INTEGER, type varchar(16),genome varchar(16),"  .
38                                      "location varchar(5000),"  .                                      "location varchar(5000),"  .
39                                      "contig varchar(96), minloc INTEGER, maxloc INTEGER,"  .                                      "contig varchar(96), minloc INTEGER, maxloc INTEGER,"  .
40                                      "aliases TEXT, PRIMARY KEY ( id )"                                      "aliases TEXT"
41                              );                              );
42      }      }
43      elsif ($FIG_Config::dbms eq "mysql")      elsif ($FIG_Config::dbms eq "mysql")
44      {      {
45          $dbf->create_table( tbl  => "features",          $dbf->create_table( tbl  => "features",
46                              flds => "id varchar(32) UNIQUE NOT NULL, type varchar(16),genome varchar(16),"  .                              flds => "id varchar(32), idN INTEGER, type varchar(16),genome varchar(16),"  .
47                                      "location TEXT,"  .                                      "location TEXT,"  .
48                                      "contig varchar(96), minloc INTEGER, maxloc INTEGER,"  .                                      "contig varchar(96), minloc INTEGER, maxloc INTEGER,"  .
49                                      "aliases TEXT, PRIMARY KEY ( id )"                                      "aliases TEXT"
50                              );                              );
51      }      }
52    
     $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" );  
   
53      @genomes = $fig->genomes;      @genomes = $fig->genomes;
54    
55        # Here we extract external aliases from the peg.synonyms table, when they can be inferred
56        # accurately.
57        open(SYN,"<$FIG_Config::global/peg.synonyms") || die "could not open $FIG_Config::global/peg.synonyms";
58        while (defined($_ = <SYN>))
59        {
60            chop;
61            my($x,$y) = split(/\t/,$_);
62            my @ids = map { $_ =~ /^([^,]+),(\d+)/; [$1,$2] } ($x,split(/;/,$y));
63            my @fig = ();
64            my(@nonfig) = ();
65            foreach $_ (@ids)
66            {
67                if ($_->[0] =~ /^fig\|/)
68                {
69                    push(@fig,$_);
70                }
71                else
72                {
73                    push(@nonfig,$_);
74                }
75            }
76    
77            my $x;
78            foreach $x (@fig)
79            {
80                my($peg,$peg_ln) = @$x;
81                my $genome = &FIG::genome_of($peg);
82                foreach $_ (@nonfig)
83                {
84                    if ((@fig == 1) || ($peg_ln == $_->[1]))
85                    {
86                        print ALIAS "$peg\t$_->[0]\t$genome\n";
87                    }
88                }
89            }
90        }
91        close(SYN);
92  }  }
93  else  else
94  {  {
95      @genomes = @ARGV;      @genomes = @ARGV;
96        foreach $genome (@genomes)
97        {
98            $dbf->SQL("DELETE FROM features WHERE ( genome = \'$genome\' )");
99            $dbf->SQL("DELETE FROM ext_alias WHERE ( genome = \'$genome\' )");
100        }
101    }
102    
103    my $changes = {};
104    if (open(TMP,"<$FIG_Config::global/changed.location.features"))
105    {
106        while ($_ = <TMP>)
107        {
108            if ($_ =~ /^(fig\|\d+\.\d+\.[a-zA-Z]+\.\d+)/)
109            {
110                $changes->{$1}++;
111            }
112        }
113        close(TMP);
114  }  }
115    
116  foreach $genome (@genomes)  foreach $genome (@genomes)
# Line 80  Line 130 
130              {              {
131                  chop;                  chop;
132                  ($id,$loc,@aliases) = split(/\t/,$_);                  ($id,$loc,@aliases) = split(/\t/,$_);
133    
134                    if ($id && ($_ = $changes->{$id}))   # check for obsolete entries due to location changes
135                    {
136                        $changes->{$id}--;
137                        next;
138                    }
139    
140                  if ($id)                  if ($id)
141                  {                  {
142                      my($minloc,$maxloc);                      my($minloc,$maxloc);
# Line 101  Line 158 
158                      if (@aliases > 0)                      if (@aliases > 0)
159                      {                      {
160                          $aliases = join(",",grep(/\S/,@aliases));                          $aliases = join(",",grep(/\S/,@aliases));
161                            my $alias;
162                            foreach $alias (@aliases)
163                            {
164                                if ($alias =~ /^(NP_|gi\||sp\|\tr\||kegg\||uni\|)/)
165                                {
166    
167                                    print ALIAS "$id\t$alias\t$genome\n";
168                                }
169                            }
170                      }                      }
171                      else                      else
172                      {                      {
# Line 108  Line 174 
174                      }                      }
175                      $minloc = (! $minloc) ? 0 : $minloc;                      $minloc = (! $minloc) ? 0 : $minloc;
176                      $maxloc = (! $maxloc) ? 0 : $maxloc;                      $maxloc = (! $maxloc) ? 0 : $maxloc;
177                      print REL "$id\t$type\t$genome\t$loc\t$contig\t$minloc\t$maxloc\t$aliases\n";                      if ((length($loc) < 5000) && (length($contig) < 96) && (length($id) < 32) && ($id =~ /(\d+)$/))
178                        {
179                            print REL "$id\t$1\t$type\t$genome\t$loc\t$contig\t$minloc\t$maxloc\t$aliases\n";
180                        }
181                  }                  }
182              }              }
183              close(TBL);              close(TBL);
# Line 116  Line 185 
185      }      }
186  }  }
187  close(REL);  close(REL);
188    close(ALIAS);
189    
190  $dbf->load_table( tbl => "features",  $dbf->load_table( tbl => "features",
191                    file => "$temp_dir/tmpfeat$$" );                    file => "$temp_dir/tmpfeat$$" );
192    
193  if (@ARGV == 0) {  $dbf->vacuum_it("features") }  $dbf->load_table( tbl => "ext_alias",
194                      file => "$temp_dir/tmpalias$$" );
195    
196    if (@ARGV == 0)
197    {
198        $dbf->create_index( idx  => "ext_alias_alias_ix",
199                            tbl  => "ext_alias",
200                            type => "btree",
201                            flds => "alias" );
202    
203        $dbf->create_index( idx  => "ext_alias_genome_ix",
204                            tbl  => "ext_alias",
205                            type => "btree",
206                            flds => "genome" );
207    
208        $dbf->create_index( idx  => "ext_alias_id_ix",
209                            tbl  => "ext_alias",
210                            type => "btree",
211                            flds => "id" );
212    
213        $dbf->create_index( idx  => "features_id_ix",
214                            tbl  => "features",
215                            type => "btree",
216                            flds => "id" );
217        $dbf->create_index( idx  => "features_org_ix",
218                            tbl  => "features",
219                            type => "btree",
220                            flds => "genome" );
221        $dbf->create_index( idx  => "features_type_ix",
222                            type => "btree",
223                            tbl  => "features",
224                            flds => "type" );
225        $dbf->create_index( idx  => "features_beg_ix",
226                            type => "btree",
227                            tbl  => "features",
228                            flds => "genome,contig,minloc" );
229    
230        $dbf->vacuum_it("features")
231    }
232  unlink("$temp_dir/tmpfeat$$");  unlink("$temp_dir/tmpfeat$$");
233    unlink("$temp_dir/tmpalias$$");

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.13

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3