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

Annotation of /FigKernelScripts/load_features.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (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 : overbeek 1.13 my @ids = map { $_ =~ /^([^,]+),(\d+)/; [$1,$2] } ($x,split(/;/,$y));
63 : overbeek 1.10 my @fig = ();
64 :     my(@nonfig) = ();
65 :     foreach $_ (@ids)
66 :     {
67 : overbeek 1.13 if ($_->[0] =~ /^fig\|/)
68 : overbeek 1.10 {
69 :     push(@fig,$_);
70 :     }
71 :     else
72 :     {
73 :     push(@nonfig,$_);
74 :     }
75 :     }
76 : overbeek 1.13
77 :     my $x;
78 :     foreach $x (@fig)
79 : overbeek 1.10 {
80 : overbeek 1.13 my($peg,$peg_ln) = @$x;
81 :     my $genome = &FIG::genome_of($peg);
82 : overbeek 1.10 foreach $_ (@nonfig)
83 :     {
84 : overbeek 1.13 if ((@fig == 1) || ($peg_ln == $_->[1]))
85 :     {
86 :     print ALIAS "$peg\t$_->[0]\t$genome\n";
87 :     }
88 : overbeek 1.10 }
89 :     }
90 :     }
91 :     close(SYN);
92 : efrank 1.1 }
93 :     else
94 :     {
95 :     @genomes = @ARGV;
96 : overbeek 1.2 foreach $genome (@genomes)
97 :     {
98 :     $dbf->SQL("DELETE FROM features WHERE ( genome = \'$genome\' )");
99 : overbeek 1.8 $dbf->SQL("DELETE FROM ext_alias WHERE ( genome = \'$genome\' )");
100 : overbeek 1.2 }
101 : efrank 1.1 }
102 :    
103 : overbeek 1.12 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 : efrank 1.1 foreach $genome (@genomes)
117 :     {
118 :     opendir(FEAT,"$organisms_dir/$genome/Features")
119 :     || die "could not open $genome/Features";
120 :     @types = grep { $_ =~ /^[a-zA-Z]+$/ } readdir(FEAT);
121 :     closedir(FEAT);
122 :    
123 :     foreach $type (@types)
124 :     {
125 :     if ((-s "$organisms_dir/$genome/Features/$type/tbl") &&
126 :     open(TBL,"<$organisms_dir/$genome/Features/$type/tbl"))
127 :     {
128 :     # print STDERR "loading $genome/Features/$type/tbl\n";
129 :     while (defined($_ = <TBL>))
130 :     {
131 :     chop;
132 :     ($id,$loc,@aliases) = split(/\t/,$_);
133 : overbeek 1.12
134 :     if ($id && ($_ = $changes->{$id})) # check for obsolete entries due to location changes
135 :     {
136 :     $changes->{$id}--;
137 :     next;
138 :     }
139 :    
140 : efrank 1.1 if ($id)
141 :     {
142 :     my($minloc,$maxloc);
143 :     if ($loc)
144 :     {
145 :     $loc =~ s/\s+$//;
146 :     ($contig,$minloc,$maxloc) = &FIG::boundaries_of($loc);
147 :     if ($minloc && $maxloc)
148 :     {
149 :     ($minloc < $maxloc) || (($minloc,$maxloc) = ($maxloc,$minloc));
150 :     }
151 :     }
152 :    
153 :     if (! $contig)
154 :     {
155 :     $loc = $contig = $minloc = $maxloc = "";
156 :     }
157 :    
158 :     if (@aliases > 0)
159 :     {
160 :     $aliases = join(",",grep(/\S/,@aliases));
161 : overbeek 1.8 my $alias;
162 :     foreach $alias (@aliases)
163 :     {
164 : overbeek 1.11 if ($alias =~ /^(NP_|gi\||sp\|\tr\||kegg\||uni\|)/)
165 : overbeek 1.8 {
166 :    
167 :     print ALIAS "$id\t$alias\t$genome\n";
168 :     }
169 :     }
170 : efrank 1.1 }
171 :     else
172 :     {
173 :     $aliases = "";
174 :     }
175 :     $minloc = (! $minloc) ? 0 : $minloc;
176 :     $maxloc = (! $maxloc) ? 0 : $maxloc;
177 : overbeek 1.11 if ((length($loc) < 5000) && (length($contig) < 96) && (length($id) < 32) && ($id =~ /(\d+)$/))
178 : overbeek 1.3 {
179 : overbeek 1.11 print REL "$id\t$1\t$type\t$genome\t$loc\t$contig\t$minloc\t$maxloc\t$aliases\n";
180 : overbeek 1.3 }
181 : efrank 1.1 }
182 :     }
183 :     close(TBL);
184 :     }
185 :     }
186 :     }
187 :     close(REL);
188 : overbeek 1.8 close(ALIAS);
189 : efrank 1.1
190 :     $dbf->load_table( tbl => "features",
191 :     file => "$temp_dir/tmpfeat$$" );
192 :    
193 : overbeek 1.8 $dbf->load_table( tbl => "ext_alias",
194 :     file => "$temp_dir/tmpalias$$" );
195 :    
196 : overbeek 1.4 if (@ARGV == 0)
197 :     {
198 : overbeek 1.8 $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 : overbeek 1.10 $dbf->create_index( idx => "ext_alias_id_ix",
209 :     tbl => "ext_alias",
210 :     type => "btree",
211 :     flds => "id" );
212 :    
213 : overbeek 1.6 $dbf->create_index( idx => "features_id_ix",
214 :     tbl => "features",
215 :     type => "btree",
216 :     flds => "id" );
217 : overbeek 1.4 $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 : overbeek 1.5 $dbf->vacuum_it("features")
231 : overbeek 1.4 }
232 : efrank 1.1 unlink("$temp_dir/tmpfeat$$");
233 : overbeek 1.8 unlink("$temp_dir/tmpalias$$");

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3