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

Annotation of /FigKernelScripts/load_features.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : efrank 1.1 # -*- perl -*-
2 :    
3 :     use strict;
4 :     use FIG;
5 :     my $fig = new FIG;
6 :    
7 :     use DBrtns;
8 :    
9 :    
10 :     my $temp_dir = "$FIG_Config::temp";
11 :     my($organisms_dir) = "$FIG_Config::organisms";
12 :    
13 :     my($genome,@types,$type,$id,$loc,@aliases,$aliases,$contig);
14 :    
15 :     # usage: load_features [G1 G2 G3 ... ]
16 :    
17 :     open(REL,">$temp_dir/tmpfeat$$") || die "could not open $temp_dir/tmpfeat$$";
18 : overbeek 1.10 open(ALIAS,"| sort -u > $temp_dir/tmpalias$$") || die "could not open $temp_dir/tmpalias$$";
19 : efrank 1.1
20 :     my $dbf = $fig->{_dbf};
21 :    
22 :    
23 :    
24 :     my @genomes;
25 :     if (@ARGV == 0)
26 :     {
27 :     $dbf->drop_table( tbl => "features" );
28 : overbeek 1.8 $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 : efrank 1.1 if ($FIG_Config::dbms eq "Pg")
35 :     {
36 :     $dbf->create_table( tbl => "features",
37 : overbeek 1.11 flds => "id varchar(32), idN INTEGER, type varchar(16),genome varchar(16)," .
38 : efrank 1.1 "location varchar(5000)," .
39 :     "contig varchar(96), minloc INTEGER, maxloc INTEGER," .
40 : overbeek 1.6 "aliases TEXT"
41 : efrank 1.1 );
42 :     }
43 :     elsif ($FIG_Config::dbms eq "mysql")
44 :     {
45 :     $dbf->create_table( tbl => "features",
46 : overbeek 1.11 flds => "id varchar(32), idN INTEGER, type varchar(16),genome varchar(16)," .
47 : efrank 1.1 "location TEXT," .
48 :     "contig varchar(96), minloc INTEGER, maxloc INTEGER," .
49 : overbeek 1.6 "aliases TEXT"
50 : efrank 1.1 );
51 :     }
52 :    
53 :     @genomes = $fig->genomes;
54 : overbeek 1.10
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 { $_ =~ /^([^,]+)/ } ($x,split(/;/,$y));
63 :     my @fig = ();
64 :     my(@nonfig) = ();
65 :     foreach $_ (@ids)
66 :     {
67 :     if ($_ =~ /^fig\|/)
68 :     {
69 :     push(@fig,$_);
70 :     }
71 :     else
72 :     {
73 :     push(@nonfig,$_);
74 :     }
75 :     }
76 :    
77 :     if (@fig == 1)
78 :     {
79 :     my $genome = &FIG::genome_of($fig[0]);
80 :     foreach $_ (@nonfig)
81 :     {
82 :     print ALIAS "$fig[0]\t$_\t$genome\n";
83 :     }
84 :     }
85 :     }
86 :     close(SYN);
87 : efrank 1.1 }
88 :     else
89 :     {
90 :     @genomes = @ARGV;
91 : overbeek 1.2 foreach $genome (@genomes)
92 :     {
93 :     $dbf->SQL("DELETE FROM features WHERE ( genome = \'$genome\' )");
94 : overbeek 1.8 $dbf->SQL("DELETE FROM ext_alias WHERE ( genome = \'$genome\' )");
95 : overbeek 1.2 }
96 : efrank 1.1 }
97 :    
98 : overbeek 1.12 my $changes = {};
99 :     if (open(TMP,"<$FIG_Config::global/changed.location.features"))
100 :     {
101 :     while ($_ = <TMP>)
102 :     {
103 :     if ($_ =~ /^(fig\|\d+\.\d+\.[a-zA-Z]+\.\d+)/)
104 :     {
105 :     $changes->{$1}++;
106 :     }
107 :     }
108 :     close(TMP);
109 :     }
110 :    
111 : efrank 1.1 foreach $genome (@genomes)
112 :     {
113 :     opendir(FEAT,"$organisms_dir/$genome/Features")
114 :     || die "could not open $genome/Features";
115 :     @types = grep { $_ =~ /^[a-zA-Z]+$/ } readdir(FEAT);
116 :     closedir(FEAT);
117 :    
118 :     foreach $type (@types)
119 :     {
120 :     if ((-s "$organisms_dir/$genome/Features/$type/tbl") &&
121 :     open(TBL,"<$organisms_dir/$genome/Features/$type/tbl"))
122 :     {
123 :     # print STDERR "loading $genome/Features/$type/tbl\n";
124 :     while (defined($_ = <TBL>))
125 :     {
126 :     chop;
127 :     ($id,$loc,@aliases) = split(/\t/,$_);
128 : overbeek 1.12
129 :     if ($id && ($_ = $changes->{$id})) # check for obsolete entries due to location changes
130 :     {
131 :     $changes->{$id}--;
132 :     next;
133 :     }
134 :    
135 : efrank 1.1 if ($id)
136 :     {
137 :     my($minloc,$maxloc);
138 :     if ($loc)
139 :     {
140 :     $loc =~ s/\s+$//;
141 :     ($contig,$minloc,$maxloc) = &FIG::boundaries_of($loc);
142 :     if ($minloc && $maxloc)
143 :     {
144 :     ($minloc < $maxloc) || (($minloc,$maxloc) = ($maxloc,$minloc));
145 :     }
146 :     }
147 :    
148 :     if (! $contig)
149 :     {
150 :     $loc = $contig = $minloc = $maxloc = "";
151 :     }
152 :    
153 :     if (@aliases > 0)
154 :     {
155 :     $aliases = join(",",grep(/\S/,@aliases));
156 : overbeek 1.8 my $alias;
157 :     foreach $alias (@aliases)
158 :     {
159 : overbeek 1.11 if ($alias =~ /^(NP_|gi\||sp\|\tr\||kegg\||uni\|)/)
160 : overbeek 1.8 {
161 :    
162 :     print ALIAS "$id\t$alias\t$genome\n";
163 :     }
164 :     }
165 : efrank 1.1 }
166 :     else
167 :     {
168 :     $aliases = "";
169 :     }
170 :     $minloc = (! $minloc) ? 0 : $minloc;
171 :     $maxloc = (! $maxloc) ? 0 : $maxloc;
172 : overbeek 1.11 if ((length($loc) < 5000) && (length($contig) < 96) && (length($id) < 32) && ($id =~ /(\d+)$/))
173 : overbeek 1.3 {
174 : overbeek 1.11 print REL "$id\t$1\t$type\t$genome\t$loc\t$contig\t$minloc\t$maxloc\t$aliases\n";
175 : overbeek 1.3 }
176 : efrank 1.1 }
177 :     }
178 :     close(TBL);
179 :     }
180 :     }
181 :     }
182 :     close(REL);
183 : overbeek 1.8 close(ALIAS);
184 : efrank 1.1
185 :     $dbf->load_table( tbl => "features",
186 :     file => "$temp_dir/tmpfeat$$" );
187 :    
188 : overbeek 1.8 $dbf->load_table( tbl => "ext_alias",
189 :     file => "$temp_dir/tmpalias$$" );
190 :    
191 : overbeek 1.4 if (@ARGV == 0)
192 :     {
193 : overbeek 1.8 $dbf->create_index( idx => "ext_alias_alias_ix",
194 :     tbl => "ext_alias",
195 :     type => "btree",
196 :     flds => "alias" );
197 :    
198 :     $dbf->create_index( idx => "ext_alias_genome_ix",
199 :     tbl => "ext_alias",
200 :     type => "btree",
201 :     flds => "genome" );
202 :    
203 : overbeek 1.10 $dbf->create_index( idx => "ext_alias_id_ix",
204 :     tbl => "ext_alias",
205 :     type => "btree",
206 :     flds => "id" );
207 :    
208 : overbeek 1.6 $dbf->create_index( idx => "features_id_ix",
209 :     tbl => "features",
210 :     type => "btree",
211 :     flds => "id" );
212 : overbeek 1.4 $dbf->create_index( idx => "features_org_ix",
213 :     tbl => "features",
214 :     type => "btree",
215 :     flds => "genome" );
216 :     $dbf->create_index( idx => "features_type_ix",
217 :     type => "btree",
218 :     tbl => "features",
219 :     flds => "type" );
220 :     $dbf->create_index( idx => "features_beg_ix",
221 :     type => "btree",
222 :     tbl => "features",
223 :     flds => "genome,contig,minloc" );
224 :    
225 : overbeek 1.5 $dbf->vacuum_it("features")
226 : overbeek 1.4 }
227 : efrank 1.1 unlink("$temp_dir/tmpfeat$$");
228 : overbeek 1.8 unlink("$temp_dir/tmpalias$$");

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3