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

Annotation of /FigWebServices/paint_network.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download)

1 : mkubal 1.1 # -*- perl -*-
2 :    
3 :     =pod
4 :    
5 :     =head1 protein_sets_2.cgi
6 :    
7 :     Get some information about a bunch of proteins.
8 :    
9 :     =cut
10 :    
11 :     #use strict;
12 :     use FIG;
13 :     use HTML;
14 :     use raelib;
15 :     my $raelib=new raelib;
16 :     use CGI;
17 :     my $cgi=new CGI;
18 :     use LWP::Simple qw(!head); # see the caveat in perldoc LWP about importing two head methods.
19 :    
20 :     my $fig;
21 :     eval {
22 :     $fig = new FIG;
23 :     };
24 :    
25 :    
26 :     my $html = [];
27 :     my $user = $cgi->param('user');
28 :    
29 :     unshift(@$html, "<TITLE>The SEED - Protein Information</TITLE>\n");
30 :    
31 :     my $tag_to_id;
32 :     my $inputs;
33 :     if ($cgi->param('request') && $cgi->param('korgs') )
34 :     {
35 :     my $input =$cgi->param('proteins');
36 :     my @inputs = split("\n",$input);
37 :     push @orgs, $cgi->param('korgs');
38 :     $org = $orgs[0];
39 :    
40 :     if ($cgi->upload('fileupload'))
41 :     {
42 :     my $fh=$cgi->upload('fileupload');
43 :     @inputs = <$fh> ;
44 :     }
45 :    
46 :     push(@inputs,$org);
47 :     $given = [@inputs];
48 :     $tag_to_id = &parse_inputs($fig,$given);
49 :    
50 :     }
51 :    
52 :     if ($tag_to_id && $cgi->param('request') eq "Subsystem Information")
53 :     {
54 :     &subsystem_info($fig,$cgi,$html,$tag_to_id);
55 :     }
56 :     if ($tag_to_id && $cgi->param('request') eq "Paint Subsystem Connections")
57 :     {
58 :     &paint_connections($fig,$cgi,$html,$tag_to_id);
59 :     }
60 :     if ($tag_to_id && $cgi->param('request') eq "Paint Subsystem Modules")
61 :     {
62 :     &paint_modules($fig,$cgi,$html,$tag_to_id);
63 :     }
64 :    
65 :     else
66 :     {
67 :    
68 :     &show_initial($fig,$cgi,$html);
69 :     &HTML::show_page($cgi,$html,1);
70 :     exit;
71 :     }
72 :    
73 :     sub show_initial {
74 :     my ($fig,$cgi,$html)=@_;
75 :     # generate a blank page
76 :     push @$html,
77 :     $cgi->start_multipart_form(),
78 :     "<p>Select an Organism from the list.\n Enter list of tag and id pairs where the tag represents an expression level in a microarray experiment or an isolate from a complete genome hybridization experiment and the id is a gene/protein id or alias</p>\n",
79 :     "<p>",
80 :     "<br><b>Choose one or more organisms from this list:</b><br>\n",
81 :     $raelib->scrolling_org_list($cgi, "1"),
82 :    
83 :     "<b>Paste tag ID pairs here:</b><br>\n",
84 :     $cgi->textarea(-name=>"proteins", -rows=>10, -columns=>40), "<br>\n",
85 :     "<br><b>Or choose a file here:</b><br>\n",
86 :     $cgi->filefield(-name=>"fileupload", -size=>50), "<br>\n",
87 :     $cgi->submit(-name=>'request', -value=>'Subsystem Information'),
88 :     $cgi->submit(-name=>'request', -value=>'Paint Subsystem Connections'),
89 :     $cgi->submit(-name=>'request', -value=>'Paint Subsystem Modules'),
90 :     $cgi->reset, $cgi->end_form;
91 :     return $html;
92 :     }
93 :     sub paint_connections
94 :     {
95 :     my ($fig,$cgi,$html,$tag_to_id)=@_;
96 :     $new_html = [];
97 :     $dir = "/home/mkubal/public_html";
98 :     open(IN,"$dir/rx_to_rx.xml");
99 :    
100 :     open(OUT,">/home/mkubal/public_html/painted_reaction_network.html");
101 :     my @headers = keys(%{$tag_to_id});
102 :    
103 :     %sid_to_coordinate_x;
104 :     %sid_to_coordinate_y;
105 :     %sid_to_rid;
106 :     @sids_with_rid;
107 :    
108 :     $sid;
109 :     $coordinate_x;
110 :     $coordinate_y;
111 :    
112 :     while ($_ = <IN>){
113 :     $temp = $_;
114 :     if($temp =~ /species=\"(s\d+)\"/){$sid = $1; }
115 :     if(!$sid_to_coordinate_x{$sid}){
116 :     if($temp =~ /x=\"(\d+\.\d+)\"\s+y=\"(\d+\.\d+)\"/){
117 :     $coordinate_x = $1; #print "sid:$sid x:$1\n";
118 :     $coordinate_y= $2; #print "sid:$sid y:$2\n";
119 :     $sid_to_coordinate_x{$sid} = $coordinate_x;
120 :     $sid_to_coordinate_y{$sid} = $coordinate_y;
121 :     }
122 :     }
123 :    
124 :     if($temp =~/id=\"(s\d+)\"\s+initialAmount.*name=\"(R\d+)\">/){
125 :     $sid_to_rid{$1} = $2;
126 :     push(@sids_with_rid,$1);
127 :     }
128 :     }
129 :    
130 :     %rid_to_peg;
131 :     %rid_to_tag;
132 :     foreach my $h (@headers)
133 :     {
134 :     my $p = $tag_to_id->{$h};
135 :     my @pegs = @$p;
136 :     foreach my $peg (@pegs){
137 :     if ($peg =~/(fig\|\d+.\d+.peg.\d+)/){
138 :     $peg = $1;
139 :     $function = $fig->function_of($peg);
140 :     if($function =~/EC (\d+\.\d+\.\d+\.\d+)/)
141 :     {
142 :     @rids = $fig->catalyzes($1);
143 :     foreach $r (@rids){
144 :     $rid_to_tag{$r} = $h;
145 :     $rid_to_peg{$r} = $peg;
146 :     }
147 :     }
148 :     }
149 :     }
150 :     }
151 :    
152 :     print OUT "<HTML><HEAD>
153 :     <TITLE>strep</TITLE>
154 :     <META NAME='generator' CONTENT='YokMap 1.0.1'>
155 :     <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=iso-8859-1'>
156 :     </HEAD>
157 :     <BODY BGCOLOR='#ffffff'>";
158 :    
159 :     %rid_to_subsystems;
160 :     open(SS_TO_RID,"$dir/ss_to_rx.txt");
161 :     @lines = <SS_TO_RID>;
162 :     foreach $l (@lines){
163 :     #print "$l";
164 :     chomp($l);
165 :     @temp = split("\t",$l);
166 :     if($rid_to_subsystems{$temp[1]}){
167 :     $list = $rid_to_subsystems{$temp[1]};
168 :     push(@$list,$temp[0]);
169 :     $rid_to_subsystems{$temp[1]}= $list;
170 :     }
171 :     else{
172 :     $rid_to_subsystems{$temp[1]}= [$temp[0]];
173 :     }
174 :     }
175 :    
176 :     @rids_on_diagram =();
177 :     foreach $sid (@sids_with_rid){
178 :     $rid = $sid_to_rid{$sid};
179 :     push(@rids_on_diagram,$rid);
180 :     $tag = $rid_to_tag{$rid};
181 :     $peg = $rid_to_peg{$rid};
182 :     $top = $sid_to_coordinate_y{$sid} + 10;
183 :     $left = $sid_to_coordinate_x{$sid} + 10;
184 :     $list= $rid_to_subsystems{$rid};
185 :     $subsystems_text = join(" ",@$list);
186 :     $mo = "onmouseover=\"return escape('$subsystems_text')\"";
187 :     if($peg =~/fig\|\d+.\d+.peg.(\d+)/){
188 :     print OUT "<h5 STYLE='position: absolute; top:$top; left:$left'><font Color='red'><a href='http://rat.uchicago.edu/mkubal/FIG/protein.cgi?prot=$peg&user=' $mo>$1</a></font></h5>\n";
189 :     }
190 :     #else{
191 :     # print OUT "<h5 STYLE='position: absolute; top:$top; left:$left'><font>no peg</font></h5>\n";
192 :     # }
193 :    
194 :     $left = $left + 40;
195 :    
196 :     if($tag){
197 :     print OUT "<h5 STYLE='position: absolute; top:$top; left:$left'><font Color='red'><a href='http://www.genome.jp/dbget-bin/www_bget?rn+$rid' $mo>$tag</font></h5>\n";
198 :     }
199 :     else{
200 :     print OUT "<h5 STYLE='position: absolute; top:$top; left:$left'><font Color='red'><a href='http://www.genome.jp/dbget-bin/www_bget?rn+$rid' $mo>KEGG</font></h5>\n";
201 :     }
202 :    
203 :     }
204 :    
205 :     print OUT "<MAP NAME='strep'><AREA SHAPE='default' COORDS='0,0,2400,1600' NOHREF></MAP><IMG SRC='rx_to_rx.jpg' WIDTH='2400' HEIGHT='1600' USEMAP='#strep' BORDER='0'><script language='JavaScript' type='text/javascript' src='wz_tooltip.js'></script></BODY></HTML>";
206 :    
207 :    
208 :     push(@$new_html,"<br><br>");
209 :    
210 :     push(@$new_html,"<a href='http://ci.uchicago.edu/~mkubal/painted_reaction_network.html'>painted network of reactions connecting subsystems</a>");
211 :    
212 :     push(@$new_html,"<br>");
213 :    
214 :     &HTML::show_page($cgi,$new_html);
215 :     exit;
216 :     }
217 :    
218 :     sub paint_modules
219 :     {
220 :     my ($fig,$cgi,$html,$tag_to_id)=@_;
221 :     $new_html = [];
222 :     $dir = "/home/mkubal/public_html";
223 :    
224 :     open(IN2,"$dir/subsystem_modules.xml");
225 :     open(IN3,"$dir/ss_connections_by_reaction.txt");
226 :    
227 :     open(OUT2,">/home/mkubal/public_html/painted_subsystem_modules.html");
228 :     open(OUT3,">/home/mkubal/public_html/temp.txt");
229 :     my @headers = keys(%{$tag_to_id});
230 :    
231 :     %sid_to_coordinate_x;
232 :     %sid_to_coordinate_y;
233 :     %sid_to_rid;
234 :     @sids_with_rid;
235 :    
236 :     $sid;
237 :     $coordinate_x;
238 :     $coordinate_y;
239 :    
240 :     while ($_ = <IN2>){
241 :     $temp = $_;
242 :     if($temp =~ /species=\"(s\d+)\"/){$sid = $1; }
243 :     if(!$sid_to_coordinate_x{$sid}){
244 :     if($temp =~ /x=\"(\d+\.\d+)\"\s+y=\"(\d+\.\d+)\"/){
245 :     $coordinate_x = $1; #print "sid:$sid x:$1\n";
246 :     $coordinate_y= $2; #print "sid:$sid y:$2\n";
247 :     $sid_to_coordinate_x{$sid} = $coordinate_x;
248 :     $sid_to_coordinate_y{$sid} = $coordinate_y;
249 :     }
250 :     }
251 :    
252 :     if($temp =~/id=\"(s\d+)\"\s+initialAmount.*name=\"(R\d+)\">/){
253 :     $sid_to_rid{$1} = $2;
254 :     push(@sids_with_rid,$1);
255 :     }
256 :     }
257 :    
258 :     %rid_to_peg;
259 :     %rid_to_tag;
260 :     foreach my $h (@headers)
261 :     {
262 :     my $p = $tag_to_id->{$h};
263 :     my @pegs = @$p;
264 :     foreach my $peg (@pegs){
265 :     if ($peg =~/(fig\|\d+.\d+.peg.\d+)/){
266 :     $peg = $1;
267 :     $function = $fig->function_of($peg);
268 :     if($function =~/EC (\d+\.\d+\.\d+\.\d+)/)
269 :     {
270 :     @rids = $fig->catalyzes($1);
271 :     foreach $r (@rids){
272 :     $rid_to_tag{$r} = $h;
273 :     $rid_to_peg{$r} = $peg;
274 :     }
275 :     }
276 :     }
277 :     }
278 :     }
279 :    
280 :     print OUT2 "<HTML><HEAD>
281 :     <TITLE>strep</TITLE>
282 :     <META NAME='generator' CONTENT='YokMap 1.0.1'>
283 :     <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=iso-8859-1'>
284 :     </HEAD>
285 :     <BODY BGCOLOR='#ffffff'>";
286 :    
287 :     %rid_to_subsystems;
288 :     open(SS_TO_RID,"$dir/ss_to_rx.txt");
289 :     @lines = <SS_TO_RID>;
290 :     foreach $l (@lines){
291 :     #print "$l";
292 :     chomp($l);
293 :     @temp = split("\t",$l);
294 :     if($rid_to_subsystems{$temp[1]}){
295 :     $list = $rid_to_subsystems{$temp[1]};
296 :     $add = 1;
297 :     foreach $item (@$list){
298 :     if($item eq $temp[1]){$add = 0}
299 :     }
300 :     if($add){
301 :     push(@$list,$temp[0]);
302 :     $rid_to_subsystems{$temp[1]}= $list;
303 :     }
304 :     }
305 :     else{
306 :     $rid_to_subsystems{$temp[1]}= [$temp[0]];
307 :     }
308 :     }
309 :    
310 :    
311 :     my %rid_connects_to_ss_by;
312 :     @lines = <IN3>;
313 :     $counter = 0;
314 :     #print OUT3 "Test\n";
315 :     foreach $l (@lines){
316 :     my $key;
317 :     my $ss;
318 :     my $connects_to;
319 :     my $string;
320 :     if($l =~/.*\t(R\d+)\t(.*)\t(R\d+)/){
321 :     $counter = $counter + 1;
322 :     $key = $1;
323 :     $ss = $2;
324 :     $connects_to = $3;
325 :     $string = "$key connects to $connects_to in $ss";
326 :     #print OUT3 "$string\n";
327 :     if($rid_connects_to_ss_by{$key}){
328 :     $temp = $rid_connects_to_ss_by{$key};
329 :     $add = 1;
330 :     foreach $t (@$temp){
331 :     if($t eq $string){
332 :     $add= 0;
333 :     }
334 :     }
335 :     if($add){
336 :     push(@$temp,$string);
337 :     print OUT3 "2nd $key\t$string\n";
338 :     }
339 :     }
340 :     else{
341 :     $list = [$string];
342 :     $rid_connects_to_ss_by{$key} = $list;
343 :     print OUT3 "1st $key\t$string\n";
344 :     }
345 :     }
346 :     }
347 :    
348 :     @rids_on_diagram =();
349 :     foreach $sid (@sids_with_rid){
350 :     my $rid; my $tag; my $top; my $left; my $list; my $connections;
351 :     my $subsystems_text; my $subsystem_text; my $peg = 0;
352 :    
353 :     $rid = $sid_to_rid{$sid};
354 :     push(@rids_on_diagram,$rid);
355 :     $peg = $rid_to_peg{$rid};
356 :    
357 :     if($peg){
358 :     $tag = $rid_to_tag{$rid};
359 :     $top = $sid_to_coordinate_y{$sid} - 10 ;
360 :     $left = $sid_to_coordinate_x{$sid} - 20;
361 :     $list= $rid_to_subsystems{$rid};
362 :     $connections= $rid_connects_to_ss_by{$rid};
363 :    
364 :     $subsystems_text = join(",",@$list);
365 :     $connection_text = join(",",@$connections);
366 :    
367 :     print OUT3 "$rid $connection_text\n";
368 :     $mo = "onmouseover=\"return escape('$subsystems_text')\"";
369 :     $mo2 = "onmouseover=\"return escape('$connection_text')\"";
370 :    
371 :     if($peg =~/fig\|\d+.\d+.peg.(\d+)/){
372 :     print OUT2 "<h5 STYLE='position: absolute; top:$top; left:$left'><font Color='red'><a href='http://rat.uchicago.edu/mkubal/FIG/protein.cgi?prot=$peg&user=' $mo>$1</a></font></h5>\n";
373 :     }
374 :    
375 :    
376 :     $left = $left + 95;
377 :    
378 :     print OUT2 "<h5 STYLE='position: absolute; top:$top; left:$left'><font Color='red'><a href='http://www.genome.jp/dbget-bin/www_bget?rn+$rid' $mo2>$tag</font></h5>\n";
379 :    
380 :     }
381 :     $peg = 0;
382 :     }
383 :    
384 :     foreach $k (keys(%rid_connects_to_ss_by)){
385 :     $v = $rid_connects_to_ss_by{$k};
386 :     $s = join(" ",@$v);
387 :     print OUT3 "$k\t$s\n";
388 :     }
389 :    
390 :     print OUT2 "<MAP NAME='strep'><AREA SHAPE='default' COORDS='0,0,3600,2400' NOHREF></MAP><IMG SRC='subsystem_modules.jpg' WIDTH='3600' HEIGHT='2400' USEMAP='#strep' BORDER='0'><script language='JavaScript' type='text/javascript' src='wz_tooltip.js'></script></BODY></HTML>";
391 :    
392 :     push(@$new_html,"<br><br>");
393 :    
394 :     push(@$new_html,"<a href='http://ci.uchicago.edu/~mkubal/painted_subsystem_modules.html'>painted subsystem modules</a>");
395 :    
396 :     &HTML::show_page($cgi,$new_html);
397 :     exit;
398 :     }
399 :    
400 :    
401 :     sub subsystem_info
402 :     {
403 :     my ($fig,$cgi,$html,$tag_to_id)=@_;
404 :    
405 :     my $html = [];
406 :     my $table = [];
407 :     my @headers = keys(%{$tag_to_id});
408 :     my $ss_counter;
409 :     my @all_subsystems;
410 :     my @pegs_with_no_ss;
411 :    
412 :     push (@$html,"<br><br>");
413 :     my $first_header = 1;
414 :     my $pegs_to_color_suffix;
415 :     foreach my $h (@headers)
416 :     {
417 :     my $p = $tag_to_id->{$h};
418 :     my @pegs = @$p;
419 :     foreach my $peg (@pegs)
420 :     {
421 :     if($first_header){$pegs_to_color_suffix = $pegs_to_color_suffix."&color=$peg"}
422 :     if ($peg =~/(fig\|\d+.\d+.peg.\d+)/){ $peg = $1};
423 :     my @subsystems = $fig->subsystems_for_peg($peg);
424 :    
425 :     if(!$subsystems[0]){push(@pegs_with_no_ss,$peg)};
426 :     foreach my $ssr (@subsystems)
427 :     {
428 :     $ss = $ssr->[0];
429 :     my $key = $ss."_".$h;
430 :     if($ss_counter{$key}){$ss_counter{$key} = $ss_counter{$key} + 1}
431 :     else{$ss_counter{$key} = 1}
432 :     my $add = 1;
433 :     foreach my $s (@all_subsystems){if($s eq $ss){$add= 0}}
434 :     if($add){push(@all_subsystems,$ss)}
435 :     }
436 :     }
437 :     $first_header = 0;
438 :     }
439 :    
440 :     my $prefix = &FIG::cgi_url() . "/display_subsys.cgi?user=&ssa_name=";
441 :     my $suffix = "&request=show_ssa".$pegs_to_color_suffix;
442 :     push(@$table,"<TABLE><TR><TH>Subsystems</TH>");
443 :     foreach my $h (@headers)
444 :     {
445 :     push(@$table,"<TH>\t$h\t</TH>");
446 :     }
447 :     push(@$table,"</TR>");
448 :    
449 :     foreach my $ss (@all_subsystems)
450 :     {
451 :     my $url = "<a href="."$prefix"."$ss"."$suffix>$ss</a>";
452 :     push(@$table,"<TR><TD>$url</TD>");
453 :     foreach my $h (@headers)
454 :     {
455 :     $key = $ss."_".$h;
456 :     if(!$ss_counter{$key}){$cell = "0"}else{$cell=$ss_counter{$key}}
457 :     push(@$table,"<TD>$cell</TD>");
458 :     }
459 :     push(@$table,"</TR>");
460 :    
461 :     }
462 :    
463 :     push(@$table,"</TABLE>");
464 :     push @$html, &HTML::make_table($table), "\n";
465 :    
466 :     push(@$html,$cgi->h3("Pegs Not in Subsystem"));
467 :     push(@$html,"<TABLE>");
468 :    
469 :     foreach my $p (@pegs_with_no_ss)
470 :     {
471 :     my $cgi = &FIG::cgi_url();
472 :     my $url =qq(<a href="$cgi/protein.cgi?prot=$p&user=">$p</a>);
473 :     push(@$html,"<TR><TD>$url</TD></TR>");
474 :     }
475 :    
476 :     push(@$html,"</TABLE>");
477 :    
478 :     &HTML::show_page($cgi,$html);
479 :     exit;
480 :     }
481 :    
482 :     =head2 parse_inputs
483 :    
484 :     Given a list of of tab-separated tags and protein ids
485 :     return a hash with the tag as key and the value is a list of values
486 :     =cut
487 :    
488 :     sub parse_inputs
489 :     {
490 :    
491 :     my ($fig,$given) =@_;
492 :     my $org = pop(@$given);
493 :     my $hash;
494 :    
495 :     foreach my $g (@$given)
496 :     {
497 :     my $id ="";
498 :     if ($g =~/(\w+)\s+(.*)/)
499 :     {
500 :     $tag = $1;
501 :     $temp_id = $2;
502 :    
503 :     if($temp_id !~/fig/)
504 :     {
505 :     ($peg_index_data,undef) = $fig->search_index($temp_id);
506 :     foreach $peg (map { $_->[0] } @$peg_index_data)
507 :     {
508 :     if ($peg =~ /$org/ )
509 :     {
510 :     $id = $peg;
511 :     }
512 :     }
513 :     }
514 :     else
515 :     {
516 :     $id = $temp_id;
517 :     }
518 :    
519 :     if($id)
520 :     {
521 :     if($hash{$tag})
522 :     {
523 :     $list = $hash{$tag};
524 :     @temp_list = @$list;
525 :     push(@temp_list,$id);
526 :     $hash{$tag} = [@temp_list];
527 :     }
528 :     else
529 :     {
530 :     @temp_list = ();
531 :     push(@temp_list,$id);
532 :     $hash{$tag} = [@temp_list];
533 :     }
534 :     }
535 :     }
536 :     }
537 :    
538 :     return \%hash;
539 :     }
540 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3