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

Annotation of /FigKernelScripts/load_features.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.9 - (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.8 open(ALIAS,">$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 :     }
55 :     else
56 :     {
57 :     @genomes = @ARGV;
58 : overbeek 1.2 foreach $genome (@genomes)
59 :     {
60 :     $dbf->SQL("DELETE FROM features WHERE ( genome = \'$genome\' )");
61 : overbeek 1.8 $dbf->SQL("DELETE FROM ext_alias WHERE ( genome = \'$genome\' )");
62 : overbeek 1.2 }
63 : efrank 1.1 }
64 :    
65 :     foreach $genome (@genomes)
66 :     {
67 :     opendir(FEAT,"$organisms_dir/$genome/Features")
68 :     || die "could not open $genome/Features";
69 :     @types = grep { $_ =~ /^[a-zA-Z]+$/ } readdir(FEAT);
70 :     closedir(FEAT);
71 :    
72 :     foreach $type (@types)
73 :     {
74 :     if ((-s "$organisms_dir/$genome/Features/$type/tbl") &&
75 :     open(TBL,"<$organisms_dir/$genome/Features/$type/tbl"))
76 :     {
77 :     # print STDERR "loading $genome/Features/$type/tbl\n";
78 :     while (defined($_ = <TBL>))
79 :     {
80 :     chop;
81 :     ($id,$loc,@aliases) = split(/\t/,$_);
82 :     if ($id)
83 :     {
84 :     my($minloc,$maxloc);
85 :     if ($loc)
86 :     {
87 :     $loc =~ s/\s+$//;
88 :     ($contig,$minloc,$maxloc) = &FIG::boundaries_of($loc);
89 :     if ($minloc && $maxloc)
90 :     {
91 :     ($minloc < $maxloc) || (($minloc,$maxloc) = ($maxloc,$minloc));
92 :     }
93 :     }
94 :    
95 :     if (! $contig)
96 :     {
97 :     $loc = $contig = $minloc = $maxloc = "";
98 :     }
99 :    
100 :     if (@aliases > 0)
101 :     {
102 :     $aliases = join(",",grep(/\S/,@aliases));
103 : overbeek 1.8 my $alias;
104 :     foreach $alias (@aliases)
105 :     {
106 : overbeek 1.9 if ($alias =~ /^(NP_|gi\||sp\|\tr\||kegg\|)/)
107 : overbeek 1.8 {
108 :    
109 :     print ALIAS "$id\t$alias\t$genome\n";
110 :     }
111 :     }
112 : efrank 1.1 }
113 :     else
114 :     {
115 :     $aliases = "";
116 :     }
117 :     $minloc = (! $minloc) ? 0 : $minloc;
118 :     $maxloc = (! $maxloc) ? 0 : $maxloc;
119 : overbeek 1.3 if ((length($loc) < 5000) && (length($contig) < 96) && (length($id) < 32))
120 :     {
121 :     print REL "$id\t$type\t$genome\t$loc\t$contig\t$minloc\t$maxloc\t$aliases\n";
122 :     }
123 : efrank 1.1 }
124 :     }
125 :     close(TBL);
126 :     }
127 :     }
128 :     }
129 :     close(REL);
130 : overbeek 1.8 close(ALIAS);
131 : efrank 1.1
132 :     $dbf->load_table( tbl => "features",
133 :     file => "$temp_dir/tmpfeat$$" );
134 :    
135 : overbeek 1.8 $dbf->load_table( tbl => "ext_alias",
136 :     file => "$temp_dir/tmpalias$$" );
137 :    
138 : overbeek 1.4 if (@ARGV == 0)
139 :     {
140 : overbeek 1.8 $dbf->create_index( idx => "ext_alias_alias_ix",
141 :     tbl => "ext_alias",
142 :     type => "btree",
143 :     flds => "alias" );
144 :    
145 :     $dbf->create_index( idx => "ext_alias_genome_ix",
146 :     tbl => "ext_alias",
147 :     type => "btree",
148 :     flds => "genome" );
149 :    
150 : overbeek 1.6 $dbf->create_index( idx => "features_id_ix",
151 :     tbl => "features",
152 :     type => "btree",
153 :     flds => "id" );
154 : overbeek 1.4 $dbf->create_index( idx => "features_org_ix",
155 :     tbl => "features",
156 :     type => "btree",
157 :     flds => "genome" );
158 :     $dbf->create_index( idx => "features_type_ix",
159 :     type => "btree",
160 :     tbl => "features",
161 :     flds => "type" );
162 :     $dbf->create_index( idx => "features_beg_ix",
163 :     type => "btree",
164 :     tbl => "features",
165 :     flds => "genome,contig,minloc" );
166 :    
167 : overbeek 1.5 $dbf->vacuum_it("features")
168 : overbeek 1.4 }
169 : efrank 1.1 unlink("$temp_dir/tmpfeat$$");
170 : overbeek 1.8 unlink("$temp_dir/tmpalias$$");

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3