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

Annotation of /FigWebServices/ss_export.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download)

1 : olson 1.1 use FIG;
2 :     use CGI;
3 :     use HTML;
4 :    
5 :     use List::Util;
6 :     use File::Spec;
7 :     use strict;
8 :    
9 :     my $cgi = new CGI;
10 :     my $fig = new FIG();
11 :    
12 :     my $user = $cgi->param("user");
13 :     my $subsystem = $cgi->param("ssa_name");
14 :    
15 :     my $html = [];
16 :    
17 :     #
18 :     # Decide what to do.
19 :     #
20 :     # If button_export is set, we're doing an export.
21 :     #
22 :     # Otherwise we're just updating the page.
23 :     #
24 :    
25 :     if ($cgi->param("export_button"))
26 :     {
27 :     my $sub = $fig->get_subsystem($subsystem);
28 :    
29 :     my(@roles, @genomes);
30 :    
31 :     for my $p ($cgi->param)
32 :     {
33 :    
34 :     if ($p =~ /export_genome_(\d+)/)
35 :     {
36 :     push(@genomes, $1);
37 :     }
38 :     elsif ($p =~ /export_role_(\d+)/)
39 :     {
40 :     push(@roles, $1);
41 :     }
42 :     }
43 :    
44 :    
45 :     #
46 :     # We will export a file for each genome (for each selected subsystem),
47 :     # for each subsystem (for each selected genome),
48 :     # and for all selected sequences.
49 :     #
50 :    
51 :     my $tmp = File::Spec->catfile($FIG_Config::temp, "export_$$");
52 :     &FIG::verify_dir($tmp);
53 :    
54 :     chdir($tmp);
55 :    
56 :     #
57 :     # Write the role exports.
58 :     #
59 :    
60 :     for my $role (@roles)
61 :     {
62 :     my $file = "role_$role.fasta";
63 :     open(my $fh, ">$file");
64 :     for my $g (@genomes)
65 :     {
66 :     my $gname = $sub->get_genome($g);
67 :     my $entry = $sub->get_cell($g, $role);
68 :     if ($entry)
69 :     {
70 :     for my $peg (@$entry)
71 :     {
72 :     my @location = $fig->feature_location($peg);
73 :     if (@location > 0)
74 :     {
75 :     my $seq = $fig->dna_seq($gname, @location);
76 :     &FIG::display_id_and_seq($peg, \$seq, $fh);
77 :     }
78 :     }
79 :     }
80 :     }
81 :     close($fh);
82 :     }
83 :    
84 :     #
85 :     # Write the genome exports, and while we're at it, write the
86 :     # all-sequences file.
87 :     #
88 :    
89 :     open(my $all_fh, ">all.fasta");
90 :    
91 :     for my $g (@genomes)
92 :     {
93 :     my $gname = $sub->get_genome($g);
94 :     my $file = "genome_$g.fasta";
95 :    
96 :     open(my $fh, ">$file");
97 :     for my $role (@roles)
98 :     {
99 :     my $entry = $sub->get_cell($g, $role);
100 :     if ($entry)
101 :     {
102 :     for my $peg (@$entry)
103 :     {
104 :     my @location = $fig->feature_location($peg);
105 :     if (@location > 0)
106 :     {
107 :     my $seq = $fig->dna_seq($gname, @location);
108 :     &FIG::display_id_and_seq($peg, \$seq, $fh);
109 :     &FIG::display_id_and_seq($peg, \$seq, $all_fh);
110 :     }
111 :     }
112 :     }
113 :     }
114 :     close($fh);
115 :     }
116 :     close($all_fh);
117 :    
118 :     # print "Content-Type: application/x-tar\n";
119 :     print "Content-Disposition:attachment;filename=$subsystem.tar.gz\n";
120 :     print "Content-Type: application/octet-stream\n";
121 :     # print "Content-Encoding: x-gzip\n";
122 :     print "\n";
123 :     system("tar czf - .");
124 :    
125 :     chdir("..");
126 :     system("rm -r $tmp");
127 :    
128 :     exit;
129 :     }
130 :    
131 :     push(@$html, $cgi->start_form(-action => "ss_export.cgi",
132 :     -method => "post"),
133 :     $cgi->hidden(-name => 'user', -value => $user, -override => 1),
134 :     $cgi->hidden(-name => 'ssa_name', -value => $subsystem, -override => 1),
135 :     $cgi->h2("Showing genomes for $subsystem\n"),
136 :     );
137 :    
138 :     #
139 :     # Show the selection list for limiting to family.
140 :     #
141 :    
142 :     my $taxonomic_groups = $fig->taxonomic_groups_of_complete(10);
143 :    
144 :     my @group_names = sort grep { $_ ne "All" } map { $_->[0] } @$taxonomic_groups;
145 :    
146 :     unshift(@group_names, "All");
147 :    
148 :     #
149 :     # Display in a scrolling list.
150 :     #
151 :    
152 :     push(@$html,
153 :     $cgi->h2("Limit genomes shown to group:"),
154 :     $cgi->scrolling_list(-name => 'limit_genome',
155 :     -values => [@group_names],
156 :     -default => "All",
157 :     -size => 5,
158 :     -multiple => 1),
159 :     );
160 :    
161 :    
162 :     #
163 :     # Determine if we're limiting genomes, and only use
164 :     # genomes from that group if we are.
165 :     #
166 :    
167 :     my @limit_genome = $cgi->param("limit_genome");
168 :     my %desired_genomes;
169 :    
170 :     if (grep({$_ eq "All"} @limit_genome))
171 :     {
172 :     @limit_genome = ();
173 :     }
174 :    
175 :     if (@limit_genome)
176 :     {
177 :     for my $limit_genome (@limit_genome)
178 :     {
179 :     my @list = grep({ $_->[0] eq $limit_genome } @$taxonomic_groups);
180 :     for my $litem (@list)
181 :     {
182 :     grep({ $desired_genomes{$_}++ } @{$litem->[1]});
183 :     }
184 :     }
185 :     }
186 :    
187 :     #
188 :     # And submit.
189 :     #
190 :    
191 :     push(@$html,
192 :     $cgi->p,
193 :     $cgi->submit(-label => "Update page",
194 :     -name => 'update_button'),
195 :     $cgi->br,
196 :     $cgi->submit(-label => "Export sequences",
197 :     -name => 'export_button'));
198 :    
199 :     #
200 :     # Build the table.
201 :     #
202 :     # Each row is an organism.
203 :     # Each column is a role.
204 :     #
205 :    
206 :     my $sub = $fig->get_subsystem($subsystem);
207 :    
208 :     my @roles = $sub->get_roles();
209 :     my @genomes;
210 :    
211 :     #
212 :     # Filter genome list based on @limit_genome list.
213 :     #
214 :    
215 :     if (@limit_genome)
216 :     {
217 :     for my $g ($sub->get_genomes())
218 :     {
219 :     push(@genomes, $g) if $desired_genomes{$g};
220 :     }
221 :     }
222 :     else
223 :     {
224 :     @genomes = $sub->get_genomes();
225 :    
226 :     }
227 :    
228 :     #
229 :     # Columns are:
230 :     # 1. Genome id
231 :     # 2. Organism name
232 :     # 3. Export-genome checkbox
233 :     # 4-n. Pegs for role (c-3).
234 :     #
235 :     # Rows are:
236 :     # 1. Headers
237 :     # 2. Export-role checkbox
238 :     # 3-n. Pegs for genome (r-2).
239 :     #
240 :    
241 :     my @col_hdrs = ("Genome", "Organism", "Export", @roles);
242 :    
243 :     my @export_roles = map { $cgi->checkbox(-name => "export_role_$_",
244 :     -checked => 1,
245 :     -value => 1,
246 :     -label => "");
247 :     } 1..@roles;
248 :     unshift(@export_roles, "", "", "");
249 :    
250 :     my @table;
251 :    
252 :     push(@table, \@export_roles);
253 :    
254 :     #
255 :     # Now run thru the genomes.
256 :     #
257 :    
258 :     for my $g (@genomes)
259 :     {
260 :     my $row = [];
261 :    
262 :     my $idx = $sub->get_genome_index($g);
263 :     push(@$row, $g);
264 :     push(@$row, $fig->genus_species($g));
265 :     push(@$row, $cgi->checkbox(-name => "export_genome_$idx",
266 :     -checked => 1,
267 :     -value => 1,
268 :     -label => ""));
269 :     for my $role (@roles)
270 :     {
271 :     #
272 :     # Get the cell from the spreadsheet and put the pegs in here.
273 :     #
274 :    
275 :     my @pegs = $sub->get_pegs_from_cell($idx, $role);
276 :     @pegs = map {
277 :     my $num = (&FIG::genome_and_peg_of($_))[1];
278 :     "<a href=\"protein.cgi?prot=$_&user=$user\">$num</a>"
279 :     } @pegs;
280 :     push(@$row, join(" ", @pegs));
281 :     }
282 :    
283 :     push(@table, $row);
284 :    
285 :     }
286 :    
287 :    
288 :     push(@$html, HTML::make_table(\@col_hdrs, \@table));
289 :    
290 :     push(@$html, $cgi->end_form());
291 :    
292 :    
293 :     &HTML::show_page($cgi, $html);
294 :    
295 :    
296 :     __END__
297 :    
298 :     #
299 :     # Create the table using the sorted list of genome ids.
300 :     #
301 :    
302 :     for my $k (@show_genomes)
303 :     {
304 :     my $c = $all_genomes{$k};
305 :    
306 :     my $row = [];
307 :    
308 :     #
309 :     # Display genome id and name.
310 :     #
311 :     push(@$row, $k);
312 :     push(@$row, &ext_genus_species($fig, $k));
313 :    
314 :     #
315 :     # For each subsystem, look up the variant code and put in the table.
316 :     #
317 :     for my $subname (@display_subs)
318 :     {
319 :     my $sub = $fig->get_subsystem($subname);
320 :     my $vc = $sub->get_variant_code_for_genome($k);
321 :     push(@$row, "\@align=\"center\":$vc");
322 :     }
323 :     push(@table, $row);
324 :     }
325 :    
326 :    
327 :     push(@$html, HTML::make_table(\@col_hdrs, \@table));
328 :    
329 :     push(@$html, $cgi->end_form());
330 :    
331 :     &HTML::show_page($cgi, $html);
332 :    
333 :     sub ext_genus_species {
334 :     my($fig,$genome) = @_;
335 :    
336 :     my $gs = $fig->genus_species($genome);
337 :     my $c = substr($fig->taxonomy_of($genome),0,1);
338 :     return "$gs [$c]";
339 :     }
340 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3