[Bio] / FigWebServices / pir.cgi Repository:
ViewVC logotype

Annotation of /FigWebServices/pir.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.29 - (view) (download)

1 : redwards 1.1 # -*- perl -*-
2 :    
3 :     =pod
4 :    
5 :     =head1
6 :    
7 :     Compare some data between SEED and PIR. We probably need to add things like p2p or automatic ftp gets or something like that
8 :    
9 :     =cut
10 :    
11 :     use strict;
12 :     use FIG;
13 :     use HTML;
14 :     use raelib;
15 :     use CGI;
16 :     my $cgi=new CGI;
17 : redwards 1.22 use LWP::Simple qw(!head); # see the caveat in perldoc LWP about importing two head methods.
18 : redwards 1.1
19 :     my $fig;
20 :     eval {
21 :     $fig = new FIG;
22 :     };
23 :    
24 :     if ($@ ne "")
25 :     {
26 :     my $err = $@;
27 :    
28 :     my(@html);
29 :    
30 :     push(@html, $cgi->p("Error connecting to SEED database."));
31 :     if ($err =~ /Could not connect to DBI:.*could not connect to server/)
32 :     {
33 :     push(@html, $cgi->p("Could not connect to relational database of type $FIG_Config::dbms named $FIG_Config::db on port $FIG_Config::dbport."));
34 :     }
35 :     else
36 :     {
37 :     push(@html, $cgi->pre($err));
38 :     }
39 :     &HTML::show_page($cgi, \@html, 1);
40 :     exit;
41 :     }
42 :    
43 :    
44 :    
45 :     $ENV{"PATH"} = "$FIG_Config::bin:$FIG_Config::ext_bin:" . $ENV{"PATH"};
46 :    
47 : redwards 1.22
48 :     # these should probably be in FIG::Config. Oh well.
49 :     my $pir_file_from_pir="$FIG_Config::data/Global/pirsfinfo.dat";
50 :     my $pir_correspondence_file="$FIG_Config::data/Global/pirsfcorrespondence.txt";
51 :     my $pir_source_file="ftp://ftp.pir.georgetown.edu/pir_databases/pirsf/data/pirsfinfo.dat";
52 :    
53 :     # ha ha ha ha ha
54 :     # I am an idiot, and can't spell. so we need to correct that and make sure we always use an e
55 :     if (-e "$FIG_Config::data/Global/pirsfcorrespondance.txt") {rename("$FIG_Config::data/Global/pirsfcorrespondance.txt", $pir_correspondence_file)}
56 :    
57 :    
58 :    
59 : redwards 1.1 my $html = [];
60 :     my $user = $cgi->param('user');
61 :    
62 : redwards 1.19 unshift(@$html, "<TITLE>The SEED - PIR/SEED comparisons </TITLE>\n");
63 : redwards 1.1 # make sure that we read the file at the beginning
64 : redwards 1.26
65 :     unless (-e $pir_file_from_pir) {$html=&check_updates($html); &HTML::show_page($cgi,$html,1); exit(0)}
66 : redwards 1.22 my ($pegbypir, $pirid) =&read_pir_file("initial");
67 :    
68 : redwards 1.1
69 :    
70 : redwards 1.17 if ($cgi->param('submit') eq "Tabulate summary") {
71 : redwards 1.9 $html=&table_annotations($html, $pegbypir, $pirid);
72 : redwards 1.22 push @$html, $cgi->p({class=>"diagnostic"}, ("\n<small>Generating this table took approximately " . (time-$^T) . " seconds\n</small>"));
73 :     }
74 : redwards 1.24 elsif ($cgi->param('submit') =~ m/^Update/) {
75 :     # this should catch Update Data and Updata Anyway
76 :     $html=&update_data($html);
77 :     }
78 : redwards 1.28 elsif ($cgi->param('submit') eq "Create Download File") {
79 :     print STDERR "Creating download file\n";
80 :     $html=&create_download_file($html);
81 :     push @$html, $cgi->p({class=>"diagnostic"}, ("\n<small>Generating this table took approximately " . (time-$^T) . " seconds\n</small>"));
82 :     }
83 : redwards 1.22 elsif ($cgi->param('submit') eq "Check for updates") {
84 :     $html=&check_updates($html);
85 :     push @$html, $cgi->p({class=>"diagnostic"}, ("\n<small>Checking for updates took approximately " . (time-$^T) . " seconds\n</small>"));
86 : redwards 1.5 }
87 : redwards 1.17 elsif ($cgi->param('pirsf') && !($cgi->param('submit') eq "Update view")) {
88 : overbeek 1.21 # we want to display one of the correspondences
89 : redwards 1.5 my $selfurl=$cgi->url;
90 : redwards 1.23 push @$html, $cgi->p, "<a href=\"/FIG/Html/pir.html#correspondence\" class=\"help\" target=\"pirhelp\">Help on this correspondence table</a>";
91 : redwards 1.22 if ($cgi->param('ssonly')) {push @$html, "<a href=\"$selfurl?pirsf=" . $cgi->param("pirsf") . "&user=$user\">Show All Matches</a>\n"}
92 :     else {push @$html, "<a href=\"$selfurl?pirsf=" . $cgi->param("pirsf") . "&ssonly='1'&user=$user\">Show only matches with a subsystem</a>\n"}
93 : redwards 1.5
94 : overbeek 1.21 my $col_hdrs = ["PIR Superfamily<br><small>Link goes to PIR<small>", "Genome", "UniProt","PEG", "FIG Function", "FIG Subsystem"];
95 : redwards 1.1 my $tab = [];
96 : redwards 1.22
97 :     # figure out the colors
98 : redwards 1.23 my %color;
99 :     {
100 :     my %function_cnt; my $max;
101 :     foreach my $peg (@{$pegbypir->{$cgi->param('pirsf')}}) {
102 :     $function_cnt{scalar $fig->function_of($peg)}++;
103 :     }
104 :    
105 :     my @all_functions=sort {$function_cnt{$b} <=> $function_cnt{$a}} keys %function_cnt;
106 :     my @color=&cool_colors();
107 :    
108 :     for (my $i=0; $i<=$#all_functions; $i++) {
109 :     if ($i > $#color) {$color{$all_functions[$i]}="#FFFFFF"}
110 :     else {$color{$all_functions[$i]}=$color[$i]}
111 :     }
112 : redwards 1.22 }
113 :    
114 : redwards 1.2 foreach my $peg (@{$pegbypir->{$cgi->param('pirsf')}}) {
115 : redwards 1.1 my @sslinks;
116 :     foreach my $subsys ($fig->subsystems_for_peg($peg)) {
117 : redwards 1.22 my $spaced=$$subsys[0];
118 :     $spaced =~ s/_/ /g;
119 :     push @sslinks, $cgi->a({href => "subsys.cgi?&user=$user&ssa_name=" . $$subsys[0] . "&request=show_ssa"}, $spaced);
120 : redwards 1.1 }
121 :    
122 :     my $pirlink=$cgi->param('pirsf');
123 : redwards 1.2 $pirlink =~ /^PIR(SF\d+)/;
124 :     $pirlink="<a href='http://pir.georgetown.edu/sfcs-cgi/new/pirclassif.pl?id=$1'>PIR$1</a>" . $pirid->{$cgi->param('pirsf')};
125 : redwards 1.4 next if ($cgi->param("ssonly") && !(scalar @sslinks));
126 : redwards 1.22 push (@$tab,
127 :     [$pirlink,
128 :     $fig->genus_species($fig->genome_of($peg)),
129 :     &HTML::uni_link($cgi,$fig->to_alias($peg,"uni")),
130 :     &HTML::fid_link($cgi, $peg, 1),
131 : redwards 1.23 [scalar $fig->function_of($peg), "td style=\"background: $color{scalar $fig->function_of($peg)}\""],
132 : redwards 1.22 (join ", ", @sslinks)]
133 :     );
134 : redwards 1.1 }
135 : redwards 1.22 push(@$html,&HTML::make_table($col_hdrs,$tab,"\nCorrespondence between SEED and PIR"));
136 : redwards 1.1 }
137 :     else {
138 :     unshift @$html, "<TITLE>The SEED - PIR comparison page</TITLE>\n";
139 :     &show_initial($fig,$cgi,$html);
140 :     }
141 :    
142 :     &HTML::show_page($cgi,$html,1);
143 :     exit;
144 :    
145 :    
146 :    
147 :    
148 :    
149 :     sub show_initial {
150 :     my ($fig,$cgi,$html)=@_;
151 :     # generate a blank page
152 :     # we want a list of all functions that have >= 1 peg unless we want all
153 :     my $min=10;
154 :     if ($cgi->param("min")) {$min=$cgi->param("min")}
155 :     if ($cgi->param("showall")) {$min=0}
156 :     my $full=1;
157 :     if ($cgi->param("preliminary")) {$full=0}
158 :     # count different subsystems per sf
159 : redwards 1.26 my $textlimit;
160 :     $cgi->param('textlimit') && ($textlimit = $cgi->param('textlimit'));
161 : redwards 1.1 my $ss; my @pirsf;
162 : redwards 1.2 foreach my $sf (keys %$pegbypir) {
163 :     next unless ($pegbypir->{$sf});
164 :     next unless (scalar @{$pegbypir->{$sf}} >= $min);
165 :     next if ($full && $pirid->{$sf} =~ /\(preliminary\)/i);
166 :     next if (!$full && $pirid->{$sf} =~ /\(full/i);
167 : redwards 1.26 next if ($textlimit && !($pirid->{$sf} =~ m/$textlimit/i || $sf =~ m/$textlimit/i));
168 : redwards 1.1 push @pirsf, $sf;
169 :     if ($cgi->param('showsubsys')) {
170 : redwards 1.2 foreach my $peg (@{$pegbypir->{$sf}}) {
171 : redwards 1.1 foreach my $subsys ($fig->subsystems_for_peg($peg)) {
172 :     $ss->{$sf}->{$$subsys[0]}++;
173 :     }
174 :     }
175 :     }
176 :     }
177 : redwards 1.26
178 : redwards 1.1 # now generate the labels
179 :     my $display;
180 :     foreach my $sf (@pirsf) {
181 :     next unless ($sf);
182 : redwards 1.26 my $displayname=$sf . " " . $pirid->{$sf};
183 : redwards 1.1 if (length($displayname) > 50) {$displayname=substr($displayname, 0, 50)}
184 : redwards 1.2 if ($cgi->param('showsubsys')) {$display->{$sf}=$displayname . " [". scalar @{$pegbypir->{$sf}} . "/". (scalar keys %{$ss->{$sf}}) . "]"}
185 :     else {$display->{$sf}=$displayname . " [". scalar @{$pegbypir->{$sf}} . "]"}
186 : redwards 1.1 }
187 :    
188 : redwards 1.27 my $numberpirfams=scalar keys %$display;
189 : redwards 1.26 unshift @pirsf, ''; $display->{''}='';
190 :     my $size=10;
191 : redwards 1.27 if ($numberpirfams < $size) {$size=$numberpirfams}
192 : redwards 1.28
193 :     # info about the file that they can download
194 : redwards 1.29 my $ftpfile='<p>The comparison file has not been built yet. Please proceed.</p>';
195 : redwards 1.28 if (-e "$FIG_Config::temp/seed2pir.txt") {
196 :     my @stat=stat("$FIG_Config::temp/seed2pir.txt");
197 : redwards 1.29 $ftpfile="<p>The comparison file was last built at ". localtime($stat[8]) . "</p>\n".
198 :     "<p>You may download the file from <a href=\"" . $FIG_Config::temp_base . "seed2pir.txt\">seed2pir.txt</a></p>\n";
199 : redwards 1.28 }
200 :    
201 : redwards 1.1 push (@$html, $cgi->start_form(-action => "pir.cgi"),
202 :     $cgi->h2("Please choose your super family"),
203 : redwards 1.22 "\nFirst, please enter a username: ", $cgi->textfield(-name=>"user", -value=>$user), $cgi->p,
204 : redwards 1.23 "\n<a href=\"/FIG/Html/pir.html\" class=\"help\" target=\"pirhelp\">Help on SEED/PIR Correspondence</a>",
205 : redwards 1.22 "\nThe list shows the PIR superfamilies. If only one number is shown (default) this is the number of PEGs that map to that superfamily. ",
206 :     "\nIf you choose to show subsystem counts in this menu, you will get two numbers. The first of the two numbers in parenthesis is the number ",
207 :     "\nof PEGs that map to that superfamily, and the second number in parenthesis is the number of <em>different</em> ",
208 :     "\nsubsystems that those PEGs are in.\n", $cgi->p,"\n",
209 : redwards 1.28 $cgi->scrolling_list(-name=>'pirsf', -values=>[keys %$display], -labels=>$display, -size=>$size+1), $cgi->p,"\n",
210 : redwards 1.27 "\nNumber of superfamilies shown: ", $numberpirfams, $cgi->p,"\n",
211 : redwards 1.23 "\n<a href=\"/FIG/Html/pir.html#menu\" class=\"help\" target=\"pirhelp\">Help on the menu contents</a>","\n",
212 : redwards 1.22 "\nMinimum number of pegs per PIR superfamily shown in list &nbsp; <input type='text' name='min' value='$min' size=3 />","\n",
213 :     "\nor show all PIR superfamilies: ", $cgi->checkbox(-name=>"showall", -label=>""), $cgi->p,"\n",
214 :     $cgi->checkbox(-name=>"showsubsys", -label=>"Show subsystem counts in list"), $cgi->p,"\n",
215 :     $cgi->checkbox(-name=>"preliminary", -label=>"Show only preliminary PIR superfamilies"), $cgi->p,"\n",
216 : redwards 1.26 "Limit the list to some text: ", $cgi->textfield(-name=>'textlimit', -size=>20), $cgi->p, "\n",
217 :     $cgi->submit('submit', 'Recreate List'),"\n",
218 : redwards 1.22 $cgi->submit('submit', 'Show Correspondence'),"\n",
219 :     $cgi->reset,"\n",
220 :     $cgi->p, $cgi->hr, $cgi->p,"\n",
221 :     $cgi->p("<strong>Generate Data Tables</strong>"),
222 : redwards 1.23 "<a href=\"/FIG/Html/pir.html#datatables\" class=\"help\" target=\"pirhelp\">Help on Generating Data Tables</a>",
223 : redwards 1.22 $cgi->p("The data tables are an alternative way to view the data in summary form. For the summary of the comparisons between PIR and SEED annotations, please check here:\n"),
224 :     $cgi->checkbox(-name=>"onlyss", -label=>"Show only those PEGs that are in a subsystem and a superfamily", -checked=>"on"), $cgi->p,"\n",
225 :     $cgi->checkbox(-name=>"totalsort", -label=>"Sort by the total number of different annotations"), $cgi->p,"\n",
226 :     $cgi->submit('submit', 'Tabulate summary'),"\n",
227 :     $cgi->reset,"\n",
228 :     $cgi->p, $cgi->hr, "\n",
229 :     $cgi->p("<strong>Check for Updates</strong>"),"\n",
230 : redwards 1.23 "<a href=\"/FIG/Html/pir.html#updates\" class=\"help\" target=\"pirhelp\">Help on updates</a>", "\n",
231 : redwards 1.22 $cgi->p("Please click the button to check the PIR site and see whether there is a new version of the PIR superfamily data you should use"),"\n",
232 :     $cgi->submit('submit', 'Check for updates'),"\n",
233 : redwards 1.28
234 :     $cgi->p, $cgi->hr, $cgi->p,"\n",
235 :     $cgi->p("<strong>Data for PIR</strong>"),
236 :     "<a href=\"/FIG/Html/pir.html#ftpdown\" class=\"help\" target=\"pirhelp\">Help on Data for PIR</a>\n",
237 : redwards 1.29 $ftpfile,
238 : redwards 1.28 $cgi->p("Please click the button to create a new file.\n"),
239 :     $cgi->submit('submit', 'Create Download File'),"\n",
240 :    
241 : redwards 1.1 $cgi->end_form,
242 :     );
243 :    
244 :     }
245 :    
246 :    
247 :    
248 :     =head1 read_pir_file
249 :    
250 :     Read the PIR data file that describes superfamilies and the PIR proteins that have those families.
251 :     The PIR data file is from ftp://ftp.pir.georgetown.edu/pir_databases/pirsf/data/pirsfinfo.dat and
252 :     contains the family name beginning with a > and then a list of PIR ids.
253 :    
254 : redwards 1.2 I split this using the PIRSF\d+ and return two hashes. One that correlates PIRSF\d+ to fig id and one
255 :     that correlates it to superfamily names.
256 : redwards 1.1
257 :     =cut
258 :    
259 :     sub read_pir_file {
260 : redwards 1.22 unless (-e $pir_file_from_pir) {
261 : redwards 1.23 # background the job here
262 :     &update_data($html);
263 :     }
264 : redwards 1.22 # just read the file, convert it to an HTML table and return it
265 :     unless (-e $pir_correspondence_file) {
266 :     #print STDERR "Can't find the correspondence file pirsfcorrespondence.txt so we are going to make it\n";
267 :     raelib->pirsfcorrespondence($pir_file_from_pir, $pir_correspondence_file);
268 : redwards 1.23 push @$html, "<h2 style=\"background: red\">The PIR correspondence file was rebuilt for you</h2>";
269 : redwards 1.1 }
270 : redwards 1.22 open (IN, $pir_correspondence_file) || die "Can't open $pir_correspondence_file";
271 : redwards 1.1 my $pir;
272 : redwards 1.2 my $functions;
273 :     my $id;
274 : redwards 1.1 my $added;
275 :     while (<IN>) {
276 :     chomp;
277 :     if (s/^>//) {
278 :     unless ($added) {
279 :     # we didn't find anything that maps here
280 : redwards 1.2 $pir->{$id}=undef;
281 : redwards 1.1 }
282 : redwards 1.2 /^(PIRSF\d+)\s+(.*?)$/;
283 :     $id=$1;
284 :     $functions->{$id}=$2;
285 : redwards 1.1 undef $added;
286 :     }
287 :     else {
288 : redwards 1.2 my ($pirid, $peg)=split /\t/;
289 : redwards 1.1 next unless ($peg);
290 : redwards 1.2 push @{$pir->{$id}}, $peg;
291 : redwards 1.1 $added=1;
292 :     }
293 :     }
294 : redwards 1.2 return $pir, $functions;
295 : redwards 1.1 }
296 : redwards 1.5
297 : redwards 1.9 =head1 table_annotations
298 : redwards 1.5
299 : redwards 1.9 Return a table sorted by the number of annotations, and list a bunch of stuff
300 : redwards 1.5
301 :     =cut
302 :    
303 : redwards 1.9 sub table_annotations {
304 :     my ($html, $pegbypir, $pirid)=@_;
305 : redwards 1.12 my $count; my $subsystems; my $countinss;
306 : redwards 1.9 foreach my $sf (keys %$pegbypir) {
307 : redwards 1.12 my $function; my $ss; my $functionandss;
308 : redwards 1.9 foreach my $peg (@{$pegbypir->{$sf}}) {
309 : redwards 1.13 my $fn=scalar $fig->function_of($peg);
310 : redwards 1.16 my $newss=0; # this is a boolean to see whether this peg has a subsys associated with it.
311 :     foreach my $subsys ($fig->subsystems_for_peg($peg)) {$ss->{$$subsys[0]}++; $newss++}
312 : redwards 1.13 $function->{$fn}++;
313 : redwards 1.16 $functionandss->{$fn}++ if ($newss);
314 : redwards 1.5 }
315 : redwards 1.9 $subsystems->{$sf}=join "; ", keys %$ss;
316 :     $count->{$sf}=scalar keys %$function;
317 : redwards 1.12 $countinss->{$sf}=scalar keys %$functionandss;
318 : redwards 1.5 }
319 :    
320 : redwards 1.12 my $col_hdrs = ["Number of annotations in subsystems", "Number of SEED annotations", "PIRSF<br><small>(Link goes to SEED/PIR comparison)</small>",
321 : redwards 1.6 "Superfamily name", "Subsystems in superfamily"];
322 : redwards 1.10 my $tab; my $lastcount; my $row;
323 : redwards 1.12 # note we are going to make a new table every 200 or so rows because that way the browsers don't get messed up. We actually increment between two identical counts
324 :     my @superfamilies=sort {$countinss->{$b} <=> $countinss->{$a}} keys %$count;
325 :     if ($cgi->param('totalsort')) {@superfamilies=sort {$count->{$b} <=> $count->{$a}} keys %$count}
326 :     foreach my $sf (@superfamilies) {
327 :     next if ($cgi->param('onlyss') && !($countinss->{$sf}));
328 : redwards 1.10 $row++;
329 : redwards 1.9 if ($lastcount ne $count->{$sf}) {
330 :     $lastcount=$count->{$sf};
331 : redwards 1.12 if ($tab && ($row > 200)) {
332 : redwards 1.10 push(@$html,&HTML::make_table($col_hdrs,$tab,""));
333 : redwards 1.18 my $et=time-$^T;
334 :     print STDERR "pir.cgi: Added to table at $lastcount after $et total seconds\n";
335 : redwards 1.10 $row=0;
336 :     undef $tab;
337 :     }
338 : redwards 1.9 }
339 :     push @$tab, [
340 : redwards 1.22 "\n".$countinss->{$sf},
341 : redwards 1.9 $count->{$sf},
342 : redwards 1.22 "<a href=\"/FIG/pir.cgi?pirsf=$sf&ssonly='1'&user='$user'\">$sf</a>",
343 : redwards 1.9 $pirid->{$sf},
344 :     $subsystems->{$sf},
345 :     ];
346 : redwards 1.5 }
347 : redwards 1.6 push(@$html,&HTML::make_table($col_hdrs,$tab,""));
348 : redwards 1.5 return $html;
349 :     }
350 : redwards 1.22
351 :    
352 :     =pod
353 :    
354 :     =head2 check_updates()
355 :    
356 :     Check the PIR remote site and see whether there are updates that we need to get
357 :    
358 :     =cut
359 :    
360 :     sub check_updates {
361 :     my $html=shift;
362 :    
363 :     # first lets see if we can get the times of the updates to see if we have a newer file
364 :     # using LWP::Simple. this is straight from the perldoc
365 :     my ($content_type, $document_length, $remotemtime, $expires, $server)=LWP::Simple::head($pir_source_file);
366 :     my $localmtime=0;
367 :     # if we don't have the file yet, we don't want to panic!
368 :     if (-e $pir_file_from_pir) {
369 :     my @stat=stat($pir_file_from_pir);
370 :     $localmtime=$stat[8];
371 :     }
372 :     # now we are going to translate the difference in times into some English for the website
373 :     if (!$remotemtime) {
374 :     push @$html, $cgi->p({class=>"error"}, "Could not connect to PIR to check the status of the PIR file. Please check the location of $pir_source_file");
375 :     }
376 :     elsif ($remotemtime > $localmtime) {
377 :     # the remote version is newer
378 :     push @$html, $cgi->p("\nThe remote file $pir_source_file is newer than your current file. You should proceed with the update."),
379 :     $cgi->p("\nThe remote file was modified on ". scalar(localtime($remotemtime))),
380 :     $cgi->p("\nThe local file was modified on ". scalar(localtime($localmtime))),
381 :     $cgi->start_form(), $cgi->hidden(-name=>"user", -value=>$user), $cgi->submit('submit', 'Update Data'), $cgi->end_form();
382 :     }
383 :     else {
384 :     # the local version is as new as the remote one.
385 :     push @$html, $cgi->p("\nThe local file is up to date and there is no need to update your source PIR superfamilies."),
386 :     $cgi->p("\nThe remote file was modified on ". scalar(localtime($remotemtime))),
387 :     $cgi->p("\nThe local file was modified on ". scalar(localtime($localmtime))),
388 :     $cgi->start_form(), $cgi->hidden(-name=>"user", -value=>$user), $cgi->submit('submit', 'Update Anyway'), $cgi->end_form();
389 :     }
390 :    
391 :     return $html;
392 :     }
393 :    
394 :    
395 :     =pod
396 :    
397 :     =head2 update_data()
398 :    
399 :     Download the new data file from pir, and generate the correspondence
400 :    
401 :     =cut
402 :    
403 :     sub update_data {
404 :     # rename the old correspondence file. We are going to add a number to the old file so that we keep it, but this should allow us
405 :     # to save the information for a while in case something happens. At somepoint we should probably move these to /tmp or delete them
406 :     # or something.
407 :     my $html=shift;
408 : redwards 1.23
409 :     # here we need to background downloading and installing the data.
410 :     my $bkj=$fig->run_in_background(sub
411 :     {
412 : redwards 1.25 my $time=time;
413 :     print "Loading new PIR superfamily data started at ", scalar(localtime($time)), "\n";
414 : redwards 1.24 system("load_pirsf 1");
415 : redwards 1.25 print "Complete at ", scalar(localtime(time)), ". Running took ", (time-$time)/60, " minutes\n";
416 : redwards 1.23 }
417 :     );
418 :    
419 : redwards 1.24 push @$html, "<h2>Downloading and installing new data has started</h2>",
420 :     "<p>The job has started in the background but will likely take some time.<br />\n",
421 :     "The job has an ID of $bkj, and you can check it out from the <A href=\"/FIG/seed_ctl.cgi\">SEED Control Panel</a></p>\n",
422 :     "<p>You should not use the PIR superfamilies while the job is runnning</p>\n";
423 : redwards 1.28 return $html;
424 :     }
425 : redwards 1.23
426 : redwards 1.28
427 :     sub create_download_file {
428 :     my $html=shift;
429 :     my $bkj=$fig->run_in_background(sub
430 :     {
431 :     my $time=time;
432 :     print "Generating PIR/SEED correspondance from SEED side began at ", scalar(localtime($time)), "\n";
433 :     system("seed2pir > $FIG_Config::temp/seed2pir.txt");
434 :     print "Complete at ", scalar(localtime(time)), ". Running took ", (time-$time)/60, " minutes\n";
435 :     }
436 :     );
437 :    
438 :     push @$html, "<h2>Creating your data has started</h2>",
439 :     "<p>The job has started in the background but will likely take some time.<br />\n",
440 :     "The job has an ID of $bkj, and you can check it out from the <A href=\"/FIG/seed_ctl.cgi\">SEED Control Panel</a></p>\n";
441 : redwards 1.23 return $html;
442 : redwards 1.22 }
443 :    
444 :    
445 : redwards 1.28
446 :    
447 : redwards 1.22
448 :    
449 :    
450 :     sub cool_colors {
451 :     # just an array of "websafe" colors or whatever colors we want to use. Feel free to remove bad colors (hence the lines not being equal length!)
452 :     return (
453 :     '#C0C0C0', '#FF40C0', '#FF8040', '#FF0080', '#FFC040', '#40C0FF', '#40FFC0', '#C08080', '#C0FF00', '#00FF80', '#00C040',
454 :     "#6B8E23", "#483D8B", "#2E8B57", "#008000", "#006400", "#800000", "#00FF00", "#7FFFD4",
455 :     "#87CEEB", "#A9A9A9", "#90EE90", "#D2B48C", "#8DBC8F", "#D2691E", "#87CEFA", "#E9967A", "#FFE4C4", "#FFB6C1",
456 :     "#E0FFFF", "#FFA07A", "#DB7093", "#9370DB", "#008B8B", "#FFDEAD", "#DA70D6", "#DCDCDC", "#FF00FF", "#6A5ACD",
457 :     "#00FA9A", "#228B22", "#1E90FF", "#FA8072", "#CD853F", "#DC143C", "#FF6347", "#98FB98", "#4682B4",
458 :     "#D3D3D3", "#7B68EE", "#FF7F50", "#FF69B4", "#BC8F8F", "#A0522D", "#DEB887", "#00DED1",
459 :     "#6495ED", "#800080", "#FFD700", "#F5DEB3", "#66CDAA", "#FF4500", "#4B0082", "#CD5C5C",
460 :     "#EE82EE", "#7CFC00", "#FFFF00", "#191970", "#FFFFE0", "#DDA0DD", "#00BFFF", "#DAA520",
461 :     "#00FF7F", "#9400D3", "#BA55D3", "#D8BFD8", "#8B4513", "#3CB371", "#5F9EA0", "#4169E1", "#20B2AA", "#8A2BE2", "#ADFF2F",
462 :     "#F0FFFF", "#B0E0E6", "#FF1493", "#B8860B", "#FF0000", "#F08080", "#7FFF00", "#8B0000",
463 :     "#40E0D0", "#0000CD", "#48D1CC", "#8B008B", "#696969", "#AFEEEE", "#FF8C00", "#EEE8AA", "#A52A2A",
464 :     "#FFE4B5", "#B0C4DE", "#FAF0E6", "#9ACD32", "#B22222", "#FAFAD2", "#808080", "#0000FF",
465 :     "#000080", "#32CD32", "#FFFACD", "#9932CC", "#FFA500", "#F0E68C", "#E6E6FA", "#F4A460", "#C71585",
466 :     "#BDB76B", "#00FFFF", "#FFDAB9", "#ADD8E6", "#778899",
467 :     );
468 :     }
469 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3