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

Annotation of /FigKernelScripts/load_features.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10 - (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.7 flds => "id varchar(32), 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.7 flds => "id varchar(32), 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 :     foreach $genome (@genomes)
99 :     {
100 :     opendir(FEAT,"$organisms_dir/$genome/Features")
101 :     || die "could not open $genome/Features";
102 :     @types = grep { $_ =~ /^[a-zA-Z]+$/ } readdir(FEAT);
103 :     closedir(FEAT);
104 :    
105 :     foreach $type (@types)
106 :     {
107 :     if ((-s "$organisms_dir/$genome/Features/$type/tbl") &&
108 :     open(TBL,"<$organisms_dir/$genome/Features/$type/tbl"))
109 :     {
110 :     # print STDERR "loading $genome/Features/$type/tbl\n";
111 :     while (defined($_ = <TBL>))
112 :     {
113 :     chop;
114 :     ($id,$loc,@aliases) = split(/\t/,$_);
115 :     if ($id)
116 :     {
117 :     my($minloc,$maxloc);
118 :     if ($loc)
119 :     {
120 :     $loc =~ s/\s+$//;
121 :     ($contig,$minloc,$maxloc) = &FIG::boundaries_of($loc);
122 :     if ($minloc && $maxloc)
123 :     {
124 :     ($minloc < $maxloc) || (($minloc,$maxloc) = ($maxloc,$minloc));
125 :     }
126 :     }
127 :    
128 :     if (! $contig)
129 :     {
130 :     $loc = $contig = $minloc = $maxloc = "";
131 :     }
132 :    
133 :     if (@aliases > 0)
134 :     {
135 :     $aliases = join(",",grep(/\S/,@aliases));
136 : overbeek 1.8 my $alias;
137 :     foreach $alias (@aliases)
138 :     {
139 : overbeek 1.9 if ($alias =~ /^(NP_|gi\||sp\|\tr\||kegg\|)/)
140 : overbeek 1.8 {
141 :    
142 :     print ALIAS "$id\t$alias\t$genome\n";
143 :     }
144 :     }
145 : efrank 1.1 }
146 :     else
147 :     {
148 :     $aliases = "";
149 :     }
150 :     $minloc = (! $minloc) ? 0 : $minloc;
151 :     $maxloc = (! $maxloc) ? 0 : $maxloc;
152 : overbeek 1.3 if ((length($loc) < 5000) && (length($contig) < 96) && (length($id) < 32))
153 :     {
154 :     print REL "$id\t$type\t$genome\t$loc\t$contig\t$minloc\t$maxloc\t$aliases\n";
155 :     }
156 : efrank 1.1 }
157 :     }
158 :     close(TBL);
159 :     }
160 :     }
161 :     }
162 :     close(REL);
163 : overbeek 1.8 close(ALIAS);
164 : efrank 1.1
165 :     $dbf->load_table( tbl => "features",
166 :     file => "$temp_dir/tmpfeat$$" );
167 :    
168 : overbeek 1.8 $dbf->load_table( tbl => "ext_alias",
169 :     file => "$temp_dir/tmpalias$$" );
170 :    
171 : overbeek 1.4 if (@ARGV == 0)
172 :     {
173 : overbeek 1.8 $dbf->create_index( idx => "ext_alias_alias_ix",
174 :     tbl => "ext_alias",
175 :     type => "btree",
176 :     flds => "alias" );
177 :    
178 :     $dbf->create_index( idx => "ext_alias_genome_ix",
179 :     tbl => "ext_alias",
180 :     type => "btree",
181 :     flds => "genome" );
182 :    
183 : overbeek 1.10 $dbf->create_index( idx => "ext_alias_id_ix",
184 :     tbl => "ext_alias",
185 :     type => "btree",
186 :     flds => "id" );
187 :    
188 : overbeek 1.6 $dbf->create_index( idx => "features_id_ix",
189 :     tbl => "features",
190 :     type => "btree",
191 :     flds => "id" );
192 : overbeek 1.4 $dbf->create_index( idx => "features_org_ix",
193 :     tbl => "features",
194 :     type => "btree",
195 :     flds => "genome" );
196 :     $dbf->create_index( idx => "features_type_ix",
197 :     type => "btree",
198 :     tbl => "features",
199 :     flds => "type" );
200 :     $dbf->create_index( idx => "features_beg_ix",
201 :     type => "btree",
202 :     tbl => "features",
203 :     flds => "genome,contig,minloc" );
204 :    
205 : overbeek 1.5 $dbf->vacuum_it("features")
206 : overbeek 1.4 }
207 : efrank 1.1 unlink("$temp_dir/tmpfeat$$");
208 : overbeek 1.8 unlink("$temp_dir/tmpalias$$");

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3