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

Annotation of /FigKernelScripts/import_similarity_bundle.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : overbeek 1.1 #
2 :     # Copyright (c) 2003-2006 University of Chicago and Fellowship
3 :     # for Interpretations of Genomes. All Rights Reserved.
4 :     #
5 :     # This file is part of the SEED Toolkit.
6 :     #
7 :     # The SEED Toolkit is free software. You can redistribute
8 :     # it and/or modify it under the terms of the SEED Toolkit
9 :     # Public License.
10 :     #
11 :     # You should have received a copy of the SEED Toolkit Public License
12 :     # along with this program; if not write to the University of Chicago
13 :     # at info@ci.uchicago.edu or the Fellowship for Interpretation of
14 :     # Genomes at veronika@thefig.info or download a copy from
15 :     # http://www.theseed.org/LICENSE.TXT.
16 :     #
17 :    
18 :    
19 :     use strict;
20 :     use FIG;
21 :     use File::Copy;
22 : overbeek 1.2 use FileLocking;
23 : overbeek 1.1 use Fcntl ':flock';
24 :     use FileHandle;
25 :    
26 :     =pod
27 :    
28 : parrello 1.3 =head2 NAME
29 : overbeek 1.1
30 :     import_similarity_bundle - import computed sim bundle
31 :    
32 : parrello 1.3 =head2 SYNOPSIS
33 : overbeek 1.1
34 :     import_similarity_bundle bundle-dir
35 :    
36 : parrello 1.3 =head2 DESCRIPTION
37 : overbeek 1.1
38 :     B<import_similarity_bundle> imports the result of a sims computation. These results are
39 :     structured as a set of files containing augmented similarities as created by
40 :     process_new_sims(1).
41 :    
42 :     The import process takes the following actions:
43 :    
44 :     =over 4
45 :    
46 :     =item *
47 :    
48 :     Copies the similarity files to FIG/Data/NewSims.
49 :    
50 :     =item *
51 :    
52 :     Removes the entries in FIG/Data/Global/pending_similarities for the sims we are installing.
53 :    
54 :     =item *
55 :    
56 :     Invokes insert_dynamic_sims to load the sims into the relational database.
57 :    
58 :     =item *
59 :    
60 :     Creates entries in the SEED postprocessing job queues for all the ids in the sims installed.
61 :    
62 : parrello 1.3 =back
63 :    
64 : overbeek 1.1 =cut
65 :    
66 :     my $fig = new FIG;
67 :    
68 :     my $usage = "import_similarity_bundle bundle-dir";
69 :    
70 :     my @postprocess_job_queues = qw(auto_assign pchs pins ifc);
71 :    
72 :     @ARGV == 1 or die $usage;
73 :    
74 :     my $sim_dir = shift(@ARGV);
75 :    
76 :     if (!-d $sim_dir)
77 :     {
78 :     die "Sim bundle directory $sim_dir not found\n";
79 :     }
80 :    
81 :     check_bundle($sim_dir);
82 :     #update_pending_list($sim_dir);
83 :     #copy_to_new_sims($sim_dir);
84 :     #insert_dynamic($sim_dir);
85 :     update_postprocess_list($sim_dir);
86 :    
87 :     sub check_bundle
88 :     {
89 :     my($sim_dir) = @_;
90 :    
91 :     if (! -f "$sim_dir/ids")
92 :     {
93 :     die "Bundle $sim_dir missing ids file\n";
94 :     }
95 :    
96 :     #
97 :     # Sims files are in the sims subdirectory of the bundle we're given.
98 :     #
99 :    
100 :     my @sims = <$sim_dir/sims/sim*>;
101 :    
102 :     if (@sims == 0)
103 :     {
104 :     die "Bundle $sim_dir missing sim files\n";
105 :     }
106 :    
107 :     for my $sim_file (@sims)
108 :     {
109 :     if (! -f $sim_file)
110 :     {
111 :     die "Sim file $sim_file not a plain file\n";
112 :     }
113 :     if (open(S, "<$sim_file"))
114 :     {
115 :     close(S);
116 :     }
117 :     else
118 :     {
119 :     die "Cannot open $sim_file for reading: $!\n";
120 :     }
121 :     }
122 :     }
123 :    
124 :     sub copy_to_new_sims
125 :     {
126 :     my($sim_dir) = @_;
127 :    
128 :     #
129 :     # Sims files are in the sims subdirectory of the bundle we're given.
130 :     #
131 :    
132 :     &FIG::verify_dir("$FIG_Config::data/NewSims");
133 :    
134 :     opendir(D, "$sim_dir/sims");
135 :     for my $sim_file (readdir(D))
136 :     {
137 :     my $path = "$sim_dir/sims/$sim_file";
138 :    
139 :     next unless $sim_file =~ /^sim/ and -f $path;
140 :    
141 :     copy($path, "$FIG_Config::data/NewSims/$sim_file") or die "Could not copy $path to $FIG_Config::data/NewSims/$sim_file: $!";
142 :     }
143 :     closedir(D);
144 :     }
145 :    
146 :     sub insert_dynamic
147 :     {
148 :     my($sim_dir) = @_;
149 :    
150 :     #
151 :     # Sims files are in the sims subdirectory of the bundle we're given.
152 :     #
153 :    
154 :     opendir(D, "$sim_dir/sims");
155 :     for my $sim_file (readdir(D))
156 :     {
157 :     my $path = "$sim_dir/sims/$sim_file";
158 :    
159 :     next unless $sim_file =~ /^sim/ and -f $path;
160 :    
161 :     print "Loading sims file: $path\n";
162 :     my $rc = $fig->insert_dynamic_sims_file($path);
163 :     print "Insert returns rc=$rc\n";
164 :     }
165 :     }
166 :    
167 :     sub update_pending_list
168 :     {
169 :     my($sim_dir) = @_;
170 :    
171 :     if (open(P, "<$sim_dir/ids"))
172 :     {
173 :     my %ids;
174 :     while (<P>)
175 :     {
176 :     if (/(\S+)/)
177 :     {
178 :     $ids{$1}++;
179 :     }
180 :     }
181 :     close(P);
182 :    
183 :     #
184 :     # Remove them from the pending_similarities file.
185 :     #
186 :    
187 :     if (open(PEND, "+<$FIG_Config::global/pending_similarities"))
188 :     {
189 :     flock(PEND, LOCK_EX);
190 :    
191 :     open(PBAK, ">$FIG_Config::global/pending_similarities.$$");
192 :     seek(PEND, 0, 0);
193 :    
194 :     while (<PEND>)
195 :     {
196 :     chomp;
197 :     if (/(\S+)/)
198 :     {
199 :     print PBAK "$1\n";
200 :     }
201 :     }
202 :     close(PBAK);
203 :    
204 :     open(PBAK, "<$FIG_Config::global/pending_similarities.$$");
205 :     seek(PEND, 0, 0);
206 :     truncate(PEND, 0);
207 :     while (<PBAK>)
208 :     {
209 :     chomp;
210 :     if (not $ids{$_})
211 :     {
212 :     print PEND "$_\n";
213 :     }
214 :     }
215 :     close(PEND);
216 :     close(PBAK);
217 :     }
218 :     }
219 :     else
220 :     {
221 :     die "Cannot open ids list: $!\n";
222 :     }
223 :     }
224 :    
225 :     =head3 update_postprocess_list
226 :    
227 :     Add the ids in the sim bundle to the postprocessing queues
228 :    
229 :     =cut
230 :    
231 :     sub update_postprocess_list
232 :     {
233 :     my($sim_dir) = @_;
234 :    
235 :     my $qdir = "$FIG_Config::global/postproc_queues";
236 :     &FIG::verify_dir($qdir);
237 :    
238 :     my $lockfile = "$qdir/qlock";
239 :    
240 :     open(LOCK, ">$lockfile") or die "Cannot open $lockfile: $!\n";
241 :    
242 :     flock(LOCK, LOCK_EX) or die "Flock $lockfile failed: $!\n";
243 :    
244 :     if (open(P, "<$sim_dir/ids"))
245 :     {
246 :     my %fh;
247 :     my @fh;
248 :     for my $queue (@postprocess_job_queues)
249 :     {
250 :     my $qfile = "$qdir/$queue";
251 :     my $fh = new FileHandle(">>$qfile");
252 :     $fh or die "Cannot open $qfile for append: $!\n";
253 :     $fh{$queue} = $fh;
254 :     push(@fh, $fh);
255 :     }
256 :    
257 :     while (<P>)
258 :     {
259 :     for my $fh (@fh)
260 :     {
261 :     print $fh $_;
262 :     }
263 :     }
264 :     close(P);
265 :     map { close($_) } @fh;
266 :     }
267 :     else
268 :     {
269 :     die "Cannot open ids list: $!\n";
270 :     }
271 :     }
272 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3